MOS Technology 8568


Image:SpeedScript 128 in action.png|thumb|right|320px|The VDC was designed with office suite applications in mind. Shown here is SpeedScript 128, a word processor.
The MOS Technology 8568 Video Display Controller was the graphics processor responsible for the 80-column or RGBI display on the Commodore 128DCR personal computer. In the Commodore 128 service manual, this component was referred to as the "80 column CRT controller". The 8568 incorporated many of the features of the older 6545E monochrome CRT controller, with the addition of RGBI color.

Features

  • characters text resolution.
  • pixels maximum video resolution.
  • Interlaced up to text, bitmap.
  • 3 character modes: standard, semigraphic, and graphic, double width and HiRes bitmap.
  • Output: digital RGBI with 16 colors or 16 gray shades, plus limited monochrome composite.
  • Other I/O features: interlace mode, horizontal and vertical scrolling, light pen input, hardware cursor, underline, blink, reverse video, 2 character sets of 256 each, update-ready interrupt.
  • Memory: can access 64 KB of memory, programmable to interface either 4164/4464 or 4416 DRAM.
  • Pin count: 48 pins, +5 Volt DC supply.

8568 versus 8563

The original Commodore 128 and the Commodore 128D used the 8563 video controller to generate the 80-column display. The 8568 was essentially an updated version of the 8563, combining the latter's functionality with glue logic that had previously been implemented using discrete components located near the 8563. Unlike the 8563, the 8568 included an unused active low interrupt request line, which was asserted when the "ready" bit in the 8568's status register changed from 0 to 1. Reading the control register would automatically de-assert /INTR. Due to differences in pin assignments and circuit interfacing, the 8563 and 8568 are not electrically interchangeable.

Display modes

The Commodore 128 had two video display modes, which were usually used singularly, but could be used simultaneously if the computer was connected to two compatible video monitors. The VIC-II chip, also found in the Commodore 64, was mapped directly into main memory—the video memory and CPUs shared a common 128 kB RAM, and the VIC-II control registers were accessed as memory locations.

Accessing the VDC

Unlike the VIC-II, the 8568 had its own local video RAM, 64K in the C-128DCR model and, depending on the date of manufacture of the particular machine, either 16 or 64K in the C-128D model. Addressing the VDC's internal registers and dedicated video memory must be accomplished by indirect means. First, the program must tell the VDC which of its 37 internal registers is to be accessed. Next, the program must wait until the VDC is ready for access, after which a read or write on the selected internal register may be performed. The following code is typical of a register read:

ldx #regnum ;VDC register to access
stx $d600 ;write to control register
loop bit $d600 ;check bit 7 of status register
bpl loop ;VDC not ready
lda $d601 ;read from VDC register
...

The following code is typical of a register write operation:

ldx #regnum ;VDC register to write to
stx $d600 ;write to control register
loop bit $d600 ;check bit 7 of status register
bpl loop ;VDC not ready
sta $d601 ;write to VDC register
...

Owing to this somewhat cumbersome method of controlling the 8568, the maximum possible frame rate in bit-mapped mode is generally too slow for arcade-style action video games, in which bit-intensive manipulation of the display is required.
The final versions of the 8568 had the revision codes R9a or R9b appended to the part number, apparently indicating undocumented improvements.

Register listing

This information was adapted from the
RegisterHexadecimalBit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Description
0HT7HT6HT5HT4HT3HT2HT1HT0Horizontal Total
1HD7HD6HD5HD4HD3HD2HD1HD0Horizontal Displayed
2HP7HP6HP5HP4HP3HP2HP1HP0Horizontal Sync Position
3VW3VW2VW1VW0HW3HW2HW1HW0Vertical/Horizontal Sync Width
4VT7VT6VT5VT4VT3VT2VT1VT0Vertical Total
5VA4VA3VA2VA1VA0Vertical Adjust
6VD7VD6VD5VD4VD3VD2VD1VD0Vertical Displayed
7VP7VP6VP5VP4VP3VP2VP1VP0Vertical Sync Position
8IM1IM0Interlace Mode
9CTV4CTV3CTV2CTV1Character Total Vertical
10CM1CM0CS4CS3CS2CS1CS0Cursor Mode, Cursor Start Scan Line
11CE4CE3CE2CE1CE0Cursor End Scan Line
12DS15DS14DS13DS12DS11DS10DS9DS8Display Start Address High Byte
13DS7DS6DS5DS4DS3DS2DS1DS0Display Start Address Low Byte
14CP15CP14CP13CP12CP11CP10CP9CP8Cursor Position High Byte
15CP7CP6CP5CP4CP3CP2CP1CP0Cursor Position Low Byte
16LPV7LPV6LPV5LPV4LPV3LPV2LPV1LPV0Light Pen Vertical Position
17LPH7LPH6LPH5LPH4LPH3LPH2LPH1LPH0Light Pen Horizontal Position
18UA15UA14UA13UA12UA11UA10UA9UA8Update Address High Byte
19UA7UA6UA5UA4UA3UA2UA1UA0Update Address Low Byte
20AA15AA14AA13AA12AA11AA10AA9AA8Attribute Start Address High Byte
21AA7AA6AA5AA4AA3AA2AA1AA0Attribute Start Address Low Byte
22CTH3CTH2CTH1CTH0CDH3CDH2CDH1CDH0Character Total Horizontal, Character Display Horizontal
23CDV4CDV3CDV2CDV1CDV0Character Display Vertical
24COPYRVSCBRATEVSS4VSS3VSS2VSS1VSS0Vertical Smooth Scrolling
25TEXTATRSEMIDBLHSS3HSS2HSS1HSS0Horizontal Smooth Scrolling
26FG3FG2FG1FG0BG3BG2BG1BG0Foreground/Background color
27AI7AI6AI5AI4AI3AI2AI1AI0Address Increment per Row
28CB15CB14CB13RAMCharacter Base Address
29UL4UL3UL2UL1UL0Underline Scan Line
30WC7WC6WC5WC4WC3WC2WC1WC0Word Count
31DA7DA6DA5DA4DA3DA2DA1DA0Data Register
32BA15BA14BA13BA12BA11BA10BA9BA8Block Start Address High Byte
33BA7BA6BA5BA4BA3BA2BA1BA0Block Start Address Low Byte
34DEB7DEB6DEB5DEB4DEB3DEB2DEB1DEB0Display Enable Begin
35DEE7DEE6DEE5DEE4DEE3DEE2DEE1DEE0Display Enable End
36DRR3DRR2DRR1DRR0DRAM Refresh Rate
37HSYNCVSYNCSYNC Polarity