blob: 38e2197cb3c2492dbb20894f48cdb92952d52b49 [file] [log] [blame] [raw]
To: Users
From: Bob Supnik
Subj: Simulator Usage, V2.8
Date: 10-Dec-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 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, Intel
FreeBSD, Intel LINUX, Windows 9x/Me/NT/2000 (Visual C++ and MINGW gcc),
Macintosh 9 and X (CodeWarrior), and OS/2. Porting to other environments
will require changes to the operating system dependent code in scp_tty.c
and scp_sock.c.
The simulator sources 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.
Compilation notes:
- 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 and VAX simulators use 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 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.
- Simulators supporting multiple terminals require a sockets library.
Under UNIX, this library is linked in automatically. Under Visual
C++, wsock32.lib must be added to the library search list.
Examples:
- PDP-8 under VMS:
$ cc pdp8_*.c,scp.c,scp_tty.c,sim_*.c ! PDP-8
$ link/exec=pdp8 pdp8_*.obj,scp.obj,scp_tty.obj,sim_*.obj
- PDP-11 under TERMIOS UNIX:
% cc 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 -DUSE_INT64 -DBSDTTY pdp10_*.c scp*.c sim_*.c -lm -o pdp10
A batch file for compiling under the Windows MINGW environment, and
a Make file for UNIX, are included in the distribution.
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 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:
% pdp10 <startup file>(cr) or
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.
If the -r switch is given, 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 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 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. 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.
A breakpoint is set by the BREAK command:
sim> BREAK {-types} <addr range>{[count]},{addr range...}
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 low/length. Examples of SET BREAK
sim> break -e 200 -- set E break at 200
sim> break 2000/2[2] -- set E breaks at 2000,2001
with count = 2
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 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
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.
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
display a result.
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 result.
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.
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 Executing Command Files
The simulator can execute command files with the DO command:
sim> DO <filename> -- execute commands in file
3.13 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 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 (covering Rev 1.1 to 2.7)
Starting with Rev 2.7, detailed revision histories can be found
in file sim_rev.c.
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 VAX simulator
Added SDS940 simulator
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 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
Alan Bawden ITS 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, PDP-10, PDP-18b debugging
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, 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
Jay Jaeger IBM 1401 information
Doug Jones PDP-8 information, simulator, and software
Al Kossow HP 21xx, Varian 620, TI 990, Interdata, 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,
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
Hans Pufal PDP-10 debugging, PDP-15 bootstrap
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
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
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
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