From Atariki
;
; procedura system_off - wylaczamy OS, podlaczamy RAM pod ROMem i
; zajmujemy sie na wlasna reke obsluga NMI
;
system_off equ *
lda 20 ; czekamy do nastepnej ramki aby zaczac zmieniac wektory zaraz po ostatnim NMI
cmp 20
beq *-2
lda #0
sta $d40e ; wylaczamy NMI
sei ; oraz IRQ
lda #$fe ; oraz podlaczamy RAM pod ROMem, wylaczajac OS
sta $d301
; poniewaz nie mamy juz systemu nalezy zadbac o wlasna obsluge przerwan NMI
lda <NMI
sta $fffa
lda >NMI
sta $fffb
lda #$c0 ;wlaczamy NMI
sta $d40e
rts
NMI bit $d40f ; sprawdzamy czy przerwanie to VBL czy DLI
bpl _no
jmp (DLI)
_no sta $d40f
jmp (VBL)
DLI dta a(my_dli) ; my_vbl i my_dli to juz nasze procedury obslugi przerwan.
VBL dta a(my_vbl)