To: Users From: Bob Supnik Subj: Simulator Usage, V2.10 Date: 15-Nov-2002 COPYRIGHT NOTICE The following copyright notice applies to both the SIMH source and binary: Original code published in 1993-2002, written by Robert M Supnik Copyright (c) 1993-2002, 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 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 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. 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. If a startup file is specified, it 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 { {arg,arg,...}}(cr) The simulator types out its name and version, executes the commands in the startup file, if any, and then prompts for input with sim> 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 will be compiled without Ethernet support; use makefile_ether to compile with Ethernet support. 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 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 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. Note that WinPCAP DOES NOT SUPPORT dual CPU environments. 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 top level simulation 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: -{...} Multiple switches may be specified separately or together: -abcd or -a -b -c -d are treated identically. Verbs, switches, and other input (except for file names) are case insensitive. Any command beginning with semicolon (;) is considered a comment and ignored. 3.1 Loading and Saving Programs The LOAD command (abbreviation LO) loads a file in binary paper-tape loader format: sim> load {implementation options}(cr) The number of formats supported is implementation specific. Options (such as load within range) are also implementation specific. The DUMP command (abbreviation DU) dumps memory in binary paper- tape loader format: sim> dump {implementation options}(cr) The number of formats supported is implementation specific. Options (such as dump within range) are also implementation specific. 3.2 Saving and Restoring State The SAVE command (abbreviation SA) save the complete state of the simulator to a file. This includes the contents of main memory and all registers, and the I/O connections of devices: sim> save (cr) The RESTORE command (abbreviation REST, alternately GET) restores a previously saved simulator state: sim> restore (cr) Note: SAVE file format compresses zeroes to minimize file size. 3.3 Resetting Devices The RESET command (abbreviation RE) resets a device or the entire simulator to a predefined condition: sim> RESET(cr) -- reset all devices sim> RESET ALL(cr) -- reset all devices sim> RESET (cr) -- reset specified device Typically, RESET stops any in-progress I/O operation, clears any interrupt request, and returns the device to a quiescent state. It does not clear main memory or affect I/O connections. 3.4 Connecting and Disconnecting Devices Except for main memory, simulated unit address spaces are simulated as unstructured binary disk files in the host file system. Before using a simulated unit, the user must specify the file to be accessed by that unit. The ATTACH (abbreviation AT) command associates a unit and a file: sim> ATTACH (cr) If the file does not exist, 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 Telnet-based terminal emulators, the ATTACH command associates the master unit with a TCP/IP port: sim> ATTACH (cr) The port is a decimal number between 1 and 65535 and should not used by standard TCP/IP protocols. The DETACH (abbreviation DET) command breaks the association between a unit and a file, or between a unit and a port: sim> DETACH ALL(cr) -- detach all units sim> DETACH (cr) -- detach specified unit The EXIT command performs an automatic DETACH ALL. 3.5 Examining and Changing State There are four commands to examine and change state: EXAMINE (abbreviated E) examines state DEPOSIT (abbreviated D) changes state IEXAMINE (interactive examine, abbreviated IE) examines state and allows the user to interactively change it IDEPOSIT (interactive deposit, abbreviated ID) allows the user to interactively change state All four commands take the form command {modifiers} Deposit must also include a deposit value at the end of the command. There are four kinds of modifiers: switches, device/unit name, search specifiers, and for EXAMINE, output file. Switches have been described previously. A device/unit name identifies the device and unit whose address space is to be examined or modified. If no device is specified, the CPU (main memory)is selected; if a device but no unit is specified, unit 0 of the device is selected. Search specifiers provide criteria for testing addresses or registers to see if they should be processed. A specifier consists of a logical operator, a relational operator, or both, optionally separated by spaces. { } where the logical operator is & (and), | (or), or ^ (xor), and the relational operator is = or == (equal), ! or != (not equal), >= (greater than or equal), > (greater than), <= (less than or equal), or < (less than). If a logical operator is specified without a relational operator, it is ignored. If a relational operator is specified without a logical operator, no logical operation is performed. All comparisons are unsigned. The output file modifier redirects command output to a file instead of the console. An output file modifier consists of @ followed by a valid file name. Modifiers may be specified in any order. If multiple modifiers of the same time are specified, later modifiers override earlier modifiers. Note that if the device/unit name comes after the search specifier, the values will interpreted in the radix of the CPU, rather than of the device/unit. The "state list" consists of one or more of the following, separated by commas: register the specified register register[sub1-sub2] the specified register array locations, start at location sub1 up to and including location sub2 register[ALL] all locations in the specified register array register1-register2 all the registers starting at register1 up to and including register2 address the specified location address1-address2 all locations starting at address1 up to and including address2 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. 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} {[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/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 Currently set breakpoints can be displayed with the SHOW BREAK command: sim> SHOW {-types} BREAK {ALL|{,...}} 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 {= SET {=} 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 command shows the status of the named simulated device. SHOW shows the value of the named parameter, if it can display a value. The SHOW command shows the status of the named simulated unit. SHOW shows the value of the named parameter, if it can display a value. 3.10 Altering the Simulated Configuration In most simulators, the SET 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 ENABLED restores a disabled device to a configuration. Most multi-unit devices allow units to be placed online or offline: sim> SET ONLINE sim> SET 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 -- listen for console Telnet connection on port sim> SET NOTELNET -- disable console Telnet sim> SHOW TELNET -- show console Telnet status 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 -- 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 {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 Getting Help The HELP command prints out information about a command or about all commands: sim> HELP -- print all HELP messages sim> HELP -- print HELP for command 3.14 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. 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 - - - 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 - h fixed disk y - h - h floppy disk y y y - - DECtape y y - h y mag tape h y y - h system 1401 2100 PDP-10 H316 VAX device CPU y y y h y FPU - d y - y EIS/CIS - d y - - console h y y h y paper tape - d h h y card reader y - - - - line printer y d y h y clock - d y h y extra terminal - h y - y hard disk - h y - y fixed disk - h - - - floppy disk - - h - - DECtape - - - - - mag tape y d y - y system GRI-909 1620 device CPU h h FPU - - CIS - - console h h paper tape h h card reader - h line printer - h clock h - extra terminal - - hard disk - h fixed disk - - floppy disk - - DECtape - - mag tape - - 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 2.10, Nov, 02 Added Telnet console capability, removed VT emulation Added DO with substitutable arguments Added quiet mode Added device enable/disable support Added optional simulator for input, output, commands 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-8 RX28 support Added HP2100 12845A line printer Added HP2100 13183 magtape support Added HP2100 boot ROM support Added IBM 1620 Added 16b DECtape file format support Added support for statically buffered devices Added magtape end of medium support Added 7B/8B 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 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 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 and clock debugging Jonathan Engdahl PDP-11 device 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 Dave Hittner SCP debugging, Ethernet emulation Sellam Ismail GRI-909 documentation Jay Jaeger IBM 1401 information Doug Jones PDP-8 information, simulator, and software Brian Knittel IBM 1130 simulator 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 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 VAX simulator improvements 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 Van Snyder IBM 1401 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 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 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