mirror of
https://github.com/simh/simh.git
synced 2026-01-21 02:08:09 +00:00
1. New Features
1.1 Directory and documentation
- Only common files (SCP and libraries) are in the top level
directory. Individual simulator files are in their individual
directories.
- simh_doc.txt has been split up. simh_doc.txt now documents
only SCP. The individual simulators are documented in separate
text files in their own directories.
- mingw_build.bat is a batch file for the MINGW/gcc environment
that will build all the simulators, assuming the root directory
structure is at c:\sim.
- Makefile is a UNIX make file for the gcc environment that will
build all the simulators, assuming the root directory is at
c:\sim.
1.2 SCP
- DO <file name> executes the SCP commands in the specified file.
- Replicated registers in unit structures can now be declared as
arrays for examine, modify, save, and restore. Most replicated
unit registers (for example, mag tape position registers) have
been changed to arrays.
- The ADD/REMOVE commands have been replaced by SET unit ONLINE
and SET unit OFFLINE, respectively.
- Register names that are unique within an entire simulator do
not have to be prefaced with the device name.
- The ATTACH command can attach files read only, either under
user option (-r), or because the attached file is ready only.
- The SET/SHOW capabilities have been extended. New forms include:
SET <dev> param{=value}{ param ...}
SET <unit> param{=value}{ param ...}
SHOW <dev> {param param ...}
SHOW <unit> {param param ...}
- Multiple breakpoints have been implemented. Breakpoints are
set/cleared/displayed by:
BREAK addr_list{[count]}
NOBREAK addr_list
SHOW BREAK addr_list
1.3 PDP-11 simulator
- Unibus map implemented, with 22b RP controller (URH70) or 18b
RP controller (URH11) (in debug).
- All DMA peripherals rewritten to use map.
- Many peripherals modified for source sharing with VAX.
- RQDX3 implemented.
- Bugs fixed in RK11 and RL11 write check.
1.4 PDP-10 simulator
- ITS 1-proceed implemented.
- Bugs fixed in ITS PC sampling and LPMR
1.5 18b PDP simulator
- Interrupts split out to multiple levels to allow easier
expansion.
1.5 IBM System 3 Simulator
- Written by Charles (Dutch) Owen.
1.6 VAX Simulator (in debug)
- Simulates MicroVAX 3800 (KA655) with 16MB-64MB memory, RQDX3,
RLV12, TSV11, DZV11, LPV11, PCV11.
- CDROM capability has been added to the RQDX3, to allow testing
with VMS hobbyist images.
1.7 SDS 940 Simulator (not tested)
- Simulates SDS 940, 16K-64K memory, fixed and moving head
disk, magtape, line printer, console.
1.8 Altair Z80
- Revised from Charles (Dutch) Owen's original by Peter Schorn.
- MITS 8080 with full Z80 simulation.
- 4K and 8K BASIC packages, Prolog package.
1.9 Interdata
The I4 simulator has been withdrawn for major rework. Look for
a complete 16b/32b Interdata simulator sometime next year.
2. Release Notes
2.1 SCP
SCP now allows replicated registers in unit structures to be
modelled as arrays. All replicated register declarations have
been replaced by register array declarations. As a result,
save files from prior revisions will generate errors after
restoring main memory.
2.2 PDP-11
The Unibus map code is in debug. The map was implemented primarily
to allow source sharing with the VAX, which requires a DMA map.
DMA devices work correctly with the Unibus map disabled.
The RQDX3 simulator has run a complete RSTS/E SYSGEN, with multiple
drives, and booted the completed system from scratch.
2.3 VAX
The VAX simulator will run the boot code up to the >>> prompt. It
can successfully process a SHOW DEVICE command. It runs the HCORE
instruction diagnostic. It can boot the hobbyist CD through SYSBOOT
and through the date/time dialog and restore the hobbyist CD, using
standalone backup. On the boot of the restored disk, it gets to the
date/time dialog, and then crashes.
2.4 SDS 940
The SDS 940 is untested, awaiting real code.
2.5 GCC Optimization
At -O2 and above, GCC does not correctly compile the simulators which
use setjmp-longjmp (PDP-11, PDP-10, VAX). A working hypothesis is
that optimized state maintained in registers is being used in the
setjmp processing routine. On the PDP-11 and PDP-10, all of this
state has been either made global, or volatile, to encourage GCC to
keep the state up to date in memory. The VAX is still vulnerable.
3. Work list
3.1 SCP
- Better ENABLE/DISABLE.
3.2 PDP-11 RQDX3
Software mapped mode, RCT read simulation, VMS debug.
950 lines
36 KiB
Plaintext
950 lines
36 KiB
Plaintext
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<68>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<68>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
|