To:	Users
From:	Bob Supnik
Subj:	Simulator Usage, V3.0-2
Date:	15-Sep-2003

			COPYRIGHT NOTICE

The following copyright notice applies to both the SIMH source and binary:

   Original code published in 1993-2003, written by Robert M Supnik
   Copyright (c) 1993-2003, 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 SIMH 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.  This memorandum describes
the features of the command interface.  The details of each simulator are
documented in separate, machine-specific memoranda.


1. Compiling And Running A Simulator

The simulators have been tested on VAX VMS, Alpha VMS, Alpha UNIX,
NetBSD, FreeBSD, OpenBSD, Linux, Solaris, Windows 9x/Me/NT/2000, MacOS
9 and X, and OS/2.  Porting to other environments will require changes
to the operating system dependent code in scp_tty.c, scp_sock.c, and
sim_ether.c.

The simulator sources are provided in a zip archive and are organized
hierarchically.  Source files for the simulator libraries are in the
top level directory; source files for each simulator are in individual
subdirectories.  Note that the include files in the top level directory
are referenced from the subdirectories, without path identifiers.  Your
build tool needs to search the top level directory for include files not
found in the simulator-specific directory, or you will have to copy all
files from the subdirectories into the master directory.  File manifests
for each simulator are given in that simulator's documentation.

The simulators recognize or require a few compile-time #defines:

- The 18b simulators require that the model name be defined as part
  of the compilation command line (i.e., PDP4 for the PDP-4, PDP7
  for the PDP-7, PDP9 for the PDP-9, PDP15 for the PDP-15).

- The PDP-10 simulator uses 64b integer variables, requiring that
  USE_INT64 be defined as part of the compilation command line.
  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 modify sim_defs.h.

- The PDP-10, PDP-11, and VAX simulators share common peripherals.
  To distinguish the target system, one of three variables must be
  defined on the command line: VM_PDP10 for the PDP-10; VM_PDP11
  for the PDP-11; or VM_VAX for the VAX.

- The PDP-11 and VAX simulators optionally support Ethernet.  To
  include Ethernet emulation, USE_NETWORK must be defined as part
  of the compilation command line.  At present, Ethernet support is
  available only on Windows, Linux, NetBSD, and OpenBSD.

- The PDP-11 and VAX simulators optionally support disks and serial
  devices files greater than 2GB.  To include large device support,
  both USE_INT64 and USE_ADDR64 must be defined as part of the
  compilation command line.

To start the simulator, simply type its name.  (On version of VMS
prior to 6.2, the simulators must then be defined as foreign commands
in order to be be started by name.)  The simulator recognizes one
switch, -Q; if specified, certain informational messages are suppressed.

The simulator interprets the arguments on the command line, if any,
as the file name and arguments for a DO command:

	% pdp10 {<startup file> {arg,arg,...}}(cr)

If no file is specified on the command line, the simulator looks for
an startup file consisting of the simulator name (including its path
components) plus the extension .ini.  If a startup file is specified,
either on the command line or implicitly via the .ini capability, it
ishould contain a series of non-interactive simulator command, one
per line.  These command can be used to set up standard parameters,
for example, disk sizes.

After initializing its internal structures and processing the startup
file (if any), the simulator types out its name and version and then
prompts for input with:

	sim>

1.1 Compiling Under UNIX/Linux

The sources originate on a Windows system and have cr-lf at the end of
every line.  For use on UNIX or Mac, the sources must be converted to
UNIX text conventions.  This can be done with the UNIX UNZIP utility
(unzip -a).

The supplied makefile will compile the simulators for UNIX systems
which support the POSIX TERMIOS.  The VAX and PDP-11 can be compiled
with or without Ethernet support.  To compile without Ethernet support:

	gmake {target|ALL|clean}

To compile with Ethernet support:

	gmake USE_NETWORK=1 {target|ALL|clean}

Notes for hand compilation:

- The default UNIX terminal handling model is the POSIX TERMIOS
  interface, which is supported by Linux, Mac OS/X, and Alpha UNIX.
  If your UNIX only supports the BSD terminal interface, BSDTTY
  must be defined as part of the compilation command line.

- The PDP-8, PDP-11, 18b PDP, PDP-10, and Nova simulators use the
  math library.  If your UNIX does not link the math library
  automatically, you must add -lm to the compilation command line.

Examples:

- PDP-11 under TERMIOS UNIX:

	% cc -DVM_PDP11 pdp11_*.c scp*.c sim_*.c -lm -o pdp11

- PDP-9 under TERMIOS UNIX:

	% cc -DPDP9 pdp18b_*.c scp*.c sim_*.c -lm -o pdp9

- PDP-10 under BSD terminal UNIX:

	% cc -DVM_PDP10 -DUSE_INT64 -DBSDTTY pdp10_*.c scp*.c sim_*.c -lm -o pdp10

1.2 Compiling Under Windows

1.2.1 Compiling PDP-11 and VAX with Ethernet Support

The Windows-specific Ethernet code uses the WinPCAP 3.0 package.
This package for windows simulates the libpcap package that is freely
available for Unix systems.

WinPCAP must be installed prior to building the PDP-11 and VAX
simulators with Ethernet support.

- Download V3.0 from http://winpcap.polito.it.
- Install the package as directed.
- Copy the required .h files (bittypes.h, devioctl.h, ip6_misc.h,
  packet32.h, pcap.h, pcap-stdinc.h) from the WinPCAP 3.0 developer's
  kit to the top level simulation directory.
- Get the required .lib files (packet.lib, wpcap.lib) from the WinPCAP
  3.0 developer's kit.  If you're using Borland C++, use COFF2OMF to
  convert the .lib files into a format that can be used by the compiler.
  Then move the libraries to the standard library directory.
- Add -DUSE_NETWORK to the compilation command lines for the PDP-11
  and VAX.

1.2.2 Compiling Under MinGW

MinGW (Minimum GCC for Windows) is a free C compiler available from
http://www.mingw.org.  The distribution includes a batch file
(build_mingw.bat) that will build all the simulators from source.
By default, the PDP-11 and VAX are built without Ethernet support.  To
enable Ethernet support, install WinPCAP as described in the previous
section, and then use the alternative batch file (build_mingw_ether.bat).

1.2.3 Compiling Under Visual C++

Each simulator must be organized as a separate Visual C++ project. 
Starting from an empty console application,

- Add all the files from the simulator file manifest to the project.
- Open the Project->Settings dialog box.
- On the C/C++ tab, Category: General, add any required preprocessor
  definitions (for example, USE_INT64).
- On the C/C++ tab, Category: Preprocessor, add the top level
  simulation directory to the Additional Include Directories.  For
  the VAX and PDP-10, you must also add the PDP-11 directory.
- On the Link tab, add wsock32.lib at the end of the list of
  Object/Module Libraries.
- If you are building the PDP-11 and VAX with Ethernet support, you
  must also add the WinPCAP libraries (packet.lib, wpcap.lib) to the
  list of Object/Module libraries.

If you are using Visual C++ .NET, you must turn off /Wp (warn about
potential 64b incompatibilities); otherwise, the compilations will
generate a lot of spurious conversion warnings.

1.2.4 Compiling Under Borland C++

The Borland C++ compiler generates lots of spurious warnings about
missing function prototypes and conversions.  All of these warnings
can be safely ignored.

1.3 Compiling Under OpenVMS

Compiling on OpenVMS requires DEC C.  The simulators that require
64b (PDP-10 and VAX) will not compile on OpenVMS/VAX.  The SIMH
distribution includes an MMS command file descrip.mms that will
build all the simulators from source.  An example of hand compilation:

- PDP-8 under VMS:

	$ cc scp*.c,sim_*.c,[.pdp8]pdp8*.c
	$ link/exec=pdp8 scp*.obj,sim_*.obj,[.pdp8]pdp8*.obj

1.4 Compiling Under MacOS

The simulators have been tested on both MacOS 9 (with Codewarrior)
and MacOS/X (with Apple's tools).

1.5 Compiling Under OS/2

Socket support requires the EMX compiler.

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 types of formats supported are 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 types of formats supported are 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 <unit> <filename>(cr)

If the file does not exist, and the -e switch was not specified, a
new file is created, and an appropriate message is printed.  If the
-e switch was specified, a new file is not created, and an error
message is printed.

If the -r switch is specified, or the file is write protected, ATTACH
tries to open the file read only.  If the file does not exist, or the
unit does not support read only operation, an error occurs.  Input-
only devices, such as paper-tape readers, and devices with write lock
switches, such as disks and tapes, support read only operation; other
devices do not.  If a file is ATTACHed read only, its contents can be
examined but not modified. 

For simulated magnetic tapes, the ATTACH command can specify the
format of the attached tape image file:

	sim> ATTACH -f <tape_unit> <format> <filename>(cr)

The currently supported tape image file formats are:

	SIMH		SIMH simulator format
	E11		E11 simulator format
	TPC		TPC format

The tape format can also be set with the SET command prior to ATTACH:

	sim> SET <tape_unit> FORMAT=<format>(cr)
	sim> ATT <tape_unit> <filename>(cr)

The format of an attached file can be displayed with the SHOW command:

	sim> SHOW <tape_unit> FORMAT(cr)

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

	sim> ATTACH <unit> <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 <unit>(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,
				starting at location sub1 up to and
				including location sub2
	register[sub1/length]	the specified register array locations,
				starting at location sub1 up to but
				not including sub1+length
	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
	address/length		all location starting at address up to
				but not including address+length
	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 documentation with
each simulator).

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 simulator may support breakpoints (see
	  below).

	- 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.7.3 Breakpoints

A simulator may offer breakpoint capability.  A simulator may define
breakpoints of different types, identified by letter (for example, E
for execution, R for read, W for write, etc).  At the moment, most
simulators support only E (execution) breakpoints.

Associated with a breakpoint is a count and, optionally, one or more
actions.  Each time the breakpoint is sprung, the associated count is
decremented.  If the count is less than or equal to 0, the breakpoint
occurs; otherwise, it is deferred.  When the breakpoint occurs, the
optional actions are automatically executed.

A breakpoint is set by the BREAK command:

	sim> BREAK {-types} <addr range>{[count]},{addr range...}
	     {;action;action...}

If no type is specified, the simulator-specific default breakpoint
type (usually E for execution) is used.  As with EXAMINE and DEPOSIT,
an address range may be a single address, a range of addresses low-high,
or a relative range of address/length.  Examples of BREAK:

	sim> break -e 200		-- set E break at 200
	sim> break 2000/2[2]		-- set E breaks at 2000,2001
					   with count = 2
	sim> break 100;ex ac;d mq 0	-- set E break at 100 with
					   actions EX AC and D MQ 0
	sim> break 100;			-- delete action on break at 100

Currently set breakpoints can be displayed with the SHOW BREAK command:

	sim> SHOW {-types} BREAK {ALL|<addr range>{,<addr range>...}}

Locations with breakpoints of the specified type are displayed.

Finally, breakpoints can be cleared by the NOBREAK command.

3.8 Setting Device Parameters

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

	sim> SET <device> <parameter>{=<value}

or a unit parameter:

	sim> SET <unit> <parameter>{=<value>}

Most parameters are simulator and device specific.  Disk drives, for
example, can usually be set WRITEENABLED 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 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.

The SHOW <device> command shows the status of the named simulated
device. SHOW <device> <parameter> shows the value of the named
parameter, if it can display a value.

The SHOW <unit> command shows the status of the named simulated unit.
SHOW <unit> <parameter> shows the value of the named parameter, if
it can display a value.

3.10 Altering The Simulated Configuration

In most simulators, the SET <device> DISABLED 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.  SET <device> ENABLED
restores a disabled device to a configuration.

Most multi-unit devices allow units to be placed online or offline:

	sim> SET <unit> ONLINE
	sim> SET <unit> OFFLINE

When a unit is offline, it will not be displayed by SHOW DEVICE.

The console terminal normally runs in the controlling window.
Optionally,  the console terminal can be connected to a Telnet port.
This allows systems to emulate a VT100 using the built-in terminal
emulation of the Telnet client.

	sim> SET TELNET <port>		-- listen for console
					   Telnet connection on port
	sim> SET NOTELNET		-- disable console Telnet
	sim> SHOW TELNET		-- show console Telnet status

The standard device names can be supplemented with logical names.
Logical names must be unique within a simulator (that is, they cannot
be the same as an existing device name).  To assign a logical name
to a device:

	sim> ASSIGN device log-name	-- assign log-name to device

To remove a logical name:

	sim> DEASSIGN device		-- remove logical name

To show all logical names:

	sim> SHOW NAMES

3.11 Logging Console Output

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

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

Logging is disabled by the NOLOG command:

	sim> SET NOLOG			-- disable logging

SHOW LOG displays whether logging is enabled or disabled.

3.12 Executing Command Files

The simulator can execute command files with the DO command:

	sim> DO <filename> {arguments...}	-- execute commands in file

The DO command allows command files to contain substitutable arguments.
The string %n is recognized as meaning argument n from the DO command
line. The character \ has the usual UNIX meaning of an escape character;
the next character is interpreted literally, even if it is % or \.
Arguments with spaces can be enclosed in matching single or double
quotation marks.

If the switch -V is specified, the commands in the file are echoed
before they are executed.

3.13 Executing System Commands

The simulator can execute operating system commands with the ! (spawn)
command:

	sim> ! <host operating system command>

If no operating system command is provided, the simulator attempts to
launch the host operating system's command shell.

3.14 Getting Help

The HELP command prints out information about a command or about all
commands:

	sim> HELP			-- print all HELP messages
	sim> HELP <command>		-- print HELP for command

3.15 Exiting The Simulator

EXIT (synonyms QUIT and BYE) returns control to the operating system.

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,
24b, 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.  If the record header is not a special header, it is followed
by n 8b bytes of data, followed by a repeat of the 32b record header.
A 1 in the high order bit of the record header indicates an error in
the record. If the byte count is odd, the record is padded to even
length; the pad byte is undefined.

Special record headers occur only once and have no data.  The currently
defined special headers are:

	0x00000000		file mark (not repeated)
	0xFFFFFFFF		end of medium (not repeated)

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.

SIMH can read and write E11-format magtape images.  E11 format differs
from SIMH format only for odd-length records; the data portion of E11
records is not padded with an extra byte.

SIMH can read TPC-format magtape images.  TPC format uses a 16b record
header, with 0x0000 denoting file mark.  The record header is not
repeated at the end of the record.  Odd-length records are padded with
an extra byte.

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-1/4/7/9/15 DECtapes
use 578 blocks of 256 32b words.  Each 32b word contains 18b (6 lines)
of data.  PDP-11 DECtapes use 578 blocks of 256 16b words.  Each 16b word
contains 6 lines of data, with 2b omitted.  This is compatible with native
PDP-11 DECtape dump facilities, and with John Wilson's PUTR Program.  PDP-8
DECtapes use 1474 blocks of 129 16b words.  Each 16b word contains 12b
(4 lines) of data.  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	-	-	h
EIS/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	-	y
extra terminal	y	y	y	-	y
hard disk	y	y	y	-	y
fixed disk	y	-	h	-	y
floppy disk	y	y	y	-	-
drum		-	-	-	h	h
DECtape		y	y	-	h	y
mag tape	y	y	y	-	h

	system	1401	2100	PDP-10	H316	VAX
device
CPU		y	y	y	h	y
FPU		-	y	y	-	y
EIS/CIS		-	y	y	-	-
console		h	y	y	h	y
paper tape	-	y	h	h	y
card reader	y	-	-	-	-
line printer	y	y	y	h	y
clock		-	y	y	h	y
extra terminal	-	y	y	-	y
hard disk	-	y	y	-	y
fixed disk	-	n	-	-	-
floppy disk	-	-	h	-	-
drum		-	n	-	-	-
DECtape		-	-	-	-	-
mag tape	y	y	y	-	y

	system	GRI-909	1620	i16	i32	SDS940
device
CPU		h	h	d	y	d
FPU		-	-	d	y	-
CIS		-	-	-	-	-
console		h	h	d	y	h
paper tape	h	h	d	y	h
card reader	-	h	-	-	-
line printer	-	h	d	y	h
clock		h	-	d	y	n
extra terminal	-	-	h	y	h
hard disk	-	h	d	y	h
fixed disk	-	-	-	-	h
floppy disk	-	-	d	d	-
drum		-	-	-	-	h
DECtape		-	-	-	-	-
mag tape	-	-	d	y	h

legend:		y = runs operating system or sample program
		d = runs diagnostics
		h = runs hand-generated test cases
		n = untested
		- = not applicable

Revision History (covering Rev 2.0 to present)

Starting with Rev 2.7, detailed revision histories can be found
in file sim_rev.c.

Rev 3.0, May, 03
	Added logical name support
	Added multiple tape format support
	Added 64b address support
	Added PDP-4 EAE support
	Added PDP-15 FP15 and XVM support

Rev 2.10, Nov, 02
	Added Telnet console capability, removed VT emulation
	Added DO with substitutable arguments (from Brian Knittel)
	Added .ini initialization file (from Hans Pufal)
	Added quiet mode (from Brian Knittel)
	Added ! command (from Mark Pizzolato)
	Added Telnet BREAK support (from Mark Pizzolato)
	Added device enable/disable support
	Added optional simulator hooks for input, output, commands
	Added breakpoint actions
	Added magtape simulation library
	Added PDP-11 KW11P programmable clock
	Added PDP-11 RK611/RK06/RK07 disk
	Added PDP-11/VAX TMSCP tape
	Added PDP-11/VAX DELQA Ethernet support (from David Hittner)
	Added PDP-11/PDP-10 RX211/RX02 floppy disk
	Added PDP-11/VAX autoconfiguration support
	Added PDP-10/PDP-11/VAX variable vector support
	Added PDP-1 DECtape
	Added PDP-1, PDP-4 Type 24 serial drum support
	Added PDP-8 RX28 support
	Added PDP-9 RB09 fixed head disk, LP09 line printer
	Added HP2100 12845A line printer
	Added HP2100 13183 magtape support
	Added HP2100 boot ROM support
	Added HP2100 interprocessor link support
	Added IBM 1620
	Added SDS 940
	Added Interdata 16b and 32b systems
	Added 16b DECtape file format support
	Added support for statically buffered devices
	Added magtape end of medium support
	Added 50/60Hz support to line frequency clocks
	Added 7B/8B support to terminals and multiplexors
	Added BREAK support to terminals and multiplexors

Rev 2.9, Jan, 02
	Added circular register arrays
	Replaced ENABLE/DISABLE with SET ENABLED/DISABLED
	Replaced LOG/NOLOG with SET LOG/NOLOG
	Generalized the timer calibration package
	Added additional routines to the multiplexor library
	Added SET DISCONNECT, SHOW STATISTICS commands to multiplexors
	Reimplemented PDP-8 TTX as a unified multiplexor
	Implemented a PC queue in most simulators
	Added VAX simulator
	Added GRI-909 simulator
	Added Peter Schorn's MITS 8080/Z80 simulator
	Added Brian Knittel's IBM 1130 simulator
	Added HP2100 DQ, DR, MS, MUX devices
	Added SET VT/NOVT commands

Rev 2.8, Dec, 01
	Added DO command
	Added general breakpoint facility
	Added extended SET/SHOW capability
	Replaced ADD/REMOVE with SET ONLINE/OFFLINE
	Added global register name recognition
	Added unit-based register arrays
	Added Charles Owen's System 3 simulator
	Added PDP-11 I/O bus map
	Added PDP-11/VAX RQDX3
	Added PDP-8 RL8A
	Revised 18b PDP interrupt structure
	Revised directory and documentation structure
	Added support for MINGW environment

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 sim_qcount and simulator exit detach all facilities
	Added Macintosh sim_sock support (from Peter Schorn)
	Added simulator revision level, SHOW version
	Changed int64/uint64 to t_int64/t_uint64 for Windoze
	Fixed bug in PDP-11 interrupt acknowledge
	Fixed bugs in PDP-11 TS NXM check, boot code, error status;
	 added extended characteristics and status
	Fixed bug in PDP-11 TC stop, stop all functions
	Fixed receive interrupt while disconnected bug in DZ11
	Fixed multi-unit operation bugs, interrupt bugs in PDP-11
	 RP, PDP-10 RP, PDP-10 TU
	Fixed carrier detect bug in PDP-11, PDP-10 DZ
	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
	Upgraded PDP-11 LTC to full KW11-L
	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 Charles Owen's 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 Charles Owen
	-- 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
	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,
	 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
Alan Bawden		ITS consulting
Winfried Bergmann	Linux port testing
Phil Budne		Solaris port testing
Max Burnet		PDP information, documentation, and software
Robert Alan Byer	VMS socket support and testing
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, PDP-10, PDP-18b debugging
L Peter Deutsch		PDP-1 LISP software
Ethan Dicks		PDP-11 2.9 BSD debugging
John Dundas		PDP-11 CPU debugging, programmable clock simulator
Jonathan Engdahl	PDP-11 device debugging
Carl Friend		Nova and Interdata documentation, and RDOS software
Megan Gentry		PDP-11 integer debugging
Dave Gesswein		PDP-8 and PDP-9.15 documentation, PDP-8 DECtape, disk,
			 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, make file
Ken Harrenstein		KLH PDP-10 simulator
Bill Haygood		PDP-8 information, simulator, and software
Wolfgang Helbig		DZ11 implementation
Mark Hittinger		PDP-10 debugging
Dave Hittner		SCP debugging, DEQNA emulator and Ethernet library
Sellam Ismail		GRI-909 documentation
Jay Jaeger		IBM 1401 consulting
Doug Jones		PDP-8 information, simulator, and software
Brian Knittel		IBM 1130 simulator, SCP extensions for GUI support
Al Kossow		HP 21xx, Varian 620, TI 990, Interdata, DEC
			 documentation and software
Arthur Krewat		DZ11 changes 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
Bill McDermith		HP 2100 debugging, 12565A simulator
Scott McGregor		PDP-11 UNIX legal permissions
Jeff Moffatt		HP 2100 information, documentation, and software
Alec Muffett		Solaris port testing
Terry Newton		HP 21MX debugging
Thord Nilson		DZ11 implementation
Charles Owen		Nova moving head disk debugging, Altair simulator,
			 Eclipse simulator, IBM System 3 simulator,
			 IBM 1401 diagnostics, debugging, and magtape boot
Sergio Pedraja		MINGW environment debugging
Derek Peschel		PDP-10 debugging
Paul Pierce		IBM 1401 diagnostics, media recovery
Mark Pizzolato		SCP, Ethernet, and VAX simulator improvements
Hans Pufal		PDP-10 debugging, PDP-15 bootstrap, DOS-15 recovery,
			DOS-15 documentation, PDP-9 restoration
Bruce Ray		Software, documentation, bug fixes, and new devices
			 for the Nova, OS/2 porting
Craig St Clair		DEC 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, hosting for SIMH site
Van Snyder		IBM 1401 zero footprint bootstraps
Michael Somos		PDP-1 debugging
Hans-Michael Stahl	OS/2 port testing, TERMIOS implementation
Tim Stark		TS10 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
Bob Supnik		SIMH simulators
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
Fred Van Kempen		Ethernet code, RK611 emulator, PDP-11 debugging,
			VAX/Ultrix debugging
Holger Veit		OS/2 socket support
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
Joe Young		RP debugging on Ultrix-11 and BSD

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
Caldera Corporation
Hewlett-Packard Corporation


