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-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 rasterlijnen | 312 | 263 |
| Zichtbare lijnen | 200 | 200 |
| Klokcycli per lijn | 63 | 65 |
| Systeemklok | 985.248 Hz | 1.022.727 Hz |
| Frames per seconde | ca. 50,12 Hz | ca. 59,83 Hz |
| Klokcycli per frame | 19.656 | 17.095 |
| Badlines per frame | 25 | 25 |
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.
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