The HP-94 was an industrial hand-held computer meant for data logging chores on the factory floor. It was packaged in a squarish form factor, with an ABC format keyboard, a 20 character by 4-line backlit LCD display. The battery pack screwed on to the right side and also served as the grip with an elastic band to help avoid dropping the unit. It had a serial port and a port for a bar code wand and an earphone could be connected for environments where the HP-94s loud beep couldn't be heard. The unit also featured timers, a real-time clock and had a lithium backup-battery.
The computer was based on the NEC V20 (8088 compatible) processor but the computer was not PC compatible. Programs were developed on another computer in assembly language or BASIC and then downloaded to the HP-94.
The computers had file systems residing in ROM and RAM. Five user directories could hold programs of types
When the HP-94 was cold started it searched the directories in order (0-4) for the first program file named MAIN and ran it. Otherwise, it issued an error message and entered command mode. (The machine cold-started when turned on unless it was last turned off by a program using the warm start option.)
Reserved file names included
Operating system functions were called by loading a function code into AH, loading other parameters into registers and issuing software interrupt 1AH. Results were returned to the caller in various registers. Functions were:
Command | AH Register |
Other Registers |
Beep | 07h | AL=00h low tone AL=01h high tone |
BUFFER_STATUS | 06h | AL=00h Flush key buffer AL=01h Get # of Bytes in key buffer AL=02h Flush recv buffer for built-in serial port handler AL=03h Get # of bytes in recv buffer for built-in serial port handler |
CLOSE | 10h | AL= channel number to close |
CREATE | 11h | ES= Segment of file name BX= Offset of file name CX= Initial allocated size in paragraphs DX= Size increment in paragraphs |
CURSOR | 05h | AL=00h Get the current cursor position AL=01h Move the cursor CL= Cursor column CH = Cursor Row |
DELETE | 14h | AL= Channel number of file to delete |
DISPLAY_ERROR | 18h | AL= Error code |
END_PROGRAM | 00h | AL=00h Cold start AL=01h Warm start AL>01h End application and enter command mode. |
FIND_FILE | 16h | ES= Segment of file name BX= Offset of file name DS= Segment of file info buffer DX= Offset of file info buffer |
FIND_NEXT | 17h | none |
GET_CHAR | 01h | AL=00 Echo character being read AL>00h Don't echo character |
GET_LINE | 02h | AL= Maximum # of bytes to read (1-255) ES= Segment of read buffer BX= Offset of read buffer |
GET_MEM | 0bh | AL= Channel # if request made by a handler AL=00h if request not made by a handler BX= Size of requested area in paragraphs |
MEM_CONFIG | 0Dh | ES= Segment of configuration buffer BX= Offset of configuration buffer. |
OPEN | 0Fh | AL= Channel number to open ES= Segment of file or handler name BX= Offset of file or handler name DS= Segment of parameter area* DX= Offset of parameter area* * (built-in serial port handler only) |
PUT_CHAR | 03h | AL= Character to display |
PUT_LINE | 04h | ES= Segment of string BX= Offset of string |
READ | 12h | AL= Channel number CX= Number of bytes to read ES= Segment of buffer ES= Offset of buffer |
REL_MEM | 0Ch | CX= segment of scratch area to release |
ROOM | 0Eh | AL= Directory Number in which to return free space |
SEEK | 15h | AL= Channel number BL=00h Get current file pointer position BL=01h Seek relative to start of file BL=02h Set file pointer to EOD CX= High byte of 24 bit seek offset DX= Low word of 24 bit seek offset |
SET_INTR | 0Ah | AL=00h Define a power switch/system timeout interrupt routine AL=01h Define a low battery interrupt routine AL=02h Disable power switch interrupt AL>02h Enable power switch interrupt. BX= Data segment used for interrupt routine CX= Segment address of interrupt routine DX= Offset address of interrupt routine |
TIMEOUT | 09h | AL=00h Set the display backlight timeout AL=01h Set the system timeout BX= Number of seconds to timeout (1-1800) 0 means disable timeout |
TIME_DATE | 08h | AL=00h Set time and date AL=01h Read time and date ES= Segment of time and date buffer BX= Offset of time and date buffer |
WRITE | 13h | AL= Channel number CX= Number of bytes to write ES= Segment of write buffer BX= Offset of write buffer |
The OS supported 16 I/O channels which could be opened with the open function or the BASIC OPEN # statement. Channels 0, 1, & 2 corresponded to the Console, serial port and bar code port. Channels 3 & 4 were reserved and channels 5-15 were for date files. (For channels 1-4 the file name specified a user-defined handler.)
Assembly language programs were typically developed with standard Microsoft tools (MASM and LINK). Basic Programs were compiled to tokens which were then interpreted by the built-in interpreter.
The 20 character by 4-line display could be backlit by pressing and holding the shift key until the green backlight activated. This light would remain for several minutes or could be canceled by holding the shift key again. The contrast was controlled by a little knob below the on/off switch. While it was basically a character display, programs could set individual columns of dots within a character and the HP-94 allowed 32 characters in the font to be redefined. These characters were defined in a file that had to be named SYFT.
The keyboard was of the rubber membrane style and quite unusual for an HP calculator or computer. (See Manufacturer below.) Oddly, unshifted characters were printed in orange (the color of the Shift key) and shifted characters were printed in white. The Shift key was a toggle, however it was always set back to the default state when Enter was pressed.
Because the On/Off switch was under software control, there was a small recessed reset switch to its immediate left.
By itself, the HP-94 did little. The applications were developed on another computer. If no application named MAIN existed in the machine, or the user held down CLEAR and ENTER while turning it on, it entered command mode and accepted commands such as:
Unusual for HP, the production of the HP-94 was actually done by an outside company. The units were produced in Japan by Canon.
The HP-94 appears to have been a flop. HP sold only a few and ended production. What they apparently failed to realize was that the few sold went to developers. Because the unit could do little on its own, companies bought just enough for developing and testing and when their applications were finished, they went back for more units - and found that they could get none. (This story has happened over and over in the custom computer market and explains why some companies will only develop their applications on generic PCs.)
HP-94D: The Base Unit With 64K bytes of RAM
HP-94E: As above with 128K of RAM
HP-94F: As above with 256K of RAM
An HP-82411A 40K RAM card or an HP-82412A ROM/EPROM card (holding 23-128K) could be plugged into an HP-94D or 93E. In addition, the HP-94E could be expanded to the equivalent of the HP-94F with the addition of an HP 82410A 128K memory board. The HP-94F could not be expanded.
Front view of the HP-94F (~71K)
Three quarter view (~71K) (Battery detached)
HP-94D Interior (~71K)
(The metal cover at the top covers a 3v CR-2032 lithium backup battery.)
Another view of the HP-94D Interior (~130K)
Dimensions and Weight
(Calculator with Battery)
Width: 6.3"
Depth: 6.2"
Height: 1.5"
Weight with Battery: 1.5lb (HP-94D) - 1.6lb (HP-94F)
Introduction: 1986
Prices:
HP-94D: $1395
HP-94E: $2095
HP-94F: $2795
Go back to the main exhibit hall
Next Calculator Made
Previous Calculator Made