HP-21MX bootstrapping?

Steve Robertson steerex at ccvn.com
Tue Feb 19 12:42:58 CST 2008


Steve Robertson
steerex [at] ccvn [dot] com
----- Original Message -----
From: "Tim Riker" <Tim at Rikers.org>
To: "General Discussion: On-Topic and Off-Topic Posts"
<cctalk at classiccmp.org>
Sent: Tuesday, February 19, 2008 3:49 AM
Subject: Re: HP-21MX bootstrapping?


> Main Account wrote:
> > I have a BOOT ROM that will work with a High Speed serial card. I'm not
sure
> > the ROM was specifically written for that card but, it does work. I just
> > make a serial link to a PC and send the ABS image over the link.
> >
> > Hmmmm... I think the ROM I use is the 12992C mini-cartridge tape loader.
> >
> > The boot rom expects the image to be in HEX-ASCII format so, you'll have
to
> > convert the ABS from binary to ASCII before sending it over the link. I
> > wrote a small Perl script to handle this. It works great!
> >
> > I believe my HS card is configured for 1200 baud. At that speed it takes
a
> > few seconds to upload a large image but, it's not that bad. IIRC < 1
minute
> > to upload HP BASIC.
>
> I'm interested to hear what rom this is. Can you give me an example of
> what is expected in HEX-ASCII? HEX? not octal? :) Can I get a copy of
> the Perl script?
>

It's been a few years since I messed with this so, I hope I don't make any
errors here :-)

The problem is:

The machine is a 16-bit system. The compiled program listing is in OCT
(3-bit) format. The PC stores the binary ABS file as a byte (8-bits). The
serial loader expects a nibble (4-bits). Whew...

So, when you compile a prgram on the PC, the listing is generated as an
octal listing. IE:

...
102023    Blah
117703    Blah
...

Converted to hex:
102023 = 0x8413
117703=0x13C3

So the data in the PC would be stored in consecutive memory locations like
this: 84 13 13 C3

NOTE: The loader will only accept the ASCII characters "0-9" and "A-F" over
the serial interface.

To send the data over the serial link, you have to send each nibble as an
ascci character::
"8","4","1","3","1","3","C","3"

When the serial loader gets the data, it converts the ASCII values to back
to HEX, then rotates the nibble left to create a 16-bit word out 4 nibbles
(4-bits each).

NOTE: The ABS file format also has "address" and "structure" information
embedded in the file. So you can't just send that simple string. You would
have to include the preamble (address / byte count) and a checksum with the
data string.

Sorry, I can't find the perl script right now. I moved a couple of years ago
and can't find anything :-) . If you are keen on persuing this, let me know
and I'll try to hack something together for you.

The ROM's I have are the 12992C mini cartridge tape loader type. My
system(s) originally had a serial terminal attached. The terminal had a
minicartridge drive in it for mass storage. The operator would initiate the
ISL on the 1000, then send the data from the terminal to the 1000 thus
booting it. In my solution, the PC just emulates the terminal.

I may have a spare ROM if you beg a little :-)

BTW: Has anyone found a way to a copy the ROMs? I have tried numerous
equilivent devices but, haven't had any success replicating them.

See ya,
SteveRob
steerex [at] ccvn [dot] com





More information about the cctech mailing list