MOS Technology VIC-II
|
The VIC-II (Video Interface Chip II), specifically known as the MOS Technology 6567/8562/8564 (NTSC versions), 6569/8565/8566 (PAL), is the integrated circuit chip tasked with generating composite video graphics and DRAM refresh signals in the Commodore 64 and C128 home computers.
Succeeding MOS' original VIC (used in the VIC-20), the VIC-II was one of the two chips mainly responsible for the C64's success as the best-selling computer model of all time (the other chip being the 6581 SID). One of the engineers working on the VIC-II was SID chip designer Robert Yannes. An improved version of the chip, VIC-III (codenamed Bill), appeared in the Commodore 65 prototype but was never used in a released product. Note that the 8564/8566 VIC-II versions used in the Commodore 128 were also called VIC-III in some publications, but are more correctly called VIC-II E (i.e., revision E).
VIC-II features
- 16 KB relocatable address space for screen, character and color memory
- 320 × 200 pixels video resolution (160 × 200 in multi-color mode)
- 40 × 25 characters text resolution
- three character display modes and two bitmap modes
- 16 colors
- concurrent handling of 8 sprites, each of 24 × 21 pixels
- designed for easy raster interrupt programming (see details, below)
- independent dynamic RAM refresh
- on-chip DMA
- bus mastering for a 6502-style system bus; CPU and VIC-II accessing the bus during alternating half-clock cycles (the VIC-II will halt the CPU when it needs extra cycles)
Technical details
The VIC-II was programmed by manipulating its 47 control registers (up from 16 in the VIC), memory mapped to the range $D000–$D02E in the C64 address space. Of all these registers, 34 dealt exclusively with sprite control (sprites being called MOBs, from Movable Object Blocks, in the VIC-II documentation). Like its predecessor, the VIC-II handled light pen input, and, with help from the C64s standard character ROM, provided the original PETSCII character set from 1977 on a similarly dimensioned display as the 40 column PET series, allowing some degree of PET BASIC program emulation on the C64.
By reloading the VIC-II's control registers via machine code hooked into the raster interrupt routine (the scanline interrupt), one could program the chip to generate significantly more than 8 concurrent sprites (a process known as sprite multiplexing), and generally give every program-defined slice of the screen different scrolling, resolution and color properties. The hardware limitation of 8 sprites per scanline could be increased further by letting the sprites flicker rapidly on and off. Mastery of the raster interrupt was essential in order to unleash the VIC-II's capabilities. Many demos and some later games would establish a fixed "lock-step" between the CPU and the VIC-II so that the VIC registers could be manipulated at exactly the right moment.
The 8564/8566 VIC-II in the Commodore 128 had two extra registers, one for accessing the added numerical keypad and other extra keys of that computer, and the other for toggling between a 1 MHz and a 2 MHz system clock; at the higher speed the VIC-II's composite video output was disabled, suggesting use of the C128's 80-column mode at that speed (via the 8563 VDC RGB chip). Rather unofficially, the two extra registers were also available in the C128's C64 mode, permitting some use of the extra keys, as well as double-speed-no-video execution of CPU-bound code (i.e. numerical calculations) in self made C64 programs.
Colors
In multicolor bitmap mode (aka koala) (160×200 pixels, which most games used) characters had 4×8 pixels (they were still square since the pixels were double width) and 4 colors out of 16 colors. The 4th color was the same for the entire screen (the background color), while the other 3 could be set individually for every such 4×8 pixel area. Two colors were loaded from the active text screen, and the third was loaded from color RAM. Similarly, sprites in multicolor mode (12×21 pixels) had three colors: two shared among all sprites and one individual. The artist had to pick shared colors such that the combination with individual colors lead to a colorful impression. Some games reloaded shared colors during the raster interrupt; for example, the game Turrican II 's underwater area (which was vertically distinct) had different colors.
On PAL C64s, the PAL delay line in the monitor or TV which averages the color hue and saturation, but not the brightness, of consecutive screen lines can be (ab)used to create five nonstandard colors by alternating screen lines showing two colors of identical brightness. There are five such pairs of colors in the VIC chip.
VIC-II versions
- PAL
- MOS Technology 6569 – (PAL-B)
- MOS Technology 6572 – (PAL-N)
- MOS Technology 6573 – (PAL-M)
- MOS Technology 8565 – HMOS-II version for "C64E" motherboards
- MOS Technology 8566 – VIC-II E (PAL-B) C128 version
- MOS Technology 8569 – VIC-II E (PAL-N) C128 version
- NTSC
- MOS Technology 6566 – designed to use static RAM, non-multiplex address lines (never used in a C64)
- MOS Technology 6567 – Original NMOS version
- MOS Technology 8562 – HMOS-II version
- MOS Technology 8564 – VIC-II E C128 version
References
- Appendix N, "6566/6567 (VIC-II) Chip Specifications", of the Commodore 64 Programmer's Reference Guide (see the C64 article).
External links
- The MOS 6567/6569 video controller (VIC-II) and its application in the Commodore 64, by Christian Bauer (http://www.minet.uni-jena.de/~andreasg/c64/vic_artikel/vic_article_1.htm)
- Original text-only version of the above, suitable for printing (http://zimmers.net/cbmpics/cbm/c64/vic-ii.txt)
List of 65xx(x)-based products from MOS Technology and the Western Design Center |
Single board computers (kits), and microprocessors: MOS/CBM KIM-1 |
6501 |
6502 |
65C02 |
6507 |
6508 |
6509 |
6510/7501/8500-01 |
8502 |
65802 |
65816 Support chips: 6520 PIA | 6522 VIA | 6526 CIA | 6529 SPIA | 6530 RRIOT | 6532 RIOT | 6551 ACIA | 6560 VIC | 6567 VIC-II | 6581 SID | 6845 | 7360 TED | 8563 VDC |