Video Display Controller

Video Display Controller

Block diagram of a NEC µPD7220 graphics display controller

A video display controller or VDC is an integrated circuit which is the main component in a video signal generator, a device responsible for the production of a TV video signal in a computing or game system. Some VDCs also generate an audio signal, but that is not their main function.

VDCs were used in the home computers of the 1980s and also in some early video game systems.

The VDC is the main component of the video signal generator logic, responsible for generating the timing of video signals such as the horizontal and vertical synchronisation signals and the blanking interval signal. Sometimes other supporting chips were necessary to build a complete system, such as RAM to hold pixel data, ROM to hold character fonts, or some discrete logic such as shift registers.

Most often the VDC chip is completely integrated in the logic of the main computer system, (its video RAM appears in the memory map of the main CPU), but sometimes it functions as a coprocessor that can manipulate the video RAM contents independently

Video display controllers vs. video display processors and graphics processing units

The difference between a VDC and the more modern video display processor (VDP) is not that the VDCs could not generate graphics, but they did not have the special hardware accelerators to create 2D and 3D images, while a typical 1990s VDP does have at least some form of hardware graphics acceleration. Also VDCs often had special hardware for the creation of "sprites", a function that in more modern VDP chips is done with the "Bit Blitter" using the "Bit blit" function.

One example of a typical video display processor is the "VDP2 32-bit background and scroll plane video display processor" of the Sega Saturn. Another example is the Advanced Graphics Architecture (AGA) chip that was used for the improved graphics of the later generation Amiga computers.

This said, it is not completely clear when a "video chip" is a "video display controller" and when it is a "video display processor". For example, the TMS9918 is sometimes called a "video display controller" and sometimes a "video display processor". In general however a "video display processor" has some power to "process" the contents of the video RAM (filling an area of RAM for example), while a "video display controller" only controls the timing of the video synchronisation signals and the access to the video RAM.

The graphics processing unit (GPU) goes one step further than the VDP and normally also supports 3D functionality. It is the chip that is now used in modern personal computers.


Video Display controllers can be divided in several different types, listed here from simplest to most complex;

  • Video shifters, or "video shift register based systems" (there is no generally agreed upon name for these type of devices), are the most simple type of video controllers. They are directly or indirectly responsible for the video timing signals, but they normally do not access the video RAM directly. They get the video data from the main CPU, a byte at a time, and convert it to a serial bitstream, hence the technical name "video shifter". This serial data stream is then used together with the synchronisation signals to output a video signal. The main CPU needs to do the bulk of the work. Normally these chips only support a very low resolution raster graphics mode.
  • A CRTC, or cathode ray tube controller, generates the video timings and reads video data from RAM attached to the CRTC to output it via an external character generator ROM (for text modes) or directly to the video output shift register (for high resolution graphics modes). Because the actual capabilities of the video generator depend to a large degree on the external logic, video generator based on a CRTC chip can have a wide range of capabilities, from simple text-mode only systems to high-resolution systems supporting a wide range of colours. Sprites, however, are normally not supported by these systems.
  • Video coprocessors have their own internal CPU dedicated to reading (and writing) their own video RAM, and converting the contents of this video RAM to a video signal. The main CPU can give commands to the coprocessor, for example to change the video modes or to manipulate the video RAM contents. The video coprocessor also controls the (most often RAM-based) character generator, the colour attribute RAM, palette registers, and the sprite logic (as long as these exist of course).

List of example VDCs

Examples of video display controllers are:

Video shifters

  • The RCA CDP1861 was a very simple chip, built in CMOS technology (which was unusual for the mid '70's) to complement the RCA 1802 microprocessor, it was mainly used in the COSMAC VIP. It could only support a very low resolution monochrome graphic mode.
  • The "Television Interface Adapter (TIA) is the custom video chip that is the heart of the Atari 2600 games console, a very primitive chip that relied on the 6502 microprocessor to do most of the work, also was used to generate the audio.

CRT Controllers

  • The Intel 8275 CRT controller was not used in any mainstream system, but was used in some S100 bus systems.
  • The Motorola 6845 (MC6845) is a video address generator first introduced by Motorola and used for the Amstrad CPC, and the BBC Micro. It was later used for almost all the early video adapters for the PC, such as the MDA, CGA and EGA adapters. The MDA and CGA use an actual Motorola chip, while the EGA has a custom IBM chipset of five LSI chips; one of those chips includes IBM's reimplementation of the CRTC, which operates like an MC6845 but differs in a few register addresses and functions so it is not 100% compatible. In all later VGA compatible adapters the function of the 6845 is still reproduced inside the video chip, so in a sense all current IBM PC compatible PCs still incorporate the logic of the 6845 CRTC.

Video interface controllers

Video coprocessors

  • The Picture Processing Unit was a video co-processor designed by Ricoh for Nintendo's use in the Famicom and Nintendo Entertainment System. It was connected to 2048 bytes of dedicated video RAM, and had a dedicated address bus that allowed additional RAM or ROM to be accessed from the game cartridge. A scrollable playfield of 256×240 pixels was supported, along with a display list of 64 OBJs (sprites), of which 8 could be displayed per scanline.
  • The ANTIC (Alpha-Numeric Television Interface Circuit) was an early video system chip used in the Atari 8-bit family of microcomputers. It could read a "Display list" with its own built in CPU and use this data to generate a complex video signal.
  • The TMS9918 is known as the Video Display Processor (VDP) and was first designed for the Texas Instruments TI-99/4, but was later also used in systems like the MSX (MSX-1), ColecoVision, Memotech MTX series, and for the Sega SG-1000 and SC-3000. The Sega Master System uses an enhanced VDP based on the TMS9918, and the Sega 315-5313 VDP used in the Sega Genesis and some arcade machines is a further advancement of the Master System VDP with the original (inferior) TMS9918 modes removed.
  • The NEC µPD7220. Used in some high-end graphics boards for the IBM PC in the mid 80s, notably in products from Number 9 Computer Company.
  • The Yamaha V9938 is an improved version of the TMS9918, and was mainly used in the MSX2.
  • The Yamaha V9958 is the Video Display Processor (VDP) mainly used in the MSX 2+ and MSX turbo R computers.

Alternatives to a VDC chip

Note that many older home-computer did not use a VDP chip, but built the whole video display controller from a lot of discrete logic chips, (examples are the Apple II, PET, and TRS-80). Because these methods are very flexible the video display generators could be very capable, (or extremely primitive, depending of the quality of the design) but also needed a lot of components.

Many early systems used some form of an early programmable logic array to create a video system, examples include the ZX Spectrum and ZX-81 systems and Elektronika BK-0010 but there were many others. Early implementations are often very primitive, but later implementations could result in fairly advanced video systems like the one in the SAM Coupé.

These systems could thus build a very capable system with relatively few components, but the low transistor count of early programmable logic meant that the capabilities of early PLA based systems often were less impressive than those using the video interface controllers or video coprocessors that were available at the same time. Later PLA solutions, like those using CPLDs or FPGAs could result in much more advanced video systems, surpassing those built using off the shelf components.

An often used hybrid solution was to use a video interface controller (often the Motorola 6845) as a basis and expand its capabilities with programmable logic or an ASIC. An example of such a hybrid solution is the original VGA card, that used an 6845 in combination with an ASIC, that is the reason why all current VGA based video systems still use the hardware registers that were provided by the 6845.

Modern solutions

ATi R300 chip block diagram; the display controller is called "display interface"

With the advancements made in semiconductor device fabrication, more and more functionality is implemented as integrated circuit, often licensable as SIP core. Display controller SIP blocks are either found on the die of GPUs, APUs and SoCs.

They support a variety interfaces: VGA, DVI, HDMI, DisplayPort, VHDCI, DMS-59 and more. The PHY includes LVDS, TMDS and Flat Panel Display Link, OpenLDI and CML.

For example, a VGA-signal, which is created by the display controller, is being transported over a VGA-cable to the display. Both ends of the cable end in a VGA connector. Laptops and other mobile computers use different interfaces between the display controller and the display. A display controller usually supports multiple computer display standards.

KMS driver is an example of a device driver for display controllers and AMD Eyefinity is a special brand of display controller with multi-monitor support.

RandR is a method to configure screen resolution and refresh rate on each individual outputs separatelly and at the same time configure the settings of the windowing system accordingly.

See also

External links

  • Embedded Linux Conference 2013 – Anatomy of an Embedded KMS driver on YouTube KMS driver is a device driver for display controllers