Recognize this HP-87 CATalog?
#1

I got a bunch of old software on floppy via an eBay auction. The haul included a disk with a handwritten label of "hp87 bin." The catalog of the disk's image looks like the following. Does anyone recognize it?

hbo@Quirk|1166> lifdir -f hdrive1.dat
Volume : :D601
BUILD E020 512/512
CRUNCH2 E020 8960/8960
EDITR8 E020 23552/23552
ED87TX E010 19200/19200
REDZERg E008 768/768
LINCURg E008 512/512
STRNGBg E008 1024/1024
KEYONBg E008 768/768
GETSAVEg E008 1536/1536
GCURSBg E008 1024/1024
MATHBIg E008 1792/1792
TRACKBg E008 1024/1024
SORTB2g E008 768/768
IPBINg E008 4096/4096
FORMSBg E008 768/768
LIF87 E020 9728/9728
LIFg E008 1024/1024
FORM E008 5888/5888
CFORM E008 6144/6144
EFORM E008 6400/6400
TR87TX E010 19200/19200
TERMIN E020 29440/29440
MUNAVF E020 5120/5120
MUNAVL E020 6912/6912
MAKE_PROG E020 1792/1792
CBIN E008 256/256
COUNT TEXT 512/512

#2

Yes-The programs with the lower case 'g' are binaries for the HP-86,7. The other programs are HP supplied and user supplied. A good find I would say. they need to be copied and freely shared. If you prefer, copy the disc and offer for sale on eBay.
Jim

#3

I bought them with the intention of making them available (for free). It's only one of 30 or so disks! (Only one for the 80 series, as far as I can tell.)

The disk has errors halfway through. I've copied all the good sectors, along with garbage for the bad ones. Hopefully the damage only cut across 3-5 files.

#4

Hi, Howard:

Have a look at this link.

Best regards from V.

#5

You can still use André Koppel 0x38 rom to identify the keywords of the HP86 binaries (if you have an image of the disk and an S80 emulator)

For more informations, I can still disassemble binaries.

Olivier

#6

Looks like you got the HP-86/87 Binary Utilities package
which contains:

        8291002 - Logical Interchange Format (LIFg)
8291011 - String/Retrieving Programs as Data (GETSAVg)
8291013 - Sorting Groups of Elements of a String (SORTB2g)
8291016 - Enhanced String Manipulation (STRNGBg)
8291018 - Mathematical Functions (MATHBIg)
8291020 - Numeric Array Organization/Initialization (REDGZERg)
8291022 - Programmer Control of CRT/Keyboard (IPBINg)
8291024 - Enhanced CRT, Cursor, Keyboard Control (FORMSBg)
8291030 - FORMS/80
8291033 - Graphical Cursor (GCURSg)
8291035 - Enhanced String Input/Cursor Control (LINCURg)
8291036 - Immediate Execute Keys (KEYONg)
8291003 - Graphics Tablet Display (TRACKg)
(the 8291xxx number is the Series 80 Program Library Catalog number).

I have documentation for some of these utilities and summaries for the rest. I will post these as soon as I get home.

**vp

Edited: 19 Oct 2005, 3:05 p.m.

#7

Olivier De Smet wrote:
> You can still use André Koppel 0x38 rom to identify the keywords
> of the HP86 binaries (if you have an image of the
> disk and an S80 emulator)

Oh, please, there is a command catalog at the beginning of each ROM or binary file. It only takes 40-50 lines of C to pretty-print this info.

**vp

#8

Thanks Vassilis!

Like I said, there were 3 tracks in the middle of the disk with errors. I haven't gotten to the point of figuring out which files were affected yet.

I'm about to post the major part of my haul on retrocalculator.com. Stay tuned!

#9

the contents are as follows:

        8291001 - Logical Interchange Format (LIFG)
8291002 - Logical Interchange Format (LIFg)
Provides LIF type 1 interchange to allow file transfer to 9826,
9642, RTE-7. (Contains both binary and BASIC programs).

8291030 - FORMS/80
FORMS/80 is a data entry/display package created to
simplify application programs that require data entry/display,
provide a convenient user interface, and provide independence
of the CRT Form from the Applications program. Consists of 3
binary programs, two for the creation and modification of a form;
the third provides operating system and BASIC language extensions
which allow a BASIC program to utilize the form.

8291035 - Enhanced String Input/Cursor Control (LINCURg)
Binary program designed to enhance string input by allowing
you to input any character (including the comma and
quotation marks) as a string variable and to move the
cursor to any location (of the alpha display) on the CRT.

8291036 - Immediate Execute Keys (KEYONg)
Binary program designed to define any key on the
keyboard as an immediate-execute key (similar in
operation to the special function keys).

8291002 - Graphics Tablet Display (TRACK)
8291003 - Graphics Tablet Display (TRACKg)
binary program designed for use with the 9111A Graphics
Tablet. TRACKg uses the CRT as a visual display of the
movements of the pen on the tablet. The program can be
very useful in generating graphics when used in
conjunction with the BREAD function in the Plotter ROM.

8291010 - String/Retrieving Programs as Data (GETSAV)
8291011 - String/Retrieving Programs as Data (GETSAVg)
Normally, Series 80 computers store programs in their own
unique internal language. GETSAVg is a binary program
designed to enable you to store and retrieve programs as
data. When a program is saved as a data file, it can be
read, modified or rewritten as string data by other
programs.

8291012 - Sorting Groups of Elements of a String (SORTB2)
8291013 - Sorting Groups of Elements of a String (SORTB2g)
SORT2B is a binary program designed to sort groups of
elements of a string. Two sort procedures are available.
Both produce the same result, however, one of the procedures
requires no additional memory to operate.

8291015 - Enhanced String Manipulation (STRNGB)
8291016 - Enhanced String Manipulation (STRNGBg)
STRNGBg is a binary program which contains eight
programmable string functions designed to enhance string
manipulation. The functions are as follows: 1) highlight,
2) lowercase, 3) repeat, 4) reverse, 5) trim, 6) rotate,
7) search and replace, and 8) number of manipulation.

8291018 - Mathematical Functions (MATHBIg)
MATHBIg is a binary program containing nine programmable
mathematical functions including hyperbolics, octal to
decimal and decimal to octal conversions and factorial.

8291020 - Numeric Array Organization/Initialization (REDGZERg)
REDZERg is a binary program designed to enhance numeric
array manipulation capabilities of the HP86/87. A numeric
array can be reorganized (redimentioned) or initialized to
zero with use of one of the two statements offered.

8291021 - Programmer Control of CRT/Keyboard (IPBIN)
8291022 - Programmer Control of CRT/Keyboard (IPBINg)
IPBINg is a binary program designed to provide programmer
control of the internal CRT and keyboard. Capabilities are
intended to make development of a good terminal emulator
possible. Capabilities provided are also intended to be of
general use in CRT control or special keyboard entry or
control.

8291023 - Enhanced CRT, Cursor, Keyboard Control (FORMSB)
8291024 - Enhanced CRT, Cursor, Keyboard Control (FORMSBg)
FORMSg is an binary program designed to enhance control of
the CRT, cursor, and keyboard. The functions or expressions
offered are: page, cursor, xpos, ypos, home, readchar,
writechar, key1, key2, key3, setkey, and end key.

8291032 - Graphical Cursor (GCURS)
8291033 - Graphical Cursor (GCURSg)
This is a binary program designed to provide graphics cursor
capabilities. You should be familiar with the Graphics
Section of the HP-86/87 Owner's Manual and Programming
Guide.

#10

If I am successfull in digging in the attic, I think I can provide the assembler source code along with the copied book I got at the time.

Patrice

#11

Howard Owen wrote:
> The disk has errors halfway through. I've copied all the good
> sectors, along with garbage for the bad ones. Hopefully
> the damage only cut across 3-5 files.

In your site you mention that the problem was in sectors 32 - 35. Assuming 16 sectors per track (as used by the 9121 drive), that means that sectors 512 till 560 of the medium will have problems.

Now looking at the CAT listing of the diskette:

   NAME     START NBLOCK   TYPE    LENGTH  RECLEN    IMP BYTES
BUILD 16 2 BASIC 276 256 1401 0001
CRUNCH2 18 35 BASIC 8924 256 dc22 0001
EDITR8 53 92 BASIC 23535 256 ef5b 0001
ED87TX 145 75 DATA 19200 19162 b606 da4a
REDZERg 220 3 BPGM 540 256 1c02 0001
LINCURg 223 2 BPGM 334 256 4e01 0001
STRNGBg 225 4 BPGM 894 256 7e03 0001
KEYONBg 229 3 BPGM 630 256 7602 0001
GETSAVEg 232 6 BPGM 1480 256 c805 0001
GCURSBg 238 4 BPGM 829 256 3d03 0001
MATHBIg 242 7 BPGM 1569 256 2106 0001
TRACKBg 249 4 BPGM 1004 256 ec03 0001
SORTB2g 253 3 BPGM 618 256 6a02 0001
IPBINg 256 16 BPGM 3930 256 5a0f 0001
FORMSBg 272 3 BPGM 737 256 e102 0001
LIF87 275 38 BASIC 9622 256 9625 0001
LIFg 313 4 BPGM 896 256 8003 0001
FORM 317 23 BPGM 5633 256 0116 0001
CFORM 340 24 BPGM 5997 256 6d17 0001
EFORM 364 25 BPGM 6314 256 aa18 0001
TR87TX 389 75 DATA 19200 19162 004f da4a
TERMIN 464 115 BASIC 29322 256 8a72 0001
MUNAVF 579 20 BASIC 5120 256 0014 0001
MUNAVL 599 27 BASIC 6845 256 bd1a 0001
MAKE PROG 626 7 BASIC 1672 256 8806 0001
CBIN 633 1 BPGM 61 256 3d00 0001
COUNT 634 2 TEXT 512 256 d901 0001

We see that file TERMIN contains the bad blocks (it starts on sector 464 and occupies the next 115 sectors). You will find that this file has problems.

It may be, however, that the drive has "spared" tracks, i.e. spare tracks that have been used instead of the damaged tracks. In this case the file may be recoverable if you copy the original floppy to a known good floppy on the 9121.

Best Regards

**vp


Edited: 20 Oct 2005, 11:39 p.m.

#12

Thanks for that advice, Vassilis. I'll certainly give it a try.

#13

The file COUNT is assembler source:

10 !         NAM COUNT
20 DEF RUNTIM
30 DEF ASCIIS
40 DEF PARSE
50 DEF ERMSG
60 DEF INIT
70 PARSE BYT 0,0
80 RUNTIM BYT 0,0
90 DEF COUNT.
100 BYT 377,377
110 ASCIIS BSZ 0
120 ASP "COUNT"
130 BYT 377
140 ERMSG BSZ 0
150 BYT 377
160 INIT BSZ 0
170 RTN
180 BYT 0,56
200 COUNT. BIN
220 LDM R40,=0,0,0,0,0,0,0,0
221 LDM R50,=0,0,0,0,1D,0,0,0
230 LIN1 ADM R40,R50
244 CMM R40,=0,0,0,0,0,0,0,1D
245 JNC LIN1
250 PUMD R40,+R12
260 RTN
265 !ASSEMBLE "CBIN"
266 ONER DAD 56215
270 FIN

I suspect that the BPGM file CBIN is executable version of the above program. This is the hex dump of CBIN:

 000000000000    434f554e  54200200    00000000  00000000    *COUNT ..........*
000000000010 00000000 00000000 00002600 2c002400 *..........&.,.$.*
000000000020 32003300 00000000 3600ffff 434f554e *2.3.....6...COUN*
000000000030 d4ffff9e 002e9860 a8010ae4 9e...... *.......`........*

Anybody knows what this thing is supposed to be doing?

**vp

#14

Hello all,

This BPGM : CBIN is not the binary belonging to that assembler source code.

Your assembler source code for COUNT seems to be a WAIT function of some sort.

Patrice

#15

The bad tracks weren't "spared" unfortunately.

#16

Howard Owen wrote:
> The bad tracks weren't "spared" unfortunately.

No big loss, its just a terminal emulation program. I am really happy that the binary utilities apparently escaped unharmed.

**vp

#17

Hi, Vassilis:

It's been ages since I last programmed in Series 80 Assembler, but seems to me this assembler source is nothing but a very basic training example.

As far as I can tell, this source simply defines a single keyword, a function named COUNT which takes no parameters and does nothing except increment a counter and test whether it's reached a final value, which is returned. An attempt to comment your source follows:

      10 !        NAM COUNT       
20 DEF RUNTIM define for the runtime table
30 DEF ASCIIS define for the ASCII name table
40 DEF PARSE define for the parse table
50 DEF ERMSG define for the error messages table
60 DEF INIT define for initialization
70 PARSE BYT 0,0 no parse table
80 RUNTIM BYT 0,0 run time table
90 DEF COUNT. a single keyword, COUNT
100 BYT 377,377
110 ASCIIS BSZ 0
120 ASP "COUNT" function's ASCII name
130 BYT 377
140 ERMSG BSZ 0 no error message table
150 BYT 377
160 INIT BSZ 0 no special initialization
170 RTN
180 BYT 0,56 a function, no parameters, returns numeric value
200 COUNT. BIN set binary mode for math
220 LDM R40,=0,0,0,0,0,0,0,0 load 0 into R40-47
221 LDM R50,=0,0,0,0,1D,0,0,0 load increment in R50-57
230 LIN1 ADM R40,R50 loop: add increment in R50-57 to R40-47
244 CMM R40,=0,0,0,0,0,0,0,1D compare multiple: see if R40-47 exceed fixed final value
245 JNC LIN1 logical test: if no carry, then loop back to label LIN1
250 PUMD R40,+R12 multi-byte push, returns final value in R40-47
260 RTN end execution
265 !ASSEMBLE "CBIN"
266 ONER DAD 56215
270 FIN
All of this is purely from memory from several decades ago, so there may be errors in the comments above.

Best regards from V.



Possibly Related Threads…
Thread Author Replies Views Last Post
  9815 data cartridge drive (also 9825 / 9845 / 85 / 87, and who knows what else) John Ioannidis 2 1,265 06-12-2013, 07:20 PM
Last Post: Craig Ruff
  HP 86/87 - CP/M Ph.Théry 3 1,367 05-27-2013, 04:02 AM
Last Post: Olivier De Smet
  HP-41 CATALOG Siegfried (Austria) 3 1,443 05-22-2013, 02:20 PM
Last Post: Ángel Martin
  [hp41] reading the catalog under program control Wolfgang 3 1,475 02-25-2013, 01:32 PM
Last Post: Dan Grelinger
  HP-87 power supply repair philippe_elie 0 902 11-18-2012, 11:12 AM
Last Post: philippe_elie
  Looking for HP-87 service manual philippe_elie 2 1,246 11-08-2012, 02:07 AM
Last Post: philippe_elie
  Lovely old catalog picture (Commodore) Gene Wright 4 1,776 06-07-2012, 11:31 PM
Last Post: Bruce Bergman
  [WP34s] expert's catalog? fhub 28 6,761 05-13-2012, 02:15 PM
Last Post: Marcus von Cube, Germany
  HP-75 CATALOG 2.8 robertoataulfo 0 760 12-30-2011, 04:24 PM
Last Post: robertoataulfo
  HP-75 CATALOG 2.7 robertoataulfo 0 711 12-26-2011, 07:03 PM
Last Post: robertoataulfo

Forum Jump: