2000A 7970 verify fails - because FM returns status 004200 (tape mark + odd byte) but addr 10340 of LOADER checks for 000200 only! (Access startup) Programmed halt, T: 102077 (HLT 77), P: 64203 (JMP 64202) CONFIGURATION OPTIONS? - Send number of ports command LOAD OR DUMP COMMANDS? - Send date code command - Send device table command DATE? TIME? HP22687A-1812 - Initialize IOP command HIB - System shut down command MOUNT REEL NUMBER 1. PRESS RETURN HP 2000 Operational Notes ========================= ---------------- Software History ---------------- Version Date Product CPUs SP Mem IOP Mem Users FP FW Mux Supported CPUs ------- ---- ------- ---- ------ ------- ----- -- -- ----- ------------------ 2000A 1969 20596 1 16K - 16 N N 12584 2116 2000B 1970 24239 2 16K 8K 32 N N 12584 2116 + 2114 2000C 1971 24230 2 32K 8K 32 N N 12584 2116 + 2114 2000C' 1972 24261 2 32K 8K 32 N N 12920 2116 + 2114 2000E 1972 20856A 1 16K - 16 Y N 12920 2100 2000F 1974 20854A 2 32K 8K 32 Y N 12920 2100, 21MX Access 1975 22687 2 32K 16K-32K 32 Y Y 12920 2100, 21MX, 21MXE Communicator (June 1975) says product numbers (from manual titles) are: - 20856A for 2000E - 20854A for 2000F Software Information Bulletin (January 1973) says order numbers are: - 24276A for 2000F 20596 2000A system (2 tapes -- "The break between the two tapes is completely arbitrary." [5951-1346 p7-4]) 20872 2000A loader 24239 2000B system (2 tapes -- 24239-60001/2) 24238 2000B loader 24231 2000B/C I/O processor 24261 2000C' system 24280 2000E system 24286 2000E loader 24276 2000F system 24285 2000F loader 24337 2000F system (7900/2883) 24338 2000F loader (7900) 24339 2000F loader (2883) 24343 2000F I/O processor 20597C DOS (2770) 24225F DOS-M 20594B MTS (8K) 20595B MTS (16K) 20021C PCS 24016A PTS ------------------ Supported Hardware ------------------ --> 2000A/B requires EAU, 12578A DMA, 12539 TBG. --> 2000F IOP rev 1514 supports 2607A,2610-14,2613-18 as PRINTER *, 2767 as PRINTER ** Device A B C C' E F Ac ------ -- -- -- -- -- -- -- 2116A R R R R - I - 2114A - - R R - I - 2100A - - - - R R R 21MX - - - - - R R 21MXE - - - - - - R 2754A R - - - R R R 2762A - - - - - R R 2766A - - R - - O - 2770A R R - - - - - 2771A R R - - - - - 2773A R R R - - - - 2774A R R - - - - - 2775A R R - - - - - 2870A - - R - 2883A - - R - - R R 7900A - - - - R R R 7905A - - - - - - R 7920A - - - - - - R 3030G O O R - - - - 7970B O O R - O R R 7970E - O - - O R R 2748A R - - - R R O 2895A - - - - - - O 2607A - - - - - - O 2610A - - - - - O O 2613A - - - - - - O 2614A - - - - - O O 2617A - - - - - - O 2618A - - - - - - O 2767A - - - - - O O 2778A - - - - - O O 2892A - - - - - - O 2894A - - - - - - O 7261A - - - - - - O Key: R = required O = optional I = optional as I/O processor only ----------------- I/O Configuration ----------------- Device A B SP B IOP C C IOP C'IOP E F SP F IOP Ac SP Ac IOP ------ ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ------ IPL - 10-11 12-13 10-11 12-13 - - 10-11 10-11 10-11 14-15 TBG 12 16 - 16 - - 10 14 12 13 10 DP - - - 17-20 - - 11-12 15-16 - 14-15 - DR 14-15 14-15 - 14-15 - - - - - - - DS - - - - - - - - - 14 - MS/MT 16-17 17-20 - 21-22 - - 20-21 17-20 - 16-17 - TTY 11 12 - 12 - - 13 12 - 12 - MUX/C 10* 10/14* - 10/14* - 15-17 - 13-15 - 11-13 PTR 13 13 - 13 - - 14 13 - - 16+ PTP - - - - - - - - - - 16+ LP - - - - - - - - 16 - 16+ * 2 each 12584A 16-channel multiplexer (1 comm, 1 dataset) ----------------------------- 2000F Generation Tapes Needed ----------------------------- Image Filename Description ------------------------- ---------------------------------- 24343-60001_Rev-1710.abin I/O Processor Program 24338-60001_Rev-1710.abin TSB Loader Program (7900) 24337-60001_Rev-1410.abin TSB System Program (1 of 3) 24337-60002_Rev-1410.abin TSB System Program (2 of 3) 24337-60003_Rev-1410.abin TSB System Program (3 of 3) ======================= Interprocessor Commands ======================= The HP 2000B, C, F, and Access versions split the Time-Shared BASIC operating system into two parts running on separate CPUs. The primary CPU, designated as the System Processor (SP), runs the BASIC interpreter for up to 32 concurrent users. The secondary CPU, designated as the I/O Processor (IOP), handles I/O through the terminal multiplexers. An HP 12875A Processor Interconnect kit provides communication between the SP and the IOP. The kit consists of two bidirectional 16-bit parallel interfaces installed in each CPU. One interface in each CPU is designated as the output interface, and the other is designated as the input interface. Cables cross-connect the interfaces between the CPUs. This interconnection provides a full-duplex 16-bit parallel communication channel between the processors. Each interface is actually a bi-directional, half-duplex line that is used in the primary direction for commands and in the reverse direction for status. Commands are issued from the SP to the IOP to inform the latter of changes in the operating system state and to request terminal services. In some cases, the IOP responds with status to indicate whether or not the command was successful. In a few cases, the IOP responds with a block of data that is transferred via DMA. The IOP can send a few commands of its own to the SP that reflect availability of terminal data. Commands are sent on the outbound side of the output channel, and status is received on the inbound side. Commands are received on the inbound side of the input channel, and status is returned on the outbound side. ------------------------------------------ System Processor to I/O Processor Commands ------------------------------------------ System Processor commands are encoded in 16-bit words, with an opcode designating the command in bits 15-13 and additional information in the remaining bits, as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | - - - - - | unsigned integer | form 1 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | ASCII character | form 2 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | unsigned integer | form 3 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | device number | unsigned integer | form 4 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ Opcode 7 (and, additionally for 2000 Access, opcode 6) uses an additional five bits as a subopcode to determine the command, as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 x | - - - - - - - - | subopcode | form 5 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 x | port number | - - - | subopcode | form 6 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 x | device number | - - | subopcode | form 7 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 x | word count | - - | subopcode | form 8 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ Finally, opcode 7 subopcode 0 uses three extra bits to extend command decoding to a third level, as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | extension | - - | 0 0 0 0 0 | form 9 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ The commands differ from TSB version to version and are not proper subsets: Op Sub Ext 2000 Access Command 2000F Command 2000B/C Command -- --- --- ------------------------- ----------------------------- ----------------------------- 0 - POC Process output character OCR Process output character OCR Process output character 1 - STE Start ENTER timing STE Start ENTER timing STE Start ENTER timing 2 - STP Subtype information GTC Fetch next character GTC Fetch next character 3 - PHS Phones timing parameter PHO Phones timing PHO Phones timing 4 - PCF Perform control function SPE Baud rate info SPE Baud rate info 5 - POS Process output string SBP Save buffer pointer SBP Save buffer pointer 6 00 SBL Send buffer length RBP Restore buffer pointer RBP Restore buffer pointer 6 01 WTP What terminal type -- -- 7 00 0 INI Initialize IOP INI Initialize IOP INI Initialize IOP 7 00 1 KSN Cold dump request -- -- 7 00 2 SNP Send number of ports -- -- 7 00 3 SDT Send device table -- -- 7 00 4 SSD System shut down -- -- 7 00 5 SDC Send date code -- -- 7 00 6 --- (unused) -- -- 7 00 7 --- (unused) -- -- 7 01 UIR User is running UIR User is running UIR User is running 7 02 UNR User not running UNR User not running UNR User not running 7 03 IWT Input wait IWT Input wait IWT Input wait 7 04 HUU Hang user up HUU Hang user up HUU Hang user up 7 05 ULO User logged on ULO User logged on ULO User logged on 7 06 ECO Echo-on ECO Echo-on ECO Echo-on 7 07 ECF Echo-off ECF Echo-off ECF Echo-off 7 10 TPO Tape mode TPO Tape mode on TPO Tape mode on 7 11 STR Start timed retries ILI Illegal input ILI Illegal input 7 12 NUC New user called NUC New user called NUC New user called 7 13 KTO Kill terminal output KTO Kill terminal output KTO Kill terminal output 7 14 ALI Allow input ALI Allow input ALI Allow input 7 15 OWT Output wait OWT Output wait OWT Output wait 7 16 IBA Is buffer available IBF Is buffer full IBF Is buffer full 7 17 ADV Allocate device PSC Line printer select code PSC Line printer select code 7 20 RDV Release device LPR Line printer request LPR Line printer request 7 21 ALB Allocate buffer LPD Line printer disconnect LPD Line printer disconnect 7 22 XRB Transfer input buffer LPS Line printer status LPS Line printer status 7 23 BKS Backspace terminal buffer BKS Backspace terminal buffer BKS Backspace terminal buffer 7 24 KDO Kill device output CHS Character size CHS Character size 7 25 FNC Fetch next character STP Subtype info STP Subtype info 7 26 RJE RJE command GRP Get receive parameter WSP What baud rate 7 27 ABT User is being aborted ABT User is being aborted WCS What character size 7 30 PIS Process input string WTP What terminal type WTP What terminal type 7 31 --- (unused) KSN Send core image TKO Dump to line printer 7 32 SCI Send core image --- (unused) ABT User is being aborted 7 33 RLB Release buffer --- (unused) --- (unused) 7 34 SSD System shutdown --- (unused) --- (unused) 7 35 SBP Save buffer pointer --- (unused) --- (unused) 7 36 RBP Restore buffer pointer --- (unused) --- (unused) 7 37 TCM Transmit console message --- (unused) --- (unused) When the IOP returns a status word, it is encoded as follows: Response Meaning -------- ------------------------ -3 No data available on RJE -2 End of file -1 Buffer not ready 0 Operation successful 1 Device not ready 2 Device error 3 Attention needed 4 Read/write failure The command details are as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 0 | port number | ASCII character | POC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 1 | port number | maximum number of seconds | STE +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 0 | port number | terminal type code | STP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 1 | - - - - - | maximum logon time | PHS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 0 | device number | control code | PCF +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 1 | port number | character count | POS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 0 | port number | - - - | 0 0 0 0 0 | SBL +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned buffer length | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 0 | port number | - - - | 0 0 0 0 1 | WTP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned terminal type | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 0 0 0 | - - | 0 0 0 0 0 | INI +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned RJE absence code | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 0 0 1 | - - | 0 0 0 0 0 | KSN +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 0 1 0 | - - | 0 0 0 0 0 | SNP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned negative number of ports | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 0 1 1 | - - | 0 0 0 0 0 | SDT +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | binary data via DMA... | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 1 0 0 | - - | 0 0 0 0 0 | SSD +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - | 1 0 1 | - - | 0 0 0 0 0 | SDC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned date code | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 0 0 1 | UIR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 0 1 0 | UNR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 0 1 1 | IWT +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 1 0 0 | HUU +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 1 0 1 | ULO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 1 1 0 | ECO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 0 1 1 1 | ECF +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 0 0 0 | TPO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 0 1 0 0 1 | STR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 0 1 0 | NUC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 0 1 1 | KTO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 1 0 0 | ALI +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 1 0 1 | OWT +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 1 1 0 | IBA +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned buffer availability | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 0 1 1 1 1 | ADV +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | buffer size | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 1 0 0 0 0 | RDV +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 1 0 0 0 1 | ALB +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | buffer size | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 1 0 0 1 0 | XRB +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | buffer size (only sent if status = 0) | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 0 1 1 | BKS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - | 1 0 1 0 0 | KDO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 1 0 1 | FNC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned character | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | word count | - - | 1 0 1 1 0 | RJE +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 1 1 1 | ABT +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 0 0 0 | PIS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | buffer size | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | word count | - - | 1 1 0 1 0 | SCI +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | starting address | [SP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | binary data via DMA... | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 0 1 1 | RLB +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - | 1 1 1 0 0 | SSD +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 1 0 1 | SBP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 1 1 0 | RBP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 1 1 1 | TCM +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | character data via DMA... | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ NOTE: Transfer length is preset by an earlier SCM command from the IOP. The 2000F SP commands that differ from the Access versions are: +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 0 | port number | - - - - - - - - | GTC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 0 0 0 0 0 0 | returned character | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 0 | port number | baud rate code | SPE +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 1 | port number | - - - - - - - - | SBP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 0 | port number | - - - - - - - - | RBP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | number of ports | - - - | 0 0 0 0 0 | INI +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 0 0 1 | ILI +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 0 1 1 1 0 | IBF +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned buffer availability | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - - | 0 1 1 1 1 | PSC +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 0 0 0 | LPR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned printer availability | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - | 1 0 0 0 1 | LPD +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - | 1 0 0 1 0 | LPS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned device status | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | char size | 1 0 1 0 0 | CHS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | subtype | 1 0 1 0 1 | STP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 1 1 0 | GRP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned receive parameter | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 0 0 0 | WTP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned terminal type | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - | 1 1 0 0 1 | KSN +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ The 2000C SP commands that differ from the 2000F and Access versions are: +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 1 1 0 | WSP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 0 0 0 0 0 0 | returned baud rate | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 0 1 1 1 | WCS +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 0 0 0 0 0 0 0 0 0 0 0 | char size | [IOP] +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | ASCII character | 1 1 0 0 1 | TKO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - | 1 1 0 1 0 | ABT +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ------------------------------------------ I/O Processor to System Processor Commands ------------------------------------------ I/O Processor commands are encoded in 16-bit words, with an opcode designating the command in bits 15-13 and additional information in the remaining bits, as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | unsigned integer | form 1 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ Only 2000 Access uses opcode 7 as a subopcode indicator, with these forms: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - - | subopcode | form 2 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | subopcode | form 3 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - - | subopcode | form 4 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | word count | - - - | subopcode | form 5 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ The commands differ from TSB version to version and are not proper subsets: Op Sub 2000 Access Command 2000F Command 2000B/C Command -- --- -------------------------------- ------------------- ------------------- 0 - HVL Have a line HVL Have line HVL Have line 1 - HVP Have a line - parity error ABR User aborted ABR User aborted 2 - HLL Have a line - lost character BFL Buffer full BFL Buffer full 3 - --- (unused) BFE Buffer empty BFE Buffer empty 4 - --- (unused) ETO ENTER timed out ETO ENTER timed out 5 - --- (unused) UHU User hung up UHU User hung up 6 - --- (unused) --- (unused) --- (unused) 7 00 ABR User abort request --- (unused) --- (unused) 7 01 BFL Buffer full --- (unused) --- (unused) 7 02 BFE Buffer empty --- (unused) --- (unused) 7 03 ETO ENTER timed out --- (unused) --- (unused) 7 04 UHU User hung up --- (unused) --- (unused) 7 05 SCM Send console message --- (unused) --- (unused) 7 06 ADR Allocate device for RJE --- (unused) --- (unused) 7 07 RDR Release device from RJE --- (unused) --- (unused) 7 10 WUU Wake user up --- (unused) --- (unused) 7 11 WRU Wake RJE up --- (unused) --- (unused) 7 12 --- (unused) --- (unused) --- (unused) 7 13 --- (unused) --- (unused) --- (unused) 7 14 --- (unused) --- (unused) --- (unused) 7 15 --- (unused) --- (unused) --- (unused) 7 16 --- (unused) --- (unused) --- (unused) 7 17 --- (unused) --- (unused) --- (unused) The command details are as follows: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 0 | port number | response time in seconds | HVL +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 1 | port number | response time in seconds | HVP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 0 | port number | response time in seconds | HLL +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | 0 0 0 0 | ABR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | 0 0 0 1 | BFL +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | 0 0 1 0 | BFE +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | 0 0 1 1 | ETO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | port number | - - - - | 0 1 0 0 | UHU +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | word count | - - - | 0 1 0 1 | SCM +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - - | 0 1 1 0 | ADR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | returned command status | SP +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - - | 0 1 1 1 | RDR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | device number | - - - | 1 0 0 0 | WUU +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 1 1 | - - - - - - - - - | 1 0 0 1 | WRU +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ The 2000C and F IOP commands that differ from the Access versions are: +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 0 1 | port number | - - - - - - - - | ABR +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 0 | port number | - - - - - - - - | BFL +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 1 1 | port number | - - - - - - - - | BFE +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 0 | port number | - - - - - - - - | ETO +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 0 1 | port number | - - - - - - - - | UHU +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ------- 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 port dev cnt char int8 int7 sub5 sub4 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ---- ---- ---- ---- ---- ---- ---- ---- | opcode | port number | ASCII character | X - - X - - - - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | unsigned integer | X - - - X - - - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | - - - - - | unsigned integer | - - - - X - - - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | device number | unsigned integer | - X - - - X - - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | - - - | subopcode | X - - - - - X - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | - - - - - - - - | subopcode | - - - - - - X - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | device number | - - | subopcode | - X - - - - X - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | word count | - - | subopcode | - - X - - - X - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | port number | - - - - | subopcode | X - - - - - - X +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | device number | - - - | subopcode | - X - - - - - X +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | word count | - - - | subopcode | - - X - - - - X +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | opcode | - - - - - - - - - | subopcode | - - - - - - - X +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ ------------------- 2000 Access Sources ------------------- NOTE: MUST USE --pad to copy text files to tape with odd record lengths; RTE-6 FMGR stores odd tape records with null bytes at end! p 4-24 of asmb manual says RAM n must be < 400B 48 of 74 source files use RAM + n > 377B ! test for op > 377 is in ASMB2 and ASMB4 could remove them to assemble TSB only otherwise, would need to modify the sources to use OCT 105000+operand for (MIC as substitute won't work, as it won't add to the opcode). ALL of the IOP firmware instructions are >= 105400! Also, END may not have number (e.g., sequence number) following! IOPC says /XREF: >16 TAPES !! For TSB, had to load ASMB on RTE-6/VM as EB w/32 page partition. Fails with Symbol Overflow on RTE-IVB w/28-page partition. Macro also works, but have to use "/WORK=/BIGDISC" (e.g.) to put intermediate file on a larger volume. To change MCP ID records (18 bytes long) into tape marks: \x0a\x00\x00\x00\x02\x00\x04\x01......\x0a\x00\x00\x00 \x00\x00\x00\x00\xFF\xFF\xFE\xFF\xFF\xFF\xFE\xFF\xFF\xFF\xFE\xFF\xFF\xFF Issues: - Some listing files are for later versions than the corresponding source files. For example, the first line of D51.asm says "ND51.I21MX 09/17/76 11:10 21MX", while the first line of D51A.lst says "ND51.I21MX 11/30/77 11:30 1745". - Some source files do not have assembler control statements. - Some source files have sequence numbers in columns 73-80. These don't cause problems, EXCEPT for END statements. For these, the numbers are interpreted as transfer labels and cause errors. - Some source files have extraneous lines at the end, e.g., 2883.asm. These generally don't cause problems because assembly stops when the END statement is seen. - Some source files have extraneous lines at the start before the assembler control statement, e.g., C2883.asm. - There is a listing file (D50IB.lst) for which there is no corresponding source file. - TSB.asm has page headers interspersed with assembler source. Also, quotation marks (") in the source have been replaced with newline characters, and the character following each quotation mark has been deleted. For example, line 698 should read: CBFLG EQU B20M "BREAK" COMMAND GIVEN ...but instead reads: CBFLG EQU B20M REAK COMMAND GIVEN These lines have to be manually reconstructed. - All files use Unix NLs instead of HP CRLFs. - The 3000 cross-assembler processes the RAM pseudo-op differently than the RTE assembler. Operands <= 777B are added to 105000B, but operands > 1000B are added to 100000 (i.e., to produce 101xxx instructions). A modified ASMB2 and ASMB4 works around this. - The 3000 cross-assembler processes the EQU pseudo-op differently than the RTE assembler. Operands > 77777B are allowed by the cross-assembler but not by the RTE assembler. The D.61 and LTC modules rely on this. - The 3000 cross-assembler processes =L literals differently. The RTE assembler restricts expressions to non-negative values. The cross-assembler allows this, and many modules rely on this; all uses are for memory-reference instructions. Negative values may arise from subtractions of relocatable values or of literal and equated values (e.g., =L177777B-40B). A modified ASMB works around this. The steps followed to obtain a "good" set of sources are: - Strip the listings to recover source files. These won't have certain pseudo-ops, e.g., SPC 1 will have been converted into a blank line. - Compare the stripped listings with the original source files to identify lines added for later versions. - Strip sequence numbers from the source files and update them to the latest revisions from the comparison with the listing files. - Assemble each reconstructed source file with the RTE assembler to (a) ensure clean assemblies and (b) obtain the relocatable or absolute object codes for comparison with the corresponding modules on the MCP tape. - Using the DOS inverse assembler, translate each MCP tape module and each reconstructed object file into listing files. - Compare the corresponding inverse listing files to ensure that each reconstructed source module exactly matches its MCP module. For step 1, three different assemblers appear to have been used to produce the listings. One identifies itself as "HEWLETT-PACKARD 32223A.01.3 XA2100/3000", which appears to be a 2100 cross-assember running on an HP 3000. Another appears to be a HP DOS 2100 assembler, in that the page headings are of the format " PAGE 0001 #01". The third, used only for the TSB.asm file, is the IBM 360 cross-assembler for the HP 2100. This program is available from the HP 2000 contributed library. It is part number 22594-80001 and is available from the library SDLS tape. The source uses EBCDIC encoding, so "raw" options must be used to avoid stripping the parity bit. After translating to ASCII, a final substitution is required to restore the LFs. To recover: sdls --extract --raw 22000-10050_Rev-1738_0102.sdls.tape 22594-80001 fcopy -p --raw-data 22594-80001-REV-A.ty4.fmgr dd if=22594-80001-REV-A.src conv=ascii | tr \216 \012 > 22594-80001_Rev-A.src To strip these listings, ... The HP 3000 cross-assembler is the only one that supports this extended use of the RAM pseudo-opcode. And indeed all of the source modules that use the IOP microcode are assembled with the 3000 cross-assembler. Modified segments 2 and 4 of the RTE assembler to use the 3000 cross-assembler semantics for the RAM pseudo-op.