To: Users From: Bob Supnik Subj: Simulator Usage, V2.7 Date: 30-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,sim_*.c ! PDP-8 $ link/exec=pdp8 pdp8_*.obj,scp.obj,scp_tty.obj,sim_*.obj $ cc pdp11_*.c,scp.c,scp_tty.c,sim_*.c ! PDP-11 $ link/exec=pdp11 pdp11_*.obj,scp.obj,scp_tty.obj,sim_*.obj $ cc nova_*.c,scp.c,scp_tty.c,sim_*.c ! Nova $ link/exec=nova nova_*.obj,scp.obj,scp_tty.obj,sim_*.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,sim_*.c $ link/exec=pdp{4,7,9,15} pdp18b_*.obj,scp.obj,scp_tty.obj,sim_*.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 $ cc h316_*.c,scp.c,scp_tty.c ! Honeywell 316 $ link/exec=h316 h316_*.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 sim_*.c -lm -o pdp8 % cc pdp11_*.c scp*.c sim_*.c -lm -o pdp11 % cc nova_*.c scp*.c sim_*.c -lm -o nova % cc pdp1_*.c scp*.c -o pdp1 % cc -DPDP{4,7,9,15} pdp18b_*.c scp*.c sim_*.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 % cc h316_*.c scp*.c -o h316 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 sim_*.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 the required files: - all simulators: sim_defs.h, scp.c, scp_tty - all simulators: simulator specific files (e.g., all files beginning with nova_* for the Nova) - PDP-10, PDP-11: dec_dz.h - PDP-8, PDP-10, PDP-11, PDP-18b, Nova: sim_sock.h, sim_sock.c, sim_txmr.h, sim_txmr.c If the project requires 64b support, add the switch -DUSE_INT64 to the C/C++ tab of the Configuration dialog. If the project includes Telnet-based terminals, add the appropriate Winsock library to the library search list (Wsock32.dll for VC++ V4.) 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 (cr) or % pdp11 (cr) or % nova (cr) or % pdp1 (cr) or % pdp{4,7,9,15} (cr) or % i1401 (cr) or % hp2100 (cr) or % id4 (cr) or % h316 (cr) or % pdp10 (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: -{...} 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 {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 {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 (cr) The RESTORE command (abbreviation REST, alternately GET) restores a previously saved simulator state: sim> restore (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 (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 (cr) If the file does not exist, it is created, and an appropriate message is printed. For Telnet-based terminal emulators, the ATTACH command associates the master unit with a TCP/IP port: sim> ATTACH (cr) The port is a decimal number between 1 and 65535 and should not used by standard TCP/IP protocols. The DETACH (abbreviation DET) command breaks the association between a unit and a file, or between a unit and a port: sim> DETACH ALL(cr) -- detach all units sim> DETACH (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} 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. { } 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 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 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 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 restores a disabled device to a configuration. In devices with multiple units, the REMOVE 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 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 -- 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 TTI1-4,TTO1-4 KL8JA additional terminals 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) polls the console keyboard for input. 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 simulator console window. 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.2.7 KL8JA Additional Terminals (TTI1-4, TTO1-4) Each additional terminal consists of two independent devices, TTIn and TTOn. The entire set is modelled as a terminal multiplexor, with TTI1 as the master unit. The additional terminals perform input and output through Telnet sessions connected to a user-specified port. The ATTACH command specifies the port to be used: ATTACH TTI1 (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. Once TTI1 is attached and the simulator is running, the terminals listen for connections on the specified port. They assume that the incoming connections are Telnet connections. The connections remain open until disconnected either by the Telnet client, or by a DETACH TTI1 command. The SHOW TTI1 command displays the current connections to the additional terminals. The input devices (TTI1-4) implement 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 The output devices (TTO1-4) implement 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 The additional terminals do not support save and restore. All open connections are lost when the simulator shuts down or TTI1 is detached. 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 -t display as (TSS/8 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 # or -t two character TSS/8 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 DZ DZ11 8-line terminal multiplexor 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 DZ, 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 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) polls the console keyboard for input. 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 simulator console window. 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.2.7 DZ11 Terminal Multiplexor (DZ) The DZ11 is an 8-line terminal multiplexor. The terminal lines perform input and output through Telnet sessions connected to a user-specified port. The ATTACH command specifies the port to be used: ATTACH {-am} DZ (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. The optional switch -m turns on the DZ11's modem controls; the optional switch -a turns on active disconnects (disconnect session if computer clears Data Terminal Ready). Once the DZ is attached and the simulator is running, the DZ will listen for connections on the specified port. It assumes that the incoming connections are Telnet connections. The connection remains open until disconnected either by the simulated program or by the Telnet client. The SHOW DZ command displays the current connections to the DZ. The DZ11 implements these registers: name size comments CSR 16 control/status register RBUF 16 receive buffer LPR 16 line parameter register TCR 16 transmission control register MSR 16 modem status register TDR 16 transmit data register SAENB 1 silo alarm enabled MDMTCL 1 modem control enabled RPOS0..7 32 count of characters received TPOS0..7 32 count of characters transmitted The DZ11 does not support save and restore. All open connections are lost when the simulator shuts down or the DZ is detached. 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 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) The terminal input polls the console keyboard for input. Terminal input options include the ability to set ANSI mode or limited Dasher compatibility mode: SET TTI ANSI normal mode SET TTI DASHER Dasher mode Setting either TTI or TTO changes both devices. In Dasher mode, carriage return is changed to newline on input, and ^X is changed to backspace. The terminal input 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 number of characters input TIME 24 keyboard polling interval 6.2.4 Terminal Output (TTO) The terminal output writes to the simulator console window. Terminal output options include the the ability to set ANSI mode or limited Dasher compatibility mode: SET TTO ANSI normal mode SET TTO DASHER Dasher mode Setting either TTI or TTO changes both devices. In Dasher mode, carriage return is changed to newline on input, and ^X is changed to backspace. The terminal output 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 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.2.8 Second Terminal (TTI1, TTO1) The second terminal consists of two independent devices, TTI1 and TTO1. The additional terminal performs input and output through a Telnet session connecting into a user-specified port. The ATTACH command specifies the port to be used: ATTACH TTI1 (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. Once TTI1 is attached and the simulator is running, the terminal listens for a connection on the specified port. It assumes that the incoming connection is a Telnet connection. The connection remain opens until disconnected by the Telnet client, or by a DETACH TTI1 command. The second terminal has two options, recognized on both devices, for setting limited Dasher-compatibility mode or ANSI mode: SET TTI1 ANSI normal mode SET TTI1 DASHER Dasher mode SET TTO1 ANSI normal mode SET TTO1 DASHER Dasher mode Setting either TTI1 or TTO1 changes both devices. In Dasher mode, carriage return is changed to newline on input, and ^X is changed to backspace. The SHOW TTI1 command displays the current connection to the second terminal. The second terminal input 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 number of characters input TIME 24 keyboard polling interval The second terminal output 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 number of characters output TIME 24 time from I/O initiation to interrupt 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 (TTI) polls the console keyboard for input. 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 simulator console window. 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 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) The terminal input (TTI) polls the console keyboard for input. The input side has one option, UC; when set, it automatically converts lower case input to upper case. The PDP-9 and PDP-15 operate the console 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 input implements 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) The terminal output (TTO) writes to the simulator console window. The terminal output has one option, UC; when set, it suppresses lower case output (so that ALTMODE is not echoed as }). The terminal output implements 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.2.7 Second Terminal (TTI1, TTO1) The second terminal consists of two independent devices, TTI1 and TTO1. The second terminal performs input and output through a Telnet session connected to a user-specified port. The ATTACH command specifies the port to be used: ATTACH TTI1 (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. Once TTI1 is attached and the simulator is running, the terminal listens for a connection on the specified port. It assumes that the incoming connection is a Telnet connection. The connection remain opens until disconnected by the Telnet client, or by a DETACH TTI1 command. The second terminal input has one option, UC; when set, it automatically converts lower case input to upper case. The second terminal output also has one option, UC; when set, it suppresses lower case output (so that ALTMODE is not echoed as }). The SHOW TTI1 command displays the current connection to the second terminal. The second terminal input implements 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 The second terminal output implements 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.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 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: 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 console keyboard 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 DEVNO This initiates a dialog that displays the current device number and allows the user to assign a new one: Device number: old (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 the console keyboard; the printer writes to the simulator console window. 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 keyboard reads from the console keyboard; the teletype printer writes to the simulator console window. 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 DZ DZ11 8-line terminal multiplexor 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. The DZ11 can also 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 DZ11 Terminal Multiplexor (DZ) The DZ11 is an 8-line terminal multiplexor. The terminal lines perform input and output through Telnet sessions connected to a user-specified port. The ATTACH command specifies the port to be used: ATTACH {-am} DZ (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. The optional switch -m turns on the DZ11's modem controls; the optional switch -a turns on active disconnects (disconnect session if computer clears Data Terminal Ready). ATTACH {-m} DZ (cr) -- set up listening port where port is a decimal number between 1 and 65535 that is not being used for other TCP/IP activities. The optional switch -m turns on the DZ11's modem controls; the optional switch -a turns on active disconnects (disconnect session if computer clears Data Terminal Ready). Once the DZ is attached and the simulator is running, the DZ will listen for connections on the specified port. It assumes that the incoming connections are Telnet connections. The connection remains open until disconnected either by the simulated program or by the Telnet client. The SHOW DZ command displays the current connections to the DZ. The DZ11 implements these registers: name size comments CSR 16 control/status register RBUF 16 receive buffer LPR 16 line parameter register TCR 16 transmission control register MSR 16 modem status register TDR 16 transmit data register SAENB 1 silo alarm enabled MDMTCL 1 modem control enabled RPOS0..7 32 count of characters received TPOS0..7 32 count of characters transmitted The DZ11 does not support save and restore. All open connections are lost when the simulator shuts down or the DZ is detached. 12.9 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.10 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.11 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.12 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 from the console keyboard and writes to the simulator console window. The terminal has one option, UC; when set, the terminal 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, DTOS8CVT.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.7, Sep, 01 Added DZ11 (from Thord Nilson and Art Krewat) to PDP-11, PDP-10 Added additional terminals to PDP-8 Added TSS/8 packed character format to PDP-8 Added sim_sock and sim_tmxr libraries Added Macintosh sim_sock support (from Peter Schorn) Changed int64/uint64 to t_int64/t_uint64 for Windoze Fixed bugs in PDP-11 TS NXM check and boot code Fixed bug in PDP-8 reset routine Fixed conditional in PDP-18b CPU Fixed SC = 0 bug in PDP-18b EAE Fixed bug in PDP-7 LPT Upgraded Nova second terminal to use sim_tmxr Upgraded PDP-18b second terminal to use sim_tmxr Removed hack multiple console support Rev 2.6b, Aug, 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 Removed register in declarations 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 Rev 2.6a, Jun, 01 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 Increased size of string buffers for long path names Fixed bug in big-endian I/O found by Dave Conroy 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 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 Added CMD flop to HP paper tape and line printer Added status input for HP paper tape punch and TTY Added Dutch Owens' 1401 mag tape boot routine Added Bruce Ray's Nova plotter and second terminal modules Added Charles Owen's Eclipse CPU support 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 Fixed SCP handling of devices without units Fixed FLG, FBF initialization in many HP peripherals 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 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 Fixed bugs in 18b PDP's -- XCT indirect address calculation -- missing index instructions in PDP-15 -- bank mode handling in PDP-15 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 Added PDP-11 RP Added PDP-1 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 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 Mirian Crzig Lennox ITS and DZ11 debugging Don Lewine Nova documentation and legal permissions Tim Litt PDP-10 hardware documentation and schematics, tape images, and software sources Tim Markson DZ11 debugging 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