MOS Technology 8563
The 8563 Video Display Controller (VDC) was an integrated circuit produced by MOS Technology. It was used in the Commodore 128 computer to generate an 80-column (640×200 pixel) RGB video display, running alongside a VIC-II which supported Commodore 64-compatible graphics. The DCR models (as well as a few D-models) of the C128 used the later and more technically advanced 8568 [D]VDC controller.
History and characteristics
Originally intended for a planned (but unreleased) UNIX-based business computer, Commodore designed the VDC into several prototype machines. Of these, only the Commodore 128 ever saw production. Unlike earlier MOS video chips such as the popular VIC-II, the VDC had dedicated video memory, 16 kilobytes (upgradable to 64 kilobytes) in the original or "flat" C128 and 64 kilobytes in the C128DCR. This RAM was not directly accessible by the microprocessor.
The 8563 was more difficult to produce than most of the rest of the MOS Technology line, and initial yields were very low. Also, there were timing issues with the VDC that would cause indirect load and store operations on its registers to malfunction.
Officially, the VDC was a text-only chip, although a careful reading of the technical literature by MOS Technology that was given to the early C128 developers did indicate that a high-resolution bitmap mode was possible—it simply wasn't described in any detail. BASIC 7.0, the Commodore 128's built-in programming language, only supported high-resolution graphics in 40-column mode via the legacy VIC-II chip.
Shortly after the release of the C128 the VDC's bitmap mode was described in considerable detail in the Data Becker book "Commodore 128 - Das große GRAFIK-Buch" (published in late 1985 in the USA by Abacus Software), and an assembly language program was provided by the German authors Klaus Löffelmann and Dieter Vüllers, in which it was possible to set or clear any pixel or, using BASIC to perform the necessary calculations, generate bitmapped geometric shapes on the 80 column screen (Chapter 3.9.1 "VDC HI-RES-Grafik" Page 213ff). In February 1986, less than a year after the Commodore 128's release, RUN magazine published "Ultra Hi-Res Graphics", an article describing the VDC's bitmapped mode and including a type-in program (written in 8502 assembly language) that extended BASIC 7.0's capabilities to support 640×200 high-resolution graphics using the 8563. Authors Lou Wallace and David Darus later developed the Ultra Hi-Res utility into a commercial package, BASIC 8. One of the most popular third-party utilities for the C128, this offered more advanced VDC high-resolution capabilities to a wide audience of programmers.
Commodore finally offered complete official documentation on the VDC in the Commodore 128 Programmer's Reference Guide. VDC bitmap modes were used extensively in the C128 version of the GEOS operating system.
The VDC lacked sprite capabilities, which limited its use in gaming applications. However, it did contain blitting capabilities to autonomously perform small block memory copies within its dedicated video RAM. While the VDC is performing such a copy, the system CPU can continue running code, provided no other VDC accesses are attempted before the copy is finished. These functions were used by the C128's screen editor ROM to rapidly scroll or clear screen sections.
Technical specifications
- RGBI output (RGB plus Intensity) compatible with IBM's CGA video standard.
- 16 or 64 kilobyte address space for display, character shape and display attribute memory (dedicated, separate from system memory).
- Up to 720×700 pixel video resolution in interlaced mode (maximum with 64 kilobyte video ram) . Other image sizes are possible, depending on programmer's needs, such as 640×200 non-interlaced, 640×400 interlaced, etc.
- 80×25 characters text resolution (C128 kernel default); other sizes such as 80×50 or 40×25 are possible.
- 8 colors at 2 intensities.
Programming
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 the 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 VDC, the maximum possible frame rate in bitmapped mode is generally too slow for arcade-style action video games, in which bit-intensive manipulation of the display is required.
Register Listing
This information was adapted from the Commodore 128 Programmer's Reference Guide[1]
Register | Hexadecimal | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Description |
---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
Horizontal Total |
|
|
|
|
|
|
|
|
|
|
Horizontal Displayed |
|
|
|
|
|
|
|
|
|
|
Horizontal Sync Position |
|
|
|
|
|
|
|
|
|
|
Vertical/Horizontal Sync Width |
|
|
|
|
|
|
|
|
|
|
Vertical Total |
|
|
|
|
|
|
|
|
|
|
Vertical Adjust |
|
|
|
|
|
|
|
|
|
|
Vertical Displayed |
|
|
|
|
|
|
|
|
|
|
Vertical Sync Position |
|
|
|
|
|
|
|
|
|
|
Interlace Mode |
|
|
|
|
|
|
|
|
|
|
Character Total Vertical |
|
|
|
|
|
|
|
|
|
|
Cursor Mode, Start Scan |
|
|
|
|
|
|
|
|
|
|
Cursor End Scan Line |
|
|
|
|
|
|
|
|
|
|
Display Start Address High Byte |
|
|
|
|
|
|
|
|
|
|
Display Start Address Low Byte |
|
|
|
|
|
|
|
|
|
|
Cursor Position High Byte |
|
|
|
|
|
|
|
|
|
|
Cursor Position Low Byte |
|
|
|
|
|
|
|
|
|
|
Light Pen Vertical Position |
|
|
|
|
|
|
|
|
|
|
Light Pen Horizontal Position |
|
|
|
|
|
|
|
|
|
|
Update Address High Byte |
|
|
|
|
|
|
|
|
|
|
Update Address Low Byte |
|
|
|
|
|
|
|
|
|
|
Attribute Start Address High Byte |
|
|
|
|
|
|
|
|
|
|
Attribute Start Address Low Byte |
|
|
|
|
|
|
|
|
|
|
Character Total Horizontal, Character Display Horizontal |
|
|
|
|
|
|
|
|
|
|
Character Display Vertical |
|
|
|
|
|
|
|
|
|
|
Vertical Smooth Scrolling |
|
|
|
|
|
|
|
|
|
|
Horizontal Smooth Scrolling |
|
|
|
|
|
|
|
|
|
|
Foreground/Background color |
|
|
|
|
|
|
|
|
|
|
Address Increment per Row |
|
|
|
|
|
|
|
|
|
|
Character Base Address |
|
|
|
|
|
|
|
|
|
|
Underline Scan Line |
|
|
|
|
|
|
|
|
|
|
Word Count |
|
|
|
|
|
|
|
|
|
|
Data Register |
|
|
|
|
|
|
|
|
|
|
Block Start Address High Byte |
|
|
|
|
|
|
|
|
|
|
Block Start Address Low Byte |
|
|
|
|
|
|
|
|
|
|
Display Enable Begin |
|
|
|
|
|
|
|
|
|
|
Display Enable End |
|
|
|
|
|
|
|
|
|
|
DRAM Refresh Rate |
References
- ↑ Commodore Capital, Inc., (1986). Commodore 128 programmer's reference guide. New York, NY: Bantam Books, Inc.
External links
- Ultra Hi-Res self-extracting archive - Volume I
- Ultra Hi-Res self-extracting archive - Volume II
- C= Hacking volume 2 - Register listing and description