von HiassofT » So 8. Jul 2007, 14:55
Mathy hat geschrieben:Kann man nicht bevor man an $D301 rumfummelt zuerst den Ist-Wert auslegen und irgendwo speichern? Um ihn dann nach dem rumfummeln wieder zurück zu setzen?
Grundsätzlich ja. Oder noch besser: nur die Bits verändern, die man wirklich braucht.
- Code: Alles auswählen
; OS-ROM aus
lda $d301
and #$fe
sta $d301
Das sind dann ein paar Bytes/Zyklen mehr, aber man ist auf der sicheren Seite.
Ähnlich sollte man auch mit dem erweiterten Speicher umgehen. Eine Bitmask für die Bank-Bits und dann zusätzlich eine Tabelle mit den (Banknummer und ExtRam on/off)-Bits. Das ganze in eine eigene Routine ausgelagert und schon ist man flexibel mit verschiedenen RAM-Erweiterungen und hat auch keine Probleme ob zB das OS-ROM an oder aus ist.
- Code: Alles auswählen
banksel ; Banknummer+1 in X, X=0 normales RAM
lda $d301
and bankmask
ora banktab,x
sta $d301
rts
bankmask .byte $c3 ; PB2-PB5 ausmaksiert
banktab .byte $3c ; ext-ram aus
.byte $0, $4, $8, $c ; bank 0-3
so long,
Hias