Display Output

Display output connects a computer to human perception — translating internal binary states into visible symbols, numbers, or images that operators can read and act on.

Why This Matters

A computer without output is invisible. Early computers output results by operating physical switches, printing on paper tape, or lighting indicator lamps. These were adequate for the first generation of machines but cumbersome for interactive use. The evolution from toggle switches to LED displays to character terminals to graphical screens is the evolution of human-computer interaction.

Understanding display technology from fundamentals allows a rebuilder to implement output capability at whatever technology level is available — from individual indicator LEDs showing register contents, to 7-segment numeric displays, to full character-cell video output. Each level requires more hardware and software sophistication but provides proportionally more usable information.

Display output is also where much of the complexity of an operating system lives: managing what is shown on screen, scrolling text, handling cursor position. Understanding the display hardware makes the software requirements concrete.

LED and Lamp Indicators

The simplest computer output is a row of LEDs showing the binary state of a register or bus. An 8-bit register displayed this way shows 8 LEDs, each on or off, readable as a binary or hex value by anyone familiar with the representation.

Wiring: each LED connects through a current-limiting resistor (330Ω for 5V supply, giving approximately 10mA) to the register output bit. Logic high (5V) lights the LED; logic low (0V) extinguishes it. If the register output cannot source sufficient current, add a transistor buffer (NPN transistor with base through 1kΩ to the output, collector driving the LED, emitter to ground).

For hexadecimal display, group bits into nibbles: top 4 LEDs = high nibble, bottom 4 = low nibble. With practice, reading 8 binary LEDs as two hex digits becomes fast. Label each LED’s position value (128, 64, 32, 16, 8, 4, 2, 1) on the panel.

A front panel with 16 address LEDs, 8 data LEDs, and 8 status LEDs provides a complete register view. This was the standard interface on minicomputers of the 1960s (PDP-8, Altair 8800). It is tedious but fully functional.

Seven-Segment Displays

A 7-segment display contains seven LED segments (labeled a–g) arranged to show decimal digits 0–9 and some letters. An additional decimal point segment (dp) shows fractions.

Segment mapping for digit 0: segments a, b, c, d, e, f lit (all except g). For digit 1: only b, c. The full mapping:

  • 0: abcdef (g off)
  • 1: bc
  • 2: abdeg
  • 3: abcdg
  • 4: bcfg
  • 5: acdfg
  • 6: acdefg
  • 7: abc
  • 8: abcdefg
  • 9: abcdfg

A BCD to 7-segment decoder IC (74HC47 for common-anode, 74HC48 for common-cathode) converts a 4-bit BCD digit directly to the 7 segment drive signals, eliminating the need for custom decoding logic. Connect the 4 BCD input pins to the lower nibble of the data register; the 7 segment outputs drive the display segments through 330Ω resistors.

For multi-digit display, multiplex: cycle through digits rapidly (50–100 Hz per digit), displaying each for a fraction of a millisecond. Persistence of vision makes all digits appear simultaneously. A 4-digit display requires only one decoder IC and a 2-bit counter to select the active digit.

Character Generator and Text Display

For displaying text (letters, numbers, symbols), a character generator ROM stores the pixel patterns for each character. Each character cell is typically 5×7 or 8×8 pixels. A character code (0–127 for ASCII, or 0–255 for extended sets) indexes into the ROM to retrieve the pixel pattern for that character.

Video timing for a simple character terminal:

  • Raster scan: the display is drawn line by line, left to right, top to bottom
  • For 40 columns × 24 rows of 8×8 characters: 320 pixels wide × 192 pixels tall
  • Add horizontal blanking: 320 + 80 = 400 pixels per line at the pixel clock rate
  • Add vertical blanking: 192 + 38 = 230 lines per frame
  • At 60 Hz: 230 × 60 = 13,800 lines/second; each line = 400 pixels; pixel clock = 5.52 MHz

Video RAM: stores the character codes for all 40×24 = 960 character positions. On each video line, the display controller reads the character code for each column, looks up the row’s pixels in the character ROM, and shifts them out to the video output at the pixel clock rate.

This requires a video shift register, character ROM address calculation logic, and a sync pulse generator for horizontal and vertical sync. Complexity is moderate: approximately 10–15 standard ICs.

Practical First Display: Serial Terminal

The easiest useful display for a hand-built computer is a serial ASCII terminal — either a surplus terminal (VT100, VT220) connected via RS-232 serial, or a modern microcontroller programmed to receive ASCII and display it.

Serial terminal connection requires only 3 wires (TX, RX, GND) and implementation of the UART protocol (Universal Asynchronous Receiver/Transmitter). A UART transmits ASCII bytes as serial bit streams at standard baud rates (9600, 115200 baud).

A 16550 UART IC handles all serial protocol implementation in hardware. The CPU writes an ASCII byte to the UART’s transmit register; the UART serializes it and sends it. The terminal receives and displays the character. For simple output, only the transmit direction is needed — much simpler than bidirectional communication.

This approach allows the hand-built CPU to display human-readable text immediately without building any display hardware — just interface to existing equipment. As new display hardware is built, the UART interface remains useful for debugging and logging.