Front Panel · the machine itself is one page back.

Two pages. Print them back to back, or one each side of a class. Everything on them is generated from the emulator, so the card and the machine cannot disagree.

The Altair 8800 panel, on one page

Sixteen switches along the bottom, and every one of them is a bit. Up is 1, down is 0. The eight on the right, A7 to A0, are the data switches: they are what DEPOSIT writes. All sixteen are the address switches: they are what EXAMINE looks at. The left eight, A15 to A8, double as the sense switches, and a program reads them with IN 377.

Addresses are read as two bytes, high then low, three octal digits each: address 000 000 is the first byte of memory and 377 377 is the last. Front panel work is done in octal because the switches are grouped in threes on the panel itself.

One byte on the eight data switches: 072 octal, which is LDA addr. Up is 1, down is 0.
D7
0
D6
0
D5
1
D4
1
D3
1
D2
0
D1
1
D0
0
2 bits → 03 bits → 73 bits → 2

So the top octal digit of a byte is never more than 3. A byte whose first digit is 4 has been misread.

The control switches

The nine control switches, left to right along the bottom row.
Up / downWhat it does
OFF / ONDown is on. Memory wakes holding a random pattern and loses it all on the way back up. It stays put.
STOP / RUNDown runs, up stops. Only RESET works while it is running. It springs back.
SINGLE STEP / SLOWUp runs one instruction. Down is this page’s own addition, a few instructions a second. It springs back.
EXAMINE / EXAMINE NEXTUp shows what is at the address switches. Down moves on one address. It springs back.
DEPOSIT / DEPOSIT NEXTUp writes the eight data switches there. Down moves on one, then writes. It springs back.
RESET / CLRUp sends the program counter to zero. Down clears the boards in the cage. It springs back.
PROTECT / UNPROTECTUp write-protects the board holding the address on show. Down releases it. It springs back.
AUX / AUXNever wired to anything. The panel says so by drawing both of them black. It springs back.
AUX / AUXNever wired either, like the one beside it. It springs back.

The lamps

The status lamps, the top left row on the panel.
LampLit when
INTEInterrupts are enabled.
PROTThe memory on show is write-protected.
MEMRThe processor is reading memory.
INPIt is reading an input port.
M1This is the first cycle of an instruction: the byte on the data lamps is an opcode.
OUTIt is writing to an output port.
HLTAIt has halted. Only RESET or an interrupt gets it going again.
STACKThe address on show is a stack address.
WOLow while the processor writes. It is lit for a read, which is most of the time.
INTAn interrupt is being acknowledged.

One to try

Add two numbers: 14 bytes, address then byte, both octal.
AddressByteInstruction
000 000072LDA 0010h
000 001020
000 002000
000 003107MOV B,A
000 004072LDA 0011h
000 005021
000 006000
000 007200ADD B
000 010062STA 0012h
000 011022
000 012000
000 013166HLT
000 020002DB 2
000 021002DB 2

Putting a program in

  1. Power on, stop the machine, then RESET.
  2. Set the address switches to the first address and press EXAMINE.
  3. Set the eight data switches to the first byte and press DEPOSIT.
  4. Set the next byte and press DEPOSIT NEXT. Repeat to the end.
  5. Then go back: first address, EXAMINE, read the data lamps against the listing, EXAMINE NEXT through the lot. MITS gave that check five of the twenty-one steps in their own loading procedure (Altair BASIC Reference Manual, 1975, Appendix A), because one wrong byte in twenty gives a program that does something else and no clue which byte.
  6. RESET, then RUN.

All 256 bytes, and what the processor does with each

Octal, then the instruction. addr means two bytes follow, low byte first; data or port means one byte follows. A star marks the twelve encodings Intel left out of the manual that the silicon runs anyway, each an alias of the instruction beside it. Read down the columns: each one is 040 octal wide.

000 NOP040 NOP*100 MOV B,B140 MOV H,B200 ADD B240 ANA B300 RNZ340 RPO
001 LXI B,addr041 LXI H,addr101 MOV B,C141 MOV H,C201 ADD C241 ANA C301 POP B341 POP H
002 STAX B042 SHLD addr102 MOV B,D142 MOV H,D202 ADD D242 ANA D302 JNZ addr342 JPO addr
003 INX B043 INX H103 MOV B,E143 MOV H,E203 ADD E243 ANA E303 JMP addr343 XTHL
004 INR B044 INR H104 MOV B,H144 MOV H,H204 ADD H244 ANA H304 CNZ addr344 CPO addr
005 DCR B045 DCR H105 MOV B,L145 MOV H,L205 ADD L245 ANA L305 PUSH B345 PUSH H
006 MVI B,data046 MVI H,data106 MOV B,M146 MOV H,M206 ADD M246 ANA M306 ADI data346 ANI data
007 RLC047 DAA107 MOV B,A147 MOV H,A207 ADD A247 ANA A307 RST 0347 RST 4
010 NOP*050 NOP*110 MOV C,B150 MOV L,B210 ADC B250 XRA B310 RZ350 RPE
011 DAD B051 DAD H111 MOV C,C151 MOV L,C211 ADC C251 XRA C311 RET351 PCHL
012 LDAX B052 LHLD addr112 MOV C,D152 MOV L,D212 ADC D252 XRA D312 JZ addr352 JPE addr
013 DCX B053 DCX H113 MOV C,E153 MOV L,E213 ADC E253 XRA E313 JMP* addr353 XCHG
014 INR C054 INR L114 MOV C,H154 MOV L,H214 ADC H254 XRA H314 CZ addr354 CPE addr
015 DCR C055 DCR L115 MOV C,L155 MOV L,L215 ADC L255 XRA L315 CALL addr355 CALL* addr
016 MVI C,data056 MVI L,data116 MOV C,M156 MOV L,M216 ADC M256 XRA M316 ACI data356 XRI data
017 RRC057 CMA117 MOV C,A157 MOV L,A217 ADC A257 XRA A317 RST 1357 RST 5
020 NOP*060 NOP*120 MOV D,B160 MOV M,B220 SUB B260 ORA B320 RNC360 RP
021 LXI D,addr061 LXI SP,addr121 MOV D,C161 MOV M,C221 SUB C261 ORA C321 POP D361 POP PSW
022 STAX D062 STA addr122 MOV D,D162 MOV M,D222 SUB D262 ORA D322 JNC addr362 JP addr
023 INX D063 INX SP123 MOV D,E163 MOV M,E223 SUB E263 ORA E323 OUT port363 DI
024 INR D064 INR M124 MOV D,H164 MOV M,H224 SUB H264 ORA H324 CNC addr364 CP addr
025 DCR D065 DCR M125 MOV D,L165 MOV M,L225 SUB L265 ORA L325 PUSH D365 PUSH PSW
026 MVI D,data066 MVI M,data126 MOV D,M166 HLT226 SUB M266 ORA M326 SUI data366 ORI data
027 RAL067 STC127 MOV D,A167 MOV M,A227 SUB A267 ORA A327 RST 2367 RST 6
030 NOP*070 NOP*130 MOV E,B170 MOV A,B230 SBB B270 CMP B330 RC370 RM
031 DAD D071 DAD SP131 MOV E,C171 MOV A,C231 SBB C271 CMP C331 RET*371 SPHL
032 LDAX D072 LDA addr132 MOV E,D172 MOV A,D232 SBB D272 CMP D332 JC addr372 JM addr
033 DCX D073 DCX SP133 MOV E,E173 MOV A,E233 SBB E273 CMP E333 IN port373 EI
034 INR E074 INR A134 MOV E,H174 MOV A,H234 SBB H274 CMP H334 CC addr374 CM addr
035 DCR E075 DCR A135 MOV E,L175 MOV A,L235 SBB L275 CMP L335 CALL* addr375 CALL* addr
036 MVI E,data076 MVI A,data136 MOV E,M176 MOV A,M236 SBB M276 CMP M336 SBI data376 CPI data
037 RAR077 CMC137 MOV E,A177 MOV A,A237 SBB A277 CMP A337 RST 3377 RST 7

Sources