In part 6, I established that something was stopping the floppy disc drives in my 16500A working when I changed the ROMs to software version 00.02. Thanks to the help of some on the hp-agilent-equipment Yahoo group, especially Glen Slick, I have determined that there’s an important difference between early CPU boards running 00.00 and later ones running 00.02: the floppy disc controller chip has changed!
The old board has an FDC9793 and the new one a uPD765 (or at least its Zilog equivalent). There are pictures of all the boards here. Now, I started to wonder, could I somehow fit the uPD765 to my board? It seems crazy and would only make sense if it wasn’t possible to exchange the whole board. So I started investigate. As luck would have it I have a functional 16500B with a logic analyzer plugin, so I could have a look and see what was going on around the disc controller on my CPU board. I wired up the relevant pins of the FDC9793.
Examining the logic analyzer trace, it seems that the CPU is trying to read something from the disc controller, which is at least a start.
It’s reading from what would be the status register repeatedly, as if waiting for some condition to be true. It gets a value of 0x04 every time, which is presumably not what it wants. It does this at the right stage of the self-test. I thought this was promising, since it is at least addressing the chip. Might it be possible to wire one in place of the other? Their pinouts are different. Comparing them, using their datasheets:
FDC9793 | uPD765 | |||||
1 | RESET | I | active high | |||
2 | nWE | I | nRD | I | ||
3 | nCS | I | nWR | I | ||
4 | nRE | I | nCS | I | ||
5 | A0 | I | D/nS | I | data/nStatus register select | |
6 | A1 | I | D0 | I/O | ||
7 | D0 | I/O | D1 | I/O | ||
8 | D1 | I/O | D2 | I/O | ||
9 | D2 | I/O | D3 | I/O | ||
10 | D3 | I/O | D4 | I/O | ||
11 | D4 | I/O | D5 | I/O | ||
12 | D5 | I/O | D6 | I/O | ||
13 | D6 | I/O | D7 | I/O | ||
14 | D7 | I/O | DRQ | O | DMA request | |
15 | STEP | O | Step output | nDACK | I | DMA ack |
16 | DIRC | O | Direction (high=in, low=out) | TC | I | end of DMA transfer |
17 | EARLY | O | write precompensation | IDX | I | index pulse |
18 | LATE | O | write precompensation | INT | O | interrupt output |
19 | nMR | I | master reset | CLK | I | 8MHz |
20 | GND | GND | ||||
21 | +5V | WCK | I | write clock | ||
22 | nTEST | I | tie to +5V | RDW | I | read data window |
23 | HLT | I | input, head engaged | RDD | I | read data from data sep |
24 | CLK | I | 1MHz in | VCO/SYNC | O | enable VCO |
25 | RG | O | read gate to data sep | WE | O | write enable |
26 | RCLK | I | read clock from data sep | MFM | O | MFM/FM |
27 | nRAW READ | I | raw data from drive | HD | O | head select |
28 | HLD | O | head load | US1 | O | unit select |
29 | TG43 | O | track greater than 43 | US0 | O | unit select |
30 | WG | O | write gate | WDA | O | write data |
31 | WD | O | write data | PS1 | O | precompensation shift (early/late/normal) |
32 | READY | I | ready | PS0 | O | precompensation shift (early/late/normal) |
33 | nWF | I/O | write fault/vfo en to data sep | FLT/TR0 | I | track 0/fault |
34 | nTR00 | I | track 0 | WP/TS | I | write protect/two side |
35 | nIP | I | index pulse | RDY | I | drive ready |
36 | nWPRT | I | write protect | HDL | O | head load |
37 | nDDEN | I | double density | FR/STP | O | fault reset/step |
38 | DRQ | data req, open-collector | LCT/DIR | O | low current/direction | |
39 | INTRQ | interrupt req, open-collector | nRW/SEEK | O | indicates seek/read/write mode | |
40 | +5V |
There are some important differences here. Firstly, the uPD765 expects an 8MHz clock where the FDC9793 used a 1MHz clock. That’s not a good start. The uPD765 includes drive and side select logic, but the FDC9793 doesn’t. The two also differ a lot in how they handle things like write precompensation signals, and the uPD765 effectively multiplexes various signals too.
At this point I think the swap is just too difficult. It becomes cheaper and easier to swap the whole CPU board, if I can find one, or simply upgrade the whole machine to be a 16500B.