007
01.10.2026, 16:37 Uhr
kaiOr
|
| Zitat: | Chietah schrieb Also bei meinem eigenen Programm … nutze folgende Routine …
__asm
di ; no CAOS interrupt while IRM is unmapped
ld a,#1 ld (#_maps_open),a ; remember the window is open ld a,(#_pio_a_save) ; PIO A shadow (port 0x88) and #0xFB ; clear bit 2: drop IRM from 0x8000 out (#0x88),a
ld a,(#_pio_b_save) ; PIO B shadow (port 0x89) or #0x60 ; set bit 5 + bit 6: enable RAM8 there out (#0x89),a
ld a,(#_port84) ; screen/bank image, bit 4 = RAM8 page and #0xF7 ; force bit 3 off (no hicolor) out (#0x84),a ; re-assert bank; CRT may have cleared it
__endasm;
Der ursprüngliche Text im Bitmode (nicht Hicolor) ist dabei noch lesbar, nur mit vertikalen türkisen Streifen überlagert. Wird der Zugriff zu RAM8 abgeschalten, ist der Text wieder normal lesbar |
Hallo,
besser nicht davon ausgehen, dass sich der PIO-Status unverändert in einer Variablen festhalten lässt. Außer du liest und veränderst innerhalb desselben DI. Interruptsystem und evtl. genutzte CAOS-Unterprogramme könnte da reingrätschen.
Der eigentliche Fehler ist das Handling vom Latch auf Port 84h. CAOS speichert den Status in (IX+1) und Bit 3 muss gesetzt sein für den norm. Farbmodus.
ld a,(ix+1) or 8 ld (ix+1),a out (#0x84),a
"bit 4 = RAM8 page" ??? Nur Bit 4 gesetzt blendet RAM4 (Block 0) noch gleichzeitig als RAM8 ein, damit zerhaut man sich schnell das Programm. Bit 5 gesetzt wäre RAM8 Block 0, Bit 4+5 gesetzt RAM8 Block1 etc.
Grüße, Kai |