Programowanie: Jak wyłączyć ROM systemu

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:34, 25 sty 2024
Jhusak (Dyskusja | wkład)
(rozszerzenie opisu)
← Previous diff
Wersja z dnia 11:35, 25 sty 2024
Jhusak (Dyskusja | wkład)

Next diff →
Linia 48: Linia 48:
</pre> </pre>
-Należy jednak mieć na uwadze, że podczas odłączonego romu nie będą się wykonywały żadne procedury przerwań, czyli nie będą liczyły timery czy mogą się rozsynchronizować przerwania DLI.+Należy jednak mieć na uwadze, że podczas tak odłączonego romu nie będą się wykonywały żadne procedury przerwań, czyli np. nie będą liczyły timery czy mogą się rozsynchronizować przerwania DLI.
[[Kategoria:Niezbędnik kodera]] [[Kategoria:Niezbędnik kodera]]

Wersja z dnia 11:35, 25 sty 2024

Atari z serii XL i XE ma tę ciekawą cechę, iż umożliwia wyłączenie pamięci ROM i podstawienie w jej miejsce bloku pamięci RAM dzięki czemu uzyskujemy dostęp do większej ilości tejże pamięci (obszary: $c000-$cfff oraz $d800-$ffff), zwykle niedostępnej dla programisty (gdy ROM jest podłączony). Pamięć ROM przechowuje istotne elementy oprogramowania komputera - np. obsługę przerwań, dlatego należy zatroszczyć się o to, aby po wyłączeniu ROM-u przerwania nadal miały przypisane odpowiednie procedury obsługi.


;
; procedura system_off - wylaczamy OS, podlaczamy RAM pod ROMem i 
; zajmujemy sie na wlasna reke obsluga NMI 
;

system_off equ *

 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)

Czasami chcemy mieć możliwość odłaczenia ROMu i mieć nieograniczony (prawie, bez ostatnich 6-7 bajtów) dostęp do pamięci pod romem. Najprostsze rozwiązanie to pusty handler przerwania i ustawienie na niego wektorów:

 org $fff9
 rti
 .word $fff9
 .word $fff9
 .word $fff9

Należy jednak mieć na uwadze, że podczas tak odłączonego romu nie będą się wykonywały żadne procedury przerwań, czyli np. nie będą liczyły timery czy mogą się rozsynchronizować przerwania DLI.

Personal tools