VIC-Bank
Eine VIC-Bank ist eine von vier möglichen 16K-Bereichen für den VIC im 64K RAM des C64
Der VIC-II besitzt nur 14 Adressleitungen, kann also nur 16K addressieren. Deshalb werden zusätzlich die Bits 0 und 1 des CIA 2 Port A Registers 56576 ($DD00) benutzt, um die Lage des VIC-Adressbereiches im 64K-Speicher zu bestimmen. Die für die Addressierung fehlenden Bits 14 und 15 ergeben sich aus diesen durch Invertierung, d.h. aus 0 wird 1 und aus 1 wird 0.
| $DD00 Bits 1/0 | Addr.-Bits 15/14 | Video-Bank | Erreichbare Adressen (hex.) |
|---|---|---|---|
| 11 | 00 | 0 | 0-16383 ($0000-$3FFF) |
| 10 | 01 | 1 | 16384-32767 ($4000-$7FFF) |
| 01 | 10 | 2 | 32768-49151 ($8000-$BFFF) |
| 00 | 11 | 3 | 49152-65535 ($C000-$FFFF) |
Nach dem Einschalten des C64 ist die Video-Bank 0 aktiv.
Anwendungen:
Beispiel VIC-Bank ab $8000:
- BASIC:
10 POKE 56576, PEEK(56576) AND 252 OR 1 - Assembler:
LDA $DD00 AND #$FC ;%11111100 OR #$01 ;%00000001 STA $DD00 ;%xxxxxx01
Speicherbelegungsplan des VIC-II[Bearbeiten | Quelltext bearbeiten]
$FFFF ┌─────────────────┐────────
│ │
│ │
│ │
│ RAM │ Bank 3
│ │
│ │
│ │
$C000 ├─────────────────┤────────
│ │
│ RAM │
│ │
$A000 ├─────────────────┤ Bank 2
│ Zeichensatz-ROM │
$9000 ├─────────────────┤
│ RAM │
$8000 ├─────────────────┤────────
│ │
│ │
│ │
│ RAM │ Bank 1
│ │
│ │
│ │
$4000 ├─────────────────┤───────
│ │
│ RAM │
│ │
$2000 ├─────────────────┤ Bank 0
│ Zeichensatz-ROM │
$1000 ├─────────────────┤
│ RAM │
$0000 └─────────────────┘───────
Das Zeichensatz-ROM wird in den Bänken 0 und 2 jeweils an den VIC-Adressen $1000-$1FFF eingeblendet. In Bank 2 z.B. erscheint es daher an Adresse $9000. Die beiden Standard Zeichensätze sind auf diese Weise unmittelbar lesbar für den VIC (nicht für die CPU), so dass der Programmierer sich nicht um die Zuordnung von RAM für sie kümmern muss. Leider wird dabei auch Speicher belegt, der nun für eine Bitmap, Sprites oder Bildschirmspeicher nicht mehr zur Verfügung steht.
Test[Bearbeiten | Quelltext bearbeiten]
Das Umschalten der VIC-Bank (und damit die Ausgangsleitungen PA0 und PA1 des CIA2 sowie U14, ein 74LS258) lässt sich mit folgendem Programm testen:
0 data120,169,48,133,1,160,7,169,255 1 data153,8,80,153,8,208,169,0,153,0 2 data81,153,0,209,136,16,237,169,55 3 data133,1,88,96 4 fori=49152to49183:reada:pokei,a:next 5 sys49152:fora=0to3:poke648,a*64+4 6 print chr$(147):fory=0to10:forx=0toa 7 print" aaa";:nextx:print:nexty,a 8 a=(a+1)and3:poke56576,3-a 9 fori=0to1000:nexti:goto8
Das Programm stellt eine großes "I" (aufgebaut aus As) in Bank 0 dar, dann "II" (aufgebaut aus inversen Leerzeichen) in Bank 1, dann "III" (aus As) in Bank 2, dann "IIII" (aufgebaut aus inversen Leerzeichen) in Bank 3 und wiederholt.
Schlägt der Test fehlt (z.B. es ist immer nur "I" sichtbar), könnte U14 (74LS258) oder CIA2 oder die Ansteuerung der CIA2 (PLA bzw. U15/74LS139) defekt sein. Letzteres kann per Testprogramm im Artikel CIA ausgeschlossen werden.
Weblinks[Bearbeiten | Quelltext bearbeiten]
- The VIC banks
bei codebase64 - Speicherbereiche festlegen bei Retro-Programming (Webarchiv)