65 6502 SBC FPGA
← Übersicht
Übersicht / Komponente 02
Grafik

VIC-Grafik $8000 · $9000

Der Video-Controller erzeugt das Bild: Text, Farben und mehrere Bitmap-Modi — ausgegeben als VGA oder HDMI, getaktet direkt aus der FPGA-Logik.

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.

Auflösung
640×480 @ 60 Hz
Pixeltakt
27 MHz
Textmodus
40×25, 16 Farben
Bitmap-Modi
1-bpp · RGB332 · RGB222

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

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

AdresseRegisterFunktion
$9000MODEBit 0 Bitmap, Bit 1 RGB332, Bit 2 Bank, Bit 3 RGB222
$9003TEXT_COLORVordergrundfarbe 0–15
$9004BG_COLORHintergrundfarbe 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