SIMH/HP 3000 RELEASE NOTES | |
========================== | |
Last update: 2016-07-05 | |
This file documents the release history of the Hewlett-Packard 3000 simulator. | |
The SIMH project does not issue discrete releases. Instead, the current | |
simulator code base is available at: | |
https://github.com/simh/simh | |
...and may be downloaded at any time. A code snapshot is identified by the "git | |
commit ID" that is displayed by the simulator welcome banner. | |
Therefore, HP 3000 releases are simply documentation checkpoints that describe | |
the changes that have occurred since the last checkpoint. Generally, a release | |
is written when one or more major changes have been incorporated. Minor bug | |
fixes will be available immediately but only noted as part of the next release | |
document. | |
=================== | |
General Information | |
=================== | |
The simulator passes the HP 32230 offline diagnostic suite with some expected | |
failures due to unimplemented features. For example, the disc diagnostic | |
error-correction logic tests and the tape diagnostic CRCC and LRCC tests fail, | |
as these features are not supported. However, all features that are required | |
for MPE operation pass their respective diagnostic tests. | |
The simulator has been tested with MPE-V/R version E.01.00. Specifically: | |
- MPE can be RELOADed to generate a new disc-based system from a FOS tape. | |
- MPE can be COOLSTARTed to run from a previously generated disc. | |
- The MPE system console operates (by default) through the simulation console, | |
and additional sessions may be connected to the ATC via Telnet or host | |
serial ports. | |
- MPE FOS programs (EDITOR, QUERY) and SUBSYS programs (SPL, BASIC, BASICOMP) | |
run properly. | |
- The SYSDUMP program produces a valid tape image, and the system may be | |
COLDSTARTED from it. | |
- The operator and system manager can be logged in and out, and MPE can be | |
SHUTDOWN through to a HALT 17. | |
The user's manual for the simulator is provided in Microsoft Word format in the | |
"doc" subdirectory of the code base snapshot downloaded from the github site. A | |
PDF version of the same manual is available at: | |
http://alum.mit.edu/www/jdbryan/hp3000_doc.pdf | |
A preconfigured MPE-V/R disc image containing the Fundamental Operating Software | |
(FOS), selected SUBSYS language processors (BASIC, BASICOMP, COBOL, COBOLII, | |
FORTRAN, PASCAL, RPG, and SPL), and example programs is available from Bitsavers | |
at: | |
http://www.bitsavers.org/bits/HP/HP_3000/ | |
The archive contains instructions and simulator command files that allow | |
ready-to-run operation. | |
Manuals describing MPE operation are also available from Bitsavers at: | |
http://www.bitsavers.org/pdf/hp/3000/ | |
HP created MPE-V/R-specific manuals. However, very few of them survive. In | |
general, the MPE-IV manuals describe a subset of MPE-V/R commands, whereas the | |
MPE-V/E manuals describe a superset. Relying on the MPE-IV manuals and the | |
online help available within MPE for those commands that do not appear in the | |
manuals is perhaps the best compromise. | |
----------------------- | |
Bugs in MPE V/R E.01.00 | |
----------------------- | |
Testing during simulator development revealed the presence of several bugs in | |
the MPE version used: | |
- After a cold load from tape (COLDSTART/RELOAD/UPDATE), if a non-HP terminal | |
such as the simulation console is used as the system console, MPE prints DATE | |
(M/D/Y)? and then WED, NOV 1, 1972, 12:00 AM, as though RETURN had been | |
entered, but it wasn't. If an HP terminal emulator is used instead, MPE | |
waits for the user to enter the date before proceeding. | |
The problem is incorrect coding in the SPEEDSENSE procedure in module | |
INITIAL. As a result, the console baud rate is set to an invalid value, so | |
console reads fail. The resulting zero-length read is interpreted as though | |
RETURN had been entered. | |
This is MPE V/R SSB KPR Number 5000187104, "Foreign devices as SIII system | |
consoles do not work correctly on V/R." HP issued a patch for this, but it | |
does not seem to have survived. A simple workaround is to set local ENQ/ACK | |
processing on ATC channel 0 (SET ATCD0 LOCALACK) when the system console is | |
not an HP terminal. This is the default setting, so the bug only manifests | |
itself when SET ATCD0 REMOTEACK is done before booting. An alternate | |
workaround that does not depend on the ATC setting is to set memory location | |
01.112247 to octal value 021360. This changes the "LOAD P+22,I,X" | |
instruction at that location to "LDI 360" to set the detected speed to 2400 | |
baud unconditionally. | |
- If a SHUTDOWN is performed while a logon read is pending on the system | |
console, e.g., by pressing RETURN to obtain the colon prompt after logging | |
OPERATOR.SYS off, the expected "ALL JOBS LOGGED OFF" message does not print. | |
Instead, the first few characters of the message (which begins with the | |
current time) are printed, followed as expected by SHUT and a HALT %17. If | |
no read is pending, either because RETURN was not pressed before entering the | |
SHUTDOWN command or because the read timed out, the message is printed | |
normally. | |
The problem is that while the message is being send to the ATC character-by- | |
character, the I/O abort issued to cancel the logon read also cancels the | |
message write. The timing is such that only the first few characters of the | |
message are printed before the rest of the output is cancelled. | |
No SSB KPR has been located, but a later MPE version inserts an ABORTIO call | |
for the system console immediately before logging all sessions off. This | |
clears any logon read that might exist, and therefore an abort will not be | |
performed after the "ALL JOBS LOGGED OFF" message is output. It is | |
impossible to patch memory to add this call, so the only workarounds when | |
shutting down are to avoid requesting the logon prompt, wait until the logon | |
timeout expires (nominally two minutes), log on and then back off again, | |
enter "=ABORTIO 20" to abort the read before entering SHUTDOWN, or accept | |
that the message will be truncated. The only consequence of this bug is the | |
partial message; MPE shuts down properly otherwise, so it may be safely | |
ignored. | |
- After a RELOAD, running DPAN4.PUB.SYS produces a "CODE SEGMENT TOO LARGE | |
(LOAD ERR 33)" error. This is because MPE defaults to an 8K code segment | |
size limit, and DPAN4 has three segments between 8K and 12K in size. If the | |
limit is subsequently raised via a SYSDUMP and COLDSTART reconfiguration, | |
running DPAN4 produces a "FILE IS NOT A VALID PROGRAM FILE" error. However, | |
if the reconfiguration is done before running DPAN4, it will run properly | |
thereafter. | |
The problem is that MPE incorrectly modifies the executable file's Segment | |
Transfer Tables when it encounters a code segment that is larger than the | |
configured limit. This leaves the file in an inconsistent state, leading to | |
the "NOT A VALID PROGRAM FILE" message after reconfiguration to raise the | |
segment size limit. If the limit is raised before running DPAN4, the file is | |
internally consistent when the STTs are patched, and each segment's load | |
succeeds, allowing the program to run. | |
No SSB KPR has been located, but a later MPE version ensures that code | |
segment size aborts occur before any of the STTs are modified, so the program | |
file remains internally consistent. A memory patch is impossible, but | |
workarounds are to increase the code segment limit before running DPAN4 and | |
to restore DPAN4.PUB.SYS from the FOS tape if it has been damaged. | |
===================== | |
Release 2, 2016-07-05 | |
===================== | |
This release of the HP 3000 simulator adds the following device simulation: | |
- 30209A Line Printer Controller with One 2607/13/17/18 Line Printer | |
The simulation supports the use of custom VFU tape images, as well as the | |
built-in HP-standard VFU tape. The simulated device name is "LP". The full set | |
of configurable options is detailed in a new section of the HP 3000 Simulator | |
User's Guide. | |
In addition, the preconfigured MPE-V/R disc image has been updated to add the | |
following features: | |
- The MPE cold load command files attach the line printer to the "lp.txt" | |
output file and specify the "-n" option to clear the file before use. | |
- Preinstalled User-Defined Commands (UDCs) provide access to the COBOL 74 | |
compiler with the MPE-V/E :COBOLII, :COBOLIIPREP, and :COBOLIIGO commands, | |
and to the COBOL 85 compiler with :COBOLIIX, :COBOLIIXPREP, and :COBOLIIXGO. | |
However, see the implementation note below. | |
-------------------- | |
Implementation Notes | |
-------------------- | |
- MPE requires a line printer, so it is recommended that the MPE startup | |
simulator command file include an ATTACH LP <filename> command to load paper | |
into the printer before cold loading. If the printer is not attached, it | |
will appear to MPE to be out of paper. | |
- The line printer terminates each print line with an HP-standard CR/LF pair. | |
If the output file is to be retained as a text file on a Unix system, removal | |
of the carriage returns, e.g., via the "dos2unix" utility, may be desirable. | |
- The simulator currently does not provide the HP 32234A COBOL II firmware | |
instructions, so programs generated by the COBOLII compiler will abort at run | |
time with an "ILLEGAL INSTRUCTION" error. Programs generated by the COBOL | |
compiler do not use these instructions and therefore are not affected. | |
---------- | |
Bugs Fixed | |
---------- | |
1. PROBLEM: The effective address of a byte pointer with a negative index is | |
calculated incorrectly. | |
VERSION: Release 1 | |
OBSERVATION: Defining a :WELCOME message in MPE appears to work, but when | |
the next logon attempts to print the message, an infinite number of CRLFs | |
are printed instead. | |
CAUSE: The welcome message is stored in an extra data segment. The format | |
for each message line is a line length stored in the lower byte of the word | |
preceding the message string. The code defines BYTE POINTER NEXTLINE and | |
points NEXTLINE to the first message character. The line length is set | |
with NEXTLINE(-1) := IOCOUNT. This generates a LOAD <IOCOUNT> ; LDXN 1 ; | |
STB <NEXTLINE>,I,X sequence. | |
In the "cpu_ea" routine, the indexing adds the X register value (-1) to the | |
byte pointer (NEXTLINE). This causes an overflow that is not masked to 16 | |
bits. For a word access, this displacement is added to the base register | |
and then masked to 16 bits, which gives the correct value. However, for | |
byte accesses, the displacement is divided by 2 and then added, and the sum | |
is masked. Dividing by 2 shifts the overflow bit into the MSB, causing the | |
addition result to be off by 32K. The STB goes to the wrong location, the | |
original zero in the length byte location is retained, and when the welcome | |
message is printed, a zero-length line is printed, and the byte pointer is | |
incremented by zero, so the null line is printed forever. | |
RESOLUTION: Modify "cpu_ea" (hp3000_cpu.c) to mask indexed displacements | |
to 16 bits after adding the X register value. | |
STATUS: Fixed in Release 2. | |
2. PROBLEM: An SMSK instruction may clear the interrupt mask flip-flop of a | |
device that specifies that it is should be "always enabled." | |
VERSION: Release 1 | |
OBSERVATION: If the TOS word is zero, an SMSK instruction will clear the | |
interrupt mask flip-flop of a device whose mask jumper is set to "E" | |
(always enabled). | |
CAUSE: In response to a DSETMASK signal, device interfaces set their | |
interrupt mask flip-flops by "anding" the incoming data word with the | |
interrupt mask jumper setting. The jumper setting value for "always | |
enabled" is %177777, which sets the mask flip-flop in all cases, except | |
when the data word is zero. | |
RESOLUTION: Modify hp3000_atc.c, hp3000_ds.c, and hp3000_ms.c to set their | |
mask flip-flops unconditionally if the jumper setting is "E". | |
STATUS: Fixed in Release 2. | |
3. PROBLEM: The "SET <dev> INTMASK=<n>" command sets the wrong bit in the | |
device interface's interrupt mask jumper setting. | |
VERSION: Release 1 | |
OBSERVATION: The interrupt mask jumper on a device interface is set by | |
specifying the mask bit number in a "SET <dev> INTMASK=<n>" command. This | |
sets a bit in the device's interrupt mask jumper word corresponding to the | |
bit number requested. However, the bit numbering is incorrect; setting the | |
jumper for bit 15, for example, sets bit 0 of the jumper word. Therefore, | |
the interface's mask flip-flop is not set as expected when an SMSK | |
instruction is executed. | |
CAUSE: The bit numbers were counted from the wrong end of the word. | |
RESOLUTION: Modify "hp_set_dib" and "hp_show_dib" (hp3000_sys.c) to number | |
the bits from the MSB instead of the LSB. | |
STATUS: Fixed in Release 2. | |
4. PROBLEM: The Multiplexer Channel is not generating the ACKSR signal | |
correctly. | |
VERSION: Release 1 | |
OBSERVATION: The line printer controller hangs when an SIO chained write | |
is performed. The first programmed write completes normally, but the | |
second does not start. The channel is waiting for a service request that | |
does not occur. | |
CAUSE: The service request from the last write of the first block transfer | |
is being cleared by an ACKSR generated by the Multiplexer Channel when it | |
performs the IOCW fetch in State A for the second write request. The | |
channel should omit this ACKSR when the previous I/O order was a chained | |
read or write. However, the simulator is testing the order just fetched | |
(Write) instead of the order that has just completed (Write Chained). | |
RESOLUTION: Modify "mpx_service" (hp3000_mpx.c) to test the correct I/O | |
order in State A. | |
STATUS: Fixed in Release 2. | |
===================== | |
Release 1, 2016-03-07 | |
===================== | |
This is the initial release of the HP 3000 simulator. The following devices are | |
currently simulated: | |
- 30003B Series III computer with up to 1024 KW of memory | |
- 30003B I/O Processor | |
- 30036B Multiplexer Channel | |
- 30030C Selector Channel | |
- 30033A Selector Channel Maintenance Board | |
- 30032B Asynchronous Terminal Controller data interface | |
- 30061B Asynchronous Terminal Controller control interface | |
- 30135A System Clock/Fault Logging Interface | |
- 30215A Tape Controller with four 7970B/E drives | |
- 30229B Disc Controller with eight 7905/7906/7920/7925 drives | |
The "HP 3000 Simulator User's Guide" manual describes the configuration and | |
operation of each of these devices in detail. | |
-------------------- | |
Implementation Notes | |
-------------------- | |
- IMPORTANT: There is no line printer simulation. MPE cannot be configured to | |
run without a printer; attempting to delete LDEV 6 produces "ERROR #115 | |
UNDEFINED CLASS LP USED AS OUTPUT DEVICE", and class LP cannot be deleted. | |
With LDEV 6 present, MPE will boot and run, but doing, e.g., :STOPSPOOL 6 | |
causes "NON-RESPONDING DRT #14" and "SYSTEM FAILURE #201" when the printer | |
doesn't respond. Entering :OUTFENCE 14 at the console operator's session | |
immediately after bootup is a workaround. The LP simulator should be present | |
in the next release. | |
- The CPU is a hybrid of the Series II instruction set microcode and the Series | |
III memory size and hardware behavior, because the Series III microcode is | |
not available. | |
- The CPU is currently missing a few "difficult" instructions (the CMD | |
instruction, the Series II LOCK and UNLK instructions, and the entire | |
Extended Instruction Set). Although the EIS is not present, MPE has a | |
software emulator for these instructions that is invoked transparently by the | |
Unimplemented Instruction traps that occur when attempted execution of EIS | |
instructions occurs. | |
- The main memory Fault Logging Interface section of the 30135A is currently | |
not simulated. Although fault-control memory was standard on the Series II | |
and later, the memory fault logger is smart enough to realize that the FLI is | |
not there, so MPE will run without it. | |
- Symbolic entry of CPU instructions, CPU status, and I/O instructions are not | |
currently supported. |