To: Users | |
From: Bob Supnik | |
Subj: Simulator Usage, V2.6b | |
Date: 15-Sep-01 | |
COPYRIGHT NOTICE | |
The following copyright notice applies to both the SIMH source and binary: | |
Original code published in 1993-2001, written by Robert M Supnik | |
Copyright (c) 1993-2001, Robert M Supnik | |
Permission is hereby granted, free of charge, to any person obtaining a | |
copy of this software and associated documentation files (the "Software"), | |
to deal in the Software without restriction, including without limitation | |
the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
and/or sell copies of the Software, and to permit persons to whom the | |
Software is furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | |
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
Except as contained in this notice, the name of Robert M Supnik shall not | |
be used in advertising or otherwise to promote the sale, use or other dealings | |
in this Software without prior written authorization from Robert M Supnik. | |
This memorandum documents the PDP-8, PDP-11, PDP-1, other 18b PDP, Nova, | |
IBM 1401, HP 2100, Interdata 4, and PDP-10 simulators. These simulators are | |
freeware; refer to the license terms above for conditions of use. Support is | |
not available. The best way to fix problems or add features is to read and | |
modify the sources yourself. Alternately, you can send Internet mail to | |
bsupnik@us.inter.net, but a response is not guaranteed. | |
The simulators use a common command interface. The memorandum first | |
describes the common features of the command interface and then provides | |
information on each of the individual simulators. | |
1. Compiling And Running A Simulator | |
The simulators have been tested on VAX VMS, Alpha VMS, Alpha UNIX, Intel | |
FreeBSD, Intel LINUX, Windows 9x/Me/NT/2000 (Visual C++ environment), | |
Macintosh 9 and X (CodeWarrior environment), and OS/2. Porting to other | |
environments will require changes to the operating system dependent code | |
in scp_tty.c and scp_sock.c. | |
To compile the simulators on VMS, use these commands (note that separate | |
compilations are required for each of the 18b PDP's): | |
$ cc pdp8_*.c,scp.c,scp_tty.c ! PDP-8 | |
$ link/exec=pdp8 pdp8_*.obj,scp.obj,scp_tty.obj | |
$ cc pdp11_*.c,scp.c,scp_tty.c ! PDP-11 | |
$ link/exec=pdp11 pdp11_*.obj,scp.obj,scp_tty.obj | |
$ cc nova_*.c,scp.c,scp_tty.c ! Nova | |
$ link/exec=nova nova_*.obj,scp.obj,scp_tty.obj | |
$ cc pdp1_*.c,scp.c,scp_tty.c ! PDP-1 | |
$ link/exec=pdp1 pdp1_*.obj,scp.obj,scp_tty.obj | |
$ cc/define=PDP{4,7,9,15} pdp18b_*.c,scp.c,scp_tty.c | |
$ link/exec=pdp{4,7,9,15} pdp18b_*.obj,scp.obj,scp_tty.obj | |
$ cc i1401_*.c,scp.c,scp_tty.c ! IBM 1401 | |
$ link/exec=i1401 i1401_*.obj,scp.obj,scp_tty.obj | |
$ cc hp2100_*.c,scp.c,scp_tty.c ! HP 2100 | |
$ link/exec=hp2100 hp2100_*.obj,scp.obj,scp_tty.obj | |
$ cc id4_*.c,scp.c,scp_tty.c ! Interdata 4 | |
$ link/exec=id4 id4_*.obj,scp.obj,scp_tty.obj | |
On version of VMS prior to 6.2, the simulators must then be defined as | |
foreign commands so that they can be started by name. | |
To compile the simulators on Alpha UNIX or any UNIX variant which supports | |
the POSIX compliant TERMIOS interface (including Linux and Mac OS X), use | |
the following commands (note that separate compilations are required for | |
each of the 18b PDP's): | |
% cc pdp8_*.c scp*.c -lm -o pdp8 | |
% cc pdp11_*.c scp*.c -lm -o pdp11 | |
% cc nova_*.c scp*.c -lm -o nova | |
% cc pdp1_*.c scp*.c -o pdp1 | |
% cc -DPDP{4,7,9,15} pdp18b_*.c scp*.c -lm -o pdp{4,7,9,15} | |
% cc i1401_*.c scp*.c -o i1401 | |
% cc hp2100_*.c scp*.c -o hp2100 | |
% cc id4_*.c scp*.c -o id4 | |
These commands should work with most UNIX variants. If your UNIX only | |
supports the old BSD terminal interface, add -DBSDTTY to each command. | |
If your UNIX automatically includes the math library, omit -lm from | |
the command line. | |
The PDP-10 simulator requires 64b support in the simulator and in the | |
simulator control package (SCP). To turn on 64b support, add the symbol | |
USE_INT64 to the command line: | |
% cc -DUSE_INT64 pdp10_*.c,scp*.c -lm -o pdp10 | |
Since 64b integer declarations vary, sim_defs.h has conditional | |
declarations for Windows (_int64) and Digital UNIX (long). The default | |
is GNU C (long long). If your compiler uses a different convention, | |
you will have to edit sim_defs.h and modify the conditionals. | |
To compile the simulators on Windows 9x/ME/NT/2000 and Visual C++, | |
each simulator must be set up as a separate project. Under the VC++ | |
file menu, select New, select Project Workspace, select Console | |
Application, and type in the name of the simulator. In the project | |
files view, select Add Files To Project and add in all the files for | |
that simulator (e.g., all files beginning nova_ for the Nova), plus | |
sim_defs.h, scp.c, and scp_tty.c. If the project requires the DZ11, | |
also add in scp_sock.h and scp_sock.c. If the project requires a | |
command line switch, add the switches to the C/C++ tab of the | |
Configuration dialog. The simulator should then build properly. | |
To start the simulator, simply type its name. The simulator takes | |
one optional argument, a startup command file. If specified, this | |
file should contain a series of non-interactive simulator commands, | |
one per line. These command can be used to set up standard parameters, | |
for example, disk sizes. | |
% pdp8 <startup file>(cr) or | |
% pdp11 <startup file>(cr) or | |
% nova <startup file>(cr) or | |
% pdp1 <startup file>(cr) or | |
% pdp{4,7,9,15} <startup file>(cr) or | |
% i1401 <startup file>(cr) or | |
% hp2100 <startup file>(cr) or | |
% id4 <startup file>(cr) or | |
% pdp10 <startup file>(cr) | |
The simulator types out its name and version, executes the commands | |
in the startup file, if any, and then prompts for input with | |
sim> | |
2. Simulator Conventions | |
A simulator consists of a series of devices, the first of which is always | |
the CPU. A device consists of named registers and one or more numbered | |
units. Registers correspond to device state, units to device address | |
spaces. Thus, the CPU device might have registers like PC, ION, etc, | |
and a unit corresponding to main memory; a disk device might have | |
registers like BUSY, DONE, etc, and units corresponding to individual | |
disk drives. Except for main memory, device address spaces are simulated | |
as unstructured binary disk files in the host file system. The SHOW CONFIG | |
command displays the simulator configuration. | |
A simulator keeps time in terms of arbitrary units, usually one time unit | |
per instruction executed. Simulated events (such as completion of I/O) | |
are scheduled at some number of time units in the future. The simulator | |
executes synchronously, invoking event processors when simulated events | |
are scheduled to occur. Even asynchronous events, like keyboard input, | |
are handled by polling at synchronous intervals. The SHOW QUEUE command | |
displays the simulator event queue. | |
3. Commands | |
Simulator commands consist of a command verb, optional switches, and optional | |
arguments. Switches take the form: | |
-<letter>{<letter>...} | |
Multiple switches may be specified separately or together: -abcd or | |
-a -b -c -d are treated identically. Verbs, switches, and other | |
input (except for file names) are case insensitive. | |
Any command beginning with semicolon (;) is considered a comment and ignored. | |
3.1 Loading and Saving Programs | |
The LOAD command (abbreviation LO) loads a file in binary paper-tape | |
loader format: | |
sim> load <filename> {implementation options}(cr) | |
The number of formats supported is implementation specific. Options | |
(such as load within range) are also implementation specific. | |
The DUMP command (abbreviation DU) dumps memory in binary paper- | |
tape loader format: | |
sim> dump <filename> {implementation options}(cr) | |
The number of formats supported is implementation specific. Options | |
(such as dump within range) are also implementation specific. | |
3.2 Saving and Restoring State | |
The SAVE command (abbreviation SA) save the complete state of the | |
simulator to a file. This includes the contents of main memory and | |
all registers, and the I/O connections of devices: | |
sim> save <filename>(cr) | |
The RESTORE command (abbreviation REST, alternately GET) restores a | |
previously saved simulator state: | |
sim> restore <filename>(cr) | |
Note: SAVE file format compresses zeroes to minimize file size. | |
3.3 Resetting Devices | |
The RESET command (abbreviation RE) resets a device or the entire | |
simulator to a predefined condition: | |
sim> RESET(cr) -- reset all devices | |
sim> RESET ALL(cr) -- reset all devices | |
sim> RESET <device>(cr) -- reset specified device | |
Typically, RESET stops any in-progress I/O operation, clears any | |
interrupt request, and returns the device to a quiescent state. It | |
does not clear main memory or affect I/O connections. | |
3.4 Connecting and Disconnecting Devices | |
Except for main memory, simulated unit address spaces are simulated as | |
unstructured binary disk files in the host file system. Before using a | |
simulated unit the user must specify the file to be accessed by that | |
unit. The ATTACH (abbreviation AT) command associates a unit and a file: | |
sim> ATTACH <device><unit number> <filename>(cr) | |
If the file does not exist, it is created, and an appropriate message | |
is printed. | |
The DETACH (abbreviation DET) command breaks the association between a | |
unit and a file and closes the file: | |
sim> DETACH ALL(cr) -- detach all units | |
sim> DETACH <device><unit number>(cr) -- detach specified unit | |
The EXIT command performs an automatic DETACH ALL. | |
3.5 Examining and Changing State | |
There are four commands to examine and change state: | |
EXAMINE (abbreviated E) examines state | |
DEPOSIT (abbreviated D) changes state | |
IEXAMINE (interactive examine, abbreviated IE) examines state | |
and allows the user to interactively change it | |
IDEPOSIT (interactive deposit, abbreviated ID) allows the user | |
to interactively change state | |
All four commands take the form | |
command {modifiers} <state list> | |
Deposit must also include a deposit value at the end of the command. | |
There are four kinds of modifiers: switches, device/unit name, search | |
specifiers, and for EXAMINE, output file. Switches have been described | |
previously. A device/unit name identifies the device and unit whose | |
address space is to be examined or modified. If no device is specified, | |
the CPU (main memory)is selected; if a device but no unit is specified, | |
unit 0 of the device is selected. | |
Search specifiers provide criteria for testing addresses or registers | |
to see if they should be processed. A specifier consists of a logical | |
operator, a relational operator, or both, optionally separated by spaces. | |
{<logical op> <value>} <relational op> <value> | |
where the logical operator is & (and), | (or), or ^ (xor), and the | |
relational operator is = or == (equal), ! or != (not equal), >= | |
(greater than or equal), > (greater than), <= (less than or equal), or | |
< (less than). If a logical operator is specified without a relational | |
operator, it is ignored. If a relational operator is specified without | |
a logical operator, no logical operation is performed. All comparisons | |
are unsigned. | |
The output file modifier redirects command output to a file instead of | |
the console. An output file modifier consists of @ followed by a | |
valid file name. | |
Modifiers may be specified in any order. If multiple modifiers of the | |
same time are specified, later modifiers override earlier modifiers. | |
Note that if the device/unit name comes after the search specifier, | |
the values will interpreted in the radix of the CPU, rather than of the | |
device/unit. | |
The "state list" consists of one or more of the following, separated | |
by commas: | |
register the specified register | |
register[sub1-sub2] the specified register array locations, | |
start at location sub1 up to and including | |
location sub2 | |
register[ALL] all locations in the specified register | |
array | |
register1-register2 all the registers starting at register1 | |
up to and including register2 | |
address the specified location | |
address1-address2 all locations starting at address1 up to | |
and including address2 | |
STATE all registers in the device | |
ALL all locations in the unit | |
Switches can be used to control the format of display information: | |
-a display as ASCII | |
-c display as character string | |
-m display as instruction mnemonics | |
-o display as octal | |
-d display as decimal | |
-h display as hexidecimal | |
The simulators typically accept symbolic input (see simulator sections). | |
Examples: | |
sim> ex 1000-1100 -- examine 1100:1100 | |
sim> de PC 1040 -- set PC to 1040 | |
sim> ie 40-50 -- interactively examine 40:50 | |
sim> ie >1000 40-50 -- interactively examine the subset | |
of locations 40:50 that are >1000 | |
sim> ex rx0 50060 -- examine 50060, RX unit 0 | |
sim> ex rx sbuf[3-6] -- examine SBUF[3] to SBUF[6] in RX | |
sim> de all 0 -- set main memory to 0 | |
sim> de &77>0 0 -- set all addresses whose low order | |
bits are non-zero to 0 | |
sim> ex -m @memdump.txt 0-7777 -- dump memory to file | |
Note: to terminate an interactive command, simply type a bad value (eg, | |
XYZ) when input is requested. | |
3.6 Running Programs | |
The RUN command (abbreviated RU) resets all devices, deposits its argument | |
(if given) in the PC, and starts execution. If no argument is given, | |
execution starts at the current PC. | |
The GO command does NOT reset devices, deposits its argument (if given) in | |
the PC, and starts execution. If no argument is given, execution starts at | |
the current PC. | |
The CONT command (abbreviated CO) does NOT reset devices and resumes | |
execution at the current PC. | |
The STEP command (abbreviated S) resumes execution at the current PC for | |
the number of instructions given by its argument. If no argument is | |
supplied, one instruction is executed. | |
The BOOT command (abbreviated BO) bootstraps the device and unit given | |
by its argument. If no unit is supplied, unit 0 is bootstrapped. The | |
specified unit must be attached to a file. | |
3.7 Stopping Programs | |
Programs run until the simulator detects an error or stop condition, or | |
until the user forces a stop condition. | |
3.7.1 Simulator Detected Stop Conditions | |
These simulator-detected conditions stop simulation: | |
- HALT instruction. If a HALT instruction is decoded, | |
simulation stops. | |
- Breakpoint. The IBKPT register provides a single virtual | |
address breakpoint. If the PC matches the contents of the | |
IBKPT register, simulation stops. The breakpoint is | |
automatically disabled for the next instruction execution. | |
- I/O error. If an I/O error occurs during simulation of an | |
I/O operation, and the device stop-on-I/O-error flag is set, | |
simulation usually stops. | |
- Processor condition. Certain processor conditions can stop | |
simulation; these are described with the individual simulators. | |
3.7.2 User Specified Stop Conditions | |
Typing the interrupt character stops simulation. The interrupt character | |
is defined by the WRU (where are you) register and is initially set to | |
005 (^E). | |
3.8 Setting Device Parameters | |
The SET command (abbreviated SE) changes the status of a device parameter: | |
sim> SET <unit> <parameter> | |
Most parameters are simulator and device specific. Disk drives, for | |
example, can usually be set write ENABLED or write LOCKED; if a device | |
supports multiple drive types, the SET command can be used to specify | |
the drive type. | |
All devices recognize the following parameters: | |
OCT sets the data radix = 8 | |
DEC sets the data radix = 10 | |
HEX sets the data radix = 16 | |
3.9 Displaying Parameters and Status | |
The SHOW CONFIGURATION command shows the simulator configuration and the | |
status of all simulated devices and units. | |
The SHOW DEVICES command shows the configuration of all simulated devices. | |
The SHOW MODIFIERS command shows the modifiers available on all simulated | |
devices. | |
The SHOW <device> command shows the status of the named simulated device. | |
The SHOW QUEUE command shows the state of the simulator event queue. Times | |
are in "simulation units", typically one unit per instruction execution, | |
relative to the current simulation time. | |
The SHOW TIME command shows the number of time units elapsed since | |
the last RUN command. | |
3.10 Altering the Simulated Configuration | |
For most mass storage, the DISABLE <device> command removes the specified | |
device from the configuration. A DISABLEd device is invisible to running | |
programs. The device can still be RESET but it cannot be ATTAChed, DETACHed, | |
or BOOTed. ENABLE <device> restores a disabled device to a configuration. | |
In devices with multiple units, the REMOVE <unit> command removes the | |
specified unit from the configuration. Once removed, a unit cannot be | |
manipulated in any way until it is added back to the configuration. | |
ADD <unit> adds back a unit that had been removed from the configuration. | |
3.11 Logging Console Output | |
Output to the console can be logged simultaneously to a file. Logging is | |
enabled by the LOG command: | |
sim> LOG <filename> -- log console output to file | |
Logging is disabled by the NOLOG command: | |
sim> NOLOG -- disable logging | |
LOG with no argument displays whether logging is enabled or disabled. | |
3.12 Exiting The Simulator | |
EXIT (synonyms QUIT and BYE) returns control to the operating system. | |
4. PDP-8 Features | |
The PDP-8 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU PDP-8/E CPU with 32KW of memory | |
- KE8E extended arithmetic element (EAE) | |
- KM8E memory management and timeshare control | |
PTR,PTP PC8E paper tape reader/punch | |
TTI,TTO KL8E console terminal | |
LPT LE8E line printer | |
CLK DK8E line frequency clock (also PDP-8/A compatible) | |
RK RK8E/RK05 cartridge disk controller with four drives | |
RF RF08/RS08 fixed head disk controller with four platters, or | |
DF DF32/DS32 fixed head disk controller with four platters | |
RX RX8E/RX01 floppy disk controller with two drives | |
DT TC08/TU56 DECtape controller with eight drives | |
MT TM8E/TU10 magnetic tape controller with eight drives | |
The RK, RF, DF, RX, DT, and MT devices can be DISABLEd. The PDP-8 can | |
support either a DF32 or an RF08, but not both, since they use the same | |
IOT's. The simulator defaults to the RF08. To change the fixed head disk, | |
ENABLE DF32 enable DF32, disable RF08 | |
ENABLE RF08 enable RF08, disable DF32 | |
The PDP-8 simulator implements one unique stop condition: if an undefined | |
instruction (unimplemented IOT or OPR) is decoded, and register STOP_INST | |
is set, the simulator halts. | |
The PDP-8 loader supports both RIM format and BIN format tapes. If the file | |
extension is .RIM, or the -r switch is specified with LOAD, the file is | |
assumed to be RIM format; if the file extension is not .RIM, or if the -b | |
switch is specified, the file is assumed to be BIN format. | |
4.1 CPU | |
The only CPU options are the presence of the EAE and the size of main | |
memory; the memory extension and time-share control is always included, | |
even if memory size is 4K. | |
SET CPU EAE enable EAE | |
SET CPU NOEAE disable EAE | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
SET CPU 20K set memory size = 20K | |
SET CPU 24K set memory size = 24K | |
SET CPU 28K set memory size = 28K | |
SET CPU 32K set memory size = 32K | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 32K. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 15 program counter, including IF as high 3 bits | |
AC 12 accumulator | |
MQ 12 multiplier-quotient | |
L 1 link | |
SR 12 front panel switches | |
IF 3 instruction field | |
DF 3 data field | |
IB 3 instruction field buffer | |
SF 7 save field | |
UF 1 user mode flag | |
UB 1 user mode buffer | |
SC 5 EAE shift counter | |
GTF 1 EAE greater than flag | |
EMODE 1 EAE mode (0 = A, 1 = B) | |
ION 1 interrupt enable | |
ION_DELAY 1 interrupt enable delay for ION | |
CIF_DELAY 1 interrupt enable delay for CIF | |
PWR_INT 1 power fail interrupt | |
UF_INT 1 user mode violation interrupt | |
INT 15 interrupt pending flags | |
DONE 15 device done flags | |
ENABLE 15 device interrupt enable flags | |
OLDPC 15 PC prior to last JMP, JMS, or interrupt | |
STOP_INST 1 stop on undefined instruction | |
BREAK 16 breakpoint address (177777 to disable) | |
WRU 8 interrupt character | |
4.2 Programmed I/O Devices | |
4.2.1 PC8E Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
The paper tape reader supports the BOOT command. BOOT PTR copies the | |
RIM loader into memory and starts it running. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
4.2.2 PC8E Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS register | |
specifies the number of the next data item to bewritten. Thus, by | |
changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
4.2.3 KL8E Terminal Input (TTI) | |
The terminal input (TTI) reads from the controling console port. The | |
input side has one option, UC; when set, it automatically converts lower | |
case input to upper case. This is required by OS/8 and is on by default. | |
The terminal input implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
POS 31 number of characters input | |
TIME 24 keyboard polling interval | |
4.2.4 KL8E Terminal Output (TTO) | |
The terminal output (TTO) writes to the controling console port. It | |
implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
POS 31 number of characters output | |
TIME 24 time from I/O initiation to interrupt | |
4.2.5 LE8E Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be read or written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
ERR 1 error status flag | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 set error flag | |
OS I/O error x report error and stop | |
4.2.6 DK8E Line-Frequency Clock (CLK) | |
The real-time clock (CLK) implements these registers: | |
name size comments | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
INT 1 interrupt pending flag | |
TIME 24 clock interval | |
TPS 8 ticks per second (60 or 50) | |
The real-time clock autocalibrates; the clock interval is adjusted up or | |
down so that the clock tracks actual elapsed time. | |
4.3 RK8E Cartridge Disk (RK) | |
RK8E options include the ability to make units write enabled or write locked: | |
SET RKn LOCKED set unit n write locked | |
SET RKn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The RK8E supports | |
the BOOT command. | |
The RK8E implements these registers: | |
name size comments | |
STA 12 status | |
DA 12 disk address | |
MA 12 current memory address | |
CMD 12 disk command | |
BUSY 1 control busy flag | |
INT 1 interrupt pending flag | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
4.4 RX8E/RX01 Floppy Disk (RX) | |
RX8E options include the ability to set units write enabled or write locked: | |
SET RXn LOCKED set unit n write locked | |
SET RXn ENABLED set unit n write enabled | |
The RX8E supports the BOOT command. | |
The RX8E implements these registers: | |
name size comments | |
RXCS 12 status | |
RXDB 12 data buffer | |
RXES 8 error status | |
RXTA 8 current track | |
RXSA 8 current sector | |
STAPTR 3 controller state | |
BUFPTR 3 buffer pointer | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable flag | |
TR 1 transfer ready flag | |
ERR 1 error flag | |
CTIME 24 command completion time | |
STIME 24 seek time, per track | |
XTIME 24 transfer ready delay | |
STOP_IOE 1 stop on I/O error | |
SBUF[0:127] 8 sector buffer array | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
RX01 data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
4.5 Fixed Head Disks | |
Either the RF08 or the DF32 can be present in a configuration, but | |
not both. | |
4.5.1 RF08/RS08 Fixed Head Disk (RF) | |
The RF08 implements these registers: | |
name size comments | |
STA 12 status | |
DA 20 current disk address | |
MA 12 memory address (in memory) | |
WC 12 word count (in memory) | |
WLK 32 write lock switches | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
TIME 24 rotational delay, per word | |
BURST 1 burst flag | |
STOP_IOE 1 stop on I/O error | |
The RF08 supports the BOOT command. The default bootstrap is for OS/8. To | |
bootstrap the 4K Disk Monitor, use the BOOT -D command. | |
The RF08 is a three-cycle data break device. If BURST = 0, word transfers | |
are scheduled individually; if BURST = 1, the entire transfer occurs in | |
a single data break. | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
RF08 data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
4.5.2 DF32/DS32 Fixed Head Disk (RF) | |
The DF32 implements these registers: | |
name size comments | |
STA 12 status, disk and memory address extension | |
DA 12 low order disk address | |
MA 12 memory address (in memory) | |
WC 12 word count (in memory) | |
WLK 16 write lock switches | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
TIME 24 rotational delay, per word | |
BURST 1 burst flag | |
STOP_IOE 1 stop on I/O error | |
The DF32 supports the BOOT command. The default bootstrap is for OS/8. To | |
bootstrap the 4K Disk Monitor, use the BOOT -D command. | |
The DF32 is a three-cycle data break device. If BURST = 0, word transfers | |
are scheduled individually; if BURST = 1, the entire transfer occurs in | |
a single data break. | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
DF32 data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
4.6 TC08/TU56 DECtape (DT) | |
DECtapes drives are numbered 1-8; in the simulator, drive 8 is unit 0. | |
DECtape options include the ability to make units write enabled or write | |
locked. | |
SET DTn LOCKED set unit n write locked | |
SET DTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The TC08 supports | |
the BOOT command. | |
The TC08 supports both PDP-8 format and PDP-9/11/15 format DECtape images. | |
ATTACH tries to determine the tape format from the DECtape image; the user | |
can force a particular format with switches: | |
-f foreign (PDP-9/11/15) format | |
-n native (PDP-8) format | |
The DECtape controller is a data-only simulator; the timing and mark | |
track, and block header and trailer, are not stored. Thus, the WRITE | |
TIMING AND MARK TRACK function is not supported; the READ ALL function | |
always returns the hardware standard block header and trailer; and the | |
WRITE ALL function dumps non-data words into the bit bucket. | |
The DECtape controller implements these registers: | |
name size comments | |
DTSA 12 status register A | |
DTSB 12 status register B | |
INT 1 interrupt pending flag | |
ENB 1 interrupt enable flag | |
DTF 1 DECtape flag | |
ERF 1 error flag | |
CA 12 current address (memory location 7754) | |
WC 12 word count (memory location 7755) | |
LTIME 31 time between lines | |
ACTIME 31 time to accelerate to full speed | |
DCTIME 31 time to decelerate to a full stop | |
SUBSTATE 2 read/write command substate | |
POS0..7 31 position, in lines, units 0..7 | |
STATE0..7 31 unit state, units 0-7 | |
It is critically important to maintain certain timing relationships | |
among the DECtape parameters, or the DECtape simulator will fail to | |
operate correctly. | |
- LTIME must be at least 6 | |
- ACTIME must be less than DCTIME, and both need to be at | |
least 100 times LTIME | |
4.7 TM8E Magnetic Tape (MT) | |
Magnetic tape options include the ability to make units write enabled or | |
or write locked. | |
SET MTn LOCKED set unit n write locked | |
SET MTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The magnetic tape controller implements these registers: | |
name size comments | |
CMD 12 command | |
FNC 12 function | |
CA 12 memory address | |
WC 12 word count | |
DB 12 data buffer | |
STA 12 main status | |
STA2 6 secondary status | |
DONE 1 device done flag | |
INT 1 interrupt pending flag | |
STOP_IOE 1 stop on I/O error | |
TIME 24 record delay | |
UST0..7 24 unit status, units 0..n | |
POS0..7 31 position, units 0..n | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
4.8 Symbolic Display and Input | |
The PDP-8 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as (sixbit) character string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character sixbit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard PDP-8 assembler syntax. There are four | |
instruction classes: memory reference, IOT, field change, and operate. | |
Memory reference instructions have the format | |
memref {I} {C/Z} address | |
where I signifies indirect, C a current page reference, and Z a zero page | |
reference. The address is an octal number in the range 0 - 07777; if C or | |
Z is specified, the address is a page offset in the range 0 - 177. Normally, | |
C is not needed; the simulator figures out from the address what mode to use. | |
However, when referencing memory outside the CPU (eg, disks), there is no | |
valid PC, and C must be used to specify current page addressing. | |
IOT instructions consist of single mnemonics, eg, KRB, TLS. IOT instructions | |
may be or'd together | |
iot iot iot... | |
The simulator does not check the legality of the proposed combination. IOT's | |
for which there is no opcode may be specified as IOT n, where n is an octal | |
number in the range 0 - 0777. | |
Field change instructions (CIF, CDF) have the format | |
fldchg field | |
where field is an octal number in the range 0 - 7. Field change instructions | |
may be or'd together. | |
Operate instructions have the format | |
opr opr opr... | |
The simulator does not check the legality of the proposed combination. EAE | |
mode A and B mnemonics may be specified regardless of the EAE mode. The | |
operands for MUY and DVI must be deposited explicitly. | |
5. PDP-11 Features | |
The PDP-11 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU J-11 CPU with 256KB of memory | |
- FP11 floating point unit (FPA) | |
- CIS11 commercial instruction set (CIS, off by default) | |
PTR,PTP PC11 paper tape reader/punch | |
TTI,TTO DL11 console terminal | |
LPT LP11 line printer | |
CLK line frequency clock | |
RK RK11/RK05 cartridge disk controller with eight drives | |
RL RLV12/RL01(2) cartridge disk controller with four drives | |
RP RM02/03/05/80, RP04/05/06/07 Massbus style controller | |
with eight drives | |
RX RX11/RX01 floppy disk controller with two drives | |
TC TC11/TU56 DECtape controller with eight drives | |
TM TM11/TU10 magnetic tape controller with eight drives | |
TS TS11/TSV05 magnetic tape controller with one drive | |
The RK, RL, RP, RX, TC, TM, and TS devices can be DISABLEd. The PDP-11 can | |
support either a TM11 or a TS11, but not both, since they use the same I/O | |
addresses. The simulator defaults to the TM11. To change the magtape, | |
ENABLE TM11 enable TM11 and disable TS11 | |
ENABLE TS11 enable TS11 and disable TM11 | |
The PDP-11 simulator implements several unique stop conditions: | |
- abort during exception vector fetch, and register STOP_VEC is set | |
- abort during exception stack push, and register STOP_SPA is set | |
- trap condition 'n' occurs, and register STOP_TRAP<n> is set | |
- wait state entered, and no I/O operations outstanding | |
(ie, no interrupt can ever occur) | |
The PDP-11 loader supports standard binary format tapes. The DUMP command | |
is not implemented. | |
5.1 CPU | |
The only CPU options are disabling of 22b addressing, the CIS instruction | |
set, and the size of main memory. | |
SET CPU 18B disable 22b addressing | |
SET CPU 22B enable 22b addressing (default) | |
SET CPU NOCIS disable CIS instructions (default) | |
SET CPU CIS enable CIS instructions | |
SET CPU 16K set memory size = 16KB | |
SET CPU 32K set memory size = 32KB | |
SET CPU 48K set memory size = 48KB | |
SET CPU 64K set memory size = 64KB | |
SET CPU 96K set memory size = 96KB | |
SET CPU 128K set memory size = 128KB | |
SET CPU 192K set memory size = 192KB | |
SET CPU 256K set memory size = 256KB | |
SET CPU 384K set memory size = 384KB | |
SET CPU 512K set memory size = 512KB | |
SET CPU 768K set memory size = 768KB | |
SET CPU 1024K (or 1M) set memory size = 1024KB | |
SET CPU 2048K (or 2M) set memory size = 2048KB | |
SET CPU 3072K (or 3M) set memory size = 3072KB | |
SET CPU 4096K (or 4M) set memory size = 4096KB | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 256KB. | |
These switches are recognized when examining or depositing in CPU memory: | |
-v interpret address as virtual | |
-d if mem mgt enabled, force data space | |
-k if mem mgt enabled, force kernel mode | |
-s if mem mgt enabled, force supervisor mode | |
-u if mem mgt enabled, force user mode | |
-p if mem mgt enabled, force previous mode | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 16 program counter | |
R0..R5 16 R0..R5, first register set | |
R10..R15 16 R0..R5, second register set | |
KSP 16 kernel stack pointer | |
SSP 16 supervisor stack pointer | |
USP 16 user stack pointer | |
PSW 16 processor status word | |
CM 2 current mode, PSW<15:14> | |
PM 2 previous mode, PSW<13:12> | |
RS 2 register set, PSW<11> | |
IPL 3 interrupt priority level, PSW<7:5> | |
T 1 trace bit, PSW<4> | |
N 1 negative flag, PSW<3> | |
Z 1 zero flag, PSW<2> | |
V 1 overflow flag, PSW<1> | |
C 1 carry flag, PSW<0> | |
SR 16 front panel switches | |
DR 16 front panel display | |
MEMERR 16 memory error register | |
CCR 16 cache control register | |
MAINT 16 maintenance register | |
HITMISS 16 hit/miss register | |
CPUERR 16 CPU error register | |
PIRQ 16 programmed interrupt requests | |
FAC0H..FAC5H 32 FAC0..FAC5, high 32 bits | |
FAC0L..FAC5L 32 FAC0..FAC5, low 32 bits | |
FPS 16 floating point status | |
FEA 16 floating exception address | |
FEC 4 floating exception code | |
MMR0..3 16 memory management registers 0..3 | |
{K/S/U}{I/D}{PAR/PDR}{0..7} | |
16 memory management registers | |
INT 32 interrupt pending flags | |
TRAP 18 trap pending flags | |
WAIT 0 wait state flag | |
WAIT_ENABLE 0 wait state enable flag | |
STOP_TRAPS 18 stop on trap flags | |
STOP_VECA 1 stop on read abort in trap or interrupt | |
STOP_SPA 1 stop on stack push abort in trap or interrupt | |
OLDPC 16 PC prior to last JMP, JMS, or interrupt | |
BREAK 16 breakpoint address (1 to disable) | |
WRU 8 interrupt character | |
5.2 Programmed I/O Devices | |
5.2.1 PC11 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
BUSY 1 busy flag (CSR<11>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
5.2.2 PC11 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
5.2.3 KL11 Terminal Input (TTI) | |
The terminal input (TTI) reads from the controling console port. It | |
implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 number of characters input | |
TIME 24 keyboard polling interval | |
5.2.4 KL11 Terminal Output (TTO) | |
The terminal output (TTO) writes to the controling console port. It | |
implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 number of characters input | |
TIME 24 time from I/O initiation to interrupt | |
5.2.5 LP11 Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of paper | |
OS I/O error x report error and stop | |
5.2.6 Line-Time Clock (CLK) | |
The clock (CLK) implements these registers: | |
name size comments | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
TIME 24 clock frequency | |
TPS 8 ticks per second (60 or 50) | |
The real-time clock autocalibrates; the clock interval is adjusted up or | |
down so that the clock tracks actual elapsed time. | |
5.3 RK11/RK05 Cartridge Disk (RK) | |
RK11 options include the ability to make units write enabled or write locked: | |
SET RKn LOCKED set unit n write locked | |
SET RKn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The RK11 supports | |
the BOOT command. | |
The RK11 implements these registers: | |
name size comments | |
RKCS 16 control/status | |
RKDA 16 disk address | |
RKBA 16 memory address | |
RKWC 16 word count | |
RKDS 16 drive status | |
RKER 16 error status | |
INTQ 9 interrupt queue | |
DRVN 3 number of last selected drive | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
INT 1 interrupt pending flag | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
5.4 RX11/RX01 Floppy Disk (RX) | |
RX11 options include the ability to make units write enabled or write locked: | |
SET RXn LOCKED set unit n write locked | |
SET RXn ENABLED set unit n write enabled | |
The RX11 supports the BOOT command. | |
The RX11 implements these registers: | |
name size comments | |
RXCS 12 status | |
RXDB 8 data buffer | |
RXES 8 error status | |
RXERR 8 error code | |
RXTA 8 current track | |
RXSA 8 current sector | |
STAPTR 3 controller state | |
BUFPTR 3 buffer pointer | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
TR 1 transfer ready flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
DONE 1 device done flag (CSR<5>) | |
CTIME 24 command completion time | |
STIME 24 seek time, per track | |
XTIME 24 transfer ready delay | |
STOP_IOE 1 stop on I/O error | |
SBUF[0:127] 8 sector buffer array | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
RX01 data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
5.5 RL11(V12)/RL01,RL02 Cartridge Disk (RL) | |
RL11 options include the ability to set units write enabled or write locked, | |
to set the drive size to RL01, RL02, or autosize, and to write a DEC standard | |
044 compliant bad block table on the last track: | |
SET RLn LOCKED set unit n write locked | |
SET RLn ENABLED set unit n write enabled | |
SET RLn RL01 set size to RL01 | |
SET RLn RL02 set size to RL02 | |
SET RLn AUTOSIZE set size based on file size at attach | |
SET RLn BADBLOCK write bad block table on last track | |
The size options can be used only when a unit is not attached to a file. The | |
bad block option can be used only when a unit is attached to a file. Units | |
can also be REMOVEd or ADDed to the configuration. The RL11 supports the | |
BOOT command. | |
The RL11 implements these registers: | |
name size comments | |
RLCS 16 control/status | |
RLDA 16 disk address | |
RLBA 16 memory address | |
RLBAE 6 memory address extension (RLV12) | |
RLMP..RLMP2 16 multipurpose register queue | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
5.6 RM02/03/05/80, RP04/05/06/07 Disk Pack Drives (RP) | |
The RP controller implements a "Massbus style" 22b direct interface for | |
large disk drives. It is more abstract than other device simulators, with | |
just enough detail to run operating system drivers. In addition, the RP | |
controller conflates the details of the RM series controllers with the RP | |
series controllers, although there were detailed differences. | |
RP options include the ability to set units write enabled or write locked, | |
to set the drive size to one of seven disk types, or autosize, and to write | |
a DEC standard 044 compliant bad block table on the last track: | |
SET RPn LOCKED set unit n write locked | |
SET RPn ENABLED set unit n write enabled | |
SET RPn RM03 set size to RM03 | |
SET RPn RM05 set size to RM05 | |
SET RPn RM80 set size to RM80 | |
SET RPn RP04 set size to RP04 | |
SET RPn RP06 set size to RP06 | |
SET RPn RP07 set size to RP07 | |
SET RPn AUTOSIZE set size based on file size at attach | |
SET RLn BADBLOCK write bad block table on last track | |
The size options can be used only when a unit is not attached to a file. The | |
bad block option can be used only when a unit is attached to a file. Units | |
can also be REMOVEd or ADDed to the configuration. The RP controller supports | |
the BOOT command. | |
The RP controller implements these registers: | |
name size comments | |
RPCS1 16 control/status 1 | |
RPCS2 16 control/status 2 | |
RPCS3 16 control/status 3 | |
RPWC 16 word count | |
RPBA 16 bus address | |
RPBAE 6 bus address extension | |
RPDA 16 desired surface, sector | |
RPDC 8 desired cylinder | |
RPOF 16 offset | |
RPDS0..7 16 drive status, drives 0-7 | |
RPDE0..7 16 drive error, drives 0-7 | |
RPER2 16 error status 2 | |
RPER3 16 error status 3 | |
RPDB 16 data buffer | |
RPMR 16 maintenance register | |
INT 1 interrupt pending flag | |
SC 1 special condition (CSR1<15>) | |
DONE 1 device done flag (CSR1<7>) | |
IE 1 interrupt enable flag (CSR1<6>) | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
5.7 TC11/TU56 DECtape (DT) | |
DECtapes drives are numbered 1-8; in the simulator, drive 8 is unit 0. | |
DECtape options include the ability to make units write enabled or write | |
locked. | |
SET DTn LOCKED set unit n write locked | |
SET DTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The TC11 supports | |
the BOOT command. | |
The TC11 supports both PDP-8 format and PDP-9/11/15 format DECtape images. | |
ATTACH tries to determine the tape format from the DECtape image; the user | |
can force a particular format with switches: | |
-f foreign (PDP-8) format | |
-n native (PDP-9/11/15) format | |
The DECtape controller is a data-only simulator; the timing and mark | |
track, and block header and trailer, are not stored. Thus, the WRITE | |
TIMING AND MARK TRACK function is not supported; the READ ALL function | |
always returns the hardware standard block header and trailer; and the | |
WRITE ALL function dumps non-data words into the bit bucket. | |
The DECtape controller implements these registers: | |
name size comments | |
TCST 16 status register | |
TCCM 16 command register | |
TCWC 16 word count register | |
TCBA 16 bus address register | |
TCDT 16 data register | |
INT 1 interrupt pending flag | |
ERR 1 error flag | |
DONE 1 done flag | |
IE 1 interrupt enable flag | |
CTIME 31 time to complete transport stop | |
LTIME 31 time between lines | |
ACTIME 31 time to accelerate to full speed | |
DCTIME 31 time to decelerate to a full stop | |
SUBSTATE 2 read/write command substate | |
POS0..7 31 position, in lines, units 0..7 | |
STATE0..7 31 unit state, units 0-7 | |
It is critically important to maintain certain timing relationships | |
among the DECtape parameters, or the DECtape simulator will fail to | |
operate correctly. | |
- LTIME must be at least 6 | |
- ACTIME must be less than DCTIME, and both need to be at | |
least 100 times LTIME | |
5.8 TM11 Magnetic Tape (TM) | |
TM options include the ability to make units write enabled or write locked. | |
SET TMn LOCKED set unit n write locked | |
SET TMn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The TM11 supports the BOOT command. The bootstrap supports both original | |
and DEC standard boot formats. Originally, a tape bootstrap read and | |
executed the first record on tape. To allow for ANSI labels, the DEC | |
standard bootstrap skipped the first record and read and executed the second. | |
The DEC standard is the default; to bootstrap an original format tape, use | |
the -o switch. | |
The magnetic tape controller implements these registers: | |
name size comments | |
MTS 16 status | |
MTC 16 command | |
MTCMA 16 memory address | |
MTBRC 16 byte/record count | |
INT 1 interrupt pending flag | |
ERR 1 error flag | |
DONE 1 device done flag | |
IE 1 interrupt enable flag | |
STOP_IOE 1 stop on I/O error | |
TIME 24 delay | |
UST0..7 16 unit status, units 0..n | |
POS0..7 31 position, units 0..n | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
5.8 TS11/TSV05 Magnetic Tape (TS) | |
The TS actually implements the TSV05, with 22-bit addressing, but will | |
work with TS11 drivers. TS options include the ability to make the unit | |
write enabled or write locked. | |
SET TS LOCKED set unit write locked | |
SET TS ENABLED set unit write enabled | |
The TS11 supports the BOOT command. The bootstrap supports only DEC | |
standard boot formats. To allow for ANSI labels, the DEC standard bootstrap | |
skipped the first record and read and executed the second. | |
The magnetic tape controller implements these registers: | |
name size comments | |
TSSR 16 status register | |
TSBA 16 bus address register | |
TSDBX 16 data buffer extension register | |
CHDR 16 command packet header | |
CADL 16 command packet low address or count | |
CADH 16 command packet high address | |
CLNT 16 command packet length | |
MHDR 16 message packet header | |
MRFC 16 message packet residual frame count | |
MXS0 16 message packet extended status 0 | |
MXS1 16 message packet extended status 1 | |
MXS2 16 message packet extended status 2 | |
MXS3 16 message packet extended status 3 | |
MXS4 16 message packet extended status 4 | |
WADL 16 write char packet low address | |
WADH 16 write char packet high address | |
WLNT 16 write char packet length | |
WOPT 16 write char packet options | |
ATTN 1 attention message pending | |
BOOT 1 boot request pending | |
OWNC 1 if set, tape owns command buffer | |
OWNM 1 if set, tape owns message buffer | |
TIME 24 delay | |
POS 31 position | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error fatal tape error | |
5.10 Symbolic Display and Input | |
The PDP-11 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as two character ASCII string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character ASCII string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard PDP-11 assembler syntax. There are sixteen | |
instruction classes: | |
class operands examples comments | |
no operands none HALT, RESET | |
3b literal literal, 0 - 7 SPL | |
6b literal literal, 0 - 077 MARK | |
8b literal literal, 0 - 0377 EMT, TRAP | |
register register RTS | |
sop specifier SWAB, CLR, ASL | |
reg-sop register, specifier JSR, XOR, MUL | |
fop flt specifier ABSf, NEGf | |
ac-fop flt reg, flt specifier LDf, MULf | |
ac-sop flt reg, specifier LDEXP, STEXP | |
ac-moded sop flt reg, specifier LDCif, STCfi | |
dop specifier, specifier MOV, ADD, BIC | |
cond branch address BR, BCC, BNE | |
sob register, address SOB | |
cc clear cc clear instructions CLC, CLV, CLZ, CLN combinable | |
cc set cc set instructions SEC, SEV, SEZ, SEN combinable | |
For floating point opcodes, F and D variants, and I and L variants, may be | |
specified regardless of the state of FPS. | |
The syntax for specifiers is as follows: | |
syntax specifier displacement comments | |
Rn 0n - | |
Fn 0n - only in flt reg classes | |
(Rn) 1n - | |
@(Rn) 7n 0 equivalent to @0(Rn) | |
(Rn)+ 2n - | |
@(Rn)+ 3n - | |
-(Rn) 4n - | |
@-(Rn) 5n - | |
{+/-}d(Rn) 6n {+/-}d | |
@{+/-}d(Rn) 7n {+/-}d | |
#n 27 n | |
@#n 37 n | |
.+/-n 67 +/-n - 4 | |
@.+/-n 77 +/-n - 4 | |
{+/-}n 67 {+/-}n - PC - 4 if on disk, 37 and n | |
@{+/-}n 77 {+/-}n - PC - 4 if on disk, invalid | |
6. Nova Features | |
The Nova simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU Nova CPU with 32KW of memory | |
- hardware multiply/divide | |
PTR,PTP paper tape reader/punch | |
TTI,TTO console terminal | |
TTI1,TTO1 second terminal | |
LPT line printer | |
PLT plotter | |
CLK real-time clock | |
DK head-per-track disk controller | |
DP moving head disk controller with four drives | |
MT magnetic tape controller with eight drives | |
The TTI1/TTO1, PLT, DK, DP, and MT devices can be DISABLEd. | |
The Nova simulator implements these unique stop conditions: | |
- reference to undefined I/O device, and STOP_DEV is set | |
- more than INDMAX indirect addresses are detected during | |
an interrupt | |
- more than INDMAX indirect addresses are detected during | |
memory reference address decoding | |
The Nova loader supports standard binary format tapes. The DUMP command | |
is not implemented. | |
6.1 CPU | |
The only CPU options are the presence of the optional instructions | |
and the size of main memory. | |
SET CPU NOVA4 enable Nova4 instructions | |
SET CPU NOVA3 enable Nova3 instructions | |
SET CPU MDV enable multiply/divide | |
SET CPU NONE disable all optional instructions | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
SET CPU 20K set memory size = 20K | |
SET CPU 24K set memory size = 24K | |
SET CPU 28K set memory size = 28K | |
SET CPU 32K set memory size = 32K | |
(MDV = unsigned multiply/divide instructions) | |
(Nova 3 = unsigned multiply/divide, stack, trap instructions) | |
(Nova 4 = unsigned and signed multiply/divide, stack, byte, trap instructions) | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 32K. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 15 program counter | |
AC0..AC3 16 accumulators 0..3 | |
C 1 carry | |
SR 16 front panel switches | |
PI 16 priority interrupt mask | |
ION 1 interrupt enable | |
ION_DELAY 1 interrupt enable delay for ION | |
PWR 1 power fail interrupt | |
INT 15 interrupt pending flags | |
BUSY 15 device busy flags | |
DONE 15 device done flags | |
DISABLE 15 device interrupt disable flags | |
STOP_DEV 1 stop on undefined IOT | |
INDMAX 15 maximum number of nested indirects | |
OLDPC 15 PC prior to last JMP, JMS, or interrupt | |
BREAK 16 breakpoint address (177777 to disable) | |
WRU 8 interrupt character | |
6.2 Programmed I/O Devices | |
The Nova can have two terminals (TTI/TTO, TTI1/TTO1). At any moment | |
only one terminal is active. It can receive input from the keyboard; | |
it can output to the simulator window. The inactive console cannot | |
receive input from the keyboard and outputs to an internal buffer | |
(maximum 4K characters). | |
Control is switched among terminals with a SET TTI{n} CONSOLE or SET | |
TTO{n} CONSOLE command: | |
At startup, active console is TTI/TTO | |
SET TTI1 CONSOLE Active console is now TTI1/TTO1 | |
SET TTO CONSOLE Active console is now TTI/TTO | |
When control is switched to an inactive terminal, any buffered output | |
is printed when simulation resumes. | |
6.2.1 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
end of file 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
6.2.2 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
6.2.3 Terminal Input (TTI, TTI1) | |
The active terminal input polls the console keyboard for input. The | |
inactive terminal input cannot receive characters. Terminal input | |
options include the ability to set limited Dasher compatibility mode | |
or ANSI standard mode: | |
SET TTI ANSI normal mode | |
SET TTI DASHER Dasher mode | |
SET TTO ANSI normal mode | |
SET TTO DASHER Dasher mode | |
Setting either TTI (TTI1) or TTO (TTO1) changes both devices. In Dasher | |
mode, carriage return is changed to newline on input, and ^X is changed | |
to backspace. | |
The terminal inputs implement these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 number of characters input | |
TIME 24 keyboard polling interval | |
6.2.4 Terminal Output (TTO, TTO1) | |
The active terminal output writes to the simulator window. The inactive | |
terminal output buffers characters. Terminal output options include the | |
the ability to set limited Dasher compatibility mode or ANSI mode: | |
SET TTI ANSI normal mode | |
SET TTI DASHER Dasher mode | |
SET TTO ANSI normal mode | |
SET TTO DASHER Dasher mode | |
Setting either TTI (TTI1) or TTO (TTO1) changes both devices. In Dasher | |
mode, carriage return is changed to newline on input, and ^X is changed | |
to backspace. | |
The terminal outputs implement these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 number of characters output | |
TIME 24 time from I/O initiation to interrupt | |
6.2.5 Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of paper | |
OS I/O error x report error and stop | |
6.2.6 Real-Time Clock (CLK) | |
The real-time clock (CLK) implements these registers: | |
name size comments | |
SELECT 2 selected clock interval | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
TIME0 24 clock frequency, select = 0 | |
TIME1 24 clock frequency, select = 1 | |
TIME2 24 clock frequency, select = 2 | |
TIME3 24 clock frequency, select = 3 | |
The real-time clock autocalibrates; the clock interval is adjusted up or | |
down so that the clock tracks actual elapsed time. | |
6.2.7 Plotter (PTP) | |
The plotter (PLT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the plotter. | |
The plotter implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
6.3 Fixed Head Disk (DK) | |
The fixed head disk controller implements these registers: | |
name size comments | |
STAT 16 status | |
DA 16 disk address | |
MA 16 memory address | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 device disable flag | |
INT 1 interrupt pending flag | |
WLK 8 write lock switches | |
TIME 24 rotational delay, per sector | |
STOP_IOE 1 stop on I/O error | |
The fixed head disk controller supports the BOOT command. | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
Fixed head disk data files are buffered in memory; therefore, end of file | |
and OS I/O errors cannot occur. | |
6.4 Moving Head Disk (DP) | |
Moving head disk options include the ability to make units write enabled or | |
write locked, and to select the type of drive: | |
SET DPn LOCKED set unit n write locked | |
SET DPn ENABLED set unit n write enabled | |
SET DPn FLOPPY set unit n to floppy disk | |
SET DPn D31 set unit n to Diablo 31 | |
SET DPn D44 set unit n to Diablo 44 | |
SET DPn C111 set unit n to Century 111 | |
SET DPn C114 set unit n to Century 114 | |
SET DPn 6225 set unit n to 6225 | |
SET DPn 6099 set unit n to 6099 | |
SET DPn 6227 set unit n to 6227 | |
SET DPn 6070 set unit n to 6070 | |
SET DPn 6103 set unit n to 6103 | |
SET DPn 4231 set unit n to 4231 | |
Units can also be REMOVEd or ADDed to the configuration. The moving head | |
disk controller supports the BOOT command. | |
All drives have 256 16b words per sector. The other disk parameters are: | |
drive cylinders surfaces sectors size (MW) DG models | |
floppy 77 1 8 .158 6038 | |
D31 203 2 12 1.247 4047, 4237, 4238 | |
D44 408 4 12 5.014 4234, 6045 | |
C111 203 10 6 3.118 4048 | |
C114 203 20 12 12.472 4057, 2314 | |
6225 20 2 245 2.508 | |
6099 32 4 192 6.291 | |
6227 20 6 245 7.526 | |
6070 24 4 408 10.027 | |
6103 32 8 192 12.583 | |
4231 23 19 411 45.979 | |
The moving head disk controller implements these registers: | |
name size comments | |
FCCY 16 flags, command, cylinder | |
USSC 16 unit, surface, sector, count | |
STAT 16 status | |
MA 16 memory address | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
Error handling is as follows: | |
error processed as | |
not attached disk not ready | |
end of file assume rest of disk is zero | |
OS I/O error report error and stop | |
6.5 Magnetic Tape (MT) | |
Magnetic tape options include the ability to make units write enabled or | |
or write locked. | |
SET MTn LOCKED set unit n write locked | |
SET MTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The magnetic | |
tape controller supports the BOOT command. | |
The magnetic tape controller implements these registers: | |
name size comments | |
CU 16 command, unit | |
MA 16 memory address | |
WC 16 word count | |
STA1 16 status word 1 | |
STA2 16 status word 2 | |
EP 1 extended polling mode (not supported) | |
BUSY 1 device busy flag | |
DONE 1 device done flag | |
DISABLE 1 interrupt disable flag | |
INT 1 interrupt pending flag | |
STOP_IOE 1 stop on I/O error | |
CTIME 24 controller delay | |
RTIME 24 record delay | |
UST0..7 32 unit status, units 0..n | |
POS0..7 31 position, units 0..n | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
6.6 Symbolic Display and Input | |
The Nova simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as two character ASCII string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character ASCII string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard Nova assembler syntax. There are three | |
instruction classes: memory reference, IOT, and operate. | |
Memory reference instructions have the format | |
memref {ac,}{@}address{,index} | |
LDA and STA require an initial register; ISZ, DSZ, JSR, and JMP do not. | |
The syntax for addresses and indices is as follows: | |
syntax mode displacement comments | |
0 <= n < 0400 0 n | |
{+/-}n >= 0400 1 {+/-}n - PC must be in range [-200, 177] | |
invalid on disk | |
.+/-n 1 {+/-}n must be in range [-200, 177] | |
{+/-}n,2 2 {+/-}n must be in range [-200, 177] | |
{+/-}n,3 3 {+/-}n must be in range [-200, 177] | |
IOT instructions have one of four formats | |
syntax example | |
iot HALT | |
iot reg INTA | |
iot device SKPDN | |
iot reg,device DOAS | |
Devices may be specified as mnemonics or as numbers in the range 0 - 077. | |
Operate instructions have the format | |
opcode{#} reg,reg{,skip} | |
In all Nova instructions, blanks may be substituted for commas as field | |
delimiters. | |
7. PDP-1 Features | |
The PDP-1 is configured as follows: | |
device simulates | |
name(s) | |
CPU PDP-1 CPU with up to 64KW of memory | |
PTR,PTP integral paper tape reader/punch | |
TTI,TTO Flexowriter typewriter input/output | |
LPT Type 62 line printer | |
The PDP-1 simulator implements the following unique stop conditions: | |
- an unimplemented instruction is decoded, and register | |
STOP_INST is set | |
- more than INDMAX indirect addresses are detected during | |
memory reference address decoding | |
- more than XCTMAX nested executes are detected during | |
instruction execution | |
- wait state entered, and no I/O operations outstanding | |
(ie, no interrupt can ever occur) | |
The PDP-1 loader supports RIM format tapes. The DUMP command is not | |
implemented. | |
7.1 CPU | |
The only CPU options are the presence of hardware multiply/divide and the | |
size of main memory. | |
SET CPU MDV enable multiply/divide | |
SET CPU NOMDV disable multiply/divide | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
SET CPU 20K set memory size = 20K | |
SET CPU 24K set memory size = 24K | |
SET CPU 28K set memory size = 28K | |
SET CPU 32K set memory size = 32K | |
SET CPU 48K set memory size = 48K | |
SET CPU 64K set memory size = 64K | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 64K. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 16 program counter | |
AC 18 accumulator | |
IO 18 IO register | |
OV 1 overflow flag | |
PF 6 program flags<1:6> | |
SS 6 sense switches<1:6> | |
TW 18 test word (front panel switches) | |
EXTM 1 extend mode | |
IOSTA 18 IO status register | |
SBON 1 sequence break enable | |
SBRQ 1 sequence break request | |
SBIP 1 sequence break in progress | |
IOH 1 I/O halt in progress | |
IOC 1 I/O continue | |
OLDPC 16 PC prior to last transfer | |
STOP_INST 1 stop on undefined instruction | |
SBS_INIT 1 initial state of sequence break enable | |
EXTM_INIT 1 initial state of extend mode | |
BREAK 17 breakpoint address (377777 to disable) | |
WRU 8 interrupt character | |
7.2 Programmed I/O Devices | |
7.2.1 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from or a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
The paper tape reader supports the BOOT command. BOOT PTR copies the | |
RIM loader into memory and starts it running. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
RPLS 1 return restart pulse flag | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
7.2.2 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
RPLS 1 return restart pulse flag | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
7.2.3 Terminal Input (TTI) | |
The terminal input (TTO) reads from the controling console port. | |
It implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
POS 31 number of characters input | |
TIME 24 keyboard polling interval | |
7.2.4 Terminal Output (TTO) | |
The terminal output (TTO) writes to the controling console port. | |
It implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
DONE 1 device done flag | |
RPLS 1 return restart pulse flag | |
POS 31 number of characters output | |
TIME 24 time from I/O initiation to interrupt | |
7.2.5 Type 62 Line Printer (LPT) | |
The paper line printer (LPT) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
PNT 1 printing done flag | |
SPC 1 spacing done flag | |
RPLS 1 return restart pulse flag | |
BPTR 6 print buffer pointer | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
LBUF[0:119] 8 line buffer | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
7.3 Symbolic Display and Input | |
The PDP-1 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as FIODEC character string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c three character FIODEC string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses modified PDP-1 assembler syntax. There are six | |
instruction classes: memory reference, shift, skip, operate, IOT, and | |
LAW. | |
Memory reference instructions have the format | |
memref {I} address | |
where I signifies indirect reference. The address is an octal number in | |
the range 0 - 0177777. | |
Shift instructions have the format | |
shift shift_count | |
The shift count is an octal number in the range 0-9. | |
Skip instructions consist of single mnemonics, eg, SZA, SZS4. Skip | |
instructions may be or'd together | |
skip skip skip... | |
The sense of a skip can be inverted by including the mnemonic I. | |
Operate instructions consist of single mnemonics, eg, CLA, CLI. Operate | |
instructions may be or'd together | |
opr opr opr... | |
IOT instructions consist of single mnemonics, eg, TYI, TYO. IOT | |
instructions may include an octal numeric modifier or the modifier I: | |
iot modifier | |
The simulator does not check the legality of skip, operate, or IOT | |
combinations. | |
Finally, the LAW instruction has the format | |
LAW {I} immediate | |
where immediate is in the range 0 to 07777. | |
7.4 Character Sets | |
The PDP-1's console was a Frieden Flexowriter; its character encoding | |
was known as FIODEC. The PDP-1's line printer used a modified Hollerith | |
character set. The following table provides equivalences between ASCII | |
characters and the PDP-1's I/O devices. In the console table, UC stands | |
for upper case. | |
PDP-1 PDP-1 | |
ASCII console line printer | |
000 - 007 none none | |
bs 075 none | |
tab 036 none | |
012 - 014 none none | |
cr 077 none | |
016 - 037 none none | |
space 000 000 | |
! {OR} UC+005 none | |
" UC+001 none | |
# {IMPLIES} UC+004 none | |
$ none none | |
% none none | |
& {AND} UC+006 none | |
' UC+002 none | |
( 057 057 | |
) 055 055 | |
* {TIMES} UC+073 072 | |
+ UC+054 074 | |
, 033 033 | |
- 054 054 | |
. 073 073 | |
/ 021 021 | |
0 020 020 | |
1 001 001 | |
2 002 002 | |
3 003 003 | |
4 004 004 | |
5 005 005 | |
6 006 006 | |
7 007 007 | |
8 010 010 | |
9 011 011 | |
: none none | |
; none none | |
< UC+007 034 | |
= UC+033 053 | |
> UC+010 034 | |
? UC+021 037 | |
@ {MID DOT} 040 {MID DOT} 040 | |
A UC+061 061 | |
B UC+062 062 | |
C UC+063 063 | |
D UC+064 064 | |
E UC+065 065 | |
F UC+066 066 | |
G UC+067 067 | |
H UC+070 070 | |
I UC+071 071 | |
J UC+041 041 | |
K UC+042 042 | |
L UC+043 043 | |
M UC+044 044 | |
N UC+045 045 | |
O UC+046 046 | |
P UC+047 047 | |
Q UC+050 050 | |
R UC+051 051 | |
S UC+022 022 | |
T UC+023 023 | |
U UC+024 024 | |
V UC+025 025 | |
W UC+026 026 | |
X UC+027 027 | |
Y UC+030 030 | |
Z UC+031 031 | |
[ UC+057 none | |
\ {OVERLINE} 056 {OVERLINE} 056 | |
] UC+055 none | |
^ {UP ARROW} UC+011 {UP ARROW} 035 | |
_ UC+040 UC+040 | |
` {RT ARROW} UC+020 036 | |
a 061 none | |
b 062 none | |
c 063 none | |
d 064 none | |
e 065 none | |
f 066 none | |
g 067 none | |
h 070 none | |
i 071 none | |
j 041 none | |
k 042 none | |
l 043 none | |
m 044 none | |
n 045 none | |
o 046 none | |
p 047 none | |
q 050 none | |
r 051 none | |
s 022 none | |
t 023 none | |
u 024 none | |
v 025 none | |
w 026 none | |
x 027 none | |
y 030 none | |
z 031 none | |
{ none none | |
| UC+056 076 | |
} none none | |
~ UC+003 013 | |
del 075 none | |
8. 18b PDP Features | |
The other four 18b PDP's (PDP-4, PDP-7, PDP-9, PDP-15) are very similar | |
and are configured as follows: | |
system device simulates | |
name(s) | |
PDP-4 CPU PDP-4 CPU with 8KW of memory | |
PTR,PTP integral paper tape/Type 75 punch | |
TTI,TTO KSR28 console terminal (Baudot code) | |
LPT Type 62 line printer (Hollerith code) | |
CLK integral real-time clock | |
PDP-7 CPU PDP-7 CPU with 32KW of memory | |
- Type 177 extended arithmetic element (EAE) | |
- Type 148 memory extension | |
PTR,PTP Type 444 paper tape reader/Type 75 punch | |
TTI,TTO KSR 33 console terminal | |
LPT Type 647 line printer | |
CLK integral real-time clock | |
DRM Type 24 serial drum | |
PDP-9 CPU PDP-9 CPU with 32KW of memory | |
- KE09A extended arithmetic element (EAE) | |
- KF09A automatic priority interrupt (API) | |
- KG09B memory extension | |
- KP09A power detection | |
- KX09A memory protection | |
PTR,PTP PC09A paper tape reader/punch | |
TTI,TTO KSR 33 console terminal | |
TTI1,TTO1 LT09A second console terminal | |
LPT Type 647E line printer | |
CLK integral real-time clock | |
RF RF09/RS09 fixed-head disk | |
DT TC02/TU55 DECtape | |
MT TC59/TU10 magnetic tape | |
PDP-15 CPU PDP-15 CPU with 32KW of memory | |
- KE15 extended arithmetic element (EAE) | |
- KA15 automatic priority interrupt (API) | |
- KF15 power detection | |
- KM15 memory protection | |
PTR,PTP PC15 paper tape reader/punch | |
TTI,TTO KSR 35 console terminal | |
TTI1,TTO1 LT15 second console terminal | |
LPT LP15 line printer | |
CLK integral real-time clock | |
RP RP15/RP02 disk pack | |
RF RF15/RS09 fixed-head disk | |
DT TC15/TU56 DECtape | |
MT TC59/TU10 magnetic tape | |
The DRM, RF, RP, DT, and MT devices can be DISABLEd. | |
The 18b PDP simulators implement several unique stop conditions: | |
- an unimplemented instruction is decoded, and register | |
STOP_INST is set | |
- more than XCTMAX nested executes are detected during | |
instruction execution | |
The PDP-4 and PDP-7 loaders support only RIM format tapes. The PDP-9 | |
and PDP-15 support both RIM and BIN format tapes. If the file extension | |
is .RIM, or the -r switch is specified with LOAD, the file is assumed to | |
be RIM format; if the file extension is not .RIM, or if the -b switch is | |
specified, the file is assumed to be BIN format. | |
8.1 CPU | |
The CPU options are the presence of the EAE, the presense of the API (for | |
the PDP-9 and PDP-15), and the size of main memory. | |
SET CPU EAE enable EAE | |
SET CPU NOEAE disable EAE | |
SET CPU API enable API | |
SET CPU NOAPI disable API | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
SET CPU 20K set memory size = 20K | |
SET CPU 24K set memory size = 24K | |
SET CPU 28K set memory size = 28K | |
SET CPU 32K set memory size = 32K | |
SET CPU 48K set memory size = 48K | |
SET CPU 64K set memory size = 64K | |
SET CPU 80K set memory size = 80K | |
SET CPU 96K set memory size = 96K | |
SET CPU 112K set memory size = 112K | |
SET CPU 128K set memory size = 128K | |
Memory sizes greater than 8K are only available on the PDP-7, PDP-9, and | |
PDP-15; memory sizes greater than 32KW are only available on the PDP-15. | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 8K for the PDP-4, 32K | |
for the PDP-7 and PDP-9, and 128K for the PDP-15. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
system name size comments | |
all PC addr program counter | |
7,9 PC 15 program counter | |
15 PC 17 program counter | |
all AC 18 accumulator | |
7,9,15 MQ 18 multiplier-quotient | |
7,9,15 SC 6 shift counter | |
7,9,15 EAE_AC_SIGN 1 EAE AC sign | |
all L 1 link | |
7,9 EXTM 1 extend mode | |
9 EXTM_INIT 1 extend mode value after reset | |
15 BANKM 1 bank mode | |
15 BANKM_INIT 1 bank mode value after reset | |
7 TRAPM 1 trap mode | |
9,15 USMD 1 user mode | |
9,15 USMDBUF 1 user mode buffer | |
9,15 BR addr memory protection bounds | |
7,9,15 TRAPP 1 trap pending | |
9,15 NEXM 1 non-existent memory violation | |
9,15 PRVN 1 privilege violation | |
7,9 EMIRP 1 EMIR instruction pending | |
9,15 RESTP 1 DBR or RES instruction pending | |
15 XR 18 index register | |
15 LR 18 limit register | |
all SR 18 front panel switches | |
all INT 32 interrupt requests | |
all IORS 18 IORS register | |
all ION 1 interrupt enable | |
all ION_DELAY 2 interrupt enable delay | |
all OLDPC addr PC prior to last transfer | |
all STOP_INST 1 stop on undefined instruction | |
all BREAK 18 breakpoint address (777777 to disable) | |
all WRU 8 interrupt character | |
"addr" signifies the address width of the system (13b for the PDP-4, 15b for | |
the PDP-7 and PDP-9, 17b for the PDP-15). | |
8.2 Programmed I/O Devices | |
The PDP-9 and PDP-15 have two terminals (TTI/TTO, TTI1/TTO1). At any | |
moment, only one terminal is active. It can receive input from the | |
keyboard; it can output to the simulator window. The inactive console | |
cannot receive input from the keyboard and outputs to an internal buffer | |
(maximum 4K characters). | |
Control is switched among terminals with a SET TTI{n} CONSOLE or SET | |
TTO{n} CONSOLE command: | |
At startup, active console is TTI/TTO | |
SET TTI1 CONSOLE Active console is now TTI1/TTO1 | |
SET TTO CONSOLE Active console is now TTI/TTO | |
When control is switched to an inactive terminal, any buffered output | |
is printed when simulation resumes. | |
8.2.1 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
On the PDP-4 and PDP-7, the paper tape reader supports the BOOT command. | |
BOOT PTR copies the RIM loader into memory and starts it running, while | |
BOOT -F PTR copies the funny format binary loader into memory and starts | |
it running. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ERR 1 error flag (PDP-9, PDP-15 only) | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
8.2.2 Paper Tape Punch (PTP) | |
The ppaper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ERR 1 error flag (PDP-9, PDP-15 only) | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
8.2.3 Terminal Input (TTI, TTI1) | |
The active terminal input polls the console keyboard for input. The | |
inactive terminal input cannot receive characters. The terminal inputs | |
have one option, UC; when set, it automatically converts lower case input | |
to upper case. | |
The PDP-9 and PDP-15 operated the primary terminal (TTI/TTO), by default, | |
as half-duplex. For backward compatibility, on the PDP-9 and PDP-15 | |
the first terminal input has a second option, FDX; when set, it operates | |
the terminal input in full-duplex mode. The second terminal is always | |
full duplex. | |
The terminal inputs implement these registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
POS 31 number of characters input | |
TIME 24 keyboard polling interval | |
8.2.4 Terminal Output (TTO, TTO1) | |
The active terminal output writes to the simulator window. The inactive | |
terminal output buffers characters. The terminal outputs have one option, | |
UC; when set, it suppresses lower case output (so that ALTMODE is not | |
echoed as }). | |
The terminal outputs implement these registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
POS 31 number of chararacters output | |
TIME 24 time from I/O initiation to interrupt | |
8.2.5 Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The PDP-4 used a Type 62 printer controller, with these registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
SPC 1 spacing done flag | |
BPTR 6 print buffer pointer | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
LBUF[0:119] 8 line buffer | |
The PDP-7 and PDP-7 used a Type 647 printer controller, with these | |
registers: | |
name size comments | |
BUF 8 last data item processed | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ENABLE 1 interrupt enable (PDP-9 only) | |
ERR 1 error flag | |
BPTR 7 print buffer pointer | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
LBUF[0:119] 8 line buffer | |
The PDP-15 used an LP15 printer controller, with these registers: | |
name size comments | |
STA 18 status register | |
MA 18 DMA memory address | |
INT 1 interrupt pending flag | |
ENABLE 1 interrupt enable | |
LCNT 8 line counter | |
BPTR 7 print buffer pointer | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
LBUF[0:131] 8 line buffer | |
For all three models, error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
8.2.6 Real-Time Clock (CLK) | |
The real-time clock (CLK) implements these registers: | |
name size comments | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ENABLE 1 clock enable | |
TIME 24 clock frequency | |
TPS 8 ticks per second (60 or 50) | |
The real-time clock autocalibrates; the clock interval is adjusted up or | |
down so that the clock tracks actual elapsed time. | |
8.3 RP15/RP02 Disk Pack (RP) | |
RP15 options include the ability to make units write enabled or write locked: | |
SET RPn LOCKED set unit n write locked | |
SET RPn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The RP15 implements these registers: | |
name size comments | |
STA 18 status A | |
STB 18 status B | |
DA 18 disk address | |
MA 18 current memory address | |
WC 18 word count | |
INT 1 interrupt pending flag | |
BUSY 1 control busy flag | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
8.4 Type 24 Serial Drum (DRM) | |
The serial drum (DRM) implements these registers: | |
name size comments | |
DA 9 drum address (sector number) | |
MA 15 current memory address | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
ERR 1 error flag | |
WLK 32 write lock switches | |
TIME 24 rotational latency, per word | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
Drum data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
8.5 RF09/RF15/RS09 Fixed Head Disk (RF) | |
The RF09/RF15 implements these registers: | |
name size comments | |
STA 18 status | |
DA 21 current disk address | |
MA 18 memory address (in memory) | |
WC 18 word count (in memory) | |
BUF 18 data buffer (diagnostic only) | |
INT 1 interrupt pending flag | |
WLK0..7 16 write lock switches for disks 0..7 | |
TIME 24 rotational delay, per word | |
BURST 1 burst flag | |
STOP_IOE 1 stop on I/O error | |
The RF09/RF15 is a three-cycle data break device. If BURST = 0, word | |
transfers are scheduled individually; if BURST = 1, the entire transfer | |
occurs in a single data break. | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
RF15/RF09 data files are buffered in memory; therefore, end of file and OS | |
I/O errors cannot occur. | |
8.6 TC02/TU55 and TC15/TU56 DECtape (DT) | |
DECtapes drives are numbered 1-8; in the simulator, drive 8 is unit 0. | |
DECtape options include the ability to make units write enabled or write | |
locked. | |
SET DTn LOCKED set unit n write locked | |
SET DTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The TC02/TC15 supports both PDP-8 format and PDP-9/11/15 format DECtape | |
images. ATTACH tries to determine the tape format from the DECtape image; | |
the user can force a particular format with switches: | |
-f foreign (PDP-8) format | |
-n native (PDP-9/11/15) format | |
The DECtape controller is a data-only simulator; the timing and mark | |
track, and block header and trailer, are not stored. Thus, the WRITE | |
TIMING AND MARK TRACK function is not supported; the READ ALL function | |
always returns the hardware standard block header and trailer; and the | |
WRITE ALL function dumps non-data words into the bit bucket. | |
The DECtape controller implements these registers: | |
name size comments | |
DTSA 12 status register A | |
DTSB 12 status register B | |
INT 1 interrupt pending flag | |
ENB 1 interrupt enable flag | |
DTF 1 DECtape flag | |
ERF 1 error flag | |
CA 18 current address (memory location 30) | |
WC 18 word count (memory location 31) | |
LTIME 31 time between lines | |
ACTIME 31 time to accelerate to full speed | |
DCTIME 31 time to decelerate to a full stop | |
SUBSTATE 2 read/write command substate | |
POS0..7 31 position, in lines, units 0..7 | |
STATE0..7 31 unit state, units 0-7 | |
It is critically important to maintain certain timing relationships | |
among the DECtape parameters, or the DECtape simulator will fail to | |
operate correctly. | |
- LTIME must be at least 6 | |
- ACTIME must be less than DCTIME, and both need to be at | |
least 100 times LTIME | |
8.7 TC59/TU10 Magnetic Tape (MT) | |
Magnetic tape options include the ability to make units write enabled or | |
or write locked. | |
SET MTn LOCKED set unit n write locked | |
SET MTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The magnetic tape controller implements these registers: | |
name size comments | |
CMD 18 command | |
STA 18 main status | |
MA 18 memory address (in memory) | |
WC 18 word count (in memory) | |
INT 1 interrupt pending flag | |
STOP_IOE 1 stop on I/O error | |
TIME 24 record delay | |
UST0..7 24 unit status, units 0..n | |
POS0..7 31 position, units 0..n | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
8.8 Symbolic Display and Input | |
The 18b PDP simulators implement symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as (sixbit) character string | |
-m display instruction mnemonics | |
The PDP-15 also recognizes an additional switch: | |
-p display as packed ASCII (five 7b ASCII | |
characters in two 18b words) | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c three character sixbit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
The PDP-15 also recognizes an additional input mode: | |
# or -p five character packed ASCII string in | |
two 18b words | |
Instruction input uses standard 18b PDP assembler syntax. There are six | |
instruction classes: memory reference, EAE, index (PDP-15 only), IOT, | |
operate, and LAW. | |
Memory reference instructions have the format | |
memref {I/@} address{,X} | |
where I (PDP-4, PDP-7, PDP-9) /@ (PDP-15) signifies indirect reference, | |
and X signifies indexing (PDP-15 in page mode only). The address is an | |
octal number in the range 0 - 017777 (PDP-4, PDP-7, PDP-9, and PDP-15 in | |
bank mode) or 0 - 07777 (PDP-15 in page mode). | |
IOT instructions consist of single mnemonics, eg, KRB, TLS. IOT instructions | |
may be or'd together | |
iot iot iot... | |
IOT's may also include the number 10, signifying clear the accumulator | |
iot 10 | |
The simulator does not check the legality of IOT combinations. IOT's for | |
which there is no opcode may be specified as IOT n, where n is an octal | |
number in the range 0 - 07777. | |
EAE instructions have the format | |
eae {+/- shift count} | |
EAE instructions may be or'd together | |
eae eae eae... | |
The simulator does not check the legality of EAE combinations. EAE's for | |
which there is no opcode may be specified as EAE n, where n is an octal | |
number in the range 0 - 037777. | |
Index instructions (PDP-15 only) have the format | |
index {immediate} | |
The immediate, if allowed, must be in the range of -0400 to +0377. | |
Operate instructions have the format | |
opr opr opr... | |
The simulator does not check the legality of the proposed combination. The | |
operands for MUY and DVI must be deposited explicitly. | |
Finally, the LAW instruction has the format | |
LAW immediate | |
where immediate is in the range of 0 to 017777. | |
8.8 Character Sets | |
The PDP-4's console was an ASR-28 Teletype; its character encoding was | |
Baudot. The PDP-4's line printer used a modified Hollerith character | |
set. The PDP-7's and PDP-9's consoles were KSR-33 Teletypes; their | |
character sets were basically ASCII. The PDP-7's and PDP-9's line | |
printers used sixbit encoding (ASCII codes 040 - 0137 masked to six | |
bits). The PDP-15's I/O devices were all ASCII. The following table | |
provides equivalences between ASCII characters and the PDP-4's I/O devices. | |
In the console table, FG stands for figures (upper case). | |
PDP-4 PDP-4 | |
ASCII console line printer | |
000 - 006 none none | |
bell FG+024 none | |
010 - 011 none none | |
lf 010 none | |
013 - 014 none none | |
cr 002 none | |
016 - 037 none none | |
space 004 000 | |
! FG+026 none | |
" FG+021 none | |
# FG+005 none | |
$ FG+062 none | |
% none none | |
& FG+013 none | |
' FG+032 none | |
( FG+036 057 | |
) FG+011 055 | |
* none 072 | |
+ none 074 | |
, FG+006 033 | |
- FG+030 054 | |
. FG+007 073 | |
/ FG+027 021 | |
0 FG+015 020 | |
1 FG+035 001 | |
2 FG+031 002 | |
3 FG+020 003 | |
4 FG+012 004 | |
5 FG+001 005 | |
6 FG+025 006 | |
7 FG+034 007 | |
8 FG+014 010 | |
9 FG+003 011 | |
: FG+016 none | |
; FG+017 none | |
< none 034 | |
= none 053 | |
> none 034 | |
? FG+023 037 | |
@ none {MID DOT} 040 | |
A 030 061 | |
B 023 062 | |
C 016 063 | |
D 022 064 | |
E 020 065 | |
F 026 066 | |
G 013 067 | |
H 005 070 | |
I 014 071 | |
J 032 041 | |
K 036 042 | |
L 011 043 | |
M 007 044 | |
N 006 045 | |
O 003 046 | |
P 015 047 | |
Q 035 050 | |
R 012 051 | |
S 024 022 | |
T 001 023 | |
U 034 024 | |
V 017 025 | |
W 031 026 | |
X 027 027 | |
Y 025 030 | |
Z 021 031 | |
[ none none | |
\ none {OVERLINE} 056 | |
] none none | |
^ none {UP ARROW} 035 | |
_ none UC+040 | |
0140 - 0177 none none | |
9. IBM 1401 Features | |
The IBM 1401 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU IBM 1401 CPU with 16K of memory | |
CDR,CDP IBM 1402 card reader/punch | |
LPT IBM 1403 line printer | |
INQ IBM 1407 inquiry terminal | |
MT IBM 729 7-track magnetic tape controller with six drives | |
The IBM 1401 simulator implements many unique stop conditions. On almost | |
any kind of error the simulator stops: | |
unimplemented opcode | |
reference to non-existent memory | |
reference to non-existent device | |
no word mark under opcode | |
invalid A address | |
invalid B address | |
invalid instruction length | |
invalid modifier character | |
invalid branch address | |
invalid magtape unit number | |
invalid magtape record length | |
write to locked magtape drive | |
skip to unpunched carriage control tape channel | |
card reader hopper empty | |
address register wrap-around | |
single character A field in MCE | |
single character B field in MCE | |
hanging $ in MCE with EPE enabled | |
I/O check with I/O stop switch set | |
The LOAD and DUMP commands are not implemented. | |
9.1 CPU | |
The CPU options include a number of special features and the size of main | |
memory. Note that the Modify Address special feature is always included | |
when memory size is greater than 4K. | |
SET CPU XSA enable advanced programming special feature | |
SET CPU NOXSA disable advanced programming | |
SET CPU HLE enable high/low/equal special feature | |
SET CPU NOHLE disable high/low/equal | |
SET CPU BBE enable branch on bit equal special feature | |
SET CPU NOBBE disable branch on bit equal | |
SET CPU MR enable move record special feature | |
SET CPU NOMR disable move record | |
SET CPU EPE enable extended print edit special feature | |
SET CPU NOEPE disable extended print edit | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initially, memory size is 16K, and all special | |
features are enabled. | |
Memory is implemented as 7 bit BCD characters, as follows: | |
6 5 4 3 2 1 0 | |
word B bit A bit 8 4 2 1 | |
mark <-- zone --> <-------- digit --------> | |
In BCD, the decimal digits 0-9 are (octal) values 012, 001, 002, 003, 004, | |
005, 006, 007, 010, 011, respectively. Signs are encoded in the zone bits, | |
with 00, 01, and 11 being positive, and 10 being negative. | |
CPU registers include the visible state of the processor. The 1401 has no | |
interrupt system. | |
name size comments | |
IS 14 instruction storage address register (PC) | |
AS 14 A storage address register | |
BS 14 B storage address register | |
ASERR 1 AS invalid flag | |
BSERR 1 BS invalid flag | |
SSA 1 sense switch A | |
SSB 1 sense switch B | |
SSC 1 sense switch C | |
SSD 1 sense switch D | |
SSE 1 sense switch E | |
SSF 1 sense switch F | |
SSG 1 sense switch G | |
EQU 1 equal compare indicator | |
UNEQ 1 unequal compare indicator | |
HIGH 1 high compare indicator | |
LOW 1 low compare indicator | |
OVF 1 overflow indicator | |
IOCHK 1 I/O check switch | |
PRCHK 1 process check switch | |
OLDIS 1 IS prior to last branch | |
BREAK 17 breakpoint address (1000000 to disable) | |
WRU 8 interrupt character | |
9.2 1402 Card Reader/Punch (CDR, CDP, STKR) | |
The IBM 1402 card/reader punch is simulated as three independent devices: | |
the card reader (CDR), the card punch (CDP), and the reader and punch | |
stackers (STKR). STRK units 0, 1, 2, and 4 correspond to the reader | |
normal stacker, reader stacker 1, shared stacker 2/8, and punch stacker | |
4, respectively. | |
The card reader supports the BOOT command. BOOT CDR reads a card image | |
into locations 1-80, sets a word mark under location 1, clears storage, | |
and then transfers control to location 1. | |
The card reader reads data from disk files, while the punch and stackers | |
write data to disk files. Cards are simulated as ASCII text lines with | |
terminating newlines; column binary is not supported. For each unit, | |
the POS register specifies the number of the next data item to be read or | |
written. Thus, by changing POS, the user can backspace or advance these | |
devices. | |
The reader/punch registers are: | |
device name size comments | |
CDR LAST 1 last card indicator | |
ERR 1 error indicator | |
S1 1 stacker 1 select flag | |
S2 1 stacker 2 select flag | |
POS 31 position | |
TIME 24 delay window for stacker select | |
BUF[0:79] 8 reader buffer | |
CDP ERR 1 error indicator | |
S4 1 stacker 4 select flag | |
S8 1 stacker 8 select flag | |
STKR POS0 31 position, normal reader stack | |
POS1 31 position, reader stacker 1 | |
POS2 31 position, shared stacker 2/8 | |
POS4 31 position, punch stacker 4 | |
Error handling is as follows: | |
device error processed as | |
reader end of file if SSA set, set LAST indicator | |
on next Read, report error and stop | |
reader,punch not attached report error and stop | |
OS I/O error print error message | |
if IOCHK set, report error and stop | |
otherwise, set ERR indicator | |
stacker not attached ignored | |
OS I/O error print error message | |
if IOCHK set, report error and stop | |
9.3 1403 Line Printer (LPT) | |
The IBM 1403 line printer (LPT) writes its data, converted to ASCII, to | |
a disk file. The line printer supports three different print character | |
sets or "chains": | |
SET LPT PCF full 64 character chain | |
SET LPT PCA 48 character business chain | |
SET LPT PCH 48 character FORTRAN chain | |
In addition, the line printer can be programmed with a carriage control | |
tape. The LOAD command loads a new carriage control tape: | |
LOAD <file> load carriage control tape file | |
The format of a carriage control tape consists of multiple lines. Each | |
line contains an optional repeat count, enclosed in parentheses, optionally | |
followed by a series of column numbers separated by commas. Column numbers | |
must be between 1 and 12; a column number of zero denotes top of form. The | |
following are all legal carriage control specifications: | |
<blank line> no punch | |
(5) 5 lines with no punches | |
1,5,7,8 columns 1, 5, 7, 8 punched | |
(10)2 10 lines with column 2 punched | |
1,0 column 1 punched; top of form | |
The default form is 66 lines long, with column 1 and the top of form mark | |
on line 1, and the rest blank. | |
The line printer registers are: | |
name size comments | |
LINES 8 number of newlines after next print | |
LFLAG 1 carriage control flag (1 = skip, 0 = space) | |
CCTP 8 carriage control tape pointer | |
CCTL 8 carriage control tape length (read only) | |
ERR 1 error indicator | |
POS 31 position | |
CCT[0:131] 32 carriage control tape array | |
Error handling is as follows: | |
error processed as | |
not attached report error and stop | |
OS I/O error print error message | |
if IOCHK set, report error and stop | |
otherwise, set ERR indicator | |
9.4 1407 Inquiry Terminal (INQ) | |
The IBM 1407 inquiry terminal (INQ) is a half-duplex console. It polls | |
the controling keyboard of the simulator periodically for inquiry requests. | |
The inquiry terminal registers are: | |
name size comments | |
INQC 7 inquiry request character (initially ESC) | |
INR 1 inquiry request indicator | |
INC 1 inquiry cleared indicator | |
TIME 24 polling interval | |
When the 1401 CPU requests input from the keyboard, the message [Enter] | |
is printed out, followed by a new line. The CPU hangs waiting for input | |
until either the return/enter key is pressed, or the inquiry request | |
character is typed in. The latter cancels the type-in and sets INC. | |
The inquiry terminal has no errors. | |
9.5 729 Magnetic Tape (MT) | |
The magnetic tape controller supports six drives, numbered 1 through 6. | |
Magnetic tape options include the ability to make units write enabled or | |
or write locked. | |
SET MTn LOCKED set unit n write locked | |
SET MTn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. The magnetic | |
tape simulator supports the BOOT command. BOOT MT reads the first | |
record off tape, starting at location 1, and then branches to it. | |
The magnetic tape controller implements these registers: | |
name size comments | |
END 1 end of file indicator | |
ERR 1 error indicator | |
PAR 1 parity error indicator | |
POS1..6 31 position, drives 1..6 | |
Error handling is as follows: | |
error processed as | |
not attached report error and stop | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error print error message | |
if IOCHK set, report error and stop | |
otherwise, set ERR indicator | |
9.6 Symbolic Display and Input | |
The IBM 1401 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-c display as single character | |
(BCD for CPU and MT, ASCII for others) | |
-s display as wordmark terminated BCD string | |
(CPU only) | |
-m display instruction mnemonics | |
(CPU only) | |
In a CPU character display, word marks are denoted by ~. | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or " or -c or -s characters (BCD for CPU and MT, ASCII | |
for others) | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input is free format, with spaces separating fields. There | |
are six instruction formats: 1, 2, 4, 5, 7, and 8 characters: | |
1 character opcode | |
2 character opcode 'modifier | |
4 character opcode address | |
5 character opcode address 'modifier | |
7 character opcode address address | |
8 character opcode address address 'modifier | |
Addresses are always decimal, except for special I/O addresses in the A | |
field, which may be specified as %xy, where x denotes the device and y | |
the unit number. | |
For the CPU, string input may encompass multiple characters. A word mark | |
is denoted by ~ and must precede the character to be marked. All other | |
devices can only accept single character input, without word marks. | |
9.7 Character Sets | |
The IBM 1401 used a 6b character code called BCD (binary coded decimal). | |
Some of the characters have no equivalent in ASCII and require different | |
representations: | |
BCD ASCII IBM 1401 print | |
code representation character chains | |
00 space | |
01 1 | |
02 2 | |
03 3 | |
04 4 | |
05 5 | |
06 6 | |
07 7 | |
10 8 | |
11 9 | |
12 0 | |
13 # = in H chain | |
14 @ ' in H chain | |
15 : blank in A, H chains | |
16 > blank in A, H chains | |
17 ( tape mark blank in A, H chains | |
20 ^ alternate blank blank in A, H chains | |
21 / | |
22 S | |
23 T | |
24 U | |
25 V | |
26 W | |
27 X | |
30 Y | |
31 Z | |
32 ' record mark | |
33 , | |
34 % ( in H chain | |
35 = word mark blank in A, H chains | |
36 \ blank in A, H chains | |
37 + blank in A, H chains | |
40 - | |
41 J | |
42 K | |
43 L | |
44 M | |
45 N | |
46 O | |
47 P | |
50 Q | |
51 R | |
52 ! | |
53 $ | |
54 * | |
55 ] blank in A, H chains | |
56 ; blank in A, H chains | |
57 _ delta blank in A, H chains | |
60 & | |
61 A | |
62 B | |
63 C | |
64 D | |
65 E | |
66 F | |
67 G | |
70 H | |
71 I | |
72 ? | |
73 . | |
74 ) lozenge | |
75 [ blank in A, H chains | |
76 < blank in A, H chains | |
77 " group mark blank in A, H chains | |
10. HP2100 Features | |
The HP2100 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU 2116, 2100, or 21MX CPU with 32KW memory | |
DMA0, DMA1 dual channel DMA controller | |
PTR,PTP 12597A paper tape reader/punch | |
TTY 12631C buffered teleprinter | |
LPT 12653A line printer | |
CLK 12539A/B/C time base generator | |
DP 12557A cartridge disk controller with four drives | |
MT 12559C magnetic tape controller with one drives | |
The HP2100 simulator implements several unique stop conditions: | |
- decode of an undefined instruction, and STOP_INST is et | |
- reference to an undefined I/O device, and STOP_DEV is set | |
- more than INDMAX indirect references are detected during | |
memory reference address decoding | |
The HP2100 loader supports standard absolute binary format. The DUMP | |
command is not implemented. | |
10.1 CPU | |
CPU options include choice of instruction set and memory size. | |
SET CPU 2116 2116 instructions | |
SET CPU 2100 2100 instructions | |
SET CPU 21MX 21MX instructions | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 16K set memory size = 16K | |
SET CPU 24K set memory size = 24K | |
SET CPU 32K set memory size = 32K | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 32K. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
P 15 program counter | |
A 16 A register | |
B 16 B register | |
X 16 X index register (21MX) | |
Y 16 Y index register (21MX) | |
S 16 switch/display register | |
E 1 extend flag | |
O 1 overflow flag | |
ION 1 interrupt enable flag | |
ION_DEFER 1 interrupt defer flag | |
IADDR 6 most recent interrupting device | |
MPCTL 1 memory protection enable (2100, 21MX) | |
MPFLG 1 memory protection flag (2100, 21MX) | |
MPFBF 1 memory protection flag buffer (2100, 21MX) | |
MFENCE 15 memory protection fence (2100, 21MX) | |
MADDR 16 memory protection error address (2100, 21MX) | |
STOP_INST 1 stop on undefined instruction | |
STOP_DEV 1 stop on undefined device | |
INDMAX 1 indirect address limit | |
OLDP 15 PC prior to last JMP, JSB, or interrupt | |
BREAK 16 breakpoint address (177777 to disable) | |
WRU 8 interrupt character | |
10.2 DMA Controllers | |
The HP2100 includes two DMA channel controllers (DMA0 and DMA1). Each | |
DMA channel has the following visible state: | |
name size comments | |
CMD 1 channel enabled | |
CTL 1 interrupt enabled | |
FLG 1 channel ready | |
FBF 1 channel ready buffer | |
CW1 1 command word 1 | |
CW2 1 command word 2 | |
CW3 1 command word 3 | |
10.3 Variable Device Assignments | |
On the HP2100, I/O device take their device numbers from the backplane | |
slot they are plugged into. Thus, device number assignments vary | |
considerably from system to system, and software package to software | |
package. The HP2100 simulator supports dynamic device reassignment | |
with the command: | |
SET <controller> DEVNO | |
This initiates a dialog that displays the current device number and | |
allows the user to assign a new one: | |
Device number: old <new>(cr) | |
The new device number must be in the range 010..077 (octal) and must | |
not be currently assigned to another device. For devices with two | |
device numbers, only the lower numbered device number can be changed; | |
the higher is automatically set to the lower + 1. | |
10.4 Programmed I/O Devices | |
10.4.1 12597A-002 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. | |
Thus, by changing POS, the user can backspace or advance the reader. | |
The paper tape reader supports the BOOT command. BOOT PTR copies the | |
absolute binary loader into memory and starts it running. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CMD 1 reader enable | |
CTL 1 device/interrupt enable | |
FLG 1 device ready | |
FBF 1 device ready buffer | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
DEVNO 6 current device number (read only) | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
10.4.2 12597A-005 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CMD 1 punch enable | |
CTL 1 device/interrupt enable | |
FLG 1 device ready | |
FBF 1 device ready buffer | |
POS 31 position in the output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
DEVNO 6 current device number (read only) | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
10.4.3 12631C Buffered Teleprinter (TTY) | |
The console teleprinter has three units: keyboard (unit 0), printer | |
(unit 1), and punch (unit 2). The keyboard reads from, and the | |
printer writes to, the controlling console port. The punch writes | |
to a disk file. The keyboard has one option, UC; when set, it | |
automatically converts lower case input to upper case. This is on | |
by default. | |
The terminal implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
MODE 16 mode | |
CTL 1 device/interrupt enable | |
FLG 1 device ready | |
FBF 1 device ready buffer | |
KPOS 31 number of characters input | |
KTIME 24 keyboard polling interval | |
TPOS 31 number of characters printed | |
TTIME 24 time from I/O initiation to interrupt | |
PPOS 31 position in the punch output file | |
STOP_IOE 1 punch stop on I/O error | |
DEVNO 6 current device number (read only) | |
Error handling for the punch is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
10.4.4 12653A Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CMD 1 printer enable | |
CTL 1 device/interrupt enable | |
FLG 1 device ready | |
FBF 1 device ready buffer | |
POS 31 position in the output file | |
CTIME 24 time between characters | |
PTIME 24 time for a print operation | |
STOP_IOE 1 stop on I/O error | |
DEVNO 6 current device number (read only) | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
10.4.5 12539A/B/C Time Base Generator (CLK) | |
The time base generator (CLK) implements these registers: | |
name size comments | |
SEL 3 time base select | |
CTL 1 device/interrupt enable | |
FLG 1 device ready | |
FBF 1 device ready buffer | |
ERR 1 error flag | |
TIME0..TIME7 31 clock intervals, select = 0..7 | |
DEVNO 6 current device number (read only) | |
10.5 12557A Cartridge Disk (DP) | |
The 12557A cartridge disk has two separate devices, a data channel and | |
a device controller. The data channel includes a 128-word (one sector) | |
buffer for reads and writes. The device controller includes the four | |
disk drives. Disk drives can be REMOVEd or ADDed to the configuration. | |
The data channel implements these registers: | |
name size comments | |
IBUF 16 input buffer | |
OBUF 16 output buffer | |
BPTR 7 sector buffer pointer | |
CMD 1 channel enable | |
CTL 1 interrupt enable | |
FLG 1 channel ready | |
FBF 1 channel ready buffer | |
DEVNO 6 current device number (read only) | |
The device controller implements these registers: | |
name size comments | |
OBUF 16 output buffer | |
BUSY 3 busy (unit #, + 1, of active unit) | |
RARC 8 record address register cylinder | |
RARH 2 record address register head | |
RARS 4 record address register sector | |
CNT 5 check record count | |
CMD 1 controller enable | |
CTL 1 interrupt enable | |
FLG 1 controller ready | |
FBF 1 controller ready buffer | |
EOC 1 end of cylinder pending | |
CTIME 24 command delay time | |
STIME 24 seek delay time, per cylinder | |
XTIME 24 interword transfer time | |
STA0 16 drive 0 status | |
STA1 16 drive 1 status | |
STA2 16 drive 2 status | |
STA3 16 drive 3 status | |
DEVNO 6 current device number (read only) | |
Error handling is as follows: | |
error processed as | |
not attached disk not ready | |
end of file assume rest of disk is zero | |
OS I/O error report error and stop | |
10.6 12559C Magnetic Tape (MT) | |
Magnetic tape options include the ability to make the unit write enabled | |
or write locked. | |
SET MT LOCKED set unit write locked | |
SET MT ENABLED set unit write enabled | |
The 12559C mag tape drive has two separate devices, a data channel and | |
a device controller. The data channel includes a maximum record sized | |
buffer for reads and writes. The device controller includes the tape | |
unit | |
The data channel implements these registers: | |
name size comments | |
FLG 1 channel ready | |
BPTR 16 buffer pointer (reads and writes) | |
BMAX 16 buffer size (writes) | |
DEVNO 6 current device number (read only) | |
The device controller implements these registers: | |
name size comments | |
FNC 8 current function | |
STA 9 tape status | |
BUF 8 buffer | |
BUSY 3 busy (unit #, + 1, of active unit) | |
CTL 1 interrupt enabled | |
FLG 1 controller ready | |
FBF 1 controller ready buffer | |
DTF 1 data transfer flop | |
FSVC 1 first service flop | |
POS 31 magtape position | |
CTIME 24 command delay time | |
XTIME 24 interword transfer delay time | |
STOP_IOE 1 stop on I/O error | |
DEVNO 6 current device number (read only) | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
10.7 Symbolic Display and Input | |
The HP2100 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as two character string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character sixbit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard HP2100 assembler syntax. There are seven | |
instruction classes: memory reference, I/O, shift, alter skip, extended | |
shift, extended memory reference, extended two address reference. | |
Memory reference instructions have the format | |
memref {C/Z} address{,I} | |
where I signifies indirect, C a current page reference, and Z a zero page | |
reference. The address is an octal number in the range 0 - 077777; if C or | |
Z is specified, the address is a page offset in the range 0 - 01777. Normally, | |
C is not needed; the simulator figures out from the address what mode to use. | |
However, when referencing memory outside the CPU (eg, disks), there is no | |
valid PC, and C must be used to specify current page addressing. | |
IOT instructions have the format | |
io device{,C} | |
where C signifies that the device flag is to be cleared. The device is an | |
octal number in the range 0 - 77. | |
Shift and alter/skip instructions have the format | |
sub-op sub-op sub-op... | |
The simulator checks that the combination of sub-opcodes is legal. | |
Extended shift instructions have the format | |
extshift count | |
where count is an octal number in the range 1 - 020. | |
Extended memory reference instructions have the format | |
extmemref address{,I} | |
where I signifies indirect addressing. The address is an octal number in | |
the range 0 - 077777. | |
Extended two address instructions have the format | |
ext2addr addr1{,I},addr2{,I} | |
where I signifies indirect addressing. Both address 1 and address 2 are | |
octal numbers in the range 0 - 077777. | |
11. Interdata 4 Features | |
The Interdata 4 simulator is not fully debugged. Lack of documentation | |
and software makes checkout very difficult. The simulator is included in | |
the hopes that a fellow enthusiast may be able to provide software or | |
additional documentation to facilitate further debug. | |
The Interdata 4 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU Interdata 4 CPU with 64KB memory | |
PT paper tape reader/punch | |
TT console terminal | |
The Interdata 4 simulator implements one unique stop condition: | |
- decode of an undefined instruction, and STOP_INST is set | |
The LOAD and DUMP command are not implemented. | |
11.1 CPU | |
The only CPU options are memory size: | |
SET CPU 8K set memory size = 8KB | |
SET CPU 16K set memory size = 16KB | |
SET CPU 24K set memory size = 24KB | |
SET CPU 32K set memory size = 32KB | |
SET CPU 48K set memory size = 48KB | |
SET CPU 64K set memory size = 64KB | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 64KB. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 16 program counter | |
R0..RF 16 general registers | |
F0, F2..FE 32 floating point registers | |
PSW 16 processor status word | |
CC 4 condition codes, PSW<12:15> | |
SR 16 switch register | |
DR 16 display register low 16 bits | |
DR1 16 display register high 16 bits | |
DRMOD 1 display mode | |
DRPOS 2 display pointer position | |
SRPOS 1 switch pointer position | |
IRQ0..IRQ7 32 interrupt requests | |
IEN0..IEN7 32 interrupt enables | |
STOP_INST 1 stop on undefined instruction | |
OLDPC 16 PC prior to last branch or interrupt | |
BREAK 17 breakpoint address (377777 to disable) | |
WRU 8 interrupt character | |
11.2 Paper Tape Reader/Punch (PT) | |
The paper tape reader and punch (PT units 0 and 1) read data from or | |
write data to disk files. The RPOS and PPOS registers specify the | |
number of the next data item to be read and written, respectively. | |
Thus, by changing RPOS or PPOS, the user can backspace or advance | |
these devices. | |
The paper tape reader supports the BOOT command. BOOT PTR copies the | |
so-called '50 loader' into memory and starts it running. | |
The paper tape controller implements these registers: | |
name size comments | |
RBUF 8 reader buffer | |
RPOS 31 reader position in the input file | |
RTIME 24 time from reader start to interrupt | |
RSTOP_IOE 1 reader stop on I/O error | |
PBUF 8 punch buffer | |
PPOS 31 punch position in the output file | |
PTIME 24 time from punch start to interrupt | |
PSTOP_IOE 1 punch stop on I/O error | |
IREQ 1 paper tape interrupt request | |
IENB 1 paper tape interrupt enable | |
RUN 1 paper tape running | |
SLEW 1 paper tape reader slew mode | |
BUSY 1 paper tape busy | |
RW 1 paper tape read/write mode | |
Error handling is as follows: | |
type error STOP_IOE processed as | |
in,out not attached 1 report error and stop | |
0 out of tape | |
in end of file 1 report error and stop | |
0 out of tape | |
in,out OS I/O error x report error and stop | |
11.3 Teletype (TT) | |
The teletype reads and writes to the controlling console port. The | |
keyboard has one option, UC; when set, it automatically converts lower | |
case input to upper case. This is on by default. | |
name size comments | |
KBUF 8 keyboard buffer | |
KPOS 31 number of characters output | |
KTIME 24 keyboard polling interval | |
TBUF 8 output buffer | |
TPOS 31 number of characters output | |
TTIME 24 time from output start to interrupt | |
IREQ 1 teletype interrupt request | |
IENB 1 teletype interrupt enable | |
HDPX 1 teletype half-duplex | |
BUSY 1 teletype busy | |
RW 1 teletype read/write mode | |
11.4 Symbolic Display and Input | |
The Interdata 4 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as two character string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character sixbit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard Interdata 4 assembler syntax. There are | |
four instruction classes: register, memory, register-register, register- | |
memory. | |
Register instructions have the format | |
rop regnum | |
where the register number is a hex digit, optionally preceded by R, | |
between 0 and F. | |
Memory instructions have the format | |
mop address{(index)} | |
where address is a hex number between 0 and 0xFFFF, and the index register | |
is a hex digit, optinally preceded by R, between 0 and F. | |
Register-register instructions have the format | |
rrop regnum,regnum | |
where the register numbers are hex digits, optionally preceded by R, | |
between 1 and F. | |
Register-memory instructions have the format | |
rmop regnum,address{(index)} | |
where the register number is a hex digit, optionally preceded by R, | |
between 0 and F, the address is a hex number between 0 and 0xFFFF, and | |
the index register is a hex digit, optionally preceded by R, between | |
1 and F. | |
12. PDP-10 Features | |
The PDP-10 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU KS10 CPU with 1MW of memory | |
PAG paging unit (translation maps) | |
UBA Unibus adapters (translation maps) | |
FE console | |
TIM timer | |
PTR,PTP PC11 paper tape reader/punch | |
LP20 LP20 line printer | |
RP RH11/RP04/RP05/RP06/RP07/RM03/RM05/RM80 controller with | |
eight drives | |
TU RH11/TM02/TU45 controller with eight drives | |
The PTR/PTP are initially DISABLEd. No other device can be DISABLEd. | |
The PDP-10 simulator implements several unique stop condition: | |
- illegal instruction (000) in kernel mode | |
- indirect addressing nesting exceeds limit | |
- execute chaining exceeds limit | |
- page fail or other error in interrupt sequence | |
- illegal instruction in interrupt sequence | |
- invalid vector pointer in interrupt sequence | |
- invalid Unibus adapter number | |
- non-existent exec or user page table address | |
The PDP-10 loader supports RIM10B format paper tapes, SAV binary files, and | |
EXE binary files. LOAD switches -r, -s, -e specify RIM10, SAV, EXE format, | |
respectively. If no switch is specified, the LOAD command checks the file | |
extension; .RIM, .SAV, .EXE specify RIM10, SAV, EXE format, respectively. | |
If no switch specified, and no extension matches, the LOAD command checks | |
the file format to try to determine the file type. | |
12.1 CPU | |
The CPU options allow the user to specify standard microcode, standard | |
microcode with a bug fix for a boostrap problem in TOPS-20 V4.1, or ITS | |
microcode | |
SET CPU STANDARD Standard microcode | |
SET CPU TOPS20V41 Standard microcode with TOPS-20 V4.1 bug fix | |
SET CPU ITS ITS compatible microcode | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
PC 18 program counter | |
FLAGS 18 processor flags (<13:17> unused) | |
AC0..AC17 36 accumulators | |
IR 36 instruction register | |
EBR 18 executive base register | |
PGON 1 paging enabled flag | |
T20P 1 TOPS-20 paging | |
UBR 18 user base register | |
CURAC 3 current AC block | |
PRVAC 3 previous AC block | |
SPT 36 shared pointer table | |
CST 36 core status table | |
PUR 36 process update register | |
CSTM 36 CST mask | |
HSB 18 halt status block address | |
DBR1 18 descriptor base register 1 (ITS) | |
DBR2 18 descriptor base register 2 (ITS) | |
DBR3 18 descriptor base register 3 (ITS) | |
DBR4 18 descriptor base register 4 (ITS) | |
PIENB 7 PI levels enabled | |
PIACT 7 PI levels active | |
PIPRQ 7 PI levels with program requests | |
PIIOQ 7 PI levels with IO requests | |
PIAPR 7 PI levels with APR requests | |
APRENB 8 APR flags enabled | |
APRFLG 8 APR flags active | |
APRLVL 3 PI level for APR interrupt | |
IND_MAX 8 indirect address nesting limit | |
XCT_MAX 8 execute chaining limit | |
OLDPC 18 PC prior to last transfer instruction | |
BREAK 19 breakpoint address (1777777 to disable) | |
WRU 8 interrupt character | |
REG[0:127] 36 fast memory blocks | |
12.2 Pager | |
The pager contains the page maps for executive and user mode. The | |
executive page map is the memory space for unit 0, the user page map the | |
memory space for unit 1. A page map entry is 32 bits wide and has the | |
following format: | |
bit content | |
--- ------- | |
31 page is writeable | |
30 entry is valid | |
29:19 mbz | |
18:9 physical page base address | |
8:0 mbz | |
The pager has no registers. | |
12.3 Unibus Adapters | |
The Unibus adapters link the system I/O devices to the CPU. Unibus | |
adapter 1 (UBA1) is unit 0, and Unibus adapter 3 is unit 1. The | |
adapter's Unibus map is the memory space of the corresponding unit. | |
The Unibus Adapter has the following registers: | |
name size comments | |
INTREQ 32 interrupt requests | |
UB1CS 16 Unibus adapter 1 control/status | |
UB3CS 16 Unibus adapter 3 control/status | |
12.4 Front End (FE) | |
The front end is the system console. The keyboard input is unit 0, | |
the console output is unit 1. It supports two options: | |
SET FE STOP halts the PDP-10 operating system | |
SET FE CTLC simulates typing ^C (for Windoze) | |
The front end has the following registers: | |
name size comments | |
IBUF 8 input buffer | |
ICOUNT 31 count of input characters | |
ITIME 24 keyboard polling interval | |
OBUF 8 output buffer | |
OCOUNT 31 count of output characters | |
OTIME 24 console output response time | |
12.5 Timer (TIM) | |
The timer (TIM) implements the system timer, the interval timer, and | |
the time of day clock used to get the date and time at system startup. | |
Because most PDP-10 software is not Y2K compliant, the timer implements | |
one option | |
SET TIM NOY2K software not Y2K compliant, limit time of | |
day clock to 1999 (default) | |
SET TIM Y2K software is Y2K compliant | |
The timer has the following registers: | |
name size comments | |
TIMBASE 59 time base (double precision) | |
TTG 36 time to go (remaining time) for interval | |
PERIOD 36 reset value for interval | |
QUANT 36 quantum timer (ITS only) | |
TIME 24 tick delay | |
DIAG 1 use fixed tick delay instead of autocalibration | |
Unless the DIAG flag is set, the timer autocalibrates; the tick delay | |
is adjusted up or down so that the time base tracks actual elapsed time. | |
This may cause time-dependent diagnostics to report errors. | |
12.6 PC11 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. Thus, | |
by changing POS, the user can backspace or advance the reader. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
BUSY 1 busy flag (CSR<11>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 position in the input file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
12.7 PC11 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
CSR 16 control/status register | |
INT 1 interrupt pending flag | |
ERR 1 error flag (CSR<15>) | |
DONE 1 device done flag (CSR<7>) | |
IE 1 interrupt enable flag (CSR<6>) | |
POS 31 position in the input or output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
12.8 RH11 Adapter, RM02/03/05/80, RP04/05/06/07 drives (RP) | |
The RP controller implements the Massbus 18b (RH11) direct interface for | |
large disk drives. It is more abstract than other device simulators, with | |
just enough detail to run operating system drivers. In addition, the RP | |
controller conflates the details of the RM series controllers with the RP | |
series controllers, although there were detailed differences. | |
RP options include the ability to set units write enabled or write locked, | |
to set the drive size to one of seven disk types, or autosize: | |
SET RPn LOCKED set unit n write locked | |
SET RPn ENABLED set unit n write enabled | |
SET RPn RM03 set size to RM03 | |
SET RPn RM05 set size to RM05 | |
SET RPn RM80 set size to RM80 | |
SET RPn RP04 set size to RP04 | |
SET RPn RP06 set size to RP06 | |
SET RPn RP07 set size to RP07 | |
SET RPn AUTOSIZE set size based on file size at attach | |
The size options can be used only when a unit is not attached to a file. | |
Note that TOPS-10 V7.03 only supported the RP06 and RM03; V7.04 added | |
support for the RP07. Units can be REMOVEd or ADDed to the configuration. | |
The RP controller implements these registers: | |
name size comments | |
RPCS1 16 control/status 1 | |
RPCS2 16 control/status 2 | |
RPCS3 16 control/status 3 | |
RPWC 16 word count | |
RPBA 16 bus address | |
RPBAE 6 bus address extension | |
RPDA 16 desired surface, sector | |
RPDC 8 desired cylinder | |
RPOF 16 offset | |
RPDS0..7 16 drive status, drives 0-7 | |
RPDE0..7 16 drive error, drives 0-7 | |
RPER2 16 error status 2 | |
RPER3 16 error status 3 | |
RPDB 16 data buffer | |
RPMR 16 maintenance register | |
INT 1 interrupt pending flag | |
SC 1 special condition (CSR1<15>) | |
DONE 1 device done flag (CSR1<7>) | |
IE 1 interrupt enable flag (CSR1<6>) | |
STIME 24 seek time, per cylinder | |
RTIME 24 rotational delay | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 disk not ready | |
end of file x assume rest of disk is zero | |
OS I/O error x report error and stop | |
12.9 RH11/TM02/TU45 Magnetic Tape (TU) | |
The magnetic tape simulator simulates an RH11 Massbus adapter with one | |
TM02 formatter and up to eight TU45. Magnetic tape options include the | |
ability to make units write enabled or locked. | |
SET TUn LOCKED set unit n write locked | |
SET TUn ENABLED set unit n write enabled | |
Units can also be REMOVEd or ADDed to the configuration. | |
The magnetic tape controller implements these registers: | |
name size comments | |
MTCS1 16 control/status 1 | |
MTBA 16 memory address | |
MTWC 16 word count | |
MTFC 16 frame count | |
MTCS2 16 control/status 2 | |
MTFS 16 formatter status | |
MTER 16 error status | |
MTCC 16 check character | |
MTDB 16 data buffer | |
MTMR 16 maintenance register | |
MTTC 16 tape control register | |
INT 1 interrupt pending flag | |
DONE 1 device done flag | |
IE 1 interrupt enable flag | |
STOP_IOE 1 stop on I/O error | |
TIME 24 delay | |
UST0..7 16 unit status, units 0..n | |
POS0..7 31 position, units 0..n | |
Error handling is as follows: | |
error processed as | |
not attached tape not ready | |
end of file (read or space) end of physical tape | |
(write) ignored | |
OS I/O error report error and stop | |
12.10 LP20 DMA Line Printer (LP20) | |
The LP20 is a DMA-based line printer controller. There is one | |
line printer option to clear the vertical forms unit (VFU). | |
SET LP20 VFUCLEAR clear the vertical forms unit | |
The LP20 implements these registers: | |
name size comments | |
LPCSA 16 control/status register A | |
LPCSB 16 control/status register B | |
LPBA 16 bus address register | |
LPBC 12 byte count register | |
LPPAGC 12 page count register | |
LPRDAT 12 RAM data register | |
LPCBUF 8 character buffer register | |
LPCOLC 8 column counter register | |
LPPDAT 8 printer data register | |
LPCSUM 8 checksum register | |
DVPTR 7 vertical forms unit pointer | |
DVLNT 7 vertical forms unit length | |
INT 1 interrupt request | |
ERR 1 error flag | |
DONE 1 done flag | |
IE 1 interrupt enable flag | |
POS 31 position in output file | |
TIME 24 response time | |
STOP_IOE 1 stop on I/O error | |
TXRAM[0:255] 12 translation RAM | |
DAVFU[0:142] 12 vertical forms unit array | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of paper | |
OS I/O error x report error and stop | |
12.11 Symbolic Display and Input | |
The PDP-10 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as (sixbit) character string | |
-p display as packed (seven bit) string | |
-m display instruction mnemonics | |
-v interpret address as virtual | |
-e force executive mode | |
-u force user mode | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c sixbit string | |
# or -p packed seven bit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard PDP-10 assembler syntax. There are three | |
instruction classes: memory reference, memory reference with AC, and I/O. | |
Memory reference instructions have the format | |
memref {@}address{(index)} | |
memory reference with AC instructions have the format | |
memac ac,{@}address{(index)} | |
and I/O instructions have the format | |
io device,{@}address{(index)} | |
where @ signifies indirect. The address is a signed octal number in the | |
range 0 - 0777777. The ac and index are unsigned octal numbers in the | |
range 0-17. The device is either a recognized device mnemonic (APR, PI, | |
TIM) or an octal number in the range 0 - 0177. | |
The simulator recognizes the standard MACRO alternate mnemonics (CLEAR | |
for SETZ, OR for IORI), the individual definitions for JRST and JFCL | |
variants, and the extended instruction mnemonics. | |
13. H316/H516 Features | |
The Honeywell 316/516 simulator is configured as follows: | |
device simulates | |
name(s) | |
CPU H316/H516 CPU with 16/32KW memory | |
PTR 316/516-50 paper tape reader | |
PTP 316/516-52 paper tape punch | |
TTY 316/516-33 console terminal | |
CLK 316/516-12 real time clock | |
LPT 316/516 line printer | |
The H316/H516 simulator implements several unique stop conditions: | |
- decode of an undefined instruction, and STOP_INST is et | |
- reference to an undefined I/O device, and STOP_DEV is set | |
- more than INDMAX indirect references are detected during | |
memory reference address decoding | |
The H316/H516 loader is not implemented. | |
13.1 CPU | |
CPU options include choice of instruction set and memory size. | |
SET CPU HSA high speed arithmetic instructions | |
SET CPU NOHSA no high speed arithmetic instructions | |
SET CPU 4K set memory size = 4K | |
SET CPU 8K set memory size = 8K | |
SET CPU 12K set memory size = 12K | |
SET CPU 16K set memory size = 16K | |
SET CPU 24K set memory size = 24K | |
SET CPU 32K set memory size = 32K | |
If memory size is being reduced, and the memory being truncated contains | |
non-zero data, the simulator asks for confirmation. Data in the truncated | |
portion of memory is lost. Initial memory size is 32K. | |
CPU registers include the visible state of the processor as well as the | |
control registers for the interrupt system. | |
name size comments | |
P 15 program counter | |
A 16 A register | |
B 16 B register | |
X 16 index register | |
SC 16 shift count | |
C 1 carry flag | |
EXT 1 extend flag | |
PME 1 previous mode extend flag | |
EXT_OFF 1 extend off pending flag | |
DP 1 double precision flag | |
SS1..4 1 sense switches 1..4 | |
ION 1 interrupts enabled | |
INODEF 1 interrupts not deferred | |
INTREQ 16 interrupt requests | |
DEVRDY 16 device ready flags (read only) | |
DEVENB 16 device interrupt enable flags (read only) | |
STOP_INST 1 stop on undefined instruction | |
STOP_DEV 1 stop on undefined device | |
INDMAX 1 indirect address limit | |
OLDP 15 PC prior to last JMP, JSB, or interrupt | |
BREAK 16 breakpoint address (177777 to disable) | |
WRU 8 interrupt character | |
13.2 Programmed I/O Devices | |
13.2.1 316/516-50 Paper Tape Reader (PTR) | |
The paper tape reader (PTR) reads data from a disk file. The POS | |
register specifies the number of the next data item to be read. | |
Thus, by changing POS, the user can backspace or advance the reader. | |
The paper tape reader supports the BOOT command. BOOT PTR copies the | |
absolute binary loader into memory and starts it running. | |
The paper tape reader implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
INTREQ 1 device interrupt request | |
READY 1 device ready | |
ENABLE 1 device interrupts enabled | |
POS 31 position in the input or output file | |
TIME 24 time from I/O initiation to interrupt | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
end of file 1 report error and stop | |
0 out of tape or paper | |
OS I/O error x report error and stop | |
13.2.2 316/516-52 Paper Tape Punch (PTP) | |
The paper tape punch (PTP) writes data to a disk file. The POS | |
register specifies the number of the next data item to be written. | |
Thus, by changing POS, the user can backspace or advance the punch. | |
The paper tape punch implements these registers: | |
name size comments | |
BUF 8 last data item processed | |
INTREQ 1 device interrupt request | |
READY 1 device ready | |
ENABLE 1 device interrupts enabled | |
POWER 1 device powered up | |
POS 31 position in the input or output file | |
TIME 24 time from I/O initiation to interrupt | |
PWRTIME 24 time from I/O request to power up | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of tape | |
OS I/O error x report error and stop | |
13.2.3 316/516-33 Console Teletype (TTY) | |
The terminal reads and writes to the controlling console port. It has | |
one option, UC; when set, it automatically converts lower case input | |
to upper case. This is on by default. | |
The terminal these registers: | |
name size comments | |
BUF 8 last data item processed | |
MODE 1 read/write mode | |
INTREQ 1 device interrupt request | |
READY 1 device ready | |
ENABLE 1 device interrupts enabled | |
KPOS 31 number of characters input | |
KTIME 24 keyboard polling interval | |
TPOS 31 number of characters output | |
TTIME 24 time from I/O initiation to interrupt | |
13.2.4 316/516-12 Real Time Clock (CLK) | |
The real time clock (CLK) implements these registers: | |
name size comments | |
INTREQ 1 device interrupt request | |
READY 1 device ready | |
ENABLE 1 device interrupts enabled | |
TIME 24 clock interval | |
13.2.5 316/5116 Line Printer (LPT) | |
The line printer (LPT) writes data to a disk file. The POS register | |
specifies the number of the next data item to be written. Thus, | |
by changing POS, the user can backspace or advance the printer. | |
The line printer implements these registers: | |
name size comments | |
WDPOS 6 word position in current scan | |
DRPOS 6 drum position | |
CRPOS 1 carriage position | |
XFER 1 transfer ready flag | |
PRDN 1 print done flag | |
INTREQ 1 device interrupt request | |
ENABLE 1 device interrupt enable | |
SVCST 2 service state | |
SVCCH 2 service channel | |
BUF 8 buffer | |
POS 31 number of characters output | |
XTIME 24 delay between transfers | |
ETIME 24 delay at end of scan | |
PTIME 24 delay for shuttle/line advance | |
STOP_IOE 1 stop on I/O error | |
Error handling is as follows: | |
error STOP_IOE processed as | |
not attached 1 report error and stop | |
0 out of paper | |
OS I/O error x report error and stop | |
13.3 Symbolic Display and Input | |
The H316/H516 simulator implements symbolic display and input. Display is | |
controlled by command line switches: | |
-a display as ASCII character | |
-c display as two character string | |
-m display instruction mnemonics | |
Input parsing is controlled by the first character typed in or by command | |
line switches: | |
' or -a ASCII character | |
" or -c two character sixbit string | |
alphabetic instruction mnemonic | |
numeric octal number | |
Instruction input uses standard H316/H516 assembler syntax. There are six | |
instruction classes: memory reference, I/O, control, shift, skip, and | |
operate. | |
Memory reference instructions have the format | |
memref{*} {C/Z} address{,1} | |
where * signifies indirect, C a current sector reference, Z a sector zero | |
reference, and 1 indexed. The address is an octal number in the range 0 - | |
077777; if C or Z is specified, the address is a page offset in the range | |
0 - 0777. Normally, C is not needed; the simulator figures out from the | |
address what mode to use. However, when referencing memory outside the CPU | |
(eg, disks), there is no valid PC, and C must be used to specify current | |
sector addressing. | |
I/O instructions have the format | |
io pulse+device | |
The pulse+device is an octal number in the range 0 - 01777. | |
Control and operate instructions consist of a single opcode | |
opcode | |
Shift instructions have the format | |
shift n | |
where n is an octal number in the range 0-77. | |
Skip instructions have the format | |
sub-op sub-op sub-op... | |
The simulator checks that the combination of sub-opcodes is legal. | |
Appendix 1: File Representations | |
All file representations are little endian. On big endian hosts, the | |
simulator automatically performs any required byte swapping. | |
1. Hard Disks | |
Hard disks are represented as unstructured binary files of 16b data items for | |
the 12b and 16b simulators, of 32b data items for the 18b and 32b simulators, | |
and 64b for the 36b simulators. | |
2. Floppy Disks | |
PDP-8 and PDP-11 floppy disks are represented as unstructured binary files | |
of 8b data items. They are nearly identical to the floppy disk images for | |
Doug Jones' PDP-8 simulator but lack the initial 256 byte header. A utility | |
for converting between the two formats is easily written. | |
3. Magnetic Tapes | |
Magnetic tapes are represented as unstructured binary files of 8b data | |
items. Each record consists of a 32b record header, in little endian | |
format, followed by n 8b bytes of data, followed by a repeat of the 32b | |
record header. The high order bit of the record header is used as an | |
error flag; the remaining 31b are the byte count of the record. If | |
the byte count is odd, the record is padded to even length; the pad | |
byte is undefined. | |
Magnetic tapes are endian independent and consistent across simulator | |
families. A magtape produced by the Nova simulator will appear to | |
have its 16b words byte swapped if read by the PDP-11 simulator. | |
4. Line Printers | |
Line printer output is represented by an ASCII file of lines separated by | |
the newline character. Overprinting is represented by a line ending in | |
return rather than newline. | |
5. DECtapes | |
DECtapes are structured as fixed length blocks. PDP-9/11/15 DECtapes | |
use 578 blocks of 256 32b words. Each 32b word contains 18b (6 lines) | |
of data. PDP-8 DECtapes use 1474 blocks of 129 16b words. Each 16b | |
word contains 12b (4 lines) of data. Note that PDP-8 OS/8 does not use | |
the 129th word of each block, and OS/8 DECtape dumps contain only 128 | |
words per block. A utility, DSOS8CVT.C, is provided to convert OS/8 | |
DECtape dumps to simulator format. | |
A known problem in DECtape format is that when a block is recorded in | |
one direction and read in the other, the bits in a word are scrambled | |
(to the complement obverse). The PDP-11 deals with this problem by | |
performing an automatic complement obverse on reverse writes and reads. | |
The other systems leave this problem to software. | |
The simulator represents this difference as follows. On the PDP-11, all | |
data is represented in normal form. Data reads and writes are not direction | |
sensitive; read all and write all are direction sensitive. Real DECtapes | |
that are read forward will generate images with the correct representation | |
of the data. | |
On the other systems, forward write creates data in normal form, while | |
reverse write creates data in complement obverse form. Forward read (and | |
read all) performs no transformations, while reverse read (and read all) | |
changes data to the complement obverse. Real DECtapes that are read forward | |
will generate data in normal form for blocks written forward, and complement | |
obverse data for blocks written in reverse, corresponding to the simulator | |
format. | |
Appendix 2: Debug Status | |
The debug status of each simulated CPU and device is as follows: | |
system PDP-8 PDP-11 Nova PDP-1 18b PDP | |
device | |
CPU y y y y y | |
FPU - y - - - | |
CIS - h - - - | |
console y y y y y | |
paper tape y y y h y | |
card reader - - - - - | |
line printer y y y h y | |
clock y y y - h | |
hard disk y y y - h | |
fixed disk y/both - h - h | |
floppy disk y y y - - | |
DECtape y y - - d | |
mag tape h y/both y - h | |
system 1401 2100 Id4 PDP-10 H316 | |
device | |
CPU d y h y h | |
FPU - - h y - | |
CIS - - - y - | |
console h y h y h | |
paper tape - h h h h | |
card reader h h - - - | |
line printer h - - y h | |
clock - h - y h | |
hard disk - h - y - | |
fixed disk - h - - - | |
floppy disk - - - - - | |
DECtape - - - - - | |
mag tape h h - y - | |
legend: y = runs operating system or sample program | |
d = runs diagnostics | |
h = runs hand-generated test cases | |
n = untested | |
- = not applicable | |
Revision History (since Rev 1.1) | |
Rev 2.6b, Jul, 01 | |
Added H316/516 simulator | |
Added Macintosh support from Louis Chrétien, Peter Schorn, | |
and Ben Supnik | |
Added bad block table option to PDP-11 RL, RP | |
Fixed bugs found by Peter Schorn | |
Endian error in PDP-10, PDP-11 RP | |
Space reverse error in PDP-11 TS | |
Symbolic input in 1401 | |
Fixed bug in PDP-1 RIM loader found by Derek Peschel | |
Fixed bug in Nova fixed head disk | |
Removed register in declarations | |
Rev 2.6a, Jun, 01 | |
Fixed bug (found by Dave Conroy) in big-endian I/O | |
Fixed DECtape reset in PDP-8, PDP-11, PDP-9/15 | |
Fixed RIM loader PC handling in PDP-9/15 | |
Fixed indirect pointers in PDP-10 paging | |
Fixed SSC handling in PDP-10 TM02/TU45 | |
Fixed JMS to non-existent memory in PDP-8 | |
Fixed error handling on command file | |
Increased size of string buffers for long path names | |
Added PDP-9, PDP-15 API option | |
Added PDP-9, PDP-15 second terminal | |
Added PDP-10 option for TOPS-20 V4.1 bug fix | |
Added PDP-10 FE CTRL-C option for Windoze | |
Added console logging | |
Added multiple console support | |
Added comment recognition | |
Rev 2.6, May, 01 | |
Added ENABLE/DISABLE devices | |
Added SHOW DEVICES | |
Added examination/modification of register arrays | |
Added PDP-10 simulator | |
Added clock autocalibration to SCP, Nova, PDP-8, PDP-11, | |
PDP-18b | |
Added PDP-8, PDP-11, PDP-9/15 DECtape | |
Added PDP-8 DF32 | |
Added 4k Disk Monitor boot to PDP-8 RF08 and DF32 | |
Added PDP-4/7 funny format loader support | |
Added extension handling to the PDP-8 and -9/15 loaders | |
Added PDP-11 TS11/TSV05 | |
Added integer interval timer to SCP | |
Added filename argument to LOAD/DUMP | |
Revised magtape and DECtape bootstraps to rewind | |
before first instruction | |
Fixed 3 cycle data break sequence in PDP-8 RF | |
Fixed 3 cycle data break sequence in 18b PDP LP, MT, RF | |
Fixed CS1.TRE write, CS2.MXF,UPE write, and CS2.UAI in | |
PDP-11 RP | |
Fixed 4M memory size definition in PDP-11 | |
Fixed attach bug in RESTORE | |
Fixed detach bug for buffered devices | |
Updated copyright notices, fixed comments | |
Rev 2.5a, Dec, 00 | |
Fixed SCP handling of devices without units | |
Fixed FLG, FBF initialization in many HP peripherals | |
Added CMD flop to HP paper tape and line printer | |
Added status input for HP paper tape punch and TTY | |
Fixed 1401 bugs found by Dutch Owens | |
-- 4, 7 char NOPs are legal | |
-- 1 char B is chained BCE | |
-- MCE moves whole character, not digit, after first | |
Added Dutch Owens' 1401 mag tape boot routine | |
Fixed Nova bugs found by Bruce Ray | |
-- traps implemented on Nova 3 as well as Nova 4 | |
-- DIV and DIVS 0/0 set carry | |
-- RETN sets SP from FP at outset | |
-- IORST does not clear carry | |
-- Nova 4 implements two undocumented instructions | |
Added Bruce Ray's Nova plotter and second terminal modules | |
Added Charles Owen's Eclipse CPU support | |
Fixed bugs in 18b PDP's | |
-- XCT indirect address calculation | |
-- missing index instructions in PDP-15 | |
-- bank mode handling in PDP-15 | |
Added PDP-9/PDP-15 RIM/BIN loader support | |
Added PDP-9/PDP-15 extend/bank initial state registers | |
Added PDP-9/PDP-15 half/full duplex support | |
Moved software documentation to a separate file | |
Rev 2.5, Nov, 00 | |
Removed Digital and Compaq from copyrights, as | |
authorized by Compaq Sr VP Bill Strecker | |
Revised save/restore format for 64b simulators | |
Added examine to file | |
Added unsigned integer data types to sim_defs | |
Added Nova 3 and Nova 4 instructions to Nova CPU | |
Added HP2100 | |
Added Interdata 4 | |
Fixed indirect loop through autoinc/dec in Nova CPU | |
Fixed MDV enabled test in Nova CPU | |
Rev 2.4, Jan, 99 | |
Placed all sources under X11-like open source license | |
Added DUMP command, revised sim_load interface | |
Added SHOW MODIFIERS command | |
Revised magtape format to include record error flag | |
Fixed 64b problems in SCP | |
Fixed big endian problem in PDP-11 bad block routine | |
Fixed interrupt on error bug in PDP-11 RP/RM disks | |
Fixed ROL/ROR inversion in PDP-11 symbolic routines | |
Rev 2.3d, Sep, 98 | |
Added BeOS support | |
Added radix commands and switches | |
Added PDP-11 CIS support | |
Added RT11 V5.3 to distribution kits | |
Fixed "shift 32" bugs in SCP, PDP-11 floating point | |
Fixed bug in PDP-11 paper tape reader | |
Fixed bug in ^D handling | |
Rev 2.3c, May, 98 | |
Fixed bug in PDP-11 DIV overflow check | |
Fixed bugs in PDP-11 magtape bootstrap | |
Fixed bug in PDP-11 magtape unit select | |
Replaced UNIX V7 disk images | |
Rev 2.3b, May, 98 | |
Added switch recognition to all simulator commands | |
Added RIM loader to PDP-8 paper tape reader and loader | |
Added second block bootstrap to PDP-11 magtape | |
Fixed bug in PDP-8 RF bootstrap | |
Fixed bug in PDP-11 symbolic display | |
Fixed bugs in PDP-11 floating point (LDEXP, STEXP, | |
MODf, STCfi, overflow handling) | |
Rev 2.3a, Nov, 97 | |
Added search capability | |
Added bad block table command to PDP-11 disks | |
Added bootstrap to PDP-11 magtape | |
Added additional Nova moving head disks | |
Added RT-11 sample software | |
Fixed bugs in PDP-11 RM/RP disks | |
Fixed bugs in Nova moving head disks | |
Fixed endian dependence in 18b PDP RIM loader | |
Rev 2.3, Mar, 97 | |
Changed UNIX terminal I/O to TERMIOS | |
Changed magtape format to double ended | |
Changed PDP-8 current page mnemonic from T to C | |
Added endian independent I/O routines | |
Added precise integer data types | |
Fixed bug in sim_poll_kbd | |
Fixed bug in PDP-8 binary loader | |
Fixed bugs in TM11 magtape | |
Fixed bug in RX11 bootstrap | |
Fixed bug in 18b PDP ADD | |
Fixed bug in 18b PDP paper tape reader | |
Fixed bug in PDP-4 console | |
Fixed bug in PDP-4,7 line printer | |
Added PDP-11 RP | |
Added PDP-1 | |
Rev 2.2d, Dec, 96 | |
Added ADD/REMOVE commands | |
Added unit enable/disable support to device simulators | |
Added features for IBM 1401 project | |
Added switch recognition for symbolic input | |
Fixed bug in variable length IEXAMINE | |
Fixed LCD bug in RX8E | |
Initial changes for Win32 | |
Added IBM 1401 | |
Rev 2.2b, Apr, 96 | |
Added PDP-11 dynamic memory size support | |
Rev 2.2a, Feb, 96 | |
New endian independent magtape format | |
Rev 2.2 Jan, 96 | |
Added register buffers for save/restore | |
Added 18b PDP's | |
Guaranteed TTI, CLK times are non-zero | |
Fixed breakpoint/RUN interaction bug | |
Fixed magnetic tape backspace to EOF bug | |
Fixed ISZ/DCA inversion in PDP-8 symbol table | |
Fixed sixbit conversion in PDP-8 examine/deposit | |
Fixed origin increment bug in PDP-11 binary loader | |
Fixed GCC longjmp optimization bug in PDP-11 CPU | |
Fixed unit number calculation bug in SCP and in | |
Nova, PDP-11, 18b PDP moving head disks | |
Rev 2.1 Dec, 95 | |
Fixed PTR bug (setting done on EOF) in PDP-8, Nova | |
Fixed RX bug (setting error on INIT if drive 1 is | |
not attached) in PDP-8, PDP-11 | |
Fixed RF treatment of photocell flag in PDP-8 | |
Fixed autosize bug (always chose smallest disk if new | |
file) in PDP-11, Nova | |
Fixed not attached bug (reported as not attachable) in | |
most mass storage devices | |
Fixed Nova boot ROMs | |
Fixed bug in RESTORE (didn't requeue if delay = 0) | |
Fixed bug in RESTORE (clobbered device position) | |
Declared static constant arrays as static const | |
Added PDP-8, Nova magnetic tape simulators | |
Added Dasher mode to Nova terminal simulator | |
Added LINUX support | |
Rev 2.0 May, 95 | |
Added symbolic assembly/disassembly | |
Acknowledgements | |
SIMH would not have been possible without help from around the world. I | |
would like to acknowledge the help of the following people, all of whom | |
donated their time and talent to this "computer archaeology" project: | |
Bill Ackerman PDP-1 consulting | |
Winfried Bergmann Linux port testing | |
Phil Budne Solaris port testing | |
Max Burnet PDP information, documentation, and software | |
James Carpenter LINUX port testing | |
Chip Charlot PDP-11 RT-11, RSTS/E, RSX-11M legal permissions | |
Louis Chrétien Macintosh porting | |
Dave Conroy HP 21xx documentation | |
L Peter Deutsch PDP-1 LISP software | |
Ethan Dicks PDP-11 2.9 BSD debugging | |
Carl Friend Nova and Interdata documentation, and RDOS software | |
Megan Gentry PDP-11 integer debugging, make file | |
Dave Gesswein PDP-8 and PDP-9.15 documentation, PDP-8 DECtape and | |
paper tape images, PDP-9/15 DECtape images | |
Dick Greeley PDP-8 OS/8 and PDP-10 TOPS-10/20 legal permissions | |
Gordon Greene PDP-1 LISP machine readable source | |
Lynne Grettum PDP-11 RT-11, RSTS/E, RSX-11M legal permissions | |
Franc Grootjen PDP-11 2.11 BSD debugging | |
Doug Gwyn Portability debugging | |
Kevin Handy TS11/TSV05 documentation | |
Ken Harrenstein PDP-10 simulator | |
Bill Haygood PDP-8 information, simulator, and software | |
Wolfgang Helbig DZ11 simulator implementation | |
Mark Hittinger PDP-10 debugging | |
Jay Jaeger IBM 1401 information | |
Doug Jones PDP-8 information, simulator, and software | |
Al Kossow HP 21xx, Varian 620, TI 990, DEC documentation and software | |
Arthur Krewat DZ11 update for the PDP-10 | |
Don Lewine Nova documentation and legal permissions | |
Tim Litt PDP-10 hardware documentation and schematics, | |
tape images, and software sources | |
Scott McGregor PDP-11 UNIX legal permissions | |
Jeff Moffatt HP 2100 information, documentation, and software | |
Alec Muffett Solaris port testing | |
Thord Nilson DZ11 implementation | |
Charles Owen Nova moving head disk debugging, Altair simulator, | |
IBM 1401 diagnostics, debugging, and magtape boot | |
Derek Peschel PDP-10 debugging | |
Paul Pierce IBM 1401 diagnostics, media recovery | |
Hans Pufal PDP-10 debugging | |
Bruce Ray Software, documentation, bug fixes, and new devices | |
for the Nova | |
Craig St Clair PDP documentation | |
Richard Schedler Public repository maintenance | |
Peter Schorn Macintosh porting | |
Stephen Schultz PDP-11 2.11 BSD debugging | |
Olaf Seibert NetBSD port testing | |
Brian & Barry Silverman PDP-1 simulator and software | |
Tim Shoppa Nova documentation, RDOS software, PDP-10 and PDP-11 | |
software archive | |
Michael Somos PDP-1 debugging | |
Hans-Michael Stahl OS/2 port testing, TERMIOS implementation | |
Tim Stark PDP-10 simulator | |
Larry Stewart Initial suggestion for the project | |
Bill Strecker Permission to revert copyrights | |
Chris Suddick PDP-11 floating point debugging | |
Ben Supnik Macintosh timing routine | |
Ben Thomas VMS character-by-character I/O routines | |
Warren Toomey PDP-11 UNIX software | |
Deb Toivonen DEC documentation | |
Mike Umbricht DEC documentation, H316 documentation and schematics | |
Leendert Van Doorn PDP-11 UNIX V6 debugging, TERMIOS implementation | |
David Waks PDP-8 ESI-X and PDP-7 SIM8 software | |
Tom West Nova documentation | |
Adrian Wise H316 simulator, documentation, and software | |
John Wilson PDP-11 simulator and software | |
In addition, the following companies have graciously licensed their | |
software at no cost for hobbyist use: | |
Data General Corporation | |
Digital Equipment Corporation | |
Compaq Computer Corporation | |
Mentec Corporation | |
The Santa Cruz Operation |