Programowanie: Jak wyłączyć ROM systemu

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 21:01, 3 sty 2009
Krótki (Dyskusja | wkład)
(wydaje mi się, że tylko w XL i XE działa)
← Previous diff
Wersja z dnia 11:29, 25 sty 2024
Jhusak (Dyskusja | wkład)
(dodano przypadek i rozwiązanie.)
Next diff →
Linia 35: Linia 35:
DLI dta a(my_dli) ; my_vbl i my_dli to juz nasze procedury obslugi przerwan. DLI dta a(my_dli) ; my_vbl i my_dli to juz nasze procedury obslugi przerwan.
VBL dta a(my_vbl) VBL dta a(my_vbl)
 +
 +</pre>
 +
 +Czasami chcemy mieć możliwość odłaczenia ROMu i mieć nieograniczony (prawie) dostęp do pamięci pod romem bez ryzyka. Najprostsze rozwiązanie to:
 +
 +<pre>
 + org $fff9
 + rti
 + .word $fff9
 + .word $fff9
 + .word $fff9
 +</pre>
</pre> </pre>
[[Kategoria:Niezbędnik kodera]] [[Kategoria:Niezbędnik kodera]]

Wersja z dnia 11:29, 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) dostęp do pamięci pod romem bez ryzyka. Najprostsze rozwiązanie to:

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

</pre>

Personal tools