The Processors

All 9845 were controlled by two processors working in parallel. One processor, the peripheral processing unit or PPU was responsible for all the I/O processing, like serving keyboard interrupts, writing data to the CRT display, or handling other peripheral I/O. The logical processing unit or LPU did execute all user programs, including BASIC programs and binary software modules.

For most systems, both processors were identical. The processor design went back on a very early minicomputer design, that of HP's first computer ever, the 2116A, which was transferred into a microprocessor design. So, much of the existing know-how and development environment of the 211x series could be recycled for the new processors. In fact, those processors were the first 16-bit microprocessors ever (as well as the 2116A had been one of the first 16-bit minicomputers before). Later HP introduced a modified high-performance version of the LPU, which was built on a custom bit-slice processor design, but still physically and electronically compatible to the original processors - the "hybrid processors".

The Hybrid Processors

Hybrid Processor
3+4-Chip Hybrid Processor
Each LPU was built by three separate N-channel MOS LSI chips, which were bonded together into one processor package. The Binary Processor Chip (BPC) processed all instruction fetches, program logic and integer arithmetics, the Extended Math Chip (EMC) processed all BCD floating point arithmetics, and the I/O Chip (IOC) was responsible for processing all I/O data, including multi-level interrupts, DMA and serving the I/O bus. In addition, the IOC implements the stack instructions. A set of four bi-directional interface buffers (BIBs), produced in bipolar technology, completed the hybrid package. Each PPU was just the same with the exception of the early 9845A systems, where the EMC was omitted (it was not used by the PPU). Note that, although the LPU won't make use of the I/O functions of the IOC, the IOC is still included for its interrupt and stack processing capabilities.

Hybrid Processors
PPU, LPU and TACO chip with Heatsinks

The EMC was a quite powerful floating point processor. Unlike contemporary processors, but in the tradition of HP's calculators, all floating point numbers were represented by BCD mantissa and binary exponent, not in complete binary representation. The internal calculation range was -10511...-10-511,0,10-511...10511. Note that the BASIC interpreter cuts the exponent to a range from -99 to +99.

The 9845 series were not the first systems which used this hybrid processor. Almost the same type was already in use with the common 9825 series, as well as in some measuring equipment like the HP3585A spectrum analyzer (1978). The main change for the 9845 system with respect to the 9825 system was that the most significant address bit (the 16th bit) was no longer used for multi-level indirection addressing, but the address space was extended to 64 KWords (full 16 bit address space).

Later the address space of the hybrid processor was even more extended by a fourth NMOS chip, the address extension chip (AEC), which expanded the address space to (in principle) 65,536 memory blocks of 32 KWords each (= 4 Gigabytes!!!), and provided a very flexible kind of bank switching scheme. For the 9845 actually only 6 of the 16 possible AEC lines were utilized outside the processor, so the effective 9845 address space was in total limited to 64 memory blocks.

Dyke Shaffer was a late addition to the development of the HP9825/35/45 series and was responsible for the substrate design changes that extended the BPC/EMC/IOC hybrid to include the AEC device. After first writing a Fortran program on an HP2115 to analyze NMOS II artwork for design rule violations, to extract node capacitance and produce spice netlist, he joined the HP9835 development team to assist in the implementation of the new BPC hybrid substrate.

This turned out to be a significant effort due to the fact that the HP9825's 82 pin hybrid as it was initially released to production had a significant noise problem that had to be solved to produce the HP9835's 107 pin version.  The new BPC hybrid was first developed for the HP9835 and later incorporated into the HP9845 as a cost reduction.

The elimination of the root cause of the noise first required that an awareness of its existence be documented and then addressed by careful choice of pin assignments in the 107 pin version to accommodate the additional AEC address signals. Eventually, a new version of the 82 pin substrate was designed and retrofitted back into the HP9825.

In addition to the substrate design and noise investigation, Dyke also built the second generation production test system that accommodated all of the BPC hybrid versions. This required a rack full of test equipment, a test program and custom binary commands be implemented for the HP9825 to control a pair of electronic tools (ET10161 and ET10162) that allowed the BPC hybrids to be automatically tested. Provision in the industrial design of the test head was made for trouble shooting the various BPC hybrids during assembly.

There were 14 boards that were designed and built by Dyke that were first implemented in wire wrap form which was used in production for several years during which time the pc board layout and industrial were completed to release the two electronic tools and their enclosures.

There were two hybrid test systems eventually built to serve as production test for the last 10 years of production until the BPC hybrid was retired.

BPC ProcessorAlso there was a BPC-only version of the processor (p/n 1818-2500) which had its first application in the HP 9871A daisy-wheel impact printer (introduced in 1975) and later in the 9872 series plotters (1977), in the 9874A digitizers (1978) and the 9875A dual tape cartridge drive (1978).

This BPC-only processor was provided in a 40-pin DIL package and was used with external bidirectional buffers (p/n 1820-1584) and 16-bit RAM/ROM.

Here is an overview of the known hybrid processor variants:

Part No. Used in # Pins Description
09825-67907 9825 series, 3585A spectrum analyzer 82 Original version of the hybrid processor, still with multi-level indirection support
5061-3010 9845A (LPU) 82 Revised version of the hybrid processor, with extended address space, sacrifying the seldom-used multi-level indirection feature
5061-3011 9845A (PPU), 4955A protocol analyzer, HP64000 development system 82 Special variant of the 5061-3010 hybrid processor without Extended Math Chip (EMC)
5061-3043 HP 250 82 Variant of 5061-3010 hybrid processor used in the HP 250 system (same pinout as 5061-3010)
5061-4204 8566A/8568A spectrum analyzer 82 Variant of 5061-3010 hybrid processor used in the HP 8566A/8568A spectrum analyzers (probably same pinout as 09825-67907, but with heat sink fins lengthwise instead of crosswise)
5061-3001 9845B/C, 9835A/B 107 Final design for the 9835A/B, 9845B and 9845C series, including the Address Extension Chip (AEC), was used both for the LPU and the PPU
1818-2500 Several peripheral devices 40 Stripped-down BPC-only version in a DIL ceramic package

 

Heat Sink
Processor Heat Sink

At design time in 1972/73 the whole functionality did not fit on one single chip (with roughly 18,000 transistors for the processor logic the die would have been too large for the production processes of the time), so the features were split into three single chips mentioned above (each of the three chips with a complexity comparable to the Intel 8080). BPC, IOC, EMC and BIBs were placed on a ceramic substrate with single layer gold connection paths.

In contrast to other microprocessor packages, the hybrid processor was not connected to the circuit board via pin arrays, but through gold-wired elastomer cylinders which connected the pads of the board with those of the package with perfect alignment and well-calculated pressure. Not too different from todays multi-core processors, and quite similar to ceramic leadless chip carriers technology (CLCC) - but a wonder that this connection still works well even after almost 30 years.

Crosswise Heat Sink

Alternative Heat Sink
The hybrid processors produced enough heat, that a die-cast aluminium heat sink was necessary to keep the processor inside its tolerance values. With an average power dissipation of 6 Watts (todays multi-core Pentiums can reach a thermal design power of more than 100 Watts!) the processor temperature could be kept on 70°C in a 55°C ambient. The heat sink looked a little bit like a motorcycle cylinder head, so the word of the "honda cylinder head" was created.

Due to direction of air flow, most hybrid processors are equipped with heat sinks with crosswise fins (see photograph above), except the 8566A/8568A spectrum analyzers, which used a heat sink with lengthwise fins.

Hybrid Processor Package

Hybrid Processor Package with Heat Sink

One of the weird things was that both processors initialized after power-up with the same firmware code, until each processor tested for the status of a certain signal line in order to know whether it is the PPU or the LPU. Even more curious, at the 9845B and 9845C the signal was derived from the CRT vertical retrace, so that it required several tries to be sure that the signal is present.

Processor Block Scheme

Processor Block Diagram (9845A LPU)

The processor architecture was straight-forward and didn't differ much from that of other microprogrammed processors of that time. Each chip consisted of a set of registers, the microcommand logic and one or two ROMs containing the microprograms. The registers were used for execution control, memory reference or temporary storage. Two accumulators, the A and the B registers, were used as general purpose registers. Two pairs of registers, the C/Cb and D/Db registers were used as stack pointers, three registers, the Dmac, Dmama and Dmapa controlled the DMA functions. The P register was used as program counter, the peripheral address register Pa was used to select the proper I/O channel. The return stack pointer R established a multi-level subroutine scheme. The Shift-extend register Se was used for external registers, a set of four registers were used for communicating with I/O devices. And, finally, a set of four words building the internal BCD arithmetic register AR2. A second BCD arithmetic register AR1 is stored in external R/W memory at address octal 177770-177773.

There are less documented registers like the interrupt vector register IV at address octal 10 or the working register W at address octal 12. All registers (except the AR1 register) were mapped into the memory address space at the addresses octal 0-37, so this part of memory is NOT available for ROM or R/W memory access (so to say, the first 32 words in each ROM or RAM address space are wasted).

Here is a complete overview of the hybrid processor registers:

Address
(octal)
Mnemonic Chip Purpose
0 A BPC General purpose arithmetic accumulator
1 B BPC General purpose arithmetic accumulator
2 P BPC Program counter
3 R BPC Return stack pointer
4 R4 IOC I/O register
5 R5 IOC I/O register
6 R6 IOC I/O register
7 R7 IOC I/O register
10 IV IOC Interrupt vector (reserved)
11 Pa[0..3] IOC Peripheral address register
12 W IOC Working register (reserved)
13 Dmapa[0..3], Cb[15], Db[14] IOC DMA peripheral address register,
block bits for byte pointer in C & D (read-only)
14 Dmama IOC DMA memory address register
15 Dmac IOC DMA count register
16 C IOC Stack pointer
17 D IOC Stack pointer
20 AR2 (0) EMC BCD arithmentic accumulator (LSW)
21 AR2 (1) EMC BCD arithmentic accumulator
22 AR2 (2) EMC BCD arithmentic accumulator
23 AR2 (3) EMC BCD arithmentic accumulator (MSW)
24 Se[0..3] EMC Shift-extend register
25 -reserved- EMC Internal BCD arithmetic register (reserved)
26 -reserved- EMC Internal BCD arithmetic register (reserved)
27 -reserved- EMC Internal BCD arithmetic register (reserved)
30 -reserved- n/a reserved
31 -reserved- n/a reserved
32 R32 AEC/MAE Indirect memory access for upper half of address space
33 R33 AEC/MAE Instruction fetch for lower half of address space
34 R34 AEC/MAE Instruction fetch for upper half of address space
35 R35 AEC/MAE Indirect memory access for lower half of address space
36 R36 AEC/MAE Base page addressing
37 R37 AEC/MAE Direct memory access

 

In addition to the registers which were externally accessible, the processor included internal registers for the flags (decimal carry, extend and overflow).

The 9845A had both PPU and LPU on one assembly, the 9845B and 9845C used seperate boards in order to provide each processor with its own memory address extension and memory controller.

The Bit-slice Processor

Probably inspired by the design of the 9845C where an AMD2900 bit-slice processor is used in the 98770A CRT display for the vector generator, there was a replacement developed by HP for the LPU hybrid processor which used the same AMD2900 approach as in the 98770A. The basic idea was to implement the most demanding BASIC interpreter routines into microcode in order to accelerate the system by an average factor of 5 to 7 (not a completely new idea, Wang Laboratories already had a similar approach eight years before with their 2200 minicomputers). The new 9845 systems which were equipped with the bit-slice LPU were called 9845 option 200. The bit-slice or fast LPU option was available both for the 9845B and the 9845C.

Bit-slice Block Diagram

Bit-slice Processor Block Diagram

The idea behind the AMD2900 was simple but impressive. The 2900 family consists of a number of building blocks which can be used to set up a microprogrammed controller which is sufficient flexible to emulate existing machines. The whole bit-slice processor can be separated in two parts, the processing and the control section.

AMD 2901
AMD 2901 4-Bit Processor

The processing section is built by an array of several 2901 four-bit bipolar microprocessor "slices", each including a 4-bit-wide 16 word RAM, high-speed ALU, shifting, decoding and multiplexing circuitry.The control section is implemented by a 2910 microprogram controller, which gets its instructions from a PROM holding 56-bit wide very long instruction words (VLIW).

For the 9845 model 200 bit-slice processor, a 2910 microprogram controller was combined with an array of four 2901 microprocessor slices, a 2 KWord 56-bit-wide control instructions PROM, and a BCD math unit built with diskrete logic components, resulting in a 16-bit wide processing unit.

The bit-slice processor used the fast bipolar 2901 ALUs plus the diskrete math logic to emulate the hybrid LPU and at the same time implement time critical routines from the BASIC interpreter in microprograms. This is the reason why on the one side BASIC programs are accelerated up to a factor of seven, on the other side assembler programs and binary routines do not profit from acceleration (in fact, assembler programs have been reported to run slightly slower than on a real hybrid LPU).

Bi-slice Processor

9845 Option 200 Bit-slice Processor Assembly

The bit-slice processor consisted of one lean connector board, and three boards packed with the 2900 chips, the PROMs and a large number of diskrete logic chips. The whole construction has a high board and chip density, and it has some weight. However, though it gets really tight, it still fits into the LPU slot. And despite the complexity of the whole package, the bit-slice processors today still work fine (at least the two I got). Unfortunatly, the PROMs are not socketed, so it will be hard to create backup copies.

Bit-slice Processor Prototype

Bit-slice Processor Prototype (Wire Wrapped)
Photo Courtesy of Marl Godfrey

The bit-slice processor requires a couple of new ROM revisions at the LPU side. The old LPU ROMs with the part numbers 1818-0823 to 1818-0830 have to be replaced by the ROMs with the part numbers 1818-1502 to 1818-1509. Apparently, also the PSU should be upgraded to the A81 assembly in order to meet the power requirements of the 9845 option 200 models.

Processor Pinout

The processor pinout changed slightly between the different revisions. The original design without Address Extension Chip (as used in the 9825 and the 9845A) had 82 contacts (with a 14 x 27 layout). The later 9845B/C version with the integrated AEC (which was also used in the 9835 systems) had a completely revised scheme with 107 connections on a 20 x 38 contact raster (some power supply and ground connections used two contacs). Some signals which didn't proove important had been abandoned, others had been added (especially the memory address extension lines).

9845A Hybrid Processor Back View

Back View of the 9845A Hybrid Processor with the VLSI Chips below the sealed Substrate Lid

Hybrid Processor Back View

Back View of the 9845B/C Hybrid Processor

Please note that both the 9825 CPU and the 9845A LPU/PPU have the same size and contact layout but differ slightly in signal assignment. The hole in the lid was used to produce a vaccuum during the production process and was sealed afterwards.

The numbering on both the substrate and the PCB refers to the connections (=signals), not to the contact raster. Here is an overview with some reference to the signal names Tony Duell used in his 9845B schematics (sometimes I can just guess because the documentation lacks any datails, so please use those information with care).

Mnemonic Pinout I/O Description
HP Duell 9825 9845A 9845B
IRH/ IRH/ 1 1   I Interrupt Request line (high priority): an external device requests an interrupt by forcing this line low. IRH has a higher priority than interrupt request low (IRL), and can preempt the lower priority interrupt even while it is in process. POP can preempt IRH.
IRL/ IRL/ 2 2   I Interrupt Request line (low priority): an external device requests an interrupt by pulling this line low. IRL is the lowest priority interrupt, and has no preempt abilities, therefore, must wait on its turn. IRH and POP can preempt IRL.
EXBG, EBG     3   O Extended or External Bus Grant: when high, indicates the requesting device that it may use the ID Address Bus (IDA).
  KLSel 3     ? KDP/processor select (?)
DMAR/ DMAR/ 4 4   I DMA Request line: a peripheral device forces this line low when it wants to access memory.
+12V IOC   5 5     +12V Power Supply (IOC)
IC2/ IC2/ 6 6 1 O Interface Control 2 (n/c on LPU): one of two lines which can provide up to four states used to control peripheral devices. How these lines are controlled is determined by software (usually to select one of four peripheral device registers).
IC1/ IC1/ 7 7 2 O Interface Control 1 (n/c on LPU): one of two lines which can provide up to four states used to control peripheral devices. How these lines are controlled is determined by software (usually to select one of four peripheral device registers).
BE/ IBE/ 8 8 3 O I/O Buffer Enable (n/c for 9825 and 9845B LPU)
DOUT/ DOUT/ 9 9 4 O I/O Direction Control (n/c on LPU): when low, indicates to the addressed peripheral device that the processor will write data to it. IOSB must also be low.
IOSB/ IOSB/ 10 10 5 O I/O Strobe (n/c on LPU): when low, indicates that the data on the input/output bus (IOD) is valid.
POP/ POP/ 11 11   I Power On Pre-set (input from PSU): when low, initializes and prevents the microprocessor from running. When POP is released, the microprocessor begins operation at address 20 hex. POP is synchronized with CLK2 before being input to the microprocessor. POP can preempt IRL and IRH.
ERA/ TestA     6 I Extended Register Access (n/c on PPU): when forced low by an external device, the internal registers have increased addressing range on the ID Address bus (IDA).
PDR/       7 ? Processor is Driving (n/c): when low, the microprocessor is driving the instruction/data/address bus (IDA).
+12V EMC +12V 12 12 8   +12V Power Supply (EMC)
DC/       9 ? Decimal Carry (n/c)
+7V +7.5V     10   +7V Power Supply
BSC0/ UA16     11 O Memory Address Extension line 0
BSC1/ UA17     12 O Memory Address Extension line 1
BSC2/ UA18     13 O Memory Address Extension line 2
BSC3/ UA19     14 O Memory Address Extension line 3
BSC4/ UA20     15 O Memory Address Extension line 4
BSC5/ UA21     16 O Memory Address Extension line 5
        17 O Memory Address Extension line 6 (n/c)
        18 O Memory Address Extension line 7 (n/c)
        19 O Memory Address Extension line 8 (n/c)
        20 O Memory Address Extension line 9 (n/c)
        21 O Memory Address Extension line 10 (n/c)
        22 O Memory Address Extension line 11 (n/c)
        23 O Memory Address Extension line 12 (n/c)
        24 O Memory Address Extension line 13 (n/c)
        25 O Memory Address Extension line 14 (n/c)
        26 O Memory Address Extension line 15 (n/c)
+12V AEC +12V     27   +12V Power Supply (AEC)
DC/   13 13   I Decimal Carry (n/c for 9825), for the 9845A PPU connected to CRT vertical retrace
PDR/   14 14   O Processor is Driving (n/c for 9825): when low, the microprocessor is driving the instruction/data/address bus (IDA).
FLG/ FLG/ 15 15 28 I Flag (PPU only, connected to +7V on 9845A LPU or +12V on 9845B LPU): can be tested by software. A hardware line used as 'flag' by any peripheral device which is connected to the microprocessor. There are wire ORed 'flags'.
STS/ STS/ 16 16 29 I Status (PPU only, connected to +7V on 9845A LPU or derived from HLT/ signal on 9845B LPU): can be tested by software. Used as a 'flag' by any peripheral device connected to the microprocessor. the peripheral devices are wire ORed to this line.
HLT/ VAck/ 17 17 30 I Halt (n/c for 9825, for the 9845B/C PPU connected to CRT vertical retrace, for the 9845B/C LPU grounded): can be tested by software. Used as a 'flag' to the microprocessor by the system bus controller for interrupts (9845A) or for testing vertical retrace (9845B/C PPU).
RELA/ +12V     31   Relative Addressing (connected to +12V)
+7V BPC,EMC +7.5V 18 18 32   +7V Power Supply (BPC, EMC)
+12V BPC +12V     33   +12V Power Supply (BPC)
CLEAN GND Gnd     34   Ground
CLEAN GND Gnd? 19 19   ? Ground
02 02out 20 20 35 O Clock 2 out: one of two complementary, non-overlapping clocks. Required by the microprocessor chip.
CLK Clk     36 I Clock in
01 01out 21 21 37 O Clock 1 out: one of two complementary, non-overlapping clocks. Required by the microprocessor chip.
CLEAN GND Clean 22 22 38 I Ground
+12V BPC +12V 23 23     +12V Power Supply (BPC)
CLK IN Clk 24 24   I Clock in (n/c for 9825)
UMC/ TestRet 25 25 39 I Unsynchronized Memory Complete: when low, allows the microprocessor to complete its memory cycle. If the memory needs to make the microprocessor wait, due to long access times, it pulls UMC high. When UMC is high, the microprocessor must wait.
DSTM/   26 26   O Delayed Start Memory (n/c for 9825)
INT/ INT/ 27 27   I/O Interrupt control (IOC:output, BPC/EMC:input): the microprocessor pulls this line low in response to IRH and IRL to allow polling the input/output bus to determine which peripheral requested the interrupt.
STMR/       40 ? Start Memory ROM (n/c)
ERA/   28 28   I Extended Register Access: when forced low by an external device, the internal registers have increased addressing range on the ID Address bus (IDA).
PON       41 I Power On Signal (derived from INIT/ signal)
SNYC/ Inst/ 29 29   I/O Instruction fetch synchronization: when high, indicates the microprocessor is fetching an opcode.
STM/ STM/, ALE/ 30 30 42 I/O Start Memory: used to initiate a memory cycle. When low, indicates that the information on the address bus is valid.
WRT/ WrEn/ 31 31 43 I/O Read/Write: when high, indicates the microprocessor will read from devices external to it. When low, the processor will write to devices such as memory.
BG ArbEn/ 32 32   O Bus Grant: when high, acknowledges Low Bus request has been received. However the requesting device mus waot until High External Bus Grant (EBG) is true before using the IDA Bus.
SMC/ ALEEn/, EnHi/ 33 33 44 I/O Synchronized Memory Complete
RAL InitOut/ 34 34 45 O Register Access Line: when an address on the ID Address Bus (IDA) is within the range reserved for register designation, RAL goes high to prevent external memeory from responding to any memory cycle havinf the same address.
-5V BPC -5V 35 35 46   -5V Power Supply (BPC)
-5V AEC -5V     47   -5V Power Supply (AEC)
-5V EMC -5V 36 36 48   -5V Power Supply (EMC)
+5V +5V 37 37 49   +5V Power Supply
DIRTY GND Gnd 38 38 50 I Ground
+7V BIB +7.5V     51   +7V Power Supply
IDA8/ AD8 39 39   I/O Instruction Data Address bus line 8
IDA9/ AD9 40 40   I/O Instruction Data Addressbus line 9
IDA10/ AD10 41 41   I/O Instruction Data Address bus line 10
IDA11/ AD11 42 42   I/O Instruction Data Address bus line 11
IDA12/ AD12 43 43   I/O Instruction Data Address bus line 12
IDA13/ AD13 44 44   I/O Instruction Data Address bus line 13
IDA14/ AD14 45 45   I/O Instruction Data Address bus line 14
IDA15/ AD15 46 46 52 I/O Instruction Data Address bus line 15
IDA14/ AD14     53 I/O Instruction Data Address bus line 14
IDA13/ AD13     54 I/O Instruction Data Address bus line 13
IDA12/ AD12     55 I/O Instruction Data Address bus line 12
IDA11/ AD11     56 I/O Instruction Data Address bus line 11
IDA10/ AD10     57 I/O Instruction Data Address bus line 10
IDA9/ AD9     58 I/O Instruction Data Address bus line 9
IDA8/ AD8     59 I/O Instruction Data Address bus line 8
+7V BIB +7.5V     60 I/O +7V Power Supply (BIBs)
IDA7/ AD7 47 47 61 I/O Instruction Data Address bus line 7
IDA6/ AD6 48 48 62 I/O Instruction Data Address bus line 6
IDA5/ AD5 49 49 63 I/O Instruction Data Address bus line 5
IDA4/ AD4 50 50 64 I/O Instruction Data Address bus line 4
IDA3/ AD3 51 51 65 I/O Instruction Data Address bus line 3
IDA2/ AD2 52 52 66 I/O Instruction Data Address bus line 2
IDA1/ AD1 53 53 67 I/O Instruction Data Address bus line 1
IDA0/ AD0 54 54 68 I/O Instruction Data Address bus line 0
IBE/, PBE/ Gnd     69 I Buffer Enable: IBE/ on LPU, PBE/ on PPU (grounded): enables the internal microprocessor buffers for the instruction/data/address bus (IDA).
IBO/, PBO/ Dir     70 I Buffer Direction Control: IBO/ on LPU, PBO/ on PPU (grounded on LPU): controls the direction of the microprocessor's internal, bidirectional, ID address (IDA) buffers. When low, information is transmitted from the microprocessor.
+7V BIB +7.5V 55 55 71   +7V Power Supply (BIBs)
IOD7/ IOD7 56 56   I/O I/O Data bus line 7 (n/c on LPU)
IOD6/ IOD6 57 57   I/O I/O Data bus line 6 (n/c on LPU)
IOD5/ IOD5 58 58   I/O I/O Data bus line 5 (n/c on LPU)
IOD4/ IOD4 59 59   I/O I/O Data bus line 4 (n/c on LPU)
IOD3/ IOD3 60 60   I/O I/O Data bus line 3 (n/c on LPU)
IOD2/ IOD2 61 61   I/O I/O Data bus line 2 (n/c on LPU)
IOD1/ IOD1 62 62   I/O I/O Data bus line 1 (n/c on LPU)
IOD0/ IOD0 63 63   I/O I/O Data bus line 0 (n/c on LPU)
PBE/ Gnd 64 64   I Processor buffer enable (IDA-bus) (grounded for 9825): enables the internal microprocessor buffers for the instruction/data/address bus (IDA).
PBO/ Out/ 65 65   I Processor buffer direction control (IDA-bus): controls the direction of the microprocessor's internal, bidirectional, ID address (IDA) buffers. When low, information is transmitted from the microprocessor.
IOD15/ IOD15 66 66   I/O I/O Data bus line 15 (n/c on LPU)
IOD14/ IOD14 67 67   I/O I/O Data bus line 14 (n/c on LPU)
IOD13/ IOD13 68 68   I/O I/O Data bus line 13 (n/c on LPU)
IOD12/ IOD12 69 69   I/O I/O Data bus line 12 (n/c on LPU)
IOD11/ IOD11 70 70   I/O I/O Data bus line 11 (n/c on LPU)
IOD10/ IOD10 71 71   I/O I/O Data bus line 10 (n/c on LPU)
IOD9/ IOD9 72 72   I/O I/O Data bus line 9 (n/c on LPU)
IOD8/ IOD8 73 73   I/O I/O Data bus line 8 (n/c on LPU)
IOD0/ IOD0     72 I/O I/O Data bus line 0 (n/c on LPU)
IOD1/ IOD1     73 I/O I/O Data bus line 1 (n/c on LPU)
IOD2/ IOD2     74 I/O I/O Data bus line 2 (n/c on LPU)
IOD3/ IOD3     75 I/O I/O Data bus line 3 (n/c on LPU)
IOD4/ IOD4     76 I/O I/O Data bus line 4 (n/c on LPU)
IOD5/ IOD5     77 I/O I/O Data bus line 5 (n/c on LPU)
IOD6/ IOD6     78 I/O I/O Data bus line 6 (n/c on LPU)
IOD7/ IOD7     79 I/O I/O Data bus line 7 (n/c on LPU)
+7V BIB +7.5V     80   +7V Power Supply
IOD8/ IOD8     81 I/O I/O Data bus line 8 (n/c on LPU)
IOD9/ IOD9     82 I/O I/O Data bus line 9 (n/c on LPU)
IOD10/ IOD10     83 I/O I/O Data bus line 10 (n/c on LPU)
IOD11/ IOD11     84 I/O I/O Data bus line 11 (n/c on LPU)
IOD12/ IOD12     85 I/O I/O Data bus line 12 (n/c on LPU)
IOD13/ IOD13     86 I/O I/O Data bus line 13 (n/c on LPU)
IOD14/ IOD14     87 I/O I/O Data bus line 14 (n/c on LPU)
IOD15/ IOD15     88 I/O I/O Data bus line 15 (n/c on LPU)
  IO Dout/ 74     ? ?
DIRTY GND     74   ? Ground
PBE/, IBE/ IOT     89 I Buffer Enable: PBE/ on LPU, IBE/ on PPU (grounded on LPU): enables the internal microprocessor buffers for the instruction/data/address bus (IDA).
PBO/, IBO/ IODEn     90 I/O Buffer Direction Control: PBO/ on LPU, IBO/ on PPU (connected to DOUT/ on PPU): controls the direction of the microprocessor's internal, bidirectional, ID address (IDA) buffers. When low, information is transmitted from the microprocessor.
DIRTY GND Gnd     91   Ground
-5V IOC -5V 75 75 92   -5V Power Supply (IOC)
BYTE/ WordWr 76 76   O Byte interpretation: when low, indicates that a memory cycle is to invlove an eight bit byte, rather than the full sixteen bits of the word.
PAB3/ PA3 77 77 93 O Peripheral Address Bus line 3 (n/c on LPU)
PAB2/ PA2 78 78 94 O Peripheral Address Bus line 2 (n/c on LPU)
PAB1/ PA1 79 79 95 O Peripheral Address Bus line 1 (n/c on LPU)
PAB0/ PA0 80 80 96 O Peripheral Address Bus line 0 (n/c on LPU)
BYTE/ WordWr     97 O Byte interpretation: when low, indicates that a memory cycle is to invlove an eight bit byte, rather than the full sixteen bits of the word.
BR/   81 81   I Bus Request: provides the way for an external device to request uninterrupted use of the ID Address Bus (IDA).
BL/ U/L 82 82 98 O Byte Left: Determines which half of a word will be affected (BL/ low: MSB, BL/ high: LSB)
INT/ INT/     99 I/O Interrupt control (IOC:output, BPC/EMC:input) (n/c on LPU): the microprocessor pulls this line low in response to IRH and IRL to allow polling the input/output bus to determine which peripheral requested the interrupt.
BG TestC     100 O Bus Grant: when high, acknowledges Low Bus request has been received. However the requesting device mus waot until High External Bus Grant (EBG) is true before using the IDA Bus.
IRH/ IRH/     101 I Interrupt Request line (high priority) (connected to +12V on LPU): an external device requests an interrupt by forcing this line low. IRH has a higher priority than interrupt request low (IRL), and can preempt the lower priority interrupt even while it is in process. POP can preempt IRH.
IRL/ IRL/     102 I Interrupt Request line (low priority) (connected to +12V on LPU): an external device requests an interrupt by pulling this line low. IRL is the lowest priority interrupt, and has no preempt abilities, therefore, must wait on its turn. IRH and POP can preempt IRL.
EXBG, EBG VAEn     103 O Extended or External Bus Grant: when high, indicates the requesting device that it may use the ID Address Bus (IDA).
DMAR/ DMAR/     104 I DMA Request (connected to +12V on LPU): a peripheral device forces this line low when it wants to access memory.
BR/ VRq/     105 I Bus Request: provides the way for an external device to request uninterrupted use of the ID Address Bus (IDA).
SYNC/ TestB     106 ? Instruction fetch synchronization
+12V IOC +12V     107   +12V Power Supply (IOC)

The following signals exist but could not be assigned (probably CTE, GNI/ and DVAL/ are used by the test connector, e.g. as TestA, TestB and TestC):

CTE Counter Test Enable
GNI/ Get Next Instruction
DVAL/ Data Valid
ODD Output Driver Disable (internal signal, no pin connected)

Processor Speed and Timing

All 9845 processors were internally clocked with 5.7 MHz, derived from an external 11.4 MHz clock signal. One processor clock cycle was 175 nanoseconds. The fastest instruction, a program pointer change (JMP), needed 8 clock cycles, whereas the longest instruction, a BCD floating point multiply, needed 65 clocks. So the processor could perform at ~0.7 MIPS, which was approximately the speed of an Intel 8088/8086 microprocessor. The floating point performance was about 0.15 MFLOPS (floating point addition), which was significantly faster than an 8087 maths coprocessor.

A speciality of the 9845 processors were fast block operations, which could be used to copy or zero a block of up to 16 words with one single instruction. The XFR instruction for copying the content of a memory block to another address could consume up to 213 clocks for a 16-words block, but was much faster and more convenient than an instruction loop which did the same. A 16-word memory clear needed only 112 clocks, so that a complete 32 KWord (64 KBytes) memory block could be cleared in less than 50 ms, and the max. memory installation of 1.5 MBytes in just 1.2 seconds.

The bit-slice implementation of the LPU probably didn't deviate too much from this timing, since the acceleration factor was related to the microcode implementation of several BASIC routines and didn't speed up machine code processing. Nevertheless, here is a comparison of the resulting BASIC performance (all measures are in ms):

BASIC Routine
Standard
Hybrid LPU
Bit-slice
LPU
Acceleration
Factor
Addition
0.27 0.04
6.75
Subtraction
0.33 0.06
5.50
Multiplication
0.89 0.14
6.35
Division
2.90 0.56
5.18
Raise to Power
17.00 3.21
5.30
Square Root
2.90 0.43
6.75
Tangent
14.00 2.41
5.81
Sine
21.00 3.68
5.71
Cosine
21.00 3.68
5.71
Arctangent
18.00 2.31
7.80
Arcsine
26.00 3.88
6.70
Arccosine
26.00 4.00
6.50
Natural Log
7.50 1.39
5.40
Log Base 10
9.70 1.49
6.51
ex
6.10 1.00
6.00
Integer
0.46 0.24
1.92
Absolute Value
0.13 0.03
4.33
Fraction
0.35 0.09
3.89
Random Number
1.80 0.33
5.46

Other Microcontrollers

The 9845 architecture is based on the concept of "distributed intelligence", so beside the two CPU's there is a large number of VLSI chips including a couple of microcontrollers disburdening the CPU's from several tasks. Most VLSI chips are custom HP designs, however some of the interface modules are using standard microcontrollers from other vendors, like the Datacomm Interface which uses an Intel 8048 microcontroller.

The BPC Processor

The BPC processor was a strip-down version of the 16-bit 9845 hybrid with only a BPC chip. It was used as controller for the HP 9871A daisy-wheel impact printer (introduced in 1975) and later in the 9872 series plotters (introduced 1977), as well as for the 9874A digitizer and the 9875A dual tape cartridge drive (both introduced in 1978). Primary usage was as logic controller when 16-bit word processing was required, mostly in combination with other interface or device controllers.

In case 8-bit wide processing was applicable, another processor, the "nanoprocessor" was the choice (see next paragraph).

BPC Processor Pinout
BPC Processor Pinout
BPC
BPC Ceramic Package

The Nanoprocessor

Printer ControllerFor most 8-bit controller tasks at the time of the 9845, HP used its own development, an 8-bit microprocessor called "nanoprocessor" (P/N 1820-1692).

This processor was also used as controller for the 9845 series thermal printer. The 9845 thermal printer is a complex system consisting of the printer mechanics, a printer motor control circuit and a printer logic assembly. The printer subsystem is connected to the 9845 PPU via the IOD bus. Actually, the printer subsystem is an independent computer with the IOD bus as host interface. The nanoprocessor was clocked with 8 MHz. It featured a complete logic & I/O controller system, including 16 internal 8-bit registers, an 11-bit program address space, an 8-bit data bus, 3 interrupt lines, 4 device select lines, and 7 I/O lines.

In addition to the nanoprocessor, the printer control assembly holds 2 kBytes of printer control firmware, a 2 kByte character ROM and 256 Bytes of read/write memory.

Note the hand-written back bias voltage value (-5.0 V on the sample above). There was a possible range between -2.0 and -5.0 V in .5 V steps. Obviously, HP's manufacturing process of the nanoprocessor produced chips with different tolerances, so each chip had to be tested individually. The required back bias voltage then was established by selecting the appropriate resistor on the PCB. This should be taken into account when replacing a nanoprocessor.

Nanoprocessor Pinout

9845 Internal Thermal Printer Microcontroller (P/N 1820-1692) Pinout

The nanoprocessor was also used in the 98034 HP-IB interface and in the 98035 Real Time Clock interface.

Printer Microcontroller

9845 Internal Thermal Printer Microcontroller Block Diagram

You can download the orginal Nanoprocessor User's Guide here (draft version courtesy Larry Bower and Paul Berger).

The Tape Drive Controller (TACO)

The tape drive controller (TACO) chip was a new NMOSIII-development integrating 48 TTL logic chips and 80 diskrete components into one single controller chip. The TACO chip was used in the 9845 series, in the 64940A tape controller (as part of the 64000 logic development system) and in the 9875A dual tape cartridge unit.

TACO Tape Controller  TACO Controller with Heatsink

TACO Chip Layout and TACO on PCB with Heatsink

Compared to the original 9825 tape controller logic, the TACO chip did not only replace the low level TTL logic, but provided also high-level tape control functions for the PPU. The controller was clocked with 4 MHz and interfaced to the PPU via the IOD bus. It was completely self-contained and didn't need any external RAM or ROM components.

TACO Pinout

5061-3012 Tape Controller Chip Pinout

The (for now) probably most comprehensive official description of the TACO chip and its command set can be found within the 64940-90905 Tape Control And Drive Service Manual. The TACO chip uses the following registers:

Registers

R5 works as status and control register. The individual bits of the TACO status register are assigned as follows:

Control Register

with:

Bit 0 HOL - hole detect (1 = hole, 0 = not hole)
Bit 1 CIN - cartridge detect (1 = cartridge out, 0 = cartridge in)
Bit 2 SFAIL - servo fail detect (1 = servo fail, 0 = servo OK)
Bit 3 WPR - write protect detect (1 = write protected, 0 = not write protected)
Bit 4 GAP - gap detect (1 = in gap, 0 = not in gap)
Bit 5 TRB - current track (1 = track B, 0 = track A)

A write to the TACO control register starts execution of the TACO command selected by an instruction code. The individual bits of the TACO control register are assigned as follows:

Status Register

with:

Bit 0 - 5 not used
Bit 6 MOD - depends on instruction, e.g. threshold (1 = high volt threshold, 0 = low volt threshold)
Bit 7 FST - tape speed (1 = fast/90 ips, 0 = slow/22 ips)
Bit 8 FGAP - minimum gap size detected (1 = 1.5", 0 = 0.066")
Bit 9 TDRON - automatic stop on command completion (1 = stop, 0 = don't stop)
Bit 10 - 14 G1 to G5 - Instruction code
Bit 15

FWD - tape direction (1 = forward, 0 = reverse)

Not all of the 32 instructions have been diskovered yet, here are the ones which are used by the 9845 firmware and where we have some idea of (thanks to F.Ulivi's re-engineering efforts):

Instruction Description
0
Scan for data, then for gap
2
Write EVD (end of valid data) gap
3
Initialize tape with data
4
Stop tape
6
Set current track
10
Start continuous tape movement
12
Scan for gap, then move for a given distance
14
Clear errors and unlatch status bit
16
Same as command 0
22
Write a gap of given length
24
Scan for gaps
25
Write data
26
Move for a given distance, then scan for data
27
NOP (?)
28
Move for a given distance, then scan for a gap
29
Start reading data
30
Move for a given distance
31

End reading data

F.Ulivi has written a comprehensive description of his findings on the TACO chip, where the use of the above commands is described in detail.

R6 is a read/write register counting upward either tachometer pulses or gaps, depending on the current command. A 16-bit roll-over normally terminates the ongoing command. Counting is "freezed" when writing to this register. The register is reset by the TACO command which uses this register.

R7, when read, returns the checksum of all words being exchanged with the tape since the last read to this register. The checksum is built by simply adding the next data word to the current content of this register, and storing the result modulo 216 back to this register. Writing to this register controls pre-compensation and one/zero threshold. The exact use is yet unknown, usually a 0x661d is written to this register on writes to tape, and 0x0625 on tape reads (0x061d for SIF utilities).

The TACO chip is enabled by select code 12 at PA0 to PA3, which is internally mapped by the HP9845 to either select code 15 (primary tape drive) or select code 14 (secondary tape drive) within the HP9845.

Display Controllers

The display controllers of the 98750A standard graphics display was completely built with diskrete TTL logic, whereas the 98770A color display used a special vector acceleration hardware based on a fast, general purpose AMD bit-slice processor setup.

Graphics Controller Graphics Controller Heatsink

5061-4203 Graphics Controller (back view, heat sink)

The 5061-4203 graphics controller was part of the 98780A enhanced monochrome graphics display. This controller was responsible for (at the time) light speed graphics performance with hardware accelerated vector and circle generation. The 5061-4203 graphics controller also implemented the so-called rubber band feature in hardware, a graphics object which could be drawn and moved along the screen without destroying the pixel data.

Interface Controllers

To be continued...

More Information

See Steve Leibson's great hp9825.com site for more information on the history and internals of HP's hybrid processors. Also have a look at Accutron's arcticle diskussing the hybrid processors at the Vintage Technology Association.

The different function groups inside the hybrids are deeply described in the 9825 and 9845 patent documents, please have a look into the patents section.