1980s Vintage Computers


Hewlett-Packard Series 80 - 
ROMs and EPROMs

The Basic on the HP Series 80 machines is extendable through a series of ROMs. The standard HP ones are described on the Agilent Overview page, but there are a few others. It is also possible to develop binary programs with the Assembler and store these as 2764 type EPROMs. I devised a method to read ROMs then transfer the data to EPROMs, as some ROMs in particular are hard to find. Note that all Series 80 machines will require either the Programmable ROM module (HP 82929A or HP 89050A) or a clone such as the PRM-85 module to use EPROMs. 

nb The HP-9915 (the industrial version of the HP-85) has built in support for 2716 and 2732 EPROMs, but these are for user programs and not for this type of ROM.

Background
List of ROMs
Download EPROM images
Reading ROMs

Background

I became interested in this topic after I had read through some of the HP-85 Assembler ROM manual. This describes how the Series 80 option ROMs are paged into the microprocessors 64K address range between 24K and 32K, ie an 8K window. Each ROM has a number (from 1 to 254) to identify it, and to page it in (there is also a system ROM in this space numbered 0). The ROM number is also used for error messages. The Assembler ROM has a MEM command, which dumps memory contents to the screen. A simplification of the syntax for the HP-85 is:

MEM address (in octal): ROM number (in decimal), number of bytes (in octal)

So to dump all of ROM number 40 (the Assembler ROM) the command is:

MEM 60000:40, 20000

as 60000 = 24576 (dec) and 20000 = 8192.

On the HP-87 the syntax is slightly different and the command is:

MEM 60000:50, 20000

This is because the ROM number field was changed to octal.

The output of the MEM command in ASCII shows at the beginning all of the key words in the ROM, and then any text messages that it could output.

Having extracted the contents of the ROM I then bought a Programmable ROM Module and burned the ROM image to EPROM. Once the EPROM was plugged in the module, and the module plugged into my HP-85, the machine behaved exactly as though the original ROM was installed.

This method can also be used to view the contents of the system ROMs. Extracts of these were used to develop the Series 80 emulators.

List of ROMs 

Here is a list of ROMs, together with ROM numbers (in decimal). The ROM number is needed to set-up the switches in the Programmable ROM or PRM-85 module. See below for information on the image files of these ROMs.

HP-85/83/9915 ROMs
Name Part number ROM number Switch setting 
(8 to 1)
Program Development 98151A 8 00001000
Assembler 00085-15007 40 00101000
Forth User Library 168 10101000
Matrix 00085-15004 176 10110000
Input / Output 00085-15003 192 11000000
Extended Mass Storage (85B/9915B only) 00085-15013 207 11001111
Mass Storage (85A only) 00085-15001 208 11010000
Service-85 00085-60952 224 11100000
Advanced Programming 00085-15005 232 11101000
Printer / Plotter 00085-15002 240 11110000

The HP-85B has a built-in Mass Storage ROM (number 208) and EDISK ROM (number 209). This version of the Mass Storage ROM is different to the plug-in version of the ROM above, to allow for hooks into the EDISK ROM, so that the two ROMs act as a pair. These ROMs are also needed by the Extended Mass Storage (EMS) ROM, as this was designed to work on the HP-85B. If you have a HP-85A and a Programmable ROM Module or a PRM-85, then using the HP-85B versions of the Mass Storage and EDISK ROMs allows the EMS ROM to work, and also adds the GET and SAVE commands.

HP-86/87 ROMs
Name Part number ROM number Switch setting 
(8 to 1)
SYSEXT User produced 56 00111000
Assembler 00087-15007 40 00101000
Forth User Library 168 10101000
Input / Output 00087-15003 192 11000000
Extended Mass Storage 00087-15013 207 11001111
EDISK 00087-15012 209 11010001
Service - System 00087-60912 224 11100000
Service- HPIB  00087-60913 225 11100001
Advanced Programming 1 00087-15005 231 11100111
Advanced Programming 2 00087-15005 232 11101000
Plotter 00087-15002 240 11110000

nb HP 86/87 has a built in Mass Storage ROM (number 208) and the built in Basic also uses ROM number 1, which I think is used for graphics routines. The HP 86B also has a language ROM (number 30), to support international keyboard layouts and error messages in other languages.

Back to top.

Download EPROM images

Below is a ZIP file for most ROMs, either for studying their contents or to provide a copy on a 8K byte EPROM (type 2764). Each ZIP file contains 3 files with the following extensions:

  • TXT - contains the captured output from running the MEM command. This contains the octal values from the ROM followed by the ASCII equivalent characters, so that keywords and messages can be seen.
  • BIN - this is a binary file and for a ROM is always 8192 bytes long.
  • HEX - this is the BIN file in Intel hex format, which is supported by a wide range of EPROM programmers and is the easiest form to be transferred over a serial link.

Thanks to vp at www.series80.org for extracting all of his ROMs to binary, and thanks to Glen Bear for the HP-85 EMS image!

Here are zip files for most of the HP-85 ROMs:

HP-85 Assembler: 85ASM.ZIP (35147 bytes)
HP-85B EMS: 85EMS.ZIP (15044 bytes)
HP-85 Service: 85SERVIC.ZIP (34223 bytes)
HP-85 Input / Output (rev B): 85IO.ZIP (34308 bytes)
HP-85A Mass Storage: 85MASS.ZIP (33596 bytes)
HP-85 Printer / Plotter: 85PRINT.ZIP (33627 bytes)
HP-85 Advanced Programming: 85ADPROG.ZIP (34873 bytes)
HP-85 Matrix: 85MATRIX.ZIP (33644 bytes)
HP-85 Program Development: 85PROGDEV.ZIP (34404 bytes)
HP-85B Mass Storage and EDISK: 85B_MS_E.ZIP (25342 bytes)

The System ROM is built in to the machine:
HP-85 System ROM: 85_SYS.ZIP (26551 bytes)

Here are zip files for some key HP-87 ROMs:

HP-87 Assembler: 87ASM.ZIP (34923 bytes)
HP-87 Input / Output: 87IO.ZIP (34963 bytes)
HP-87 EMS ROM: 87EMS.ZIP (25569 bytes)
HP-87 Service ROMs: 87SERVIC.ZIP (23782 bytes)

The Forth ROM came about with the help of Everett Kaser and Don Person. The following ZIP file contains source code as well as image files for the HP-85 and HP-87:

HP-85 / HP-87 Forth ROM: HP_Series_80_Forth.zip (146k bytes)

André Koppel wrote some utilities for the HP-87 called SYSEXT, which he transferred to a ROM. This can be downloaded together with a manual in German from http://www.akso.de/index.php?id=hp_series_80&L=1. Also on André's site are the system ROMs for the HP-86/87 and various manuals.

There are some further ROM downloads available from www.series80.org/Images 

Back to top.

Reading ROMs

This requires the Assembler ROM for your machine, plus the serial module if you wish to transfer the ROM to EPROM. Here are the steps.

1. Determine the ROM number for the ROM to be read. You may have this anyway (as it is used for error messages). For this example assume the ROM number is 40. To check the ROM is readable run the following command on an HP 85 / 9915:

MEM 60000:40,2

or on the HP 87 due to the slightly different syntax (ROM number must be in octal) run:

MEM 60000:50,2

This should display

050 327

This shows this is a HP-85 ROM as the first two bytes of the ROM are the ROM number followed by the complement of the ROM number (in this case 377-50=327 using octal maths). I have noticed for the HP-87 ROMs the second byte is 1 higher, eg for the EMS ROM the first two bytes are 317 061 so the second byte is 400-317=61 in octal. The MEM command then outputs the ASCII equivalents. I have been informed the HP-87 MEM outputs a minimum of 8 bytes.

If the ROM number is incorrect then you need to try other numbers in the MEM command from 1 to 254 until you have found all the ROMs on the system (the Assembler ROM which contains the MEM command is 40 decimal so this will always be found) eg:

10 CRT IS 10
20 FOR I=1 TO 254
30 DISP "I=";I;"decimal";OCT(I);"octal"
40 MEM 60000:I,2
50 NEXT I
60 END

nb on the HP-87 change line 40 to: 

40 MEM 60000:OCT(I),2

Line 10 sends the output to serial, can remove this line if you don't want to capture the results on a PC.

2. Once the ROM number is known connect up a PC to the serial port and capture the output from the HP 85.

3. Type:

CRT IS 10

 - to redirect output to PC.

4. Type:

MEM 60000:207,20000

This dumps 8192 bytes + text to the PC. Then if I haven't listed the EPROM below send me the file on e-mail and I will run a conversion program (fb 1.5) to make it into binary, I can then send you the binary + Intel hex file version to blow onto a 2764 EPROM.

5. To use the EPROM the Programmable ROM module (and similarly the PRM-85 module) has to have switches set to show the ROM number.

I will post the resulting files here on my website, to allow anyone to have a copy.

Please can anyone with any other ROM e-mail me, as I hope to find further ROM based software and include it here.

Back to top.

HP Series 80 Basic Games


This page was last revised on: 13/2/16