The HP 2100 (1972), manufactured by the Hewlett-Packard Company, is a new model of the HP 2116. The HP 2116 was brought out in 1967 to compete with the PDP-8. It was designed and built with the design of the PDP-8 in mind and hence has some similarities to the PDP-8. The designers tried to correct what were felt to be the major limitations of the PDP-8. Like the PDP-8, the HP 2100 is used mainly in process control and laboratory systems, but it also is used to provide simple time-sharing in Basic for up to 32 terminals.
The HP 2100 was produced in two models, the 2100A and the 2100S. These computers have generally been replaced by the newer 21MX computers (M-series, K-series, and E-series); however, these newer models are basically the same as the 2100 architecturally.
The HP 2100 is a 16-bit binary computer. It uses two's complement
integer arithmetic. With 16-bit words, integers from -32,678 to
+32,767 can be represented. Addresses are 15 bits, allowing up to
32K words to be addressed. Two 16-bit registers, the A and B
registers, function as accumulators, while two one-bit registers,
E (the Extend bit) and 0 (the Overflow bit) are also
provided. The Extend bit acts the same as the Link bit on the
PDP-8; the Overflow bit acts like the overflow toggle of the MIX
FIGURE 10.6 Two of the HP 21MX series of computers from Hewlett-Packard. These small minicomputers are often used in dedicated applications. (Photo courtesy of Hewlett-Packard Company.)
A number of internal registers are also used, including a program counter (P register), a memory address register (M register), and a memory data register (T register).
A special feature of the HP 2100 is that locations 0 and 1 of memory are the A and B registers, respectively. Thus, a LDA 1 will load the A register with the B register.
The instructions of the HP 2100 can be grouped into three classes of instructions:
Memory reference instructions are encoded as shown in Figure
10.8. Four bits are used for the opcode, giving 16 different
memory reference instructions. Addressing of memory is
accomplished by two techniques, indirection and paging. Bit 15 of
the instruction specifies either direct (D/I = 0) or indirect
(D/I = 1) addressing. If indirect addressing is specified, the
address given in the instruction is not the address of the
operand, but the address of the address of the
FIGURE 10.7 A block diagram of the HP 2100 computer. All registers are 16 bits, except the extend and overflow bits, and the 15-bit M register.
operand. Since only 15 bits are needed for an address, and the word in the indirect address is 15 bits, the high-order bit of that word is again taken as a direct/indirect bit. Indirect addressing can occur to any number of levels, and continues until bit 15 of the word fetched from memory is zero. When bit 15 is zero, the remaining bits specify the address of the operand.
Paging allows the 10 bits in the instruction to specify a 15-bit address. Bit 10 of a memory reference instruction specifies if the upper 5 bits of the address should be zero (Z/C = 0) or the same as the upper 5 bits of the program counter (Z/C = 1). This logically breaks memory up into 32 pages, each with 1024 words. FIGURE 10.8 Memory reference instruction format for HP 2100.
The 1024 words on the zero page or the 1024 words on the current page can be accessed directly at any time. The remaining pages must be accessed indirectly.
The effective address calculation for the HP 2100 is thus as follows.
|02||AND||AND the contents of the effective address to the A register, leaving the results in the A register.|
|04||XOR||Exclusive-OR the contents of the effective address to the A register, leaving the results in the A register.|
|06||IOR||Inclusive-OR the contents of the effective address to the A register, leaving the results in the A register.|
|03||JSB||Jump to subroutine. Store the address of the next instruction in the effective address and jump to the effective address plus one.|
|05||JMP||Jump to the effective address.|
|07||ISZ||Add 1 to the contents of the effective address and store the sum back in the effective address. Skip the next instruction if the stored sum is zero.|
|10||ADA||Add the contents of the effective address to the A register.|
|11||ADB||Add the contents of the effective address to the B register.|
|12||CPA||Compare the contents of the effective address to the A register. Skip the next instruction if they are equal.|
|13||CPB||Compare the contents of the effective address to the B register. Skip the next instruction if they are equal.|
|14||LDA||Load the contents of the effective address into the A register.|
|15||LDB||Load the contents of the effective address into the B register.|
|16||STA||Store the contents of the A register into the effective address.|
|17||STB||Store the contents of the B register into the effective address.|
Notice that these instructions are similar to the instructions for the PDP-8. However, the extra bit in the opcode field has allowed us to add another register (the B register) and some additional instructions (the IOR, XOR, CPA, CPB). Also by including a load instruction, we no longer need a deposit and clear, but can use a standard store instruction.
FIGURE 10.9 Alter/skip and shift/rotate instruction formats for HP 2100.
The register reference instructions come in two groups: the
shift-rotate group and the alter-skip group. These instructions
are formed by combining subinstructions. The format of these
instructions is shown in Figure 10 .9. Bit 11 controls whether
the A or B register is used. For the shift-rotate group, bits 8-6
and 2-0 are 3-bit shift and rotate fields. The shifts and rotates
|*LS||000||Shift left one bit, end off.|
|*RS||001||Shift right one bit, end off.|
|R*L||010||Rotate left one bit, circular.|
|R*R||011||Rotate right one bit, circular.|
|*LR||100||Shift left one bit, then zero sign bit.|
|ER*||101||Rotate right one bit register and Extend bit. Bit 0 into E; E into 15.|
|EL*||110||Rotate left one bit, register and Extend bit. Bit 15 into E; E into bit 0.|
|*LF||111||Rotate left four bits.|
The * is either A or B, depending upon which register is selected by bit 11. Since all of these combinations select some change on the selected register, a separate bit is used to disable or enable the selected shift. If the control bit disables the shift, then the register is not changed; the shift does not occur. (This provides a NOP if both shifts are disabled). Bit 9 is the disable/enable control bit for the shift/rotate of bits 8-6; bit 4 is the disable/enable control for bits 2-0.
Bit 5, if set to one, causes the Extend bit to be cleared; otherwise it is left alone. Bit 3, if set to one, will cause the CPU to skip the next instruction if the least significant bit (bit 0) of the selected register is zero; the next instruction is executed as normal if bi t 3 is zero or bit 0 of the selected register is nonzero. These two functions (clear E; skip if low-order bit zero) occur after the shift function selected by bits 9, 8, 7, 6 and before the shift function of bits 4, 2, 1, 0.
These subinstructions can be combined according to the following:
(Any Shift/Rotate), CLE, SL*, (Any Shift/Rotate)The register used in all the subinstructions in one register reference instruction must be the same, of course. The ability to select two shifts in one instruction allows a great deal of flexibility. For example, in one instruction we can rotate 1, 2, 3, 4, 5, or 8 bits left or right by combining the rotate one and rotate four functions appropriately. By combining end-off and circular shifts, a bit in a register can be selectively cleared, or tested by moving it into the E bit or low-order bit, and then moving it back, in the same instruction.
The alter-skip group provides the following subinstructions, where the *
represents either A or B, as selected by bit 11.
|SEZ||Skip on E zero|
|SS*||Skip if register is positive|
|SL*||Skip if low-order bit is zero|
|SZ*||Skip if register is zero|
|RSS||Reverse skip sense.|
CL*, CM*, SEZ, CLE, CME, SS*, SL*, IN*, SZ*, RSSSubinstructions are executed left to right.
The assembler for the HP 2100 is a three-pass assembler like the assembler for the PDP-8. The first pass creates the symbol table, the second the output loader code, and the third a program listing.
The input to the assembler is free-format, consisting of a label field, opcode field, operand field, and comment field, delimited by spaces. The label field is optional; it must start in column 1 if it is present. The operand field may be an expression formed from symbols, decimal numbers, or " *" (the location counter value). Expression operators are addition and subtraction. Octal numbers are indicated by using the letters as a suffix. Literals may also be used. Indirection is indicated by following the operand with a comma and the letter I, as
LABEL LDA SAM,I INDIRECT ACCESS
Pseudo-instructions for the HP assembler include ORG (to define the origin of a program or reset the location counter), END, EQU, DEC (to define a decimal constant), OCT (to define an octal constant), and BSS (to reserve storage locations). Pseudo-instructions also exist for creating relocatable programs with entry points (ENT), and external symbols (EXT). Primitive conditional assembly and some listing pseudo-instructions are also provided.
Programming for the HP 2100 is very similar to programming either the PDP-8 or MIX computers. The additional register allows some code to be simpler on the HP 2100 than on the PDP-8. The longer word length increases the range of numbers which can be represented, the number of opcodes, and the amount of memory which can be addressed. The major changes are in the I/O system.
Each I/O device has two bits to control I/O operations. One bit is called the control bit; the other is the flag bit. The setting of the control bit initiates an I/O operation; the control bit cannot be changed by the device. The flag bit is set by the I/O device when a transfer is complete. Normal I/O operation is to clear the flag and set the control bit to initiate the I/O operation. When the I/O device finishes the I/O operation, it sets the flag bit. Each device has its own interface card, with control and flag and buffer registers. Information is normally transferred between the A and B registers and the device interface buffer.
I/O instructions have four fields. The A/B bit selects
either the A or B bit; the H/C
bit will clear the flag bit of the selected device if the H/C bit is one.
The device field is a 6-bit field which indicates the selected I/O device.
A 3-bit operation field specifies an I/O operation to be performed on the
selected device. These are,
|HLT||000||Halt the computer|
|STF,CLF||001||Clear or set the flag (bit 9 says which)|
|SFC||010||Skip on flag clear|
|SFS||011||Skip on flag set|
|MI*||100||Inclusive OR interface buffer to register|
|LI*||101||Load interface buffer into register|
|OT*||110||Output from register to interface buffer|
|STC,CLC||111||Set or Clear (bit 11) the control bit|
Input or output can be done under flag control using busy
wait loops, as in MIX. For example, to output one character
|OTA||DEVICE||OUTPUT CHARACTER TO DEVICE|
|STC||DEVICE,C||SET CONTROL AND CLEAR FLAG|
|SFS||DEVICE||SKIP WHEN FLAG IS SET|
|JMP||*-1||WAIT UNTIL FLAG SET|
Two major improvements were made over the PDP-8 I/O. In addition to the busy loop I/O technique illustrated above, the HP 2100 has an interrupt system. The PDP-8 had an interrupt system which would, when any device requested an interrupt, store the address of the next instruction is location 0, and begin execution at location 1. The interrupting device could be determined by polling.
The HP 2100 eliminates the need for polling by having a vectored interrupt system. Instead of all interrupts causing a forced transfer to a fixed address, each device on the HP 2100 interrupts to a different location. The device number indicates the address to interrupt to. Thus, device 20 interrupts to location 20; device 21 interrupts to location 21; and so on. The action which occurs when an interrupt occurs is somewhat different also. Instead of automatically executing a subroutine jump (as on the PDP-8), the contents of the interrupt location for the interrupting device is fetched and executed as an instruction. No registers are changed before the fetched instruction is executed. Typically, the instruction executed is a subroutine jump.
For example, if we have a JSB 300 in location 20, are executing the instruction at location 1734, and an interrupt request arrives from device 20, the execution proceeds as follows. The execution of the instruction at location 1734 continues until it is completed, since it had already begun. Interrupt requests are honored only between instructions, never in the middle of an instruction execution. The program counter is incremented to 1735. Now the computer pauses before fetching the instruction at 1735 to look for interrupt requests. Seeing a request from device 20, it fetches the contents of location 20, decodes it, and executes it (intending to continue at 1735 after this one instruction). The instruction at 20 is a jump to subroutine at location 300, so the program counter (with 1735 in it) is stored in location 300, and then reset to 301. Execution continues at location 301. Control can be returned to the interrupted program by an indirect jump through location 300.
Notice that, since each device interrupts to a different location, each device interrupt can be serviced immediately. There is no need to poll all the devices to determine which caused the interrupt. An additional feature of the HP interrupt system is its priority interrupt structure. On the PDP-8, the interrupt system is automatically turned off when an interrupt occurs. On the HP 2100, when an interrupt from device x is requested, interrupts from all higher numbered devices are disabled, but all lower numbered devices may still interrupt. Thus, a priority scheme is established where higher priority (lower device numbered) devices can interrupt lower priority (higher device numbered) devices. Generally, higher speed devices are given higher priority so that they will not have to wait for lower speed devices to be serviced before continuing.
An interrupt is requested anytime the interrupt system is on, and a flag is set. Setting the flag disables interrupt requests from lower priority devices. These requests are held pending. When the flag of a interrupting device is cleared, the next lower priority pending request becomes enabled and can cause a new interrupt for that device.
With a 6-bit device select field, up to 64 different device codes are possible. Some of these are used for special purposes. Device 0 is the interrupt system, device 1 is the overflow bit and switch register. Devices 4 and 5 are used to indicate interrupts caused by a power failure (4) or a parity error in memory (5).
The addition of a priority vectored interrupt system is one major feature of the HP 2100 I/O system. The other is the direct memory access (DMA) feature. High-speed I/O devices, such as disks, drums, and magnetic tapes, can sometimes transfer information faster than the computer can handle it if all information must go through the A or B register when being transferred between memory and the I/O device. At best, because of instruction fetches, incrementing pointers, the lack of index registers, comparisons, and such, only one word every seven memory cycles can be input or output. Even this takes all available CPU time. To change this situation, a special "device" is available on the HP 2100 which allows DMA transfer between memory and a high speed I/O device which bypasses the CPU completely.
A DMA processor is a special purpose processor which is built for one purpose and one purpose only, to transfer information between memory and an I/O device. To start a DMA transfer, the DMA device is told (a) which device is involved, (b) whether the transfer is an input or an output, (c) the address in memory for the transferred words, and (d) the number of words. The DMA processor then supervises fetching words from memory and sending them to the I/O device, or vice-versa, as fast as the I/O device and memory can handle them. This continues until all words are transferred (or an error occurs). While this is going on, the CPU may continue computing. (The I/O for MIX consists of DMA transfers). The I/O can proceed at the speed of the I/O device. The DMA device does cycle-stealing by using memory read-write cycles as necessary when the CPU is not using memory. If both the CPU and DMA want a word from memory at the same time, one of them must wait, and it is generally the CPU which does the waiting.
The HP 2100 is a considerable improvement over the PDP-8. It has a longer word length, additional register, more instructions, and more sophisticated I/O system, including a priority, vectored interrupt system and DMA transfers. These additional features are not free, however. A minimal HP 2100 system with CPU and 4K of memory costs around $6,000. As with the PDP-8, the best source of further information is the manufacturer. Hewlett-Packard publishes the "Pocket Guide to the 2100 Computer," a manual which covers the basic hardware for the HP 2100 as well as the assembler, Fortran, Basic, and a simple operating system.