Programowanie: Użycie OS-a przy wyłączonym ROM-ie
From Atariki
(Różnice między wersjami)
| Wersja z dnia 13:33, 3 gru 2019 Mono (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 13:33, 3 gru 2019 Mono (Dyskusja | wkład) Next diff → |
||
| Linia 7: | Linia 7: | ||
| sec | sec | ||
| .byte $24 ;bit Z | .byte $24 ;bit Z | ||
| - | |||
| irqint clc | irqint clc | ||
Wersja z dnia 13:33, 3 gru 2019
Żeby swobodnie używać mechanizmów OS-a a przy tym mieć dostęp do całego RAM-u trzeba zadbać tylko o poprawne wykonanie przerwań będących w ROM-ie w sytuacji kiedy ten jest wyłączony. Kod handlera przerwań:
nmiint bit NMIST ;$D40F
spl
jmp (VDSLST) ;$0200
sec
.byte $24 ;bit Z
irqint clc
pha
txa
pha
tsx
inc PORTB ;$D301
lda #>iret
pha
lda #<iret
pha
lda $103,x
pha
scc
jmp (NMIVEC) ;$FFFA
jmp (IRQVEC) ;$FFFE
iret dec PORTB ;$D301
pla
tax
pla
rti
Adres nmiint trzeba ustawić w NMIVEC a irqint w IRQVEC pod ROM-em.
sei
lda #%00000000
sta NMIEN ;$D40E
lda #%11111110
sta PORTB ;$D301
ldx #<nmiint
ldy #>nmiint
stx NMIVEC ;$FFFA
sty NMIVEC+1
ldx #<irqint
ldy #>irqint
stx IRQVEC ;$FFFE
sty IRQVEC+1
lda #%01000000
sta NMIEN ;$D40E
cli
Trzeba pamiętać, że podczas wywoływania procedury z ROM trzeba go sobie włączyć:
lda #%11111111
sta PORTB ;$D301
jsr JSIOINT ;$E459
Rejestry $00..$7F oraz $2xx i $3xx są to rejestry zarezerwowane dla potrzeb systemu operacyjnego.
