MOS Technology VDC
aus Wikipedia, der freien Enzyklopädie
Der MOS Technology VDC (Video Display Controller) ist ein Videochip, der für die 80-Zeichen-Ausgabe im Commodore C128 zuständig ist. Er wird an einen Monitor mit RGBI-Eingang (z.B. CGA-Bildschirme) angeschlossen. Ursprünglich wurde der VDC für den CBM 900 entwickelt, ein Computersystem mit einer Zilog Z-8001-CPU. Es wurden 2 nicht vollständig kompatible Versionen produziert, der 8563 und der 8568. Der Chip verfügt über ein eigenes Video-RAM, dieses ist in den alten C128-Versionen 16 KB groß, im neueren C128DCR 64 KB, jedoch können beide 64 KB adressieren.
Der Chip wird asynchron zum Rest des Computers getaktet.
[Bearbeiten] Technische Daten
- 16 oder 64 KB Speicher
- 16 Farben (RGBI)
- Grafik-Auflösung 640 x 200 Pixel, bei 64 KB-Version auch erweiterbar auf 800 x 240 bzw 480 (Interlaced) Pixel
- Textmodus mit 80 Zeichen à 25 Zeilen, variierbar je nach Zeichengröße
- 2 Zeichensätze à 256 Zeichen gleichzeitig nutzbar
- Zeichengröße 2 bis 32 Rasterzeilen à 8 Pixel Breite
- 1 bildschirmweite Hintergrundfarbe, 1 Vordergrundfarbe pro Zeichen und 4 Attribute (invertiert, blinkend, unterstrichen, Zeichensatz 1 oder 2)
- Farbzellen im Bitmap-Modus von 8 Pixeln Breite und 2 bis 32 Pixeln Höhe, jede Zelle kann eine eigene Vorder- und Hintergrundfarbe benutzen.
- Hardware-Textcursor
- Fähigkeit zum Verschieben von bis zu 256 Bytes großen Datenblöcken
- Horizontales und vertikales Hardware Scrolling
[Bearbeiten] Programmierung des VDC
Der VDC verfügt über 36 (8563) bzw. 37 (8568) interne Register. Register 37 kam beim 8568 hinzu, wodurch der Refresh schneller getaktet werden konnte als bei seinem Vorgänger. Erreichbar sind diese jedoch nur sehr umständlich über 2 Speicherzellen im Ein/Ausgabe-Bereich an der Hexadezimal-Adresse $D600/$D601.
In Adresse $D600 wird angegeben welches Register man ansprechen will, in Adresse $D601 wird dann das angesprochene Register ausgelesen oder beschrieben. Dabei muss man warten, bis Bit 7 von $D600 gesetzt ist. Am einfachsten geht dies mit den beiden Betriebssystemfunktionen $FCDCA & $FCDD8 (auch in Basic).
Adresse $FD600 hat noch weitere Bedeutungen, beim Auslesen erhält man:
- Bit 7 = Statusbit: hier erfährt man ob der VDC mit seiner letzten Arbeit fertig ist (0 = Fertig).
- Bit 6 = Lichtgriffel (Lightpen)
- Bit 5 = Kathodenstrahl-Rücklauf: 1 = Rücklauf.
die anderen Bits sind nicht belegt.
[Bearbeiten] Bedeutung der 37 ($25) Register
Die Zahl in Klammer bedeutet den Standardwert (Dec $Hex) Schreibweise.
Register 0 ($00): Max. Horizontale Zeilen; (126 $7E)
Hier werden die maximal zur Verfügung stehenden Zeichen pro
Zeile festgelegt. Die Zeichenzahl sollte durch 8 teilbar sein.
Register 1 ($01): Max. Zeichen pro Zeile; (80 $50)
Hier wird die tatsächliche Zeichenzahl pro Zeile festgelegt.
Alle Werte die kleiner als Register 1 sind, sind möglich.
Register 2 ($02): Linker Rand; (102 $66)
Hier wird der linke Rand positioniert. Erlaubt sind alle Werte die
kleiner als Register 0 sind. Wenn die Zahl in diesem
Register mit einem kleineren Wert überschrieben wird, wandert das
Bild nach rechts. Interessante Effekte sind damit möglich.
Register 3 ($03): Sync Breite; (73 $49)
Bits 0-3 bestimmen die horizontale Sync-Puls-Breite in Zeichen.
Der Wert 0 $00 lässt sich nicht programmieren.
Bits 4-7 bestimmen die vertikale Sync-Puls-Breite. Diese ist ein
vielfaches einer Rasterperiode. Null entspricht
dem Wert 16.
Register 4 ($04): Max. Vertikal Zeichen; (39 $27)
In diesem Register wird die Anzahl der totalen Zeilen inklusive
des vertikalen Strahlrücklaufes angegeben.
Register 5 ($05): Feinjustierung von Register 4; (224 $E0)
Bits 0-4 ist die Feinjustierung von Register 4.
Bits 5-7 müssen immer gesetzt sein.
Der Wert 224 bedeutet, dass die Bits 0-4 gelöscht sind.
Register 6 ($06): Zeilenzahl; (25 $19)
Hier wird festgelegt, wieviel Zeilen der VDC anzeigt; Größere Werte
als in Register 4 sind nicht möglich.
Register 7 ($07): Oberer Rand; (32 $20)
Hier wird festgelegt an welcher Stelle die erste Zeile beginnt.
Je größer die Zahl um so weiter unten beginnt die erste Zeile.
Register 8 ($08): Interlace / Video Modus; (252 $FC)
Bit 0 Video Modus normalerweise 0.
Bit 1 Interlace 0 = aus 1 = ein normalerweise 0, bei 1 scheint
das Bild zu flackern.
Die Bits 2 - 7 sind nicht belegt.
Register 9 ($09): Rasterzeilen pro Zeichen; (231 $E7)
Bits 0 - 4 bestimmen aus wievielen Rasterzeilen ein Zeichen
besteht,(Wert -1).
Bits 5 - 7 sind immer gesetzt.
Register 10 ($0A): Cursor Modus / Raster Start; (160 $A0)
Bits 5 + 6 bestimmen den Cursor Modus
00 = Cursor blinken aus,
01 = Cursor aus,
10 = Cursor blinken schnell,
11 = Cursor blinken normal.
Register 11 ($0B): Cursor Ende; (231 $E7)
Bits 0 - 4 geben die Rasterzeilen an, an denen der Cursor aufhört.
Bits 5 - 7 sind immer gesetzt.
Register 12 ($0C: Video Ram Hi; (0 $00)
Hi Byte Adresse an der, das Video Ram beginnt.
Register 13 ($0D): Video Ram Lo; (0 $00)
Lo Byte Adresse an der, das Video Ram beginnt.
Register 14 ($0E): Cursor Position Hi;
Hi Byte Adresse an der, der Cursor ist.
Register 15 ($0F): Cursor Position Lo;
Lo Byte Adresse an der, der Cursor ist.
Register 16 ($10): Lightpen vertikal;
Vertikale Lightpen-Position in Zeichenzeilen.
Register 17 ($11): Lightpen horizontal;
Horizontale Lightpen-Position (Zeichen)
Register 18 ($12): Update Adresse Hi;
Hier wird das Hi-Byte der Adresse angegeben, die man beschreiben
will, egal ob Video, Attribut oder sonstiges Ram.
Register 19 ($13): Update Adresse Lo;
dito jedoch das Lo-Byte.
Register 20 ($14): Farb Ram Hi; (4 $04)
Hi-Byte Adresse an der das Farb-Ram beginnt.
Register 21 ($15): Farb Ram Lo; (0 $00)
Lo-Byte Adresse an der das Farb-Ram beginnt.
Register 22 ($16): Max. Zeichenbreite; (120 $78)
Bits 0 - 3 geben die Zeichenbreite an.
Bits 4 - 7 geben die maximal darstellbare Zeichenbreite -1 an.
Register 23 ($17): Zeichenhöhe; (232 $E8)
Hier wir die Höhe eines Zeichens festgelegt.
Register 24 ($18): Vertikal Smooth Scroll; (32 $20)
Bit 7 Copy - Bit: ist das Bit gesetzt von Reg 32 nach Reg 18
Kopiert sonst von Reg 31.
Bit 6 RVS - Bit: wird das Bit gesetzt, dann wird der gesamte
Bildschirm invertiert (revers) angezeigt.
Bit 5 Blinkrate 1 = 1/30; 0 = 1/16
Bits 0 - 4 Smooth Scrolling: verschiebt den vertikalen Rand in
Rasterzeilen
Register 25 ($19): Horizontal Smooth Scroll; (64 $47)
Bit 7 Text 0 = Einzelpunktgrafik; 1 = Textmodus
Bit 6 ATR 0 = Monochrom; 1 = Color
Bit 5 Semi 0 = der Zeichenzwichenraum wird mit der
Hindergrundfarbe 1 = mit der Farbe des letzten
Zeichens aufgefüllt.
Bit 4 DBL gesetztes Bit = doppelte Zeichenbreite
Bits 0 - 3 Der Horizontale Rand wird in Rasterzeilen verschoben.
Register 26 ($1A): Hintergrúndfarbe / Vordergrundfarbe; (240 $F0)
Bits 0 - 3 Hintergrundfarbe
Bits 4 - 7 Vordergrundfarbe
Register 27 ($1B): Addierwert zur Zeichenanzahl; (0 $00)
Der Wert dieses Byte wird zum Videoram hinzuaddiert.
Der Wert 20 bedeutet 60 Zeichen pro Zeile
Register 28 ($1C): Zeichensatz-Adresse; (47 $2F)
Die Bits 5 - 7 legen die Startadresse des Zeichengenerators in
8K Schritten fest.
Das Bit 4 bestimmt die Größe des VDC-Rams: 0 = 16 K Ram, 1 = 64 K Ram; das Bit muss gesetzt
werden (keine automatische Erkennung).
Register 29 ($1D): Unterstreichungszeile; (231 $E7)
Mit den Bits 0 - 4 wird angegeben, in welcher Pixelzeile ein Zeichen unterstrichen wird
(Standard ist 8).
Register 30 ($1E): Wort Zahl;
Hier wird angegeben wieviel Byte geschrieben bzw. kopiert werden.
Register 31 ($1F): Data;
Über dieses Register werden die Daten ein- und aus- gelesen.
Register 32 ($20): Block Startadresse Hi;
Hier und im folgenden Register wird die Startadresse definiert ab
der kopiert werden soll.
Register 33 ($21): Block Startadresse Lo;
Siehe Register 32.
Register 34 ($22): Beginn 1. Zeichen; (125 $7D)
Beginn der Zeichenanzahl, die bis zur positiven Flanke dargestellt
werden soll.
Register 35 ($23): Ende letztes Zeichen; (64 $100)
dito. jedoch negative Flanke.
Register 36 ($24): DRam Refresh; (245 $F5)
Bits 0 - 3 geben die Refreshrate des VDC Ramspeichers an.
PET/CBM: KIM-1 | PET 2001 | CBM 3000 | CBM 4000 | CBM 8000 | MMF 9000 CBM II: CBM 500∗ | CBM 600 | CBM 700 | CBM 900∗
Heimcomputer: VC 10 | VC 20 | C64 (SX, GS♦) | 264-Reihe (C16, C116, Plus/4) | C128 | C65∗
Amiga (Übersicht): 1000 | Sidecar | 500 | 2000 | CDTV♦ | 600 | 3000/T/UX | 1200 | 4000 | CD³²♦
IBM-kompatibel: PC-1 | PC-10 bis PC-60 | x86LT | A 1060
Peripherie: Laufwerke: Datasette | VC15xx (VC1540/41, VC1551, VC1570/71, VC1581) | SFD100x (SFD1001, SFD1002) | CBM 2020 bis 8250 | Amiga-Diskette | A570 | A3070
Drucker: MPS-Serie | MPS 801 | CBM-8000-Serie | VC1520
Sonstige Hardware: Zorro-Bus | RAM Expansion Unit | Commodore-Maus | Monochrom- und Farb-Monitore | Lautsprecher A10 | Mehrfachbenutzersysteme (MBS)
Historische Hardware: Schreib- und Tischrechenmaschinen | LED-Uhren | Konsole Commodore 2000k| Schachcomputer
Chips: MOS Technology | VIC | VIC II | TED | VDC | SID | PIA | VIA | TPI | CIA | ACIA | Agnus (Blitter, Copper) | Paula | HAM-Modus Chipsätze: OCS | ECS | AGA
Software: Commodore BASIC | Commodore Basic V2 | Kernal | CBM-ASCII (PETSCII) | GEOS | Commodore DOS | AmigaOS | Kickstart | AmigaGuide | AMIX

