TMS1000 Microprocessor Programming
← Project Index TMS1000 Microprocessor Programming

TMS1000 Microprocessor Programming

Programming vintage TMS1000-series 4-bit microcontrollers inside their own tight constraints -; a 43-instruction set, 1K of ROM, and 64×4 bits of RAM -; and learning to write assembly that respects those limits.

Archived Started: Summer 2025 Updated: Summer 2025

Overview

The TMS1000 (1974) was the first microcontroller to ship in real volume -; the brain inside calculators, Speak & Spell, and a generation of toys. This was the work of getting fluent in its world: a 4-bit accumulator, a handful of registers, a tiny instruction set, and barely any memory. The fun and the frustration are the same thing -; every byte and every cycle counts, and there's nowhere to hide a sloppy idea.

Background

Modern programming buries you in abstraction. Going back to a chip this small strips all of that away and makes the machine legible again -; you can hold the entire architecture in your head, which is exactly the point. The deeper motivation was educational: these chips are a perfect teaching object for how computers actually work underneath the layers.

This sits at the root of the TMS1100 emulator and curriculum work that grew out of it. Where this project was about getting fluent in the silicon, the follow-on turned that fluency into a cycle-accurate emulator and a set of lessons.

How It Works

The TMS1000 family is a Harvard-architecture, 4-bit design: separate ROM for program and RAM for data, a 4-bit accumulator, an X register addressing RAM pages and a Y register addressing words within them, and status logic that doubles as the basis for conditional execution. There's no conventional binary program counter -; it's a feedback shift register, so “the next instruction” follows an LFSR sequence rather than counting up by one.

43 instructions · 1K×8 ROM · 64×4 RAM · 4-bit ALU · LFSR program counter

Writing for it means thinking in nibbles, packing data tightly, and using the FLAG/status mechanism cleverly because branching isn't free. Output goes through R latches and a PLA that decodes the accumulator to segment patterns -; so even “show a digit” is a hardware-shaped problem, not a library call.

Current Status

Archived as a Summer 2025 exploration. It did its job -; it built the fluency that the TMS1100 emulator and curriculum project then built on top of. Treat this entry as the groundwork rather than the finished artifact.

  • Working comfort with the 43-instruction set and the family's memory model.
  • Reference notes on architecture, instruction encoding, and the LFSR program counter.
  • Folded forward into the TMS1100 emulator / teaching project.