1

Temat: przerwania OS

Yo!
Czy jest mozliwosc odlaczenia OS a potem wlaczenia go spowrotem?
potrzebuje na krotki okres czasu, dostep do pamieci $c000-$cfff lub $d800-$fff0
robie to tak:

    lda #$00
    sta $d40e
    lda #$fe
    sta $d301

nastepnie troche bawie sie pamiecia od $c000-$cfff, potem wlaczam NMI i atari sie wysypuje, poniewaz przy odlaczaniu OS kasuje sie standardowa procedura NMI(umieszczona od $c018)

teraz pytanie: czy da rade po odlaczeniu OS wlaczyc go spowrotem? istnieje jakas magiczna komorka sprzetowa po ustawieniu ,ktorej zostanie przepisany znowu ROM->RAM?

tak pozatym co oprocz procedury NMI siedzi w pamieci od $c000-$cfff i od $d800-$fff0???

2

Odp: przerwania OS

Sprawdź sobie bity rejestru $d301 - tam masz włączanie/ wyłączanie ROM-u - tak że przed wywołaniem NMI musisz go włączyć zprowrotem, chyba że skopiujesz sobie ROM do RAMU pod nim i zaczniesz się bawić !!!!

3

Odp: przerwania OS

a tego, no, po co Ci OS?  :)

aha, BestCoderTeBe zrobił kawałek o tym w swoim SuperMegaQrsie:

http://atariarea.histeria.pl/artykuly.p … &id=33

: 404. Stopka not found

4

Odp: przerwania OS

aha, BestCoderTeBe zrobił kawałek o tym w swoim SuperMegaQrsie:

:D

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

5

Odp: przerwania OS

wszystko juz chyba dziala, nie mam tylko pewnosci co do wartosi, ktore wpisuje do $d40e(NMI),$d301(OS) poniewaz zrobilem tak jak mowil Swiety odczytalem wartosci bitow tych komorek przed wylaczeniem OS tyle ,ze sa to chyba komorki TYLKO DO ZAPISU wiedz moglem otrzymac jakas zla wartosc - odczytalo mi z obu komorek wartosc $FF, taka tesz wpisalem no i dziala! ;) OS zostal znowu przepisany z ROM->RAM

a co do SuperMegaQrsu, to niestety jest tylko info o wylaczeniu OS (bo w sumie po co go potem wlaczac ;>)
tak czy inaczej z kursow TeBe dosc duzo sie nauczylem, wkoncu moglem gdzies poczytac o takich rzeczach jak wylaczenie OS czy stawianie pixela ;), u wujka Zientary tego nie ma :P

dzieki!

6

Odp: przerwania OS

Procka przepisujaca rom do ram:

                                                                                                                                                         
    org $0600                                                                                                                                                                                             
                                                                                                                                                                                                          
rom SEI                                                                                                                                                                                                   
    INC $D40E                                                                                                                                                                                             
    LDX #$0F                                                                                                                                                                                              
    LDY #$00                                                                                                                                                                                              
    LDA #$FF                                                                                                                                                                                              
    STA $D301                                                                                                                                                                                             
l1    LDA $c000,Y                                                                                                                                                                                         
    DEC $D301                                                                                                                                                                                             
l11    STA $c000,Y                                                                                                                                                                                        
    INC $D301                                                                                                                                                                                             
    INY                                                                                                                                                                                                   
    BNE l1                                                                                                                                                                                                
    INC l1+2                                                                                                                                                                                              
    INC l11+2                                                                                                                                                                                             
    DEX                                                                                                                                                                                                   
    BPL l1                                                                                                                                                                                                
    LDX #$07                                                                                                                                                                                              
l2    LDA $d800,Y                                                                                                                                                                                         
    DEC $D301                                                                                                                                                                                             
l3    STA $d800,Y                                                                                                                                                                                         
    INC $D301                                                                                                                                                                                             
    INY                                                                                                                                                                                                   
    BNE l2                                                                                                                                                                                                
    INC l2+2                                                                                                                                                                                              
    INC l3+2                                                                                                                                                                                              
    DEX                                                                                                                                                                                                   
    BPL l2                                                                                                                                                                                                
    LDX #$1F                                                                                                                                                                                              
l4    LDA $e000,Y                                                                                                                                                                                         
    DEC $D301                                                                                                                                                                                             
l5    STA $e000,Y                                                                                                                                                                                         
    INC $D301                                                                                                                                                                                             
    INY                                                                                                                                                                                                   
    BNE l4                                                                                                                                                                                                
    INC l4+2                                                                                                                                                                                              
    INC l5+2                                                                                                                                                                                              
    DEX                                                                                                                                                                                                   
    BPL l4                                                                                                                                                                                                
    CLI                                                                                                                                                                                                   
    LDA #$40                                                                                                                                                                                              
    STA $D40E                                                                                                                                                                                             
    RTS            

7

Odp: przerwania OS

wszystko juz chyba dziala, nie mam tylko pewnosci co do wartosi, ktore wpisuje do $d40e(NMI),$d301(OS) poniewaz zrobilem tak jak mowil Swiety odczytalem wartosci bitow tych komorek przed wylaczeniem OS tyle ,ze sa to chyba komorki TYLKO DO ZAPISU wiedz moglem otrzymac jakas zla wartosc - odczytalo mi z obu komorek wartosc $FF, taka tesz wpisalem no i dziala! ;) OS zostal znowu przepisany z ROM->RAM

Odczytywanie $d301 (portb) jest jak najbardziej na miejscu: ten rejestr jest R/W. $d40e (nmien) jest tylko do zapisu i odczytywanie go nie ma sensu. Ale to zadna strata, bo odpowiada on tylko za wlaczenie/wylaczenie przerwan VBL/DLI przy czym DLI standardowo w systemie nie jest uzywane wiec wystarczy zezwolic tylko na VBL wpisujac tam $80.

Tak na przyszlosc mam tylko uwage, ze NIE NALEZY jednoczesnie wylaczac ROMU i ustawiac banku, gdyz istnieja rozszerzenia, ktore do przelaczania bankow wykorzystuja wlasnie bit ROMU (przez to poleglo moje interko 1k na forever 2004 :) )

Wkleje teraz procedurki wyrzniete z loadera do FLOVE, ktore w zamierzeniu mialy nie zmieniac ustawionego banku (i sa troche na wyrost, ale najprawdopodobniej dzialaja, skoro demo przynajmniej sie laduje)

ROMOff
    sei
    lda #0
    sta nmien       ;wylaczamy przerwania
    lda portb
    ldy #%11111110
    sty portb       ;odlaczenie ROMu przy wylaczonych bankach
    and #%11111110  ;maska bez ROMu
    sta portb       ;zapisanie maski bez ROMu
    rts

ROMOn
    lda portb
    ldy #%11111111
    sty portb       ;podlaczenie ROMu przy wylaczonych bankach
    ora #%00000001  ;maska z ROMem
    sta portb       ;zapis maski z ROMem
    lda #%11000000  ;maska VBL i DLI
    sta nmien       ;uruchamiamy przerwania
    cli
    rts

PS sei/cli blokuja tez przerwania IRQ
PS kurcze. i nawet je teraz zoptymalizowalem, wiec nie wiem, czy wciaz dzialaja  ;)

8

Odp: przerwania OS

Z tego co wiem nie łatwo przerwać cug Odsieczy Sobieskiego ...

Im dłużej czekamy, tym wzorek jest większy" (c) by Sikor

9

Odp: przerwania OS

a teraz klękamy do miecza : D