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 <startup file>(cr)		or
	% pdp11 <startup file>(cr)		or
	% nova <startup file>(cr)		or
	% pdp1 <startup file>(cr)		or
	% pdp{4,7,9,15} <startup file>(cr)	or
	% i1401 <startup file>(cr)		or
	% hp2100 <startup file>(cr)		or
	% id4 <startup file>(cr)		or
	% h316 <startup file>(cr)		or
	% pdp10 <startup file>(cr)

The simulator types out its name and version, executes the commands
in the startup file, if any, and then prompts for input with

	sim>

2. Simulator Conventions

A simulator consists of a series of devices, the first of which is always
the CPU.  A device consists of named registers and one or more numbered
units.  Registers correspond to device state, units to device address
spaces.  Thus, the CPU device might have registers like PC, ION, etc,
and a unit corresponding to main memory; a disk device might have
registers like BUSY, DONE, etc, and units corresponding to individual
disk drives.  Except for main memory, device address spaces are simulated
as unstructured binary disk files in the host file system.  The SHOW CONFIG
command displays the simulator configuration.

A simulator keeps time in terms of arbitrary units, usually one time unit
per instruction executed.  Simulated events (such as completion of I/O)
are scheduled at some number of time units in the future.  The simulator
executes synchronously, invoking event processors when simulated events
are scheduled to occur.  Even asynchronous events, like keyboard input,
are handled by polling at synchronous intervals.  The SHOW QUEUE command
displays the simulator event queue.

3. Commands

Simulator commands consist of a command verb, optional switches, and optional
arguments.  Switches take the form:

	-<letter>{<letter>...}

Multiple switches may be specified separately or together: -abcd or
-a -b -c -d are treated identically.  Verbs, switches, and other
input (except for file names) are case insensitive.

Any command beginning with semicolon (;) is considered a comment and ignored.

3.1 Loading and Saving Programs

The LOAD command (abbreviation LO) loads a file in binary paper-tape
loader format:

	sim> load <filename> {implementation options}(cr)

The number of formats supported is implementation specific.  Options
(such as load within range) are also implementation specific.

The DUMP command (abbreviation DU) dumps memory in binary paper-
tape loader format:

	sim> dump <filename> {implementation options}(cr)

The number of formats supported is implementation specific.  Options
(such as dump within range) are also implementation specific.

3.2 Saving and Restoring State

The SAVE command (abbreviation SA) save the complete state of the
simulator to a file.  This includes the contents of main memory and
all registers, and the I/O connections of devices:

	sim> save <filename>(cr)

The RESTORE command (abbreviation REST, alternately GET) restores a
previously saved simulator state:

	sim> restore <filename>(cr)

Note: SAVE file format compresses zeroes to minimize file size.

3.3 Resetting Devices

The RESET command (abbreviation RE) resets a device or the entire
simulator to a predefined condition:

	sim> RESET(cr)			-- reset all devices
	sim> RESET ALL(cr)		-- reset all devices
	sim> RESET <device>(cr)		-- reset specified device

Typically, RESET stops any in-progress I/O operation, clears any
interrupt request, and returns the device to a quiescent state.  It
does not clear main memory or affect I/O connections.

3.4 Connecting and Disconnecting Devices

Except for main memory, simulated unit address spaces are simulated as
unstructured binary disk files in the host file system.  Before using a
simulated unit the user must specify the file to be accessed by that
unit.  The ATTACH (abbreviation AT) command associates a unit and a file:

	sim> ATTACH <device><unit number> <filename>(cr)

If the file does not exist, it is created, and an appropriate message
is printed.

For Telnet-based terminal emulators, the ATTACH command associates the
master unit with a TCP/IP port:

	sim> ATTACH <device><unit number> <port>(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 <device><unit number>(cr)	-- detach specified unit

The EXIT command performs an automatic DETACH ALL.

3.5 Examining and Changing State

There are four commands to examine and change state:

	EXAMINE (abbreviated E) examines state
	DEPOSIT (abbreviated D) changes state
	IEXAMINE (interactive examine, abbreviated IE) examines state
		and allows the user to interactively change it
	IDEPOSIT (interactive deposit, abbreviated ID) allows the user
		to interactively change state

All four commands take the form

	command {modifiers} <state list>

Deposit must also include a deposit value at the end of the command.

There are four kinds of modifiers: switches, device/unit name, search
specifiers, and for EXAMINE, output file.  Switches have been described
previously.  A device/unit name identifies the device and unit whose
address space is to be examined or modified.  If no device is specified,
the CPU (main memory)is selected; if a device but no unit is specified,
unit 0 of the device is selected.

Search specifiers provide criteria for testing addresses or registers
to see if they should be processed.  A specifier consists of a logical
operator, a relational operator, or both, optionally separated by spaces.

	{<logical op> <value>} <relational op> <value>

where the logical operator is & (and), | (or), or ^ (xor), and the
relational operator is = or == (equal), ! or != (not equal), >=
(greater than or equal), > (greater than), <= (less than or equal), or
< (less than).  If a logical operator is specified without a relational
operator, it is ignored.  If a relational operator is specified without
a logical operator, no logical operation is performed.  All comparisons
are unsigned.

The output file modifier redirects command output to a file instead of
the console.  An output file modifier consists of @ followed by a
valid file name.

Modifiers may be specified in any order.  If multiple modifiers of the
same time are specified, later modifiers override earlier modifiers.
Note that if the device/unit name comes after the search specifier,
the values will interpreted in the radix of the CPU, rather than of the
device/unit.

The "state list" consists of one or more of the following, separated
by commas:

	register		the specified register
	register[sub1-sub2]	the specified register array locations,
				start at location sub1 up to and including
				location sub2
	register[ALL]		all locations in the specified register
				array
	register1-register2	all the registers starting at register1
				up to and including register2
	address			the specified location
	address1-address2	all locations starting at address1 up to
				and including address2
	STATE			all registers in the device
	ALL			all locations in the unit

Switches can be used to control the format of display information:

	-a			display as ASCII
	-c			display as character string
	-m			display as instruction mnemonics
	-o			display as octal
	-d			display as decimal
	-h			display as hexidecimal

The simulators typically accept symbolic input (see simulator sections).

Examples:

	sim> ex 1000-1100	-- examine 1100:1100
	sim> de PC 1040		-- set PC to 1040
	sim> ie 40-50		-- interactively examine 40:50
	sim> ie >1000 40-50	-- interactively examine the subset
				   of locations 40:50 that are >1000
	sim> ex rx0 50060	-- examine 50060, RX unit 0
	sim> ex rx sbuf[3-6]	-- examine SBUF[3] to SBUF[6] in RX
	sim> de all 0		-- set main memory to 0
	sim> de &77>0 0		-- set all addresses whose low order
				   bits are non-zero to 0
	sim> ex -m @memdump.txt 0-7777	-- dump memory to file

Note: to terminate an interactive command, simply type a bad value (eg,
XYZ) when input is requested.

3.6 Running Programs

The RUN command (abbreviated RU) resets all devices, deposits its argument
(if given) in the PC, and starts execution.  If no argument is given,
execution starts at the current PC.

The GO command does NOT reset devices, deposits its argument (if given) in
the PC, and starts execution.  If no argument is given, execution starts at
the current PC.

The CONT command (abbreviated CO) does NOT reset devices and resumes
execution at the current PC.

The STEP command (abbreviated S) resumes execution at the current PC for
the number of instructions given by its argument.  If no argument is
supplied, one instruction is executed.

The BOOT command (abbreviated BO) bootstraps the device and unit given
by its argument.  If no unit is supplied, unit 0 is bootstrapped.  The
specified unit must be attached to a file.

3.7 Stopping Programs

Programs run until the simulator detects an error or stop condition, or
until the user forces a stop condition.

3.7.1 Simulator Detected Stop Conditions

These simulator-detected conditions stop simulation:

	- HALT instruction.  If a HALT instruction is decoded,
	  simulation stops.

	- Breakpoint.  The IBKPT register provides a single virtual
	  address breakpoint.  If the PC matches the contents of the
	  IBKPT register, simulation stops.  The breakpoint is
	  automatically disabled for the next instruction execution.

	- I/O error.  If an I/O error occurs during simulation of an
	  I/O operation, and the device stop-on-I/O-error flag is set,
	  simulation usually stops.

	- Processor condition.  Certain processor conditions can stop
	  simulation; these are described with the individual simulators.

3.7.2 User Specified Stop Conditions

Typing the interrupt character stops simulation.  The interrupt character
is defined by the WRU (where are you) register and is initially set to
005 (^E).

3.8 Setting Device Parameters

The SET command (abbreviated SE) changes the status of a device parameter:

	sim> SET <unit> <parameter>

Most parameters are simulator and device specific.  Disk drives, for
example, can usually be set write ENABLED or write LOCKED; if a device
supports multiple drive types, the SET command can be used to specify
the drive type.

All devices recognize the following parameters:

	OCT		sets the data radix = 8
	DEC		sets the data radix = 10
	HEX		sets the data radix = 16

3.9 Displaying Parameters and Status

The SHOW CONFIGURATION command shows the simulator configuration and the
status of all simulated devices and units.

The SHOW DEVICES command shows the configuration of all simulated devices.

The SHOW MODIFIERS command shows the modifiers available on all simulated
devices.

The SHOW <device> command shows the status of the named simulated device.

The SHOW QUEUE command shows the state of the simulator event queue.  Times
are in "simulation units", typically one unit per instruction execution,
relative to the current simulation time.

The SHOW TIME command shows the number of time units elapsed since
the last RUN command.

3.10 Altering the Simulated Configuration

For most mass storage, the DISABLE <device> command removes the specified
device from the configuration.  A DISABLEd device is invisible to running
programs.  The device can still be RESET but it cannot be ATTAChed, DETACHed,
or BOOTed.  ENABLE <device> restores a disabled device to a configuration.

In devices with multiple units, the REMOVE <unit> command removes the
specified unit from the configuration.  Once removed, a unit cannot be
manipulated in any way until it is added back to the configuration.
ADD <unit> adds back a unit that had been removed from the configuration.

3.11 Logging Console Output

Output to the console can be logged simultaneously to a file.  Logging is
enabled by the LOG command:

	sim> LOG <filename>			-- log console output to file

Logging is disabled by the NOLOG command:

	sim> NOLOG					-- disable logging

LOG with no argument displays whether logging is enabled or disabled.

3.12 Exiting The Simulator

EXIT (synonyms QUIT and BYE) returns control to the operating system.

4. PDP-8 Features

The PDP-8 simulator is configured as follows:

device		simulates
name(s)

CPU		PDP-8/E CPU with 32KW of memory
-		KE8E extended arithmetic element (EAE)
-		KM8E memory management and timeshare control
PTR,PTP		PC8E paper tape reader/punch
TTI,TTO		KL8E console terminal
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 <port>(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<n> is set
	- wait state entered, and no I/O operations outstanding
	  (ie, no interrupt can ever occur)

The PDP-11 loader supports standard binary format tapes.  The DUMP command
is not implemented.

5.1 CPU

The only CPU options are disabling of 22b addressing, the CIS instruction
set, and the size of main memory.

	SET CPU 18B		disable 22b addressing
	SET CPU 22B		enable 22b addressing (default)
	SET CPU NOCIS		disable CIS instructions (default)
	SET CPU CIS		enable CIS instructions
	SET CPU 16K		set memory size = 16KB
	SET CPU 32K		set memory size = 32KB
	SET CPU 48K		set memory size = 48KB
	SET CPU 64K		set memory size = 64KB
	SET CPU 96K		set memory size = 96KB
	SET CPU 128K		set memory size = 128KB
	SET CPU 192K		set memory size = 192KB
	SET CPU 256K		set memory size = 256KB
	SET CPU 384K		set memory size = 384KB
	SET CPU 512K		set memory size = 512KB
	SET CPU 768K		set memory size = 768KB
	SET CPU 1024K (or 1M)	set memory size = 1024KB
	SET CPU 2048K (or 2M)	set memory size = 2048KB
	SET CPU 3072K (or 3M)	set memory size = 3072KB
	SET CPU 4096K (or 4M)	set memory size = 4096KB

If memory size is being reduced, and the memory being truncated contains
non-zero data, the simulator asks for confirmation.  Data in the truncated
portion of memory is lost.  Initial memory size is 256KB.

These switches are recognized when examining or depositing in CPU memory:

	-v			interpret address as virtual
	-d			if mem mgt enabled, force data space
	-k			if mem mgt enabled, force kernel mode
	-s			if mem mgt enabled, force supervisor mode
	-u			if mem mgt enabled, force user mode
	-p			if mem mgt enabled, force previous mode

CPU registers include the visible state of the processor as well as the
control registers for the interrupt system.

	name		size	comments

	PC		16	program counter
	R0..R5		16	R0..R5, first register set
	R10..R15	16	R0..R5, second register set
	KSP		16	kernel stack pointer
	SSP		16	supervisor stack pointer
	USP		16	user stack pointer
	PSW		16	processor status word
	  CM		2	  current mode, PSW<15:14>
	  PM		2	  previous mode, PSW<13:12>
	  RS		2	  register set, PSW<11>
	  IPL		3	  interrupt priority level, PSW<7:5>
	  T		1	  trace bit, PSW<4>
	  N		1	  negative flag, PSW<3>
	  Z		1	  zero flag, PSW<2>
	  V		1	  overflow flag, PSW<1>
	  C		1	  carry flag, PSW<0>
	SR		16	front panel switches
	DR		16	front panel display
	MEMERR		16	memory error register
	CCR		16	cache control register
	MAINT		16	maintenance register
	HITMISS		16	hit/miss register
	CPUERR		16	CPU error register
	PIRQ		16	programmed interrupt requests
	FAC0H..FAC5H	32	FAC0..FAC5, high 32 bits
	FAC0L..FAC5L	32	FAC0..FAC5, low 32 bits
	FPS		16	floating point status
	FEA		16	floating exception address
	FEC		4	floating exception code
	MMR0..3		16	memory management registers 0..3
	{K/S/U}{I/D}{PAR/PDR}{0..7}
			16	memory management registers
	INT		32	interrupt pending flags
	TRAP		18	trap pending flags
	WAIT		0	wait state flag
	WAIT_ENABLE	0	wait state enable flag
	STOP_TRAPS	18	stop on trap flags
	STOP_VECA	1	stop on read abort in trap or interrupt
	STOP_SPA	1	stop on stack push abort in trap or interrupt
	OLDPC		16	PC prior to last JMP, JMS, or interrupt
	BREAK		16	breakpoint address (1 to disable)
	WRU		8	interrupt character

5.2 Programmed I/O Devices

5.2.1 PC11 Paper Tape Reader (PTR)

The paper tape reader (PTR) reads data from a disk file.  The POS
register specifies the number of the next data item to be read.  Thus,
by changing POS, the user can backspace or advance the reader.

The paper tape reader implements these registers:

	name		size	comments

	BUF		8	last data item processed
	CSR		16	control/status register
	INT		1	interrupt pending flag
	ERR		1	error flag (CSR<15>)
	BUSY		1	busy flag (CSR<11>)
	DONE		1	device done flag (CSR<7>)
	IE		1	interrupt enable flag (CSR<6>)
	POS		31	position in the input file
	TIME		24	time from I/O initiation to interrupt
	STOP_IOE	1	stop on I/O error

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	end of file	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

5.2.2 PC11 Paper Tape Punch (PTP)

The paper tape punch (PTP) writes data to a disk file.  The POS
register specifies the number of the next data item to be written. 
Thus, by by changing POS, the user can backspace or advance the punch.

The paper tape punch implements these registers:

	name		size	comments

	BUF		8	last data item processed
	CSR		16	control/status register
	INT		1	interrupt pending flag
	ERR		1	error flag (CSR<15>)
	DONE		1	device done flag (CSR<7>)
	IE		1	interrupt enable flag (CSR<6>)
	POS		31	position in the output file
	TIME		24	time from I/O initiation to interrupt
	STOP_IOE	1	stop on I/O error

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

5.2.3 KL11 Terminal Input (TTI)

The terminal input (TTI) 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 <port>(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 <port>(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 <port>(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 <file>			load carriage control tape file

The format of a carriage control tape consists of multiple lines.  Each
line contains an optional repeat count, enclosed in parentheses, optionally
followed by a series of column numbers separated by commas.  Column numbers
must be between 1 and 12; a column number of zero denotes top of form.  The
following are all legal carriage control specifications:

	<blank line>			no punch
	(5)				5 lines with no punches
	1,5,7,8				columns 1, 5, 7, 8 punched
	(10)2				10 lines with column 2 punched
	1,0				column 1 punched; top of form

The default form is 66 lines long, with column 1 and the top of form mark
on line 1, and the rest blank.

The line printer registers are:

	name		size	comments

	LINES		8	number of newlines after next print
	LFLAG		1	carriage control flag (1 = skip, 0 = space)
	CCTP		8	carriage control tape pointer
	CCTL		8	carriage control tape length (read only)
	ERR		1	error indicator
	POS		31	position
	CCT[0:131]	32	carriage control tape array	

Error handling is as follows:

	error			processed as

	not attached		report error and stop

	OS I/O error		print error message
				if IOCHK set, report error and stop
				otherwise, set ERR indicator

9.4 1407 Inquiry Terminal (INQ)

The IBM 1407 inquiry terminal (INQ) is a half-duplex console.  It polls
the 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 <controller> DEVNO

This initiates a dialog that displays the current device number and
allows the user to assign a new one:

	Device number:	old	<new>(cr)

The new device number must be in the range 010..077 (octal) and must 
not be currently assigned to another device.  For devices with two
device numbers, only the lower numbered device number can be changed;
the higher is automatically set to the lower + 1.

10.4 Programmed I/O Devices

10.4.1 12597A-002 Paper Tape Reader (PTR)

The paper tape reader (PTR) reads data from a disk file.  The POS
register specifies the number of the next data item to be read.
Thus, by changing POS, the user can backspace or advance the reader.

The paper tape reader supports the BOOT command.  BOOT PTR copies the
absolute binary loader into memory and starts it running.

The paper tape reader implements these registers:

	name		size	comments

	BUF		8	last data item processed
	CMD		1	reader enable
	CTL		1	device/interrupt enable
	FLG		1	device ready
	FBF		1	device ready buffer
	POS		31	position in the input file
	TIME		24	time from I/O initiation to interrupt
	STOP_IOE	1	stop on I/O error
	DEVNO		6	current device number (read only)

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	end of file	1	report error and stop
			0	out of tape or paper

	OS I/O error	x	report error and stop

10.4.2 12597A-005 Paper Tape Punch (PTP)

The paper tape punch (PTP) writes data to a disk file.  The POS
register specifies the number of the next data item to be written.
Thus, by changing POS, the user can backspace or advance the punch.

The paper tape punch implements these registers:

	name		size	comments

	BUF		8	last data item processed
	CMD		1	punch enable
	CTL		1	device/interrupt enable
	FLG		1	device ready
	FBF		1	device ready buffer
	POS		31	position in the output file
	TIME		24	time from I/O initiation to interrupt
	STOP_IOE	1	stop on I/O error
	DEVNO		6	current device number (read only)

Error handling is as follows:

	error	     STOP_IOE	processed as

	not attached	1	report error and stop
			0	out of tape

	OS I/O error	x	report error and stop

10.4.3 12631C Buffered Teleprinter (TTY)

The console teleprinter has three units: keyboard (unit 0), printer
(unit 1), and punch (unit 2).  The keyboard reads from 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 <port>(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 <port>(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