Was es ist
Der VIC (Video Interface Controller) ist der Grafikbaustein des Systems. Er liest Zeichen-, Farb- und Bitmap-Daten aus dem Video-RAM und erzeugt daraus ein vollständiges Videosignal mit eigener Zeilen- und Bildsynchronisation — auf dem Tang Primer 20K als HDMI/DVI, auf dem PIX16 als VGA.
Was es macht
Textmodus
40×25 Zeichen, jedes 2× skaliert (16×16 Bildschirmpixel). Die Zeichenmuster liegen
im char_rom (8×8 Pixel, Bit 7 = invers). Jede Zelle hat eigene
Vorder- und Hintergrundfarbe aus dem Farb-RAM bei $8400, gepackt
als bg[7:4] | fg[3:0]. Die 16-Farben-Palette ist als
RGB565-Lookup im Pepto-C64-Stil hinterlegt.
Bitmap-Modi
- 320×200 1-bpp — Legacy-Bitmap, 2× skaliert auf 640×400, 16 Farben pro 8×8-Zelle.
- 160×100 RGB332 — 256 Farben, ein Byte je Pixel, 4× skaliert auf 640×400.
- 180×120 RGB222 — 64 Farben gepackt (4 Pixel in 3 Bytes), 3× skaliert auf 540×360.
Der 16-KB-Framebuffer wird über ein 8-KB-CPU-Fenster bei $6000–$7FFF
sichtbar; ein MODE-Bit wählt die Bank. Das Steuerregister $9000
schaltet zwischen den Modi um.
Bus-Stealing — der geteilte Bus
VIC und CPU teilen sich einen Single-Port-Videospeicher. Während jeder horizontalen
Austastlücke holt der VIC die nächste Bildzeile vor und hält die CPU über den
RDY-Pin an. Der Overhead ist gering: ~4,8 % im
Textmodus, im Worst Case 9,4 % bei RGB332. CPU-Schreibzugriffe ins
Video-RAM gehen dabei nie verloren — eine ausstehende Schreiboperation wird
gepuffert und im ersten freien Takt committet.
Farb-Register
| Adresse | Register | Funktion |
|---|---|---|
| $9000 | MODE | Bit 0 Bitmap, Bit 1 RGB332, Bit 2 Bank, Bit 3 RGB222 |
| $9003 | TEXT_COLOR | Vordergrundfarbe 0–15 |
| $9004 | BG_COLOR | Hintergrundfarbe 0–15 |
Aus BASIC
REM Bitmap-Modus an, Pixel setzen POKE 36864, 1 A=24576+Y*40+INT(X/8) POKE A, PEEK(A) OR 2^(7-(X AND 7)) POKE 36864, 0 : REM zurück zu Text