HP 9000/500 FOCUS

With Frank McConnell; some parts taken with permission from him


The HP 9000/500s computers were the early-1980s predecessors of the PA-RISC workstations and the first member of the HP 9000 series. Although already based on a HP 32-bit processor — the FOCUS — they did not have PA-RISC CPUs.

The HP 9000/520 (originally 9020, the first 500 series) was introduced in 1982 by HP and one year later described in the Hewlett Packard Journal as the new HP 9000 computer, a mainframe on the desktop. All 500s used the same processor, memory and I/O; differences were in expandability and built-in I/O.

The HP 9000/500 series was withdrawn after several years, with production stopped in 1989, probably due to the complexity and cost of its architecture. The five years younger first PA-RISC NMOS implementation had one third the FETs of the FOCUS processor. Successors were the early HP 9000 Series 800 servers, based on PA-RISC 1.0.

↑ up


Four distinct models were introduced between 1982 and 1984, based on the same architecture:

HP 9000/520 Dawn (also HP 9020):

HP 9000/530 Corona (also HP 9030):

HP 9000/540 Corona (also HP 9040):

HP 9000/550 Shuttle (also HP 9050):

HP 9000/500s in SMP configuration were confusingly also called 600 series (some of the 1980s’ 800s server systems were also called 600 series for a short time).

Possible I/O and expansion options (for all 500s):

↑ up


The basic architecture of the 500 series was Hewlett-Packard FOCUS, implemented in five NMOS-III VLSI chips fabbed in 1.5 micron: the CPU chip, I/O processor (IOP), memory controller, 128Kb RAM (16 KB cache) and clock driver.

The CPU ran at 18 MHz and had a direct address range of 500 MB (probably 29-bit direct addressing for 512 MB). It was fabricated with 450,000 FETs, integrated with three Floating-Point chips onto one finstrate CPU board. The FOCUS CPU was microcoded with 9,000 38-bit microcode control stores and implemented the HP 3000 computers’ stack-based architecture in 32-bit. All internal data paths and registers are 32-bit wide. Due to heat dissipation difficulties the ICs were mounted on special printed-circuit boards called finstrates — the board has a 1mm copper sheet as core to which the IC substrate is epoxied directly.

The I/O Processor IOP executes all I/O instructions and handles the transactions from/to the eight attached HP CIO channels. It has an I/O bandwith of 5.1 MB/s burst and 973 KB/s multiplexed. The IOP was also a microprogrammed (4,608 32-bit microcode stores) NMOS-III VLSI chip.

At least one IOP to interface with the I/O buses was needed so up to six CPUs were supported in hardware but only three in software. Up to two additional IOPs could be installed for more I/O options; each additional IOP needed an I/O expander which provided the I/O channels extension, the CIO bus.

The three finstrates boards of CPU, IOP and 256 KB RAM were installed in a 12-slot HP 9000/520 module. This allowed configurations of up to 10 MB of RAM; memory cards could be substituted to construct multiprocessor systems. The CPU, IOP and memory controller communicated via the memory processor bus MPB. The 44-line, 18 MHz, 36 MB/s MPB supports up to seven (other sources mention three/three) CPUs or IOPs and fifteen memory controllers.

↑ up


The FOCUS is a stack architecture, with 230 instructions (both 32 bits and 16 bits wide), a segmented memory model, and no general purpose programmer-visible registers. There are thirty-nine 32-bit registers in the CPU hardware — thirty-one internal 32-bit general purpose registers, two 32-bit ALU registers, and others.

It has a flat address space but that is not really what most programs see: their access to memory is largely described by registers that contain the absolute memory addresses of segment boundaries. For example, instructions come from the current code segment, which is described by three registers: P, the program counter, which is a 32-bit register containing the absolute address of the instruction being executed; PB, the program base register, which is a 32-bit register containing the absolute address of the first word of the current code segment; and PL, the program limit register, which is a 32-bit register containing the absolute address of the last word of the current code segment.

The data segment also has base (DB) and limit (DL) registers, and so does the stack segment (SB, SL). The stack segment also has a stack pointer (S) and a stack marker pointer (Q) which points to the current procedure’s activation record on the stack.

There is also an index register, a status register, a flags register (really a sort of debugging-state register), a message register (interrupting conditions) and message mask register (which enables/disables interrupts from the message register), a breakpoint register, and a couple of registers which are for the memory controllers to talk to the CPU.

The machine instruction set is oriented toward moving words between memory and the top of the stack, and operating on the words at the top of the stack. To take an addition of two numbers: load one, load the other, execute an ADD instruction, and then a store instruction if the result should be kept somewhere in memory other than on the stack.

The stack is in memory, there are (probably) some numbers of top of stack registers inside the processor to keep things moving relatively quickly, but these registers are not otherwise visible to the programmer.

↑ up


A choice of operating systems was provided by HP for the 520: HP BASIC or HP-UX. All other 500s (530, 540 and 550) only supported HP-UX. The operating systems were built on top of a common kernel, called SUNOS (no relation to Sun Microsystems’ SunOS Unix) which provided basic operating primitives like memory, processor and I/O management. This was intended to be invisible to the user; the Unix operating system on top ran as a single process on it. SUNOS was not a single binary image, compile-time switches allowed for BASIC and HP-UX builds. HP-UX ran until version 5.3 on HP FOCUS hardware.

There were three revision of SUNOS:




HP-UX for the 9000/500 was the first commercial UNIX supporting a multi-processor, multi-user system.

↑ up





↑ up