sslxy

gfx-technieken

VIC-II – wat de datasheet beschrijft, en wat programmeurs er toch uit hebben gehaald.

De VIC-II werd in 1982 ontworpen. Hij kan 16 kleuren weergeven, acht hardware-sprites renderen, meerdere grafische modi aansturen en een scherm van 40×25 tekens opbouwen. Dat is de officiële versie. De officieuze versie is aanzienlijk langer: rasterstraalmanipulatie, opengebroken randen, kleurwissels per lijn, sprite-multiplex, FLI, FLD, DYCP, VSP, AGSP, hardware-scrolling in acht richtingen, dubbel gebufferde grafiek – allemaal op hardware die veel daarvan niet uitdrukkelijk had voorzien.

Deze pagina kiest niet de makkelijke weg. Ze begint met de timing van de VIC-II, omdat zonder dat fundament geen van de geavanceerde technieken echt begrijpelijk wordt. Daarna volgen de technieken in oplopende complexiteit – van stabiele raster-IRQ tot FLI, VSP en complexere beeldverschuivingen. Alles met één doel: niet alleen weten dát een truc werkt, maar begrijpen waarom.

System Diagnostic

> VIC-II GFX ANALYSIS
CHIP MOS 6569 (PAL) / MOS 6567 (NTSC) – Video Interface Controller II RASTER PAL: 312 lijnen / 63 cycli per lijn – NTSC: 263 lijnen / 65 cycli ZICHTBAAR 320×200 pixels / 40×25 tekens – plus rand boven, onder, links, rechts KLEUREN 16 vaste kleuren – geen vrij definieerbaar palet in de standaard SPRITES 8 hardware-sprites / 24×21 pixels elk – uitbreidbaar via multiplex REGISTERS $D000–$D02E: sprite- en VIC-II-registers / $D011–$D012: raster en Y-scroll / $D016: X-scroll / $D018: screen-/charset-/bitmap-pointer binnen de actieve VIC-bank / $DD00: VIC-bank TRUCS FLI / FLD / DYCP / Open Border / Sprite-Multiplex / VSP / AGSP / Dithering / Splits
Een chip die in 1982 werd vastgelegd – en waarvan de grenzen tot vandaag worden verschoven.
[hardware/vic_timing]

VIC-II-timing: de basis van alles

Wie de VIC-II wil begrijpen, moet bij zijn timing beginnen. Niet bij de grafische modi, niet bij de sprites – bij de timing. Want de timing van de VIC-II is het mechanisme dat alle geavanceerde technieken überhaupt mogelijk maakt. En het is hetzelfde mechanisme dat de CPU regelmatig afremt en daarmee het karakter van het hele systeem bepaalt.

De VIC-II bouwt zijn beeld op door lijn voor lijn een virtuele rasterstraal door het beeld te bewegen – analoog aan de fysieke elektronenstraal van een beeldbuis. Op een PAL-C64 zijn er 312 rasterlijnen per volledig beeld, waarvan 200 het zichtbare tekst- respectievelijk grafische gebied uitmaken. Elke rasterlijn duurt 63 klokcycli. Op NTSC zijn dat 263 lijnen met telkens 65 cycli.

Parameter PAL (6569) NTSC (6567)
Totale rasterlijnen312263
Zichtbare lijnen200200
Klokcycli per lijn6365
Systeemklok985.248 Hz1.022.727 Hz
Frames per secondeca. 50,12 Hzca. 59,83 Hz
Klokcycli per frame19.65617.095
Badlines per frame2525

Terwijl de VIC-II een lijn opbouwt, delen CPU en VIC-II de geheugenbus. Dat is het centrale feit achter bijna alle trucs. De 6510 is niet vrij om wanneer hij wil RAM te benaderen. Hij krijgt alleen de busfasen die de VIC-II op dat moment niet zelf nodig heeft.

In normale lijnen is dat nog relatief onschuldig. In badlines en bij actieve sprite-DMA wordt de situatie merkbaar krapper. Daarom is op de C64 elke serieuze grafiektechniek tegelijk altijd ook een timingtechniek.

[hardware/badlines]

Badlines in detail

Een badline ontstaat wanneer de VIC-II nieuwe tekencodes voor de volgende tekstregel moet ophalen. Dat gebeurt precies dan wanneer de actuele rasterlijn binnen het zichtbare gebied ligt en de