Altair 8800 Simulator | |
===================== | |
1. Background. | |
The MITS (Micro Instrumentation and Telemetry Systems) Altair 8800 | |
was announced on the January 1975 cover of Popular Electronics, which | |
boasted you could buy and build this powerful computer kit for only $397. | |
The kit consisted at that time of only the parts to build a case, power | |
supply, card cage (18 slots), CPU card, and memory card with 256 *bytes* of | |
memory. Still, thousands were ordered within the first few months after the | |
announcement, starting the personal computer revolution as we know it today. | |
Many laugh at the small size of the that first kit, noting there | |
were no peripherals and the 256 byte memory size. But the computer was an | |
open system, and by 1977 MITS and many other small startups had added many | |
expansion cards to make the Altair quite a respectable little computer. The | |
"Altair Bus" that made this possible was soon called the S-100 Bus, later | |
adopted as an industry standard, and eventually became the IEE-696 Bus. | |
2. Hardware | |
We are simulating a fairly "loaded" Altair 8800 from about 1977, | |
with the following configuration: | |
device simulates | |
name(s) | |
CPU Altair 8800 with Intel 8080 CPU board, 62KB | |
of RAM, 2K of EPROM with start boot ROM. | |
2SIO MITS 88-2SIO Dual Serial Interface Board. Port 1 | |
is assumed to be connected to a serial "glass | |
TTY" that is your terminal running the Simulator. | |
PTR Paper Tape Reader attached to port 2 of the | |
2SIO board. | |
PTP Paper Tape Punch attached to port 2 of the | |
2SIO board. This also doubles as a printer | |
port. | |
DSK MITS 88-DISK Floppy Disk controller with up | |
to eight drives. | |
2.1 CPU | |
We have 2 CPU options that were not present on the original | |
machine but are useful in the simulator. We also allow you to select | |
memory sizes, but be aware that some sample software requires the full | |
64K (i.e. CP/M) and the MITS Disk Basic and Altair DOS require about | |
a minimum of 24K. | |
SET CPU 8080 Simulates the 8080 CPU (normal) | |
SET CPU Z80 Simulates the later Z80 CPU [At the present time | |
this is not fully implemented and is not to be | |
trusted with real Z80 software] | |
SET CPU ITRAP Causes the simulator to halt if an invalid 8080 | |
Opcode is detected. | |
SET CPU NOITRAP Does not stop on an invalid Opcode. This is | |
how the real 8080 works. | |
SET CPU 4K | |
SET CPU 8K | |
SET CPU 12K | |
SET CPU 16K | |
...... | |
SET CPU 64K All these set various CPU memory configurations. | |
The 2K EPROM at the high end of memory is always | |
present and will always boot. | |
The BOOT EPROM card starts at address 177400. Jumping to this address | |
will always boot drive 0 of the floppy controller. If no valid bootable | |
software is present there the machine crashes. This is historically | |
accurate behavior. | |
The real 8080, on receiving a HLT (Halt) instruction, freezes the processor | |
and only an interrupt or CPU hardware reset will restore it. The simulator | |
is alot nicer, it will halt but send you back to the simulator command line. | |
CPU Registers include the following: | |
name size comments | |
PC 16 The Program Counter | |
A 8 The accumulator | |
BC 16 The BC register pair. Register B is the high | |
8 bits, C is the lower 8 bits | |
DE 16 The DE register pair. D is the top 8 bits, E is | |
the bottom. | |
HL 16 The HL register pair. H is top, L is bottom. | |
C 1 Carry flag. | |
Z 1 Zero Flag. | |
AC 1 Auxillary Carry flag. | |
P 1 Parity flag. | |
S 1 Sign flag. | |
SR 16 The front panel switches. | |
BREAK 16 Breakpoint address (377777 to disable). | |
WRU 8 The interrupt character. This starts as 005 | |
(ctrl-E) but some Altair software uses this | |
keystroke so best to change this to something | |
exotic such as 035 (which is Ctl-]). | |
2.2 The Serial I/O Card (2SIO) | |
This simple programmed I/O device provides 2 serial ports to the | |
outside world, which could be hardware jumpered to support RS-232 plugs or a | |
TTY current loop interface. The standard I/O addresses assigned by MITS | |
was 20-21 (octal) for the first port, and 22-23 (octal) for the second. | |
We follow this standard in the Simulator. | |
The simulator directs I/O to/from the first port to the screen. The | |
second port reads from an attachable "tape reader" file on input, and writes | |
to an attachable "punch file" on output. These files are considered a | |
simple stream of 8-bit bytes. | |
2.3 The 88-DISK controller. | |
The MITS 88-DISK is a simple programmed I/O interface to the MITS | |
8-inch floppy drive, which was basically a Pertec FD-400 with a power | |
supply and buffer board builtin. The controller supports neither interrupts | |
nor DMA, so floppy access required the sustained attention of the CPU. | |
The standard I/O addresses were 10, 11, and 12 (octal), and we follow the | |
standard. Details on controlling this hardware are in the altair_dsk.c | |
source file. | |
3. Sample Software | |
Running an Altair in 1977 you would be running either MITS Disk | |
Extended BASIC, or the brand new and sexy CP/M Operating System from Digital | |
Research. Or possibly, you ordered Altair DOS back when it was promised in | |
1975, and are still waiting for it to be delivered in early 1977. | |
We have samples of all three for you to check out. We can't go into | |
the details of how they work, but we'll give you a few hints. | |
3.1 CP/M Version 2.2 | |
This version is my own port of the standard CP/M to the Altair. | |
There were some "official" versions but I don't have them. None were | |
endorsed or sold by MITS to my knowledge, however. | |
To boot CP/M: | |
sim> attach dsk0 altcpm.dsk | |
sim> go 177400 | |
62K CP/M VERSION 2.2 (ALTAIR 8800) | |
A>DIR | |
CP/M feels like DOS, sort of. DIR will work. I have included all | |
the standard CP/M utilities, plus a few common public-domain ones. I also | |
include the sources to the customized BIOS and some other small programs. | |
TYPE will print an ASCII file. DUMP will dump a binary one. LS is a better | |
DIR than DIR. ASM will assemble .ASM files to Hex, LOAD will "load" them to | |
binary format (.COM). ED is a simple editor, #A command will bring the | |
source file to the buffer, T command will "type" lines, L will move lines, | |
E exits the editor. 20L20T will move down 20 lines, and type 20. Very | |
DECish. DDT is the debugger, SUBMIT is a batch-type command processor. | |
A sample batch file that will assemble and write out the bootable CP/M | |
image (on drive A) is "SYSGEN.SUB". To run it, type "SUBMIT SYSGEN". | |
3.2 MITS Disk Extended BASIC Version 4.1 | |
This was the commonly used software for serious users of the Altair | |
computer. It is a powerful (but slow) BASIC with some extended commands to | |
allow it to access and manage the disk. There was no operating system it | |
ran under. To boot: | |
sim> attach dsk0 mbasic.dsk | |
sim> go 177400 | |
MEMORY SIZE? [return] | |
LINEPRINTER? C [return] | |
HIGHEST DISK NUMBER? 0 [return] (3 here = 4 drive system) | |
NUMBER OF FILES? 3 [return] | |
NUMBER OF RANDOM FILES? 2 [return] | |
44297 BYTES FREE | |
ALTAIR BASIC REV. 4.1 | |
[DISK EXTENDED VERSION] | |
COPYRIGHT 1977 BY MITS INC. | |
OK | |
mount 0 | |
OK | |
files | |
3.3 Altair DOS Version 1.0 | |
This was long promised but not delivered until it was almost | |
irrelevant. A short attempted tour will reveal it to be a dog, far inferior | |
to CP/M. To boot: | |
sim> attach dsk0 altdos.dsk | |
sim> go 177400 | |
MEMORY SIZE? 64 [return] | |
INTERRUPTS? N [return] | |
HIGHEST DISK NUMBER? 0 [return] (3 here = 4 drive system) | |
HOW MANY DISK FILES? 3 [return] | |
HOW MANY RANDOM FILES? 2 [return] | |
056769 BYTES AVAILABLE | |
DOS MONITOR VER 1.0 | |
COPYRIGHT 1977 BY MITS INC | |
.mnt 0 | |
.dir 0 | |