Loofbourrow · Volume 2

The KIM-1 Brain — a 6502 Single-Board Computer in Command

Why a single-board computer

Embedding a microprocessor in a mobile robot in 1975 required a decision that most experimenters made by default: build a computer from discrete chips and wire, or find one ready-made. For Loofbourrow, the KIM-1 settled that question. As Chuck Peddle, the 6502’s chief designer, described the finished product: “It was a packaged, complete, plug-it-in-and-start-using-it product” (Bagnall, “Tim and Kim”). The board arrived assembled, documented to an unusual depth for its era, and capable of accepting a program and running it within minutes of receiving power. For a robot builder, that completeness eliminated an entire layer of the design problem.

The contrast with the Altair 8800 — released in the same year, 1975 — is instructive. The Altair “relied on switches for input and blinking lights for output. Any other interfaces had to be added by the user” (Bagnall, “Tim and Kim”). Writing a program for the Altair meant flipping binary switches row by row; reading results meant interpreting a row of LEDs as bit patterns. The KIM-1 provided a six-digit hexadecimal display and a 23-key keypad, which moved the human interface from pattern-reading to direct hex entry. Al Charpentier, a MOS Technology engineer who worked alongside the KIM-1’s development team, summarized the contrast tersely: “It was sort of the first fully packaged microcomputer that you could take out of the box, throw a power supply on, and do something with” (Bagnall, “Tim and Kim”).

As a single-board computer — all components on one printed-circuit board with no expansion slots required for basic operation — the KIM-1 also offered a pricing advantage that was real rather than theoretical. The Altair sold for $439 in kit form; the KIM-1 sold fully assembled for $245 (Bagnall, “Tim and Kim”). For a robot chassis that needed a brain and not a computer project unto itself, a self-contained board at that price was the practical choice.

Architecture

The KIM-1 was designed by John May under the direction of Don McLaughlin, MOS Technology’s founder and engineering manager for the project (Bagnall, “Tim and Kim”). The board is built around a MOS Technology 6502 microprocessor running at one megahertz. The 6502’s internal architecture — a relatively small but efficient instruction set, fast zero-page addressing, and a compact silicon die — allowed more work per clock cycle than competing 8-bit processors of the era. The robot’s assembly listings exploited this efficiency in the speed-control and steering routines; that code is examined in Vol. 7.

Memory

The KIM-1 provided one kilobyte of read/write memory, implemented as eight MOS Technology 6102 RAM chips (Bagnall, “Tim and Kim”). The capacity was understood at the time as the practical upper bound for a self-contained program on this class of hardware; the section “Living within the KIM-1,” below, returns to what that constraint meant for the robot’s code.

Supplementing the 6102 array were two MOS Technology 6530 RRIOT chips. Each 6530 integrated four functional blocks on a single die: a block of read/write RAM, a block of factory-programmed ROM, two 8-bit parallel I/O ports (designated PA and PB), and a programmable interval timer (Bagnall, “Tim and Kim”). The designation RRIOT — ROM, RAM, I/O, Timer — captures this multi-function role. By housing memory, I/O, and timing logic in the same package, the 6530 reduced chip count while providing the KIM-1 with the I/O infrastructure Loofbourrow’s robot would later use. The RAM areas inside the two 6530 chips were small but not zero; a contemporary programmer noted that they could serve as extra working storage when the main 1 KB was fully committed (Bagnall, “Tim and Kim”).

The TIM monitor

The ROM of the KIM-1’s 6530 RRIOTs held the machine’s monitor — a roughly 2-kilobyte program that Bagnall records was, like the earlier development kit, named TIM, the Terminal Interface Monitor (Bagnall, “Tim and Kim”). (The grey-ceramic 6530-004 that Bagnall describes was the chip supplied with the separate $30 TIM development kit, not a KIM-1 part; the part numbers of the KIM-1’s own 6530s are not given in the source.) TIM was originally written by Manny Lemas and Mike Quarter of Microcomputer Associates and subsequently adapted for the KIM-1 by John May, who reused the code that the TIM development kit had established (Bagnall, “Tim and Kim”). The monitor’s responsibilities included: driving the six-digit LED display, reading the 23-key keypad, operating the cassette-tape save and load routines, and managing the serial TTY interface. On every reset, a small bootstrap program started TIM automatically, presenting an address/data prompt on the display and waiting for keypad input (Bagnall, “Tim and Kim”). There was no boot sequence to navigate and no operating system to load.

A debugging aid of practical importance was the SST key. Labeling it “Single Step” on the keypad, the KIM-1 allowed an operator to press SST before GO and then watch the 6502 execute the loaded program one instruction at a time, pausing after each to allow memory and register inspection (Bagnall, “Tim and Kim”). For a robot program with tight timing relationships between motor commands and sensor reads, single-step tracing was the primary tool for diagnosing misbehavior.

Human interface

The KIM-1 carried two on-board human-interface elements, both mounted directly on the printed circuit board:

  • Six-digit seven-segment LED display. Each digit displayed a hexadecimal character (0–F), giving the operator a direct read of memory addresses and data bytes without a terminal. The TIM monitor used the display to echo the current address and data byte during entry; programs could write to the display for status output. The Interface Age listings for the robot used the display in this way (covered in Vol. 7).
  • 23-key keypad. John May selected a black keypad with 23 buttons (Bagnall, “Tim and Kim”). Bagnall names three of them explicitly: RS (reset), which restarted the monitor; GO, which executed a program from a given address; and SST (single step), the debugging key. The keypad supported direct hexadecimal entry and was the primary programming interface — every byte of a program was keyed in as hexadecimal and verified on the display. The full complement of monitor-command keys is not enumerated in the available source and is not detailed here.

This combination — display plus keypad — distinguished the KIM-1 from machines that required a terminal for any useful interaction. For a robot operating away from a workbench, the self-contained interface meant that a programmer could inspect memory, patch a byte, and re-run a routine without any attached peripheral.

Storage and serial interface

The KIM-1 provided two data-exchange interfaces beyond the keypad. The first was a built-in cassette-tape interface: programs saved to and loaded from standard audio cassette, and the tape protocol was uniform across all KIM-1 units, so a cassette recorded on one board would load on any standard KIM-1 (Bagnall, “Tim and Kim”). The tape interface made program distribution practical among the KIM-1 hobbyist community and allowed a robot programmer to maintain multiple versions of the control code on separate cassettes.

The second interface was a serial port for teletype machines and ASCII terminals. A notable feature of the KIM-1’s serial implementation was its auto-baud detection: the board automatically adjusted to the speed of the connected device, sparing the operator manual baud-rate configuration (Bagnall, “Tim and Kim”). For the robot application, the serial port was less relevant than the cassette interface and the keypad, but it remained available for debugging sessions involving a terminal.

Expansion connectors

Two 44-pin edge connectors along the board’s long edge exposed the 6502 address bus, data bus, and control signals, together with I/O port lines and power connections, to external circuitry (Bagnall, “Tim and Kim”). John May designed the KIM-1 with expansion in mind from the outset (Bagnall, “Tim and Kim”). The Interface Age article labels the edge connector through which the robot reached the 6530’s PA port pins the “microprocessor connector” (Interface Age, Apr. 1977, Diagram D; see “The I/O the robot used,” below). The bus connectors also served as the mechanical and electrical interface for the KIM Modular System expansion products — memory boards, motherboards, and prototyping cards — developed by third parties after the KIM-1’s commercial success became apparent (Bagnall, “Tim and Kim”), though those expansion products were not part of Loofbourrow’s documented Stage I build.

Specification summary

Table 1 — Specification summary

SpecificationValueSource
ProcessorMOS Technology 6502Bagnall, “Tim and Kim”
Clock rate1 MHzBagnall, “Tim and Kim”
RAM (main)1,024 bytes — eight MOS Technology 6102 chipsBagnall, “Tim and Kim”
Additional on-chip RAMSmall RAM areas in two MOS 6530 RRIOTsBagnall, “Tim and Kim”
ROM — monitorTIM (Terminal Interface Monitor), ~2 KB, in 6530 ROMBagnall, “Tim and Kim”
I/O controller chipsTwo MOS 6530 RRIOTs (ROM + RAM + I/O + timer, each)Bagnall, “Tim and Kim”
DisplaySix-digit seven-segment LEDBagnall, “Tim and Kim”
Keypad23-key hexadecimal keypadBagnall, “Tim and Kim”
Debug keySST (Single Step)Bagnall, “Tim and Kim”
StorageBuilt-in cassette-tape interfaceBagnall, “Tim and Kim”
Serial interfaceAuto-baud TTY / teletypeBagnall, “Tim and Kim”
ExpansionTwo 44-pin edge connectors (bus + I/O)Bagnall, “Tim and Kim”
Release price$245 (fully assembled, minus power supply)Bagnall, “Tim and Kim”
Release dateMid-1975Bagnall, “Tim and Kim”
Power switchNone — RS (reset) key onlyBagnall, “Tim and Kim”
Principal designerJohn May, under Don McLaughlinBagnall, “Tim and Kim”
Figure 1 — Top-down studio photograph of a KIM-1 printed circuit board (marked
Rev. 4 at upper left). The MOS Technology 6502 processor is visible at center,
marked with the Commodore "chicken-head…
Figure 1 — Top-down studio photograph of a KIM-1 printed circuit board (marked Rev. 4 at upper left). The MOS Technology 6502 processor is visible at center, marked with the Commodore "chicken-head" logo indicating a post-acquisition unit. A row of eight MOS 6102 RAM chips runs horizontally across the center. Two larger 6530 RRIOT chips occupy the upper portion of the board. The six-digit LED display (dark; board unpowered) sits at upper center-right, with the 23-key black keypad below it. The two 44-pin edge connectors run along the board's left edge. A metric scale bar at bottom indicates board length; the "KIM-1" logo appears at upper right. Source: vintage reference photograph.
Figure 2 — The KIM-1 board powered and in operation. The six-digit LED display
shows a hexadecimal value in red. A small external power supply is connected via
alligator leads. The MOS Technology "…
Figure 2 — The KIM-1 board powered and in operation. The six-digit LED display shows a hexadecimal value in red. A small external power supply is connected via alligator leads. The MOS Technology "MOS KIM-I" header and a partial "Microcomputer Module" documentation sheet are visible in the background. Source: vintage reference photograph.

The I/O the robot used

The KIM-1’s 6530 RRIOTs each provided two 8-bit parallel I/O ports, PA and PB, accessible from both the 6502’s address space and the board’s edge connectors. The robot used these port pins — via the microprocessor connector — as the primary electrical interface between the KIM-1 and the chassis electronics.

The analog front-end of the robot (Diagram D of the Interface Age article; covered in full in Vol. 5) consisted of a set of operational-amplifier comparators that converted analog signals — pot positions, joystick deflection — into digital logic levels. Diagram D labels four of these comparator outputs to specific pins on the microprocessor connector:

Table 2 — microprocessor connector

Connector pinPort pinRole as labeledSource
Pin 2PA 0Filtered RC path (1 K + 0.1 µF); no comparator shown — function not labeledInterface Age, Apr. 1977, Diagram D
Pin 36PA 5Comparator output → 6502 inputInterface Age, Apr. 1977, Diagram D
Pin 35PA 6Comparator output → 6502 inputInterface Age, Apr. 1977, Diagram D
Pin 34PA 7Comparator output → 6502 inputInterface Age, Apr. 1977, Diagram D

PA 5, PA 6, and PA 7 carry the comparator outputs into the 6502 as readable port-A bits; PA 0 reaches the connector through a 1 K / 0.1 µF path with no comparator shown, and its direction and function are not labeled in the diagram. The 6530’s PA port is readable under program control by the 6502 at its mapped address; the robot’s listings polled these bits to determine the current joystick and speed-pot state before issuing motor commands. The software treatment of the port reads — addresses, polling sequences, branching logic — is examined in Vol. 7.

The robot also drives three PA lines as outputs. Diagram B of the article (its inverter section; see Vol. 5) routes three KIM-1 port-A outputs through a 7404 hex inverter to the motor-command signals:

Table 3 — inverter to the motor-command signals

Connector pinPort pinRole as labeledSource
Pin 38PA 3→ 7404 → Speed ControlInterface Age, Apr. 1977, Diagram B
Pin 40PA 1→ 7404 → Steer LeftInterface Age, Apr. 1977, Diagram B
Pin 39PA 2→ 7404 → Steer RightInterface Age, Apr. 1977, Diagram B

Between Diagrams D and B, the robot’s documented use of the microprocessor connector spans seven of the eight port-A lines — PA 0, PA 1, PA 2, PA 3, PA 5, PA 6, and PA 7. What the Interface Age source does not document, and what is therefore not claimed here, is any use of PA 4 or of the PB port, the function of the PA 0 path (no comparator is shown on it), and the comparator input polarities. Vol. 5 examines the analog front-end and the 7404 inverters in detail; Vol. 7 examines the port operations visible in the assembly listings.

Living within the KIM-1

One kilobyte of read/write RAM is a constraint that does not merely limit the size of a program — it shapes its entire structure. A contemporary programmer who attempted to write a chess-playing program in the KIM-1’s 1 KB compared the task to “setting a table for twelve people on a stool” (Bagnall, “Tim and Kim”), and described the final result — 1,118 bytes used, with overflow into the 6530s’ own small RAM areas — as “quite a squeeze” (Bagnall, “Tim and Kim”). A robot control program has different requirements than a chess engine, but the constraint is the same: initialization code, sensor-read routines, decision logic, motor-command tables, and any stack or temporary storage must all coexist within 1,024 bytes.

The process of placing that code in the machine was itself manual. In a standard KIM-1 configuration without a resident assembler, the programmer translated 6502 mnemonics to hexadecimal opcodes by hand — opcode table, pencil, paper — then entered each byte through the 23-key keypad, one at a time, verifying the value on the six-digit display before moving to the next address. The TIM monitor supported this workflow directly: after entry, the operator set the program-counter address and pressed GO to run, or pressed SST first to single-step through the code. If execution misbehaved, the operator patched the relevant byte in place and re-ran. The Interface Age article presents the assembly listings in both mnemonic and hexadecimal form — the hex column is what would have been typed into the KIM-1 (the listings are examined in detail in Vol. 7).

Two items regarding the specific KIM-1 used in Microtron remain unclaimed by the available sources: the firmware revision of the TIM monitor in Loofbourrow’s unit, and the exact number of bytes the robot program occupied within the 1 KB. Vol. 7, which analyzes the assembly listings directly, is the appropriate place to speak to the latter.