$d301


$d301

von Heaven_tqa » Sa 7. Jul 2007, 15:14
dumme frage...was ist der default wert von $d301?

ich bin gerade am abschalten des OS für mein Spiel, um mehr speicher zu bekommen ("ram unterm rom"), aber für die print routine müsste ich wieder das OS einschalten, war es nicht $ff?

Re: $d301

von HiassofT » Sa 7. Jul 2007, 16:12
Heaven_tqa hat geschrieben:dumme frage...was ist der default wert von $d301?

ich bin gerade am abschalten des OS für mein Spiel, um mehr speicher zu bekommen ("ram unterm rom"), aber für die print routine müsste ich wieder das OS einschalten, war es nicht $ff?

Ja, genau.

Hintergrund: Die Leitungen von der PIA zur MMU haben Pull-Up Widerstände, sodass alle Signale auf High liegen ($FF) wenn die Pins auf Eingabe geschaltet sind (zB direkt nach dem Einschalten oder auch bei Verwendung eines Oldrunner OS). Die MMU ist so konstruiert, daß in diesem Zustand der Computer brauchbar funktioniert: OS-ROM ist aktiviert, Basic, Self-Test und evtl. erweitertes RAM sind deaktiviert.

so long,

Hias

von Mathy » Sa 7. Jul 2007, 23:20
Hallo Leute

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?

Tschüß

Mathy

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