From 84e43a8c73fecff8749db4f35be6aed1519330f6 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 12 Jan 2017 06:41:19 -0800 Subject: [PATCH] HP2100: HP 2100 release 25 See HP2100/hp2100_release.txt for details of the release --- HP2100/hp2100_diag.txt | 18 +- HP2100/hp2100_dp.c | 3 +- HP2100/hp2100_dr.c | 138 ++++++++++++---- HP2100/hp2100_release.txt | 334 ++++++++++++++++++++++++++++++++++++++ HP2100/hp2100_stddev.c | 154 +++++++++++++----- HP2100/hp2100_sys.c | 41 +++-- doc/hp2100_doc.doc | Bin 175616 -> 156672 bytes 7 files changed, 598 insertions(+), 90 deletions(-) create mode 100644 HP2100/hp2100_release.txt diff --git a/HP2100/hp2100_diag.txt b/HP2100/hp2100_diag.txt index 012a1304..538d75c0 100644 --- a/HP2100/hp2100_diag.txt +++ b/HP2100/hp2100_diag.txt @@ -1,6 +1,6 @@ SIMH/HP 21XX DIAGNOSTICS PERFORMANCE ==================================== - Last update: 2014-12-18 + Last update: 2016-12-18 The HP 24396 diagnostic suite has been run against the SIMH HP 21xx simulation. @@ -118,7 +118,7 @@ Part Number DSN Diagnostic Name Code Vers. Result 20433-60001 -- HP 3030 Magnetic Tape Subsystem -- - Not tested 22682-16017 177777 HP 2100 Fixed Head Disc/Drum (277x) 1612 3.3-0 Passed 24197-60001 -- 12875 Processor Interconnect Cable B 3.7-1 Passed -24203-60001 -- HP2100A Cartridge Disc Memory (2871) A 3.3-0 Partial +24203-60001 -- HP2100A Cartridge Disc Memory (2870) A 3.3-0 Partial The following online diagnostics were run for devices not supported by the @@ -3299,7 +3299,7 @@ TEST RESULT: Passed. ----------------------------------------------------------------- -DSN (none) - HP2100A Cartridge Disc Memory (2871) (multiple unit) +DSN (none) - HP2100A Cartridge Disc Memory (2870) (multiple unit) ----------------------------------------------------------------- TESTED DEVICE: DP (hp2100_dp.c) @@ -3307,10 +3307,10 @@ TESTED DEVICE: DP (hp2100_dp.c) BINARY TAPE: 24203-60001 Rev. A CONFIGURATION: sim> set DPC 12557A - sim> attach DPC0 scratch.U0.2871.disc - sim> attach DPC1 scratch.U1.2871.disc - sim> attach DPC2 scratch.U2.2871.disc - sim> attach DPC3 scratch.U3.2871.disc + sim> attach DPC0 scratch.U0.2870.disc + sim> attach DPC1 scratch.U1.2870.disc + sim> attach DPC2 scratch.U2.2870.disc + sim> attach DPC3 scratch.U3.2870.disc sim> deposit S 002211 sim> reset sim> go 2 @@ -3370,7 +3370,7 @@ TEST NOTES: Four passes are required to test all head/unit combinations. -------------------------------------------------------------------- -DSN (none) - HP2100A Cartridge Disc Memory (2871) (user interaction) +DSN (none) - HP2100A Cartridge Disc Memory (2870) (user interaction) -------------------------------------------------------------------- TESTED DEVICE: DP (hp2100_dp.c) @@ -3378,7 +3378,7 @@ TESTED DEVICE: DP (hp2100_dp.c) BINARY TAPE: 24203-60001 Rev. A CONFIGURATION: sim> set DPC 12557A - sim> attach DPC0 scratch.U0.2871.disc + sim> attach DPC0 scratch.U0.2870.disc sim> deposit S 002211 sim> reset sim> go 2 diff --git a/HP2100/hp2100_dp.c b/HP2100/hp2100_dp.c index 5dd2b9b9..11d0dc2c 100644 --- a/HP2100/hp2100_dp.c +++ b/HP2100/hp2100_dp.c @@ -23,9 +23,10 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Robert M Supnik. - DP 12557A 2871 disk subsystem + DP 12557A 2870 disk subsystem 13210A 7900 disk subsystem + 09-Nov-16 JDB Corrected disk subsystem model number from 2871 to 2870 13-May-16 JDB Modified for revised SCP API function parameter types 30-Dec-14 JDB Added S-register parameters to ibl_copy 24-Dec-14 JDB Added casts for explicit downward conversions diff --git a/HP2100/hp2100_dr.c b/HP2100/hp2100_dr.c index fdb33eeb..9ac83407 100644 --- a/HP2100/hp2100_dr.c +++ b/HP2100/hp2100_dr.c @@ -26,6 +26,7 @@ DR 12606B 2770/2771 fixed head disk 12610B 2773/2774/2775 drum + 10-Nov-16 JDB Modified the drc_boot routine to use the BBDL 05-Aug-16 JDB Renamed the P register from "PC" to "PR" 13-May-16 JDB Modified for revised SCP API function parameter types 30-Dec-14 JDB Added S-register parameters to ibl_copy @@ -704,37 +705,110 @@ else { return SCPE_OK; } -/* Fixed head disk/drum bootstrap routine (disc subset of disc/paper tape loader) */ -#define BOOT_START 060 +/* Basic Binary Disc Loader. -static const BOOT_ROM dr_rom = { /* padded to start at x7760 */ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0020010, /*DMA 20000+DC */ - 0000000, /* 0 */ - 0107700, /* CLC 0,C */ - 0063756, /* LDA DMA ; DMA ctrl */ - 0102606, /* OTA 6 */ - 0002700, /* CLA,CCE */ - 0102611, /* OTA CC ; trk = sec = 0 */ - 0001500, /* ERA ; A = 100000 */ - 0102602, /* OTA 2 ; DMA in, addr */ - 0063777, /* LDA M64 */ - 0102702, /* STC 2 */ - 0102602, /* OTA 2 ; DMA wc = -64 */ - 0103706, /* STC 6,C ; start DMA */ - 0067776, /* LDB JSF ; get JMP . */ - 0074077, /* STB 77 ; in base page */ - 0102710, /* STC DC ; start disc */ - 0024077, /*JSF JMP 77 ; go wait */ - 0177700 /*M64 -100 */ + The Basic Binary Disc Loader (BBDL) contains two programs. The program + starting at address x7700 loads absolute paper tapes into memory. The + program starting at address x7760 loads a disc-resident bootstrap from the + 277x fixed-head disc/drum. Entering a BOOT DRC command loads the BBDL into + memory and executes the disc portion starting at x7760. The bootstrap issues + a CLC 0,C to clear the disc track and sector address registers and then sets + up a 64-word read from track 0 sector 0 to memory locations 0-77 octal. It + then stores a JMP * instruction in location 77, starts the read, and jumps to + location 77. The JMP * causes the CPU to loop until the last word read from + the disc overlays location 77 which, typically, would be a JMP instruction to + the start of the disc-resident bootstrap. + + In hardware, the BBDL was hand-configured for the disc and paper tape reader + select codes when it was installed on a given system. Under simulation, we + treat it as a standard HP 1000 loader, even though it is not structured that + way, and so the ibl_copy mechanism used to load and configure it must be + augmented to account for the differences. + + + Implementaion notes: + + 1. The full BBDL is loaded into memory, even though only the disc portion + will be used. + + 2. For compatibility with the ibl_copy routine, the loader has been changed + from the standard HP version. The device I/O instructions are modified + to address locations 10 and 11. +*/ + +static const BOOT_ROM dr_rom = { + 0107700, /* ST2 CLC 0,C START OF PAPER TAPE LOADER */ + 0002401, /* CLA,RSS */ + 0063726, /* CONT2 LDA CM21 */ + 0006700, /* CLB,CCE */ + 0017742, /* JSB READ2 */ + 0007306, /* LEDR2 CMB,CCE,INB,SZB */ + 0027713, /* JMP RECL2 */ + 0002006, /* EOTC2 INA,SZA */ + 0027703, /* JMP CONT2+1 */ + 0102077, /* HLT 77B */ + 0027700, /* JMP ST2 */ + 0077754, /* RECL2 STB CNT2 */ + 0017742, /* JSB READ2 */ + 0017742, /* JSB READ2 */ + 0074000, /* STB A */ + 0077757, /* STB ADR11 */ + 0067757, /* SUCID LDB ADR11 */ + 0047755, /* ADB MAXAD */ + 0002040, /* SEZ */ + 0027740, /* JMP RESCU */ + 0017742, /* LOAD2 JSB READ2 */ + 0040001, /* ADA B */ + 0177757, /* CM21 STB ADR11,I */ + 0037757, /* ISZ ADR11 */ + 0000040, /* CLE */ + 0037754, /* ISZ CNT2 */ + 0027720, /* JMP SUCID */ + 0017742, /* JSB READ2 */ + 0054000, /* CPB A */ + 0027702, /* JMP CONT2 */ + 0102011, /* HLT 11B */ + 0027700, /* JMP ST2 */ + 0102055, /* RESCU HLT 55B */ + 0027700, /* JMP ST2 */ + 0000000, /* READ2 NOP */ + 0006600, /* CLB,CME */ + 0103710, /* RED2 STC PR,C */ + 0102310, /* SFS PR */ + 0027745, /* JMP *-1 */ + 0107410, /* MIB PR,C */ + 0002041, /* SEZ,RSS */ + 0127742, /* JMP READ2,I */ + 0005767, /* BLF,CLE,BLF */ + 0027744, /* JMP RED2 */ + 0000000, /* CNT2 NOP */ + 0000000, /* MAXAD NOP */ + 0020000, /* CWORD ABS 20000B+DC */ + 0000000, /* ADR11 NOP */ + + 0107700, /* DLDR CLC 0,C START OF FIXED DISC LOADER */ + 0063756, /* LDA CWORD */ + 0102606, /* OTA 6 */ + 0002700, /* CLA,CCE */ + 0102611, /* OTA CC */ + 0001500, /* ERA */ + 0102602, /* OTA 2 */ + 0063777, /* LDA WRDCT */ + 0102702, /* STC 2 */ + 0102602, /* OTA 2 */ + 0103706, /* STC 6,C */ + 0102710, /* STC DC */ + 0067776, /* LDB JMP77 */ + 0074077, /* STB 77B */ + 0024077, /* JMP77 JMP 77B */ + 0177700 /* WRDCT OCT -100 */ }; +#define BBDL_MAX_ADDR 0000055 /* ROM index of the maximum address word */ +#define BBDL_DMA_CNTL 0000056 /* ROM index of the DMA control word */ +#define BBDL_DISC_START 0000060 /* ROM index of the disc loader */ + t_stat drc_boot (int32 unitno, DEVICE *dptr) { const int32 dev = drd_dib.select_code; /* data chan select code */ @@ -745,9 +819,13 @@ if (unitno != 0) /* boot supported on dri if (ibl_copy (dr_rom, dev, IBL_S_NOCLR, IBL_S_NOSET)) /* copy the boot ROM to memory and configure */ return SCPE_IERR; /* return an internal error if the copy failed */ -WritePW (PR + IBL_DPC, dr_rom [IBL_DPC]); /* restore overwritten word */ -WritePW (PR + IBL_END, dr_rom [IBL_END]); /* restore overwritten word */ -PR = PR + BOOT_START; /* correct starting address */ +WritePW (PR + BBDL_MAX_ADDR, ReadPW (PR + IBL_END)); /* move the maximum address word */ +WritePW (PR + BBDL_DMA_CNTL, dr_rom [BBDL_DMA_CNTL] + dev); /* set up the DMA control word */ + +WritePW (PR + IBL_DPC, dr_rom [IBL_DPC]); /* restore the overwritten word */ +WritePW (PR + IBL_END, dr_rom [IBL_END]); /* restore the overwritten word */ + +PR = PR + BBDL_DISC_START; /* select the starting address */ return SCPE_OK; } diff --git a/HP2100/hp2100_release.txt b/HP2100/hp2100_release.txt new file mode 100644 index 00000000..30ad894e --- /dev/null +++ b/HP2100/hp2100_release.txt @@ -0,0 +1,334 @@ + SIMH/HP 2100 RELEASE NOTES + ========================== + Last update: 2017-01-11 + + +This file documents the release history of the simulator for the Hewlett-Packard +2114, 2115, 2116, 2100, 1000-M, 1000-E, and 1000-F machines. + +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 2100 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 from the repository but only noted as part +of the next release document. + + + +=================== +General Information +=================== + +The simulator passes the HP 24396 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 operation of the supported HP operating systems pass their respective +diagnostic tests. See the accompanying "hp2100_diag.txt" file for details. + +The simulator has been tested with the following operating systems: + + - 2000E, 2000F, and 2000/Access Time-Shared BASIC. + + - DOS, DOS-M, and DOS-III. + + - RTE-II, RTE-III, RTE-IVB, and RTE-6/VM. + +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/hp2100_doc.pdf + + +------------------ +Available Software +------------------ + +A preconfigured RTE-6/VM disc image containing the operating system, the MACRO +assembler and Fortran 77 compiler, a selection of tape backup and restore +programs (READT/WRITT, READR/SAVER, FC, TF, and FST), an example programs +(/KENC/HELLO.FTN), and the Mystery Mansion game (MMM) is available from +Bitsavers at: + + http://www.bitsavers.org/bits/HP/tapes/rte-6vm/rte6200/ + +The archive contains instructions and simulator command files that allow +ready-to-run operation. + +The Computer History Museum has graciously arranged with HP to offer the HP 1000 +Software Collection with a sublicense for non-commercial use by private +individuals. The Collection is hosted by Bitsavers at: + + http://www.bitsavers.org/bits/HP/HP_1000_software_collection/ + +A preconfigured RTE-IVB disc image containing the operating system, the ASMB +assembler and FORTRAN IV compiler, and the READR/SAVER and FC tape backup and +restore programs is available from the HP Computer Museum at: + + http://www.hpmuseum.net/display_item.php?sw=565 + +The archive contains instructions and a simulator command file. + +QCTerm, an HP 700 terminal emulator for Microsoft Windows, is available from the +HP Computer Museum at: + + http://www.hpmuseum.net/display_item.php?sw=585 + +Use of an HP terminal via a serial port or terminal emulator via Telnet enables +more advanced screen editing features of the RTE operating systems. + +Manuals describing the operation of HP software are available from Bitsavers at: + + http://www.bitsavers.org/pdf/hp/1000/ + http://www.bitsavers.org/pdf/hp/2000TSB/ + http://www.bitsavers.org/pdf/hp/21xx/ + +...and from the HP Computer Museum at: + + http://www.hpmuseum.net/collection_document.php + + +---------------- +Year 2000 Issues +---------------- + +RTE-6/VM Revision 6200 is Y2K compliant, except for the READR and SAVER +programs. The errors are cosmetic only. + +RTE-IVB Revision 5010 is not Y2K compliant. All of the failures are in +subsystems; the operating itself (time-of-day clock) accommodates dates through +2059. All of the errors are cosmetic. Typically, punctuation characters appear +in the years, e.g., "19:0" for 2000. The RTE-IVB software kit from the HP +Computer Museum includes fixes for the affected modules to bring the system into +compliance. + +All other HP operating systems are not Y2K compliant. + + +----------------------------- +Bugs in RTE-IVB Revision 5010 +----------------------------- + +Testing during simulator development revealed the presence of a bug in RTE-IVB +Revision 5010: + + - The $BALC module in the system library has a bug that causes memory + corruption. This module is used by the ACCTS program and manifests itself by + printing gibberish after the "PLEASE LOG ON:" prompt. + + Specifically, the internal MXEV routine performs a cross-store indirect via a + location in Table Area II (XSA $MAXI+0,I). This fails because the indirect + chain is resolved in the user map, but TA II is not in the user map of + large-background programs, such as ACCTS. Therefore, the location in the + user map corresponding to $MAXI in the system map is used as the pointer to + the location to store. + + A corrected version of $BALC is present on cartridge GF of the disc image + supplied with the RTE-IVB software kit at the HP Computer Museum. + + + +====================== +Release 25, 2017-01-11 +====================== + +This is the initial checkpoint release of the HP 2100 simulator, corresponding +to the 25th set of changes to the 4.0 code base. The following devices are +currently simulated: + + - 2114C CPU with up to 16 KW of memory + - 2115A CPU with up to 8 KW of memory + - 2116C CPU with up to 32 KW of memory + - 2100A CPU with up to 32 KW of memory + - 1000 M/E/F-Series CPU with up to 1024 KW of memory + - EAU, FP, IOP, DMS, FFP, DBI, VIS, and SIGNAL microcode extensions + - RTE-IV EMA or RTE-6/VM OS and VMA microcode extensions + - 12531C Buffered Teleprinter Interface with one 2752 Teleprinter + - 12539C Time Base Generator + - 12557A Disc Controller with four 2870 drives + - 12559C Magnetic Tape Controller with one 3030 drive + - 12565A Disc Controller with two 2883 drives + - 12566B Microcircuit Interface with a loopback connector + - 12578A Direct Memory Access Controller + - 12581A Memory Protect + - 12597A Duplex Register Interface with one 2748 Paper Tape Reader + - 12597A Duplex Register Interface with one 2895 Paper Tape Punch + - 12606B Fixed Head Disc Controller with one 2770/2771 drive + - 12607B Direct Memory Access Controller + - 12610B Drum Controller with one 2773/2774/2775 drive + - 12620A Privileged Interrupt Fence + - 12653A Printer Controller with one 2767 Line Printer + - 12792C 8-Channel Asynchronous Multiplexer + - 12821A Disc Interface with four 7906H/7920H/7925H drives + - 12845B Printer Controller with one 2607 Line Printer + - 12875A Interprocessor Link + - 12892B Memory Protect + - 12895A Direct Memory Access Controller + - 12897B Dual-Channel Port Controller + - 12920A 16-Channel Terminal Multiplexer + - 12936A Privileged Interrupt Fence + - 12966A Buffered Asynchronous Communications Interface + - 13037D Disc Controller with eight 7905/7906/7920/7925 drives + - 13181A Magnetic Tape Controller with four 7970B drives + - 13183A Magnetic Tape Controller with four 7970E drives + - 13210A Disc Controller with four 7900 drives + +The "HP 2100 Simulator User's Guide" manual describes the configuration and +operation of each of these devices in detail. + + +-------------------- +Implementation Notes +-------------------- + + - New bug fixes will now be listed in this file under the associated release + rather than in their previous location (hp2100_bugfixes.txt). + + - Starting with the next release, the LOAD command will restrict its operation + to the addresses occupied by the bootstrap loaders, i.e., the last 64 + locations in memory (up to 32K), unless forced by the addition of the "-F" + switch. The LOAD command is not designed for general loading of absolute + binary files, as it does not initialize the A and B registers as some HP + software expects. It is intended only to install bootstrap loaders. The + BOOT PTR command is the proper simulation of the hardware absolute paper tape + loader. + + +---------- +Bugs Fixed +---------- + + 1. PROBLEM: DPC device documentation uses the wrong disc drive model number. + + VERSION: Release 24. + + OBSERVATION: The comments in the hp2100_dpc.c source file and Section 2 of + the "HP2100 Simulator User's Guide" say that the DPC device supports the + 2871 disc drive, while Section 2.6.1 of the User's Guide says that the + support is for the 2781 disc drive. Neither of these model numbers is + correct. + + Contemporaneous literature (e.g., the "2116B Computer Price List," dated + June 1970) states that the disc memory subsystem consists of the HP 2870A + Moving Head Disc, HP 2871A Disc Controller, HP 2881A Power Supply, and HP + 2882A Cabinet. + + CAUSE: The controller model number is used instead of the drive model + number, while the "2781" number is a transposition of "2871." + + RESOLUTION: Modify the initial comments in the DPC device source file + (hp2100_dpc.c) and modify the sections of the HP2100 Simulator User's Guide + to use the correct disc drive model number (2870). + + STATUS: Fixed in Release 25. + + + 2. PROBLEM: The BOOT DRC command does not execute correctly. + + VERSION: Release 24. + + OBSERVATION: Attempting to boot DOS from a fixed-head disc or drum does + not work. The CPU sits in a loop waiting for DMA to finish, but it never + does. + + CAUSE: The DMA control word in the DR device bootstrap is not configured + during BOOT DRC processing, so DMA is communicating with the wrong device. + + RESOLUTION: Modify "drc_boot" (hp2100_dr.c) to set the fixed disc/drum + select code into the DMA control word before returning. + + STATUS: Fixed in Release 25. + + + 3. PROBLEM: The valid command "DEPOSIT 2000 JMP 2001" is rejected. + + VERSION: Release 24. + + OBSERVATION: Regarding symbolic input, the HP2100 User's Manual says that + the "C" and "Z" flags, signifying a current-page or zero-page reference, + respectively, are not needed "...when entering [memory reference] + instructions into CPU memory; the simulator figures out from the target + address what mode to use." While the valid command "DEPOSIT 1000 JMP 1001" + correctly enters a zero-page jump into memory, the valid command "DEPOSIT + 2000 JMP 2001" does not enter a current-page jump. Instead, an "Invalid + argument" error occurs. + + CAUSE: The "parse_sym" routine looks for the optional "C" or "Z" flag when + parsing memory reference instructions and sets a flag if either is + specified. The test for a current-page reference is performed only if the + reference type was not explicitly specified. However, the sense of the + test is reversed. + + RESOLUTION: Modify "parse_sym" (hp2100_sys.c) to correct the test for C/Z + option specification. + + STATUS: Fixed in Release 25. + + + 4. PROBLEM: The invalid command "DEPOSIT 2000 JMP C 2001" is accepted. + + VERSION: Release 24. + + OBSERVATION: Regarding symbolic input, the HP2100 User's Manual says that + "The address is an octal number in the range 0 - 77777; if C or Z is + specified, the address is a page offset in the range 0 - 1777." However, + specifying a page offset > 1777 is accepted without complaint if it is + within the current page range. + + CAUSE: Error checking for memory reference instruction entry is + incomplete. + + RESOLUTION: Modify "parse_sym" (hp2100_sys.c) to ensure that the range + check is enforced if either C or Z is specified. + + STATUS: Fixed in Release 25. + + + 5. PROBLEM: Punched output does not appear on TTY devices lacking a paper + tape punch. + + VERSION: Release 24. + + OBSERVATION: Running the HP contributed library program "HP 2000F BASIC + for DOS-M/DOS III" does not produce any console output when using terminal + driver DVR00 as required by the program. When using alternate terminal + driver DVR05, console output appears but console input does not work + properly. + + CAUSE: DOS-M and DOS-III support two modes of console I/O: ASCII mode and + binary mode. ASCII mode appends carriage-return/line-feed characters on + output and strips them on input. Binary mode sends and receives bytes + exactly as supplied. + + DVR00 is required because DVR05 does not support the binary I/O mode + required by the program. However, DVR00 assumes that a binary write is to + be directed to the console's paper tape punch rather than the console + printer and therefore sets the TTY interface's "punch flip-flop" instead of + the "print flip-flop" to accompany the text output. The simulation of the + HP 12531 interface card associated with the TTY device discards output if + the punch flip-flop is set and the punch unit (TTY2) is not attached. + + The problem occurs because only a connected HP 2754 teleprinter (a modified + Teletype ASR35) reacts to the print and punch flip-flop signals. All other + supported terminal devices ignore the signals and print whatever output is + supplied (an HP 2752 -- a rebadged ASR33 -- has a manual control for the + punch, but the punch and printer operate together when the punch is on). + The 2000F BASIC program apparently was designed for use with one of these + other terminals, which print normally even though only the punch flip-flop + is set. + + RESOLUTION: Modify "tto_out" (hp2100_stddev.c) to honor the print and + punch flip-flop settings and separate the output as directed only if the + console punch unit is attached (simulating an HP 2754). When the unit is + detached, all output is delivered to the console printer, regardless of the + flip-flop settings (simulating all other console devices). + + STATUS: Fixed in Release 25. diff --git a/HP2100/hp2100_stddev.c b/HP2100/hp2100_stddev.c index c056da96..b9ad5ea2 100644 --- a/HP2100/hp2100_stddev.c +++ b/HP2100/hp2100_stddev.c @@ -28,6 +28,7 @@ TTY 12531C buffered teleprinter interface TBG 12539C time base generator + 30-Dec-16 JDB Modified the TTY to print if the punch is not attached 13-May-16 JDB Modified for revised SCP API function parameter types 30-Dec-14 JDB Added S-register parameters to ibl_copy 24-Dec-14 JDB Added casts for explicit downward conversions @@ -116,6 +117,7 @@ pass its clock calibration test. */ + #include "hp2100_defs.h" #define TTY_OUT_WAIT 200 /* TTY output wait */ @@ -204,7 +206,6 @@ t_stat tty_reset (DEVICE *dptr); t_stat tty_set_opt (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat tty_set_alf (UNIT *uptr, int32 val, CONST char *cptr, void *desc); t_stat tto_out (int32 c); -t_stat ttp_out (int32 c); IOHANDLER clkio; t_stat clk_svc (UNIT *uptr); @@ -746,7 +747,36 @@ return SCPE_OK; } -/* Terminal I/O signal handler */ +/* Terminal I/O signal handler. + + Output Word Format: + + 15 |14 13 12 |11 10 9 | 8 7 6 | 5 4 3 | 2 1 0 + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 1 | I | P | N | - - - - - - - - - - - - | control + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | 0 | - - - - - - - | output character | data + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + Where: + + I = set the interface to output/input mode (0/1) + P = enable the printer for output + N = enable the punch for output + + + Input Word Format: + + 15 |14 13 12 |11 10 9 | 8 7 6 | 5 4 3 | 2 1 0 + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + | B | - - - - - - - | input character | + +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + + Where: + + B = interface is idle/busy (0/1) + +*/ uint32 ttyio (DIB *dibptr, IOCYCLE signal_set, uint32 stat_data) { @@ -895,28 +925,39 @@ uptr->wait = sim_rtcn_calb (POLL_RATE, TMR_POLL); /* calibrate poll timer sim_activate (uptr, uptr->wait); /* continue poll */ tty_shin = 0377; /* assume inactive */ + if (tty_lf) { /* auto lf pending? */ c = 012; /* force lf */ tty_lf = 0; } + else { - if ((c = sim_poll_kbd ()) < SCPE_KFLAG) return c; /* no char or error? */ - if (c & SCPE_BREAK) c = 0; /* break? */ - else c = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags)); + c = sim_poll_kbd (); + + if (c < SCPE_KFLAG) /* no char or error? */ + return c; + + if (c & SCPE_BREAK) /* break? */ + c = 0; + else + c = sim_tt_inpcvt (c, TT_GET_MODE (uptr->flags)); + tty_lf = ((c & 0177) == 015) && (uptr->flags & UNIT_AUTOLF); } + if (tty_mode & TM_KBD) { /* keyboard enabled? */ tty_buf = c; /* put char in buf */ uptr->pos = uptr->pos + 1; ttyio (&tty_dib, ioENF, 0); /* set flag */ - if (c) { + if (c) tto_out (c); /* echo? */ - return ttp_out (c); /* punch? */ - } } -else tty_shin = c; /* no, char shifts in */ + +else /* no, char shifts in */ + tty_shin = c; + return SCPE_OK; } @@ -931,47 +972,86 @@ t_stat r; c = tty_buf; /* get char */ tty_buf = tty_shin; /* shift in */ tty_shin = 0377; /* line inactive */ -if ((r = tto_out (c)) != SCPE_OK) { /* output; error? */ - sim_activate (uptr, uptr->wait); /* retry */ - return ((r == SCPE_STALL)? SCPE_OK: r); /* !stall? report */ + +r = tto_out (c); /* output the character */ + +if (r != SCPE_OK) { /* if an error occurred */ + sim_activate (uptr, uptr->wait); /* then schedule a retry */ + return (r == SCPE_STALL ? SCPE_OK : r); /* report a stall as success */ } ttyio (&tty_dib, ioENF, 0); /* set flag */ -return ttp_out (c); /* punch if enabled */ +return SCPE_OK; } +/* TTY output routine. + + The 12531C Buffered Teleprinter Interface connects current-loop devices, such + as the HP 2752A (ASR33) and 2754A (ASR35) teleprinters, as well as EIA RS-232 + devices, such as the HP 2749A (ASR33) teleprinter and HP 2600 terminal. For + output, the control word sent to the interface may set the print flip-flop, + the punch flip-flop, or both flip-flops. These flip-flops generate the PRINT + COMMAND and PUNCH COMMAND output signals, respectively. Setting either one + enables data transmission. + + Only the 2754A responds to the PRINT and PUNCH COMMAND signals. All of the + other devices ignore these signals and respond only to the serial data out + signal. (The paper tape punches on the 2749A and 2752A teleprinters must be + enabled manually at the console and operate concurrently with the printers.) + + This routine simulates a 2754A if the punch unit (TTY unit 2) is attached and + a generic terminal when the unit is detached. With the punch unit attached, + the punch flip-flop must be set to punch, and the print flip-flop must be set + to print. These flip-flops, and therefore their respective operations, are + independent. When the punch unit is detached, printing will occur if either + the print or punch flip-flop is set. If neither flip-flop is set, no output + occurs. Therefore, the logic is: + + if punch-flip-flop and punch-attached + then punch character + + if print-flip-flop or punch-flip-flop and not punch-attached + then print character + + Certain HP programs, e.g., HP 2000F BASIC FOR DOS-M/DOS III, depend on the + 2752A et. al. behavior. The DOS and RTE teleprinter drivers support text and + binary output modes. Text mode sets the print flip-flop, and binary mode + sets the punch flip-flop. These programs use binary mode to write single + characters to the teleprinter and expect that they will be printed. The + simulator follows this behavior. +*/ + t_stat tto_out (int32 c) { -t_stat r; +t_stat r = SCPE_OK; -if (tty_mode & TM_PRI) { /* printing? */ - c = sim_tt_outcvt (c, TT_GET_MODE (tty_unit[TTO].flags)); - if (c >= 0) { /* valid? */ - r = sim_putchar_s (c); /* output char */ - if (r != SCPE_OK) - return r; - tty_unit[TTO].pos = tty_unit[TTO].pos + 1; +if ((tty_mode & TM_PUN) /* if punching is enabled */ + && tty_unit [TTP].flags & UNIT_ATT) /* and the punch is attached */ + if (putc (c, tty_unit [TTP].fileref) == EOF) { /* then output the character; if it fails */ + perror ("TTP I/O error"); /* then report an error */ + clearerr (tty_unit [TTP].fileref); /* clear the error */ + r = SCPE_IOERR; /* and stop the simulator */ + } + + else /* otherwise the output succeeded */ + tty_unit [TTP].pos = ftell (tty_unit [TTP].fileref); /* so update the file position */ + +if ((tty_mode & TM_PRI) /* if printing is enabled */ + || (tty_mode & TM_PUN) /* or punching is enabled */ + && (tty_unit [TTP].flags & UNIT_ATT) == 0) { /* and the punch is not attached */ + c = sim_tt_outcvt (c, TT_GET_MODE (tty_unit [TTO].flags)); /* then convert the character */ + + if (c >= 0) { /* if the character is valid */ + r = sim_putchar_s (c); /* then output it to the console */ + + if (r == SCPE_OK) /* if the output succeeded */ + tty_unit [TTO].pos = tty_unit [TTO].pos + 1; /* then update the file position */ } } -return SCPE_OK; -} - -t_stat ttp_out (int32 c) -{ -if (tty_mode & TM_PUN) { /* punching? */ - if ((tty_unit[TTP].flags & UNIT_ATT) == 0) /* attached? */ - return IOERROR (ttp_stopioe, SCPE_UNATT); - if (putc (c, tty_unit[TTP].fileref) == EOF) { /* output char */ - perror ("TTP I/O error"); - clearerr (tty_unit[TTP].fileref); - return SCPE_IOERR; - } - tty_unit[TTP].pos = ftell (tty_unit[TTP].fileref); - } -return SCPE_OK; +return r; /* return the result */ } diff --git a/HP2100/hp2100_sys.c b/HP2100/hp2100_sys.c index 016adbc7..2e33add2 100644 --- a/HP2100/hp2100_sys.c +++ b/HP2100/hp2100_sys.c @@ -23,6 +23,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Robert M Supnik. + 30-Dec-16 JDB Corrected parsing of memory reference instructions 13-May-16 JDB Modified for revised SCP API function parameter types 19-Jun-15 JDB Conditionally use Fprintf function for version 4.x and on 18-Jun-15 JDB Added cast to int for isspace parameter @@ -656,21 +657,35 @@ if (opcode[i]) { /* found opcode? */ case I_V_MRF: /* mem ref */ cptr = get_glyph (cptr, gbuf, 0); /* get next field */ - k = strcmp (gbuf, "C"); - if (k == 0) { /* C specified? */ - val[0] = val[0] | I_CP; - cptr = get_glyph (cptr, gbuf, 0); + + if (gbuf [0] == 'C' && gbuf [1] == '\0') { /* if the C modifier was specified */ + val[0] = val[0] | I_CP; /* then add the current-page flag */ + cptr = get_glyph (cptr, gbuf, 0); /* and get the address */ + k = 0; /* clear the implicit-page flag */ } - else { - k = strcmp (gbuf, "Z"); - if (k == 0) /* Z specified? */ - cptr = get_glyph (cptr, gbuf, ','); + + else if (gbuf [0] == 'Z' && gbuf [1] == '\0') { /* otherwise if the Z modifier was specified */ + cptr = get_glyph (cptr, gbuf, 0); /* then get the address */ + k = 0; /* and clear the implicit-page flag */ } - if ((d = get_addr (gbuf)) < 0) return SCPE_ARG; - if ((d & VAMASK) <= I_DISP) val[0] = val[0] | d; - else if (cflag && !k && (((addr ^ d) & I_PAGENO) == 0)) - val[0] = val[0] | (d & (I_IA | I_DISP)) | I_CP; - else return SCPE_ARG; + + else /* otherwise neither modifier is present */ + k = 1; /* so set the flag to allow implicit-page addressing */ + + d = get_addr (gbuf); /* parse the address and optional indirection indicator */ + + if (d < 0) /* if a parse error occurred */ + return SCPE_ARG; /* then return an invalid argument error */ + + if ((d & VAMASK) <= I_DISP) /* if a base-page address was given */ + val[0] = val[0] | d; /* then merge the offset into the instruction */ + + else if (cflag && k /* otherwise if an implicit-page address is allowed */ + && ((addr ^ d) & I_PAGENO) == 0) /* and the target is in the current page */ + val[0] = val[0] | d & (I_IA | I_DISP) | I_CP; /* then merge the offset with the current-page flag */ + + else /* otherwise the address cannot be reached */ + return SCPE_ARG; /* from the current instruction's location */ break; case I_V_ESH: /* extended shift */ diff --git a/doc/hp2100_doc.doc b/doc/hp2100_doc.doc index 13d16124587afbb12eb4ebafbb7ee60f4e1f3220..44b7dc7970a48f8ba5c33a5ce26ae89d12a85f2f 100644 GIT binary patch delta 30600 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∈=*`H5SmHFm_vFCtR+?aPj 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