PDP8 Emulator, by Doug Jones

This PDP8 Emulator was written by Douglas W. Jones at the University of Iowa. It is distributed as freeware, of uncertain function and uncertain utility. The current version is under developement, and this distribution of the emulator supports only the console TTY, high speed paper tape reader-punch, and RX01 dual 8" diskette drive.

This emulator supports two different console interfaces. One uses X-windows to draw a fair imitation of the front panel of a PDP-8/E computer; the other uses the console terminal for all front panel functions. Both versions use standard UNIX low-level I/O to access the console terminal, they are likely to be a bit difficult to port to non-UNIX systems. They run well enough on the UNIX boxes I've tried it on (a SPARC, an IBM RT and an IBM RS 6000).

Reports from Tom Karlsson indicate that it compiles and runs under Linux, except for one change in ttyaccess.c (noted in the comments at the head of that file).


A Painfully Brief User's Manual -- Dumb terminal version

To run the emulator, type pdp8e (the default name for the emulator), followed, optionally, by the name of the core image file to be used. Alternately, mark a core-image file as executable, and then run that file; it should automatically pull in the emulator.

The console "front panel" interface to this emulator is teletype based, using a small subset of ODT. The following commands work:

When the emulator is running, it will not return to the "front panel" until either the emulator hits a halt instruction or a sequence of 5 or so consecutive control C keys are typed (at any speed, but with no intervening characters of any other kind). Single control C keys go to whatever software is running on the emulator at the time.

When the machine halts, it will print "ppppp (aaaa", the current program counter and accumulator contents.

The core is considered to be a device, and files may be mounted on it the same way as on any other device.

A Painfully Brief User's Manual -- X-Windows version

To run the emulator, type pdp8e (the default name for the emulator), followed, optionally, by the name of the core image file to be used. Alternately, mark a core-image file as executable, and then run that file; it should automatically pull in the emulator.

A 630x300 window will appear on the screen, with artwork resembling the front panel of a PDP-8/E. (known bug: If the artwork fails to appear, iconify the window and then de-iconify it, or drag another window over it, anything to force an expose event).

Along the bottom of the window are the switches of the PDP-8/E front panel (click the mouse on one to toggle or press it). In the center are the address and data display lights, and on top is a bar that toggles between an approximation of DEC's original artwork and a menu of emulator control functions. Clicking the mouse in this area allows you to see and change what files are mounted on what emulated devices, to change the rate at which the console light display is updated, and and to exit the emulator.

In general, the left mouse button (button 1) is used for emulator actions, and clicking any other mouse button is interpreted as a help request. The help features of the front panel should be sufficient to explain how to use the front panel controls.

As a rule, while the emulator is running, the command window from which the pdp8e command was entered will be used to emulate the console teletype, but you can also shift the input focus to the front panel window, and anything you type there will also be interpreted as console teletype input. This is useful on systems which insist on mapping CR to LF no matter what.


File Formats

Core files are in a simple variant of Charles Lasner's .IPL file format. See the comments in the file utility.c for details.

Paper-tape files are 8 bit wide byte streams. It is up to the software running on the emulator to interpret them as ASCII, BIN, RIM or any other format.

RX01 diskette files must begin with the 4 letters "rx01" and they must contain at least 256 characters. The next 251 bytes following the "rx01" header are used for the bit-vector indicating which sectors are marked as deleted (not that this is used anywhere). The last of the 256 header bytes is reserved for the hardware interleave factor (and it is currently ignored). The 128 byte sectors of the file follow this header, in ascending order, starting with track 0, sector 1, then track 0 sector 2 and so on up to track 76 sector 26. Format-time interleaving (which can't be done on the RX01 drive), if it is ever supported, will not change the layout of the sectors, only the access times.


A Painfully Brief Installation Manual

Once you have unpacked the shell archive, on a UNIX system, all you should have to do is type make and the emulator will be compiled and linked under the name pdp8e.

If, on a real machine, you would select an option by plugging in or unplugging a board on the OMNIBUS backplane, you'd do it on the emulator by editing the Makefile. The most important option this gives you is the option of using the KC8E X-windows front panel or the KC8M teletype based front panel emulator. Removing peripherals won't change the speed of the emulator, but removing the KM8E memory management unit will make emulation just a bit faster.

Any options you would have to change by fiddling with jumpers on a device interface board on the real machine are selected in this emulator by editing the source code. Specifically, the emulated baud rate of the console terminal can be changed this way.

This emulator is unkind to timesharing systems! It runs as an infinite loop, with no provision for reducing its load on the CPU while it waits for I/O operations to finish. Other users will slow the emulator down, and you'll bother them by taking every bit of CPU time you can get for as long as you run it.

You can adjust the effective speed of all IO devices by tweeking the fudge factor in the makefile. As distributed, the console terminal is set to run at 110 baud, and you should tweek this fudge factor to make it run at about 10 characters per second before you tweek any other device timings. This will make all devices run at an apparent speed close to their real speeds on DEC's hardware. Having done this, feel free to up the baud rate on the console terminal to 9600 baud.

The makefile includes a debugging option. With this selected, a new front panel command is exposed that will force the printing of a histogram showing which instructions have been executed since the last such report and which memory locations have been fetched from.