D011 ist nur zum Einschalten des Btmap-Modus, der Wert ist in allen Bereichen gleich.
DD00 wählt eine 16KB-Bank aus, der VIC kann nämlich nur innerhalb von 16KB sehen und arbeiten.
Für Deine einfache Frage musst Du also nur das "OR 3" bei $DD00 weglassen und die anderen Pokes unverändert ausführen, dann hast Du die Bitmap bei $E000 und den Screen dazu bei $C400.
Spannender ist $D018, aus der AAY64:
|
Source code
|
1
2
3
4
5
6
|
+----------+---------------------------------------------------+
| Bits 7-4 | Video Matrix Base Address (inside VIC) |
| Bit 3 | Bitmap-Mode: Select Base Address (inside VIC) |
| Bits 3-1 | Character Dot-Data Base Address (inside VIC) |
| Bit 0 | Unused |
+----------+---------------------------------------------------+
|
Das ist das eigentliche Register, mit dem Du Bildschirmspeicher, Zeichensatz- und Bitmap-Adresse festlegst.
Schritt für Schritt:
1) Die 16KB-Bank aussuchen. und nach $dd00 poken: $0000-$3fff=3, $4000-$7fff=2, $8000-$bfff=1, $c000-$ffff =0
2) Screenram innerhalb der Bank muß durch $0400=1024 teilbar sein. Adresse/1024*16 ergibt die oberen 4 Bits von $d018.
3) Zeichensatz muß durch 2048 teilbar sein, Adresse/1024*16 ergibt die unteren 4 Bits von $d018. Das ergibt sich dann von alleine, daß das unterste Bit keine Bedeutung hat.
4) Bitmap hat nur die Wahl zwischen oberen oder unteren 8KB, muß also durch 8192 teilbar sein, gleiche Formel wie beim Zeichensatz.
Wichtig für die Wahl ist noch, daß von $1000-$2000 und $9000-$A000 immer nur das Zeichensatz-ROM erreichbar ist, egal, ob für Bildschirm, Bitmap oder Sprites. Drum fährst Du mit den Bänken ab $4000 oder $C000 für Grafikzwecke ziemlich gut.