|
One day in the fall of 2003 I arrived at the radio museum with which I am associated and found (not unusually) the front hall filled with a newly received pile of junk stuff.
A lot of it was HP lab equipment from the 60s (easily dated by the HP corporate colours of the 60s - blue/grey/aluminum).
Unusually, included in this HP stuff was a computer with a full blinkenlight front panel, a 9-track magnetic tape drive and a paper-tape reader, the computer being roughly the size of a bar fridge (but several times the weight).
This was quite exciting (for me) and I asked around as to it's source/destination. I was told it was in transit to someone else. It turned out later the intended recipient didn't want it and everything needed to be removed from the museum. Years ago I tried to convince the rest of the museum crowd to collect computers as well as radio stuff but was voted down. The upside to this is that I get dibs on computer stuff that finds it's way into the museum.
The computer equipment was a Hewlett-Packard 2116C processor, along with an HP 7970A 9-track (reel-to-reel) tape drive and HP 2748A paper-tape reader. I have been reluctant to get into collecting boat anchors (my definition: anything that needs more than one person to carry) but this was too nifty to pass up.
I was told they had been stored in an airplane hanger for many years. The units were in fair condition, some dust, some scratches and some spot corrosion on open aluminum surfaces. Their original use is unknown although the tape drive has a sticker with "Marine Sciences Branch, Dept E. M. & R.: Pacific Region" inside it. (As a friend reminded me, "E. M. & R." was the Canadian Department of Energy, Mines and Resources). Some of the other equipment these units came with (model 2912 reed scanners and other HP lab equipment) suggests perhaps they were used for data acquisition or analysis. More about this later. Component manufacturing dates indicate the processor was made in 1970.
Initially I didn't have much expectation of getting everything going as a system as I believed I was unlikely to obtain sufficient documentation for the hardware. However a web search quickly took me to Jeff Moffat's HP2100 archive site with some manuals which at least documented the basic instruction set. If the CPU would function perhaps it would be possible to at least run some 'blinkenlight' programs. In the end (so to speak - maintaining systems such as this never really ends) it was possible to get all the hardware functioning and inter-operating.
Contents (this page): | Sub-pages: |
Somewhat curiously, it turned out that the three major components - the processor, the magnetic tape drive, and the paper tape reader - each had a hardware problem significant enough to make it non-functional.
The first problem encountered was how to get into the cabinet. The front panel door was locked and of course the key was missing. I removed side panels as much as possible but was still prohibited from access to the latch area. Eventually I gave up and drilled out the lock cylinder which thankfully was only aluminum.
This gave access to the card cage, but the power supply and wire side of the back-plane were still largely inaccessible even with all side and back panels removed. After some more examination and head-scratching I finally figured out that removing 4 screws on the front bezel permits the entire card cage to slide out from the cast aluminum frame on 4 hidden internal rails. Two of the rails then split in half (!) and the card cage swings to one side.
A friend and I pulled all the boards from the processor for some dusting and to test the linear power supply. The main logic voltages as measured were incorrect, but not outrageously so, and were stable. Surmising that it was lack of load, even though it is a linear supply, we plugged the boards back in, powered up, and the basic front panel operations of loading and displaying registers functioned. Documentation obtained later showed the configuration of the +4.5V and -2V logic supplies is a little unusual.
The first problem encountered while playing with the front panel switches and lamps was that some locations in core memory were not responding properly. Specifically, blocks of 64 words on 512 word boundaries were readable once, after which the data in those locations 'disappeared'.
The symptoms suggested that the core could be read but not written, the once-only read resulting from the destructive read of core memory implementations. The first access to an address from the front panel was reading the original contents of the location, inherently clearing the location, and then failing to rewrite the data. My guess was that the write circuitry associated with one address line had failed, as the memory module size is 8192 words and 64*128=8192 (the most likely array size) (as I later figured out it might be better described as 64*64*2).
A few days of reverse engineering of the memory module 'X Y DRIVER' board, followed by some comparitive testing of driver transistors with an ohmmeter identified one driver transistor as being 'different from the others'.
The driver transistors were contained in quad DIP packages for which I could not find the exact specs.
I didn't have any previous experience with fixing core memory, and I was a little leery of the requirements for these transistors.
Reasoning suggested that the requirements for a core driver would be high switching speed with high CE saturation current, but low power dissipation.
This is a somewhat unusual combination of parameters and there was a limited amount of space available to stuff in a replacement.
A TO-92 package would fit but I wasn't finding anything with specs meeting the anticipated requirements.
A rather common 2N2219 had specs that might be adequate but the unnecessarily large TO-39 package would be an awkward fit.
I managed to squeeze it in and the core memory was functioning completely.
The 7970A 9-track magnetic tape drive, tested in stand-alone mode, would not load a tape properly. Once load was initiated it simply rewound the tape at high speed. The capstan motor, once enabled, rotated in reverse but did not respond to any other signals.
Reverse engineering of the capstan driver board and powering it up in a test jig made it possible to trace the problem to a leaky junction in a mid-level driver transistor. That leaky junction led to the driver output transistors failing with one of them shorted, explaining the high speed reverse. With the transistors and some other fried components replaced the drive would load a tape properly. More complete testing would have to wait till the drive was connected to the CPU and some test programs could be written to exercise it.
Sadly, the bezel which should be around the switches and lamps fell off somewhere and is missing.
The 2748A paper tape reader was in somewhat worse condition than the other items, with spot corrosion on most aluminum surfaces. Functionally, while it responded properly to it's front panel switches, it did not respond properly to a faked input control signal on the back panel interface connector.
Some more reverse engineering and this problem was traced to a bad switching transistor.
With the front panel operations on the processor functioning, and the instruction set documentation in hand, it was possible to write, hand-assemble, toggle in, and execute some simple test and blinkenlight programs. This was nice, at least the processor could do something, albeit minimal, rather than just being a dead artifact.
Around this time I was made aware via the cctech mailing list of the many manuals available at Al Kossow's bitsavers.org. A visit there brought the discovery of more HP2100 manuals, including those for the I/O interfaces in the machine. (As well as schematics of most of the electronics I had earlier laboured over to reverse engineer. C'est la vie.) The I/O manuals opened another range of possibilities for producing a more complete system and led to a bootstrapping process, summarised as follows:
With the monitor running on the processor it was easy to visually examine the core memory and - core being non-volatile - I took a snapshot of the core contents I hadn't already altered and uploaded it back to my main machine. It appears the last thing this machine was doing was running a BASIC game to guess numbers, in July of 1983.
Here is a portion of the core memory dump, containing the BASIC keywords:
003730: 034135 015614 124252 127704 002643 015614 024265 034135 8] (*/D # (58] 003740: 017661 017114 017671 127734 003272 070164 064433 044135 1 L 9/\ :pti H] 003750: 160001 030470 170001 060164 127744 000003 051125 047040 ` 18p `t/d RUN 003760: 002003 051503 051040 003004 046111 051524 005005 050114 SCR LIST PL 003770: 044523 052040 012003 050124 040440 033004 051524 177777 IST PTA 6 ST 004000: 000000 000000 000000 000000 000000 000000 000000 000000 004010: 000000 000000 000000 000000 000000 041517 046440 035003 COM : 004020: 042105 043040 036003 051105 046440 037004 043517 052117 DEF < REM > GOTO 004030: 040002 044506 041003 043117 051040 042004 047105 054124 @ IFB FOR D NEXT 004040: 043005 043517 051525 041040 044006 051105 052125 051116 F GOSUB H RETURN 004050: 045003 042516 042040 046004 051524 047520 047004 053501 J END L STOPN WA 004060: 044524 050004 041501 046114 051004 042101 052101 052004 ITP CALLR DATAT 004070: 051105 040504 053005 050122 044516 052040 000000 000000 READV PRINT 004100: 004076 052040 055007 051105 051524 047522 042440 056003 >T Z RESTORE \ 004110: 046501 052040 057004 052110 042516 060002 052117 061004 MAT ^ THEN` TOb 004120: 051524 042520 027003 047117 052040 026003 040516 042040 STEP. NOT , AND 004130: 025002 047522 030002 177652 031002 036075 017002 036076 * OR0 *2 <= <> 004140: 001003 052101 041040 002003 051511 047040 003003 041517 TAB SIN CO 004150: 051440 004003 052101 047040 005003 040524 047040 006003 S TAN ATN 004160: 042530 050040 007003 046117 043440 010003 040502 051440 EXP LOG ABS 004170: 011003 051521 051040 012003 044516 052040 013003 051116 SQR INT RN 004200: 042040 014003 051507 047040 015003 055105 051040 016003 D SGN ZER 004210: 041517 047040 017003 044504 047040 020003 044516 053040 CON IDN INV 004220: 021003 052122 047040 002137 072333 074167 060132 070163 " TRN _t[xw`Zps 004230: 060133 070164 060135 072351 002404 072556 160135 010374 `[pt`]ti un`] | |
And some other portions, containing strings from what is (presumably) a BASIC program:
013700: 000000 000000 102000 000000 000000 102000 000000 000000 013710: 102000 000000 000000 000062 000025 053000 001040 050111 2 V PI 013720: 177772 020066 020116 052515 041105 051123 020102 042524 z 6 NUMBERS BET 013730: 053505 042516 020061 020101 047104 020064 034400 001000 WEEN 1 AND 49 013740: 000063 000010 032324 007324 110000 040000 000002 000000 3 4T T @ 014710: 005000 007022 022606 006626 005000 000000 000442 000034 % " 014720: 153037 123000 050000 000010 000000 004000 000000 001116 V & P N 014730: 052515 041105 051050 051451 020120 044503 045505 042040 UMBER(S) PICKED 014740: 046101 051107 042522 020124 044101 047040 032071 020041 LARGER THAN 49 ! 014750: 020441 001000 000443 000004 137003 000453 000444 000035 !! # > + $ 014760: 153037 123000 050000 000010 000000 004000 000000 001123 V & P S 014770: 040515 042440 047125 046502 042522 020120 044503 045505 AME NUMBER PICKE 015000: 042040 046517 051105 020124 044101 047040 047516 041505 D MORE THAN ONCE 015010: 020041 020400 001000 000445 000004 137003 000453 000447 !! % > + ' |
And a portion containing a date. Whether it is valid or not depends upon whether the system time had been set correctly (there is no hardware real-time clock to keep the time when the machine is powered off).
016330: 000014 102000 042000 000014 102000 044000 000014 000542 D H b 016340: 000021 036040 046101 051524 020116 052515 041105 051040 < LAST NUMBER 016350: 043122 047515 020112 052514 027040 031460 026070 031400 FROM JUL. 30,83 016360: 001750 000003 045000 034471 000204 060000 000004 006405 h J 99 ` |
My monitor program had overwritten most of the first page of memory, so a full core dump of the original data was not obtained. In retrospect it would have been nice to get a complete dump, decoded it and perhaps restarted the loaded system, however the core memory problem means a good deal of foresight would have been required to get everything.
When the monitor was improved to exercise the magnetic tape drive, an almost-complete recovery of the one tape that came with the system was possible. The tape had been left loaded on the drive a little beyond the load point (data-containing portion of the tape exposed) and a portion of the tape near the beginning was messed up. None-the-less, records containing what appears to be Fortran, Assembler, and BASIC were obtained, although parts of Fortran appear to have been lost in the bad portion of tape.
Here are a couple of records of the assembler, including some of the opcode keywords:
Record 000316: 000011 words, 000000 004000: 177770 040523 046502 020040 020040 020040 000000 174010 ~xASMB ~~x~ 004010: 002007 ~~ 006000: 043101 042006 003246 046111 040450 102500 043104 053006 FAD~~&LIA(~@FDV~ 006010: 003246 046111 041050 106500 043115 050006 003246 046511 ~&LIB(~@FMP~~&MI 006020: 040450 102400 043123 041006 003246 044516 040466 052004 A(~~FSB~~&INA6T~ 006030: 044516 041066 046004 044517 051016 032001 044523 055016 INB6L~IOR~4~ISZ~ 006040: 036000 045115 050016 026000 045123 041016 016000 046104 <~JMP~,~JSB~~~LD 006050: 040416 062001 046104 041016 066001 046511 041050 106400 A~d~LDB~l~MIB(~~ 006060: 047101 046415 000000 047117 050030 000000 047503 052011 NAM~~~NOP~~~OCT~ |
Other records on the tape, together with the sticker inside the tape drive ("Marine Sciences Branch, ... Pacific Region") provide some clues of what the system was being used for:
Record 000011. 000051 words, 000000 004000: 177730 024001 107415 020117 047105 020114 044516 042442 ~X(~~~ ONE LINE" 004010: 024400 000031 000017 024040 021116 052515 041105 051040 )~~~~~( "NUMBER 004020: 047506 020123 050105 041511 042523 020111 047040 046111 OF SPECIES IN LI 004030: 051524 021051 000031 000035 024040 021120 051105 050101 ST")~~~~( "PREPA 004040: 051105 020124 040520 042440 041517 047124 040511 047111 RE TAPE CONTAINI 004050: 047107 NG |
Record 000016. 000051 words, 000000 004000: 177730 024001 117443 042111 047456 000012 000000 001010 ~X(~~#DIO.~~~~~~ 004010: 177736 002001 000006 000012 006400 000007 027000 042111 ~^~~~~~~~~~~.~DI 004020: 047456 001010 177776 001010 177735 001011 177734 000031 O.~~~~~~~]~~~\~~ 004030: 000034 024040 021111 047120 052524 020104 040524 040440 ~~( "INPUT DATA 004040: 043117 051040 034440 051524 047123 026055 030440 044506 FOR 9 STNS,-1 IF 004050: 020123 S Record 000017. 000051 words, 000000 004000: 177730 024001 066752 050105 041511 042523 020116 047524 ~X(~mjPECIES NOT 004010: 020122 042520 051105 051505 047124 042504 021051 000031 REPRESENTED")~~ 004020: 000004 024040 031466 040462 027451 000031 000010 024040 ~~( 36A2/)~~~~( 004030: 034501 031054 034450 054054 044465 024440 024400 002001 9A2,9(X,I5) )~~~ 004040: 000001 000012 006404 000007 027000 042111 047456 001010 ~~~~~~~~.~DIO.~~ 004050: 177752 ~j |
Record 000053. 000051 words, 000000 004000: 177730 024001 024037 027000 042124 040456 001401 000013 ~X(~(~.~DTA.~~~~ 004010: 000021 001406 000013 000005 000403 006001 000012 002021 ~~~~~~~~~~~~~~~~ 004020: 000415 007044 001011 177731 000031 000037 024040 031460 ~~~$~~~Y~~~~( 30 004030: 024057 024454 032070 044114 044516 042501 051040 051105 (/),48HLINEAR RE 004040: 043522 042523 051511 047516 020103 047516 043111 042105 GRESSION CONFIDE 004050: 047103 NC |
There are still a couple of things that it would be useful to obtain for this system:
2116C Unit Log
| 7970A Unit Log
| 2748A Unit Log
CTµL | 2116 | I/O Interfaces | Programming Ref | Software | 2116C Refurb HP 21xx Series |
bhilpert Jun 2004 |