A cool vintage hardware hack.

From: Bob Shannon <bshannon_at_tiac.net>
Date: Sun Jan 26 08:16:00 2003

I've just gotten a fun little hardware project working.

And I do beleive that I've got the first HP1000 minicomputer with an 8
gigabyte hard drive too.

Often collectors find an interesting CPU, but lack the peripherals
and/or software needed to complete a full
system. Old hard drives (like the HP7920) are large, take too much
power, and eat parts (like air filters that
are no longer made) and maintainance.

On the other hand, modern 'components' like ATA (thats IDE) disk drives
are cheap and quite reliable. So just
how hard would it be to hang a modern ATA disk drive off of a classic
mini, or micro for that matter?

Here's the approach I took:

I've just a small 8052 microcontroller board from pjrc.com before, and
had one in my parts box. One of the sample
programs available from that site shows how to interface a modern ATA
drive to the 8255 PIO chip complete with source code. So I used that
little board, and added a second 8255 PIO chip. This second 8255 talks
to a small handfull of TTL parts, and they in turn talk to a series of
level shifter circuits that interface to an HP +16-bit duplex register
interface board through a custom cable. With this hardware the HP can
read and write 16-bit parallel data to and from the 8052 board.

To make things pretty, I drilled out a 8-inch blank pannel with about
$50 worth of panel mount LED holders so all the data lines to and from
the HP, as well as several status outputs from the 8052 are displayed in
true blinkin' lights style.

For firmware I started with the ATA (IDE) demo program from pjrc.com,
and put a 'wrapper' around that existing code.
Now at power-up the 8051 initializes the ATA drive and reads its
parameter block into memory. Then the 8052 checks the state of a toggle
switch on the disk controllers front pannel. If its in diagnostic mode
the stock ATA demo code runs with several new menu options that allow me
to debug the 8052 to HP interface protocols. If the toggle switch is in
the normal mode the 8052 jumps into a new section of the code that
processes commands sent over the HP parallel interface.

A very simple disk controller instruction set was developed and
implemented in 8052 assembler. For software support on the HP side, I'm
not running any existing HP operating system. I am running a custom
threaded interpreter on the HP though, so all the disk driver and file
system code has to be written from the ground up. This is still a work
in progress, but the threaded interpreter currently allows me to add new
keywords in either assembly language or high level code so writing the
low-level driver keywords was a snap.

Yesterday afternoon I successfully read and write data from the HP2113
to and from a 8 gigabyte hard drive rescued from a defunct and
undeserving Mac G3. I kinda get a kick out of the Apple logo on the
drive thats now bolted to the rack mount pannel deep inside my HP rack.

The hardware effort for this IDE drive hack was moderate, the biggest
effort was in wiring up the cable harnesses between the 8052 level
shifter logic and the pannel mount leds. If I were going to do this
project again, I'd forgo the rows of leds and cut the build time by half
or more. The next biggest time sink was in building a custom HP
interface cable with all the correct (vintage) connectors. There are 34
signal lines each with a ground inside those rather small round cables.
 Terminating these to the HP 48-pin connector was not too bad, but the
other end used a 50-pin centronics style connector, and wiring that was
just a little tight.

If your at all interested in hanging an ATA drive off of some vintage
machine, I highly reccomend you check out the documentation on the
pjrc.com web site. There is a newer version of the 8052 board that
already has the second 8255 chip installed so that one can be used for
the ATA disk interface and the other used to drive whatever logic and
level shifters you need to talk to your vintage system.

As an alternative, the 8052 circuits could be hand-wired (say, on an
s-100 protoboard) and the whole disk controller along with a laptop
sized hard drive could be easily built onto the board. Anyone up for a
S-100 'hardcard'?

Now then, the down-side:

The 8052 board I used is only running at 11.059 Mhz, and the 8-bit 8052
has to put the 8255 through several operations to transfer 16-bit data
to and from the ATA drive using programmed I/O. So the overall
performance is not breathtaking. The newer version of the 8052 board
from pjrc.com runs at twice the speed, and the 8052 can then reach
tranfer rates (from drive to 8052 memory only) of about 16K bytes per

So if high performance disk emulation is your bag, your going to need a
faster controller, or add a little hardware so the 8052 drives a full
16-bit hardware interface between the ATA drive and your vintage system
of choice (assuming your vintage system has 16-bits that is). My
current low-level driver keywords are written in threaded code, so they
are not going to be nearly as fast as keywords written in assembler, but
I'm not really aiming for speed just yet.

Depending on your system of interest, it may be possible to write the
8052 code so that it performs a binary-level emulation of some original
equipment disk subsystem. This might allow you to bypass the driver
development efforts
at the cost of more 8052 programming / debugging time to get the
emulation 'right'. But becuase I'm using a home rolled operating system
(HP-IPL/OS of course), this was not a factor for me. I'm not trying to
emulate anything like an original disk controller or drive.

I'd guess my program development and debugging time at well under 20

So in a few evenings of spare time, and for a fairly small sum of money,
you can have a huge, very reliable hard disk system hanging off of your
chosen vintage machine.

Ok, now I'm off to write a boot-loader for this crazy thing, and attempt
my first ATA cold boot of HP-IPL/OS!
Received on Sun Jan 26 2003 - 08:16:00 GMT

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:36:03 BST