The Museum of HP Calculators


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.

File System

The computers had file systems residing in ROM and RAM. Five user directories could hold programs of types

Assembly (A)
Either new BASIC keywords or complete assembly language programs.
Basic (B)
Files containing BASIC tokens to be interpreted by the built-in interpreter. BASIC source code files were converted to tokens before downloading to the HP-94.
Data (D)
Data of any kind.
User-Defined Handler (H)
An assembly language program for controlling IO ports. Similar to a device driver in other operating systems.

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

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
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.

Display and Keyboard

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.

Few Built-in Commands

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:

Common Power-on Errors


Unusual for HP, the production of the HP-94 was actually done by an outside company. The units were produced in Japan by Canon.

Long Development Times / Short Life Time

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.)

Three Versions

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)

Manuals Available

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

HP-94D: $1395
HP-94E: $2095
HP-94F: $2795

Go back to the main exhibit hall
Next Calculator Made
Previous Calculator Made