Docker image for running an Altair CP/M 2.2 + MP/M 2.1 computer.
To start the service locally, run:
docker run -p 8823:8823 rbanffy/altair-mpmWhen the service comes up, it listens to port 8823. The emulated machine boots under CP/M 2.2. In order to start MP/M, the first user to connect (running telnet localhost 8823) needs to run the MPM.COM program, which loads and starts the MP/M II environment:
Connected to the Altair 8800 (Z80) simulator Serial Input Output SIO device, line 0
64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.23, 2 HD, 20-Oct-02)
A>mpm
MP/M II V2.1 Loader
Copyright (C) 1981, Digital Research
Nmb of consoles = 4
Breakpoint RST # = 6
Memory Segment Table:
SYSTEM DAT FE00H 0100H
TMPD DAT FD00H 0100H
USERSYS STK FB00H 0200H
XIOSJMP TBL FA00H 0100H
RESBDOS SPR EE00H 0C00H
XDOS SPR CC00H 2200H
BNKXIOS SPR BF00H 0D00H
BNKBDOS SPR 9C00H 2300H
BNKXDOS SPR 9A00H 0200H
TMP SPR 9600H 0400H
LCKLSTS DAT 9300H 0300H
CONSOLE DAT 8F00H 0400H
-------------------------
MP/M II Sys 8F00H 7100H Bank 0
Memseg Usr 0000H B000H Bank 1
Memseg Usr 0000H B000H Bank 2
Memseg Usr 0000H B000H Bank 3
Memseg Usr 0000H B000H Bank 4
Memseg Usr 0000H B000H Bank 5
Memseg Usr 0000H B000H Bank 6
Memseg Usr 0000H B000H Bank 7
MP/M XIOS (SIMH ALTAIR 8800, V1.11, 2 HD, Banked, 20-Oct-02)
MP/M II V2.1
Copyright (C) 1982, Digital Research
0A>
At this point, you are in the MP/M prompt. It shows the current user number (from 0 to 15) and the currently active drive. Up to four users can connect at the same time, and will automatically be directed to different user areas.
| Drive | Contents |
|---|---|
| A: | System disk |
| B: | Miscellaneous applications |
| C: | Sorcim's SuperCalc 2 |
| D: | Ashton and Tate's dBase II |
| E: | MicroPro's WordStar Release 4 |
| F: | Microsoft's Multiplan 4 |
| G: | Miscellaneous games |
| H: | Borland's Turbo Pascal 3 IDE |
| I: | First hard drive, empty |
| J: | Second hard drive, empty |
All files in the disk images are in user area 0.
In order to create an empty 8GB (the largest size supported under CP/M) hard disk image, use the dd utility:
dd if=/dev/zero bs=1024 count=8192 | tr '\000' '\345' > empty.dskTo create an empty 8" floppy image, use:
dd if=/dev/zero bs=137 count=8128 | tr '\000' '\345' > empty.dsk
⚠️ These commands fail to create correct images on macOS.
The MP/M user's guide is available from http://www.gaby.de/cpm/manuals/mpm2ug.pdf.
Information specific to the Altair Z80 emulator can be found at http://bitsavers.trailing-edge.com/simh.trailing-edge.com_201206/pdf/altairz80_doc.pdf.
There is a huge archive at the *HUMONGOUS* CP/M Software Archives. There is a trick, however: loading the programs into the Altair image requires you to be running it locally (you can run it using altairz80 mpm-local or altairz80 mpm-docker and then telnet into the machine). Changes to the .dsk files will be on your local git tree and will be persisted into Docker images you build from it. Doing it with a running Altair inside a container will lose any changes the next time the container is redeployed.
This wouldn't be possible without the work of Peter Schorn and the contents of his website.
The Tektronix graphics example (useful for VT230/240/330+ terminals) is based on the VT330/VT340 Programmer Reference Manual, Tektronix 4010 and 4010-1 user's manual (page 3-8) and the Pascal examples at https://github.com/rricharz/tek4010-pidp8i/blob/master/Pascal/graph1.ps