| 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 | |