1 What you are looking at
Two rows of lamps and a row of switches. That is the entire machine as far as you are concerned. There is nothing else to look at and nothing else to type on.
The ADDRESS and DATA lamps are soldered straight to the processor's address and data buses. They are not showing you a value someone chose to display. They are showing you what the wires were doing, two million times a second.
The bottom eight switches set a byte. The DEPOSIT switch writes that byte into memory at the address the machine is currently pointing at. That is the whole input method.
M1 means it is fetching the first byte of an instruction. MEMR means it is reading memory. HLTA means it has stopped. You are watching the fetch-decode-execute cycle happen.
Why a running program looks like a blur. Because the lamps follow the bus, a running program does not display a tidy number. It displays a smear whose brightness is how often each wire was high. This panel reproduces that by sampling every bus cycle, which is why it looks like the photographs instead of like a debugger. Load a program below and watch.
2 A bit is a switch
Up is one, down is zero. That is not a metaphor for how computers store numbers. On this machine it is literally the storage.
Flip the bottom eight switches on the panel above and watch this change. On a phone you can drag your finger across them.
The panel groups its switches in threes, and the manual talks in octal, because three bits make exactly one octal digit. Reading 10 111 010 as 272 is something you can do in your head. Reading it as 186 is not. Hexadecimal won later, but in 1975 this machine was built for octal and the spacing between the switches still says so.
3 A byte is an instruction
The same eight switches that spell a number also spell a command. Which one it is depends entirely on whether the processor happens to read that byte while it is looking for an instruction.
The encoding is regular, and the regularity is the whole trick. In the range 100 to 177 octal, the middle three bits pick where a byte goes and the last three pick where it comes from. That is 63 different move instructions from one pattern you can hold in your head. The one slot that would have meant "move M to M" was pointless, so they gave it to HLT.
Try 01 000 111. That is MOV B,A: destination 000 is B, source 111 is A. Now change just the middle three bits and watch the destination change while everything else stays put.
4 A program is bytes in order
Put one instruction at address 0, the next at address 1, and keep going. Then tell the processor to start at 0. There is no more to it than that, and there never has been.
Make it add two and two
1 of 1
Loading.
Nothing here is faked. Every step drives the same switches you can drive yourself.
Memory, in octal
—
The machine has no sound hardware. It can still play you a tune. In April 1975, at the third meeting of the Homebrew Computer Club, Steve Dompier stood a transistor radio next to his Altair and played the room a song. What the radio picked up was the interference thrown off by the address bus, and by choosing how long each loop took, Dompier chose the pitch. Turn the radio on under the panel and run Music of a sort. On real hardware this is interference from actual wires, so an emulator normally has nothing to reproduce: the bus has to be modelled closely enough that there is something for a radio to hear in the first place. This one already samples every bus access to drive the lamps, so the tone is counted off address line A7 while the program runs. I have not found another browser Altair that does it, and would be glad to be shown one. Stop the machine and it stops mid-note.
5 Give it a keyboard
Toggling in fourteen bytes to add two numbers is a good way to understand a computer and a terrible way to use one. The fix, in 1975, was to bolt on a serial card and a Teletype, and then feed the machine a program that could read what you typed.
Below is a Model 33 Teletype attached to the machine's 88-2SIO serial card, and a language to run on it: Palo Alto Tiny BASIC, by Li-Chen Wang, 1976. It is 1,920 bytes. It fits in the same memory you have been depositing bytes into by hand.
Programs to run
Tap one and it types itself in. Everything here is verified to run on this interpreter.
Once it answers, try PRINT 2+2. Then try PRINT 355/113, which is the classic approximation of pi and here returns 3: Tiny BASIC has integers and nothing else. Floating point would not have fit. For something longer: 10 A=1, 20 A=A*3, 30 IF A<1000 GOTO 20, 40 PRINT A, then RUN.
This is not a recording. The BASIC you are typing at is real 8080 machine code, assembled from Li-Chen Wang's published source by a build step in this project's repo, executing on the same emulated processor the switches drive. Stop the machine on the panel above while BASIC is running and it will stop mid-sentence.
6 1976: two answers to the same question
The Altair created the first software business and the first software piracy problem in the same eighteen months. Both answers to it were written for this machine, within months of each other.
3 February 1976
Bill Gates publishes An Open Letter to Hobbyists in the Homebrew Computer Club newsletter. Altair BASIC was being passed around on paper tape faster than it was being bought.
Who can afford to do professional work for nothing? What hobbyist can put 3-man years into programming, finding all bugs, documenting his product and distribute for free?
Altair BASIC is still under copyright today. It is not in this page for that reason.
10 June 1976
Li-Chen Wang publishes Palo Alto Tiny BASIC in Dr. Dobb's Journal. The source listing opens with six lines, and the fifth is one of the first uses of the word in software:
TINY BASIC FOR INTEL 8080
VERSION 1.0
BY LI-CHEN WANG
10 JUNE, 1976
@COPYLEFT
ALL WRONGS RESERVED
The interpreter running above is Roger Rauskolb's October 1976 translation of version 2.0, which carries the same notice. It is here, five decades later, because it is the one anybody is still allowed to hand you.
Both men were right about something. Wang's joke became the legal machinery behind Linux and most of the internet. Gates's complaint became an industry worth trillions. Fifty years on, the argument has not been settled so much as split into two industries that need each other.
7 How this was built, and what is honest about it
A full Intel 8080 written for this page. It passes the four diagnostics the retrocomputing world uses to settle arguments: 8080PRE, TST8080, CPUTEST and 8080EXM. The last one takes a CRC of the result and every flag for each instruction group. All twenty-five groups match, over 23.8 billion cycles.
Li-Chen Wang's source sits in the repo and is assembled by an 8080 assembler also in the repo. You can read the source, run the build, and get the same 1,920 bytes. Nothing here is a binary blob of unknown origin.
Every bus cycle is sampled and each lamp is lit by how often its bit was set, rather than by the final value of the last instruction.
What is emulated, exactly
| Processor | Intel 8080, all 256 opcodes including the undocumented aliases (08-family as NOP, CB as JMP, D9 as RET, DD/ED/FD as CALL). Documented cycle counts, with the extra six charged on a taken conditional call or return. |
|---|---|
| Clock | 2 MHz, advanced in real-time slices. Timing is cycle-counted, not cycle-stepped: instructions retire whole, so sub-instruction bus phases (T-states) are not modelled. |
| Memory | A full 64K, all RAM. A real base machine shipped with 256 bytes. PROTECT covers the 256-byte block holding the current address. |
| Lamps | Sampled on every bus access, which means every fetch, operand read, memory read or write, and stack push or pop. Not sampled per instruction. |
| I/O | Sense switches at port 255. An 88-2SIO serial card at ports 16 and 17, status bit 0 for receive-ready and bit 1 for transmit-ready. No other ports are decoded; reads from them return zero. |
| Not emulated | Interrupts are implemented but nothing raises them, since no card here generates one. No disk, no cassette, no paper-tape reader, no real-time clock, and no S-100 bus timing. |
Where it departs from the original, on purpose
- The real machine has one row of sixteen switches. On a narrow screen this one splits them into the two banks people already name: sense switches and data switches. That split also costs the two things the wide layout gets right: the dashed leader lines from each lamp down to its switch, and the absence of DATA and ADDRESS headings, which the original never printed. Wrapped rows need naming, so on a phone they come back.
- The control switches sit beside the sixteen rather than on their own row below them, and SENSE SW. is not printed. On the original the switch that turns the machine on is at the far left of a fourth row; here it stays in reach without scrolling, which matters more.
- The WO lamp is active low on real hardware and printed with a bar over it, so it is lit during reads and dark on a write. That is correct here, and it looks wrong until you know.
- An original needed a STOP then RESET after power-on to reach a sane state. This one resets cleanly, because that quirk is a fault rather than a feature.
- SLOW throttles the clock so you can watch single cycles. The earliest machines left that switch position blank.
- The Teletype prints faster than 110 baud. Ten characters a second is historically right and unwatchable.
- There is no light mode. The machine sat in a dim room with red lamps and that is the only setting in which any of this looks correct, so the page commits to one and does not offer the other.
Sources
- Altair 8800 Operator's Manual, Part 3 — switch and lamp semantics.
- Kill the Bit — Dean McDaniel, 15 May 1975, original listing.
- 8080 CPU diagnostics — the suite used to verify the processor.
- Palo Alto Tiny BASIC 2.0 — Li-Chen Wang, translated to Intel mnemonics by Roger Rauskolb, 1976.
Built by Cisco Caceres. If you want the other end of the same story, you can train a language model in your browser.
8 Words used on this page
- Bus
- The bundle of wires the processor uses to name an address and move a byte. The lamps are soldered to it.
- Byte
- Eight bits. One setting of the bottom eight switches.
- Octal
- Base eight. Three bits make one octal digit, which is why the switches are grouped in threes.
- Opcode
- The byte that says which operation to perform. Everything after it is data for that operation.
- Program counter
- The processor's bookmark: the address it will read from next. RESET sets it to zero.
- Sense switches
- The upper eight address switches. A running program can read them at port 255, which is how Kill the Bit is played.
- M1
- The status lamp that lights while the processor is fetching the first byte of an instruction.
- HLTA
- Halt acknowledged. The processor has executed a HLT and stopped.
- 88-2SIO
- The serial card that let an Altair talk to a Teletype. Emulated here at ports 16 and 17.
- Paper tape
- How software arrived before disks: punched holes on a roll, read at ten characters a second.
- Copyleft
- Licensing that keeps a work freely shareable. The word appears in Li-Chen Wang's 1976 source listing.