Like, in the olden day computers with DOS and stuff, they just showed fixed width letters on the screen...

What functional part of those computers had the job of displaying the physical characters, since (I think) the original operating systems didn't actually have to make each pixel and instead just dumped the byte corresponding to the character somewhere special in the memory and a character appeared on the screen?

So what renders the actual character corresponding to the byte?


As Ƭᴇcʜιᴇ007's link describes, back in the days of old, this was done by specialized hardware in the graphics card called a character generator. The pixel pattern corresponding to each character would be stored in a ROM (or EPROM), at an address corresponding to the character's ASCII value (or other character code, since non-ASCII character sets were more common back then). You could change your font by replacing the character-ROM chip with one containing different bit patterns.

A fairly simple circuit in the graphics card then generates pixels on the fly by reading a byte from the display buffer, using that as an address to read a byte from the character ROM, and then shifting whatever it found there out the video port one bit at a time. Since the clock that runs that circuit is synched with the motion of the electron beam in the CRT (or vise versa), these bits correspond to visible pixels along one scan line. When the time comes to generate the next scan line, the circuit reads from the next row of character data in each ROM entry; or if it reaches the bottom of the character cell, it advances to the next line in display memory and wraps around to the first row of character memory again.

This maybe sounds more complicated than it is— it can be implemented with counters and simple state machines.

Bit-mapped displays are actually simpler: they simply read whatever's in display memory and stuff it out the video port without the intermediate lookup table. However, that obviously requires a lot more RAM, and RAM was really expensive.


So what renders the actual character corresponding to the byte?

In PCs this hardware was called the graphics adapter (e.g. CGA, EGA, PGA and VGA) or display adapter (e.g. MDA). These were on expansion boards (aka cards).

Note that a graphics adapter has two modes, text and graphics. In text mode, ASCII character codes plus other codes defined by IBM written to video memory would use a built-in font to render the text in a fixed format on the screen (e.g. 24 lines x 80 columns for VGA).

Text mode is not obsolete as you imply. Modern operating systems typically have a GUI user interface, so the graphics mode is primarily what is used. But the text mode is still available in every modern graphics adapter since VGA has to be supported. The BIOS setup screens, boot programs, Linux without graphics and the Windows blue screen of death all still use text mode.

  • "the Windows blue screen of death all still use text mode", not since Windows 8. :) – Ƭᴇcʜιᴇ007 Oct 4 '14 at 4:24

"In the olden days of computers with DOS and stuff" characters were written to the screen by the video card. If a program wanted to write text to the screen, it would call a BIOS interrupt. The interrupt call would contain the instruction (write character) in the high byte of the CPU's AX register, and the character to be printed would be in the low byte. The BIOS would hand this off to the video card, and the video card would draw the character on the screen. It was all taken care of in hardware.

This hasn't been the case since DOS died off. Now, modern operating systems draw to the screen using pixels. The appearance of the characters on the screen is handled by a font renderer service so that programs can still write to the screen in simple terms without having to be concerned with "drawing" letters on the screen. But the font renderer still talks to the video hardware in terms of pixels.

  • 1
    Could you make your answer more generic, not specific to IBM PC's? Apple II and TRS-80 used the video card similarly, but not the same BIOS interface. – Barmar Oct 3 '14 at 22:45
  • 1
    @Barmar Don’t forget Atari! – JakeGould Oct 4 '14 at 3:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.