HP-85 HP-IB & Drive Emulator

Having a computer that can write and read tapes is great but, that left the problem of getting software on to the tapes.

The HP-85 doesn’t have a lot of I/O built-in but, it does have 4 expansion slots that can accommodate various adapters such as HP-IB (GP-IB), serial port, and a ROM tray for expansion ROMs.  

The most popular technique for file transfer is to connect a disk drive to the HP-IB adapter.  I also considered using the serial port but, I wasn’t sure that it would work.

So I needed HP-IB adapter.  And, of course, to get a HP-IB adapter to work with a disk drive requires some expansion ROMs.  Actually, if it had been an HP 85B instead of an HP 85, they would have been built in.  It wasn’t though.

That meant I needed an HP-IB adapter, a ROM tray, and the various ROMs.  None of this stuff is easy to come by. I did find a few vendors in the US with most of the items – unfortunately at high cost, high postage, and low interest in going to any trouble. This led me to the PRM-85. See my separate post on this.

I found a GPIB card in Australia on ebay, so I grabbed it. 

There are not many computers that use HP-IB for their disk interface (the Commodore PET is one) so only an HP drive unit will do, and they are even rarer than DC100 tapes. 

The HP computer community is awesome, though.  Recognising that HP drives were becoming very rare, a chap from the HP 9845 project set about creating an emulator called HPDrive.

It runs on a PC with a GP-IB adapter installed, and it is particularly good. I followed the instructions at:

http://www.hp9845.net/9845/projects/hpdrive/

GP-IB cards are generally expensive but, fittingly for such a project, I found a reasonably priced National Instruments ISA card that seemed suitable (suitability is described in detail at the project site). 

Then of course I needed a computer with an ISA slot.  I had an old Windows 2000 machine stored in pieces that had a slot (I had some other older options as well) so I set that up with the downloaded disk images. I’m never short of a project.

And it just worked. To get the disk catalogue type:

CAT “:D700”

My notes were a bit sketchy about how i set this up so i recently fired it up again to gets some details. Unfortunately, part way through that exercise the PC motherboard developed a fault and i have not been able to resolve it. That means i will go through the exercise again sometime in the next couple of months!

HP-85 7470A Plotter

An HP 7470A plotter appeared on gumtree. It’s a serial version rather than the HP-IB version, but i thought i might be able to make it work. The bloke who sold it to me, Bob, was an absolute gentleman – even offering to turn up pen holders on his lathe!

It’s quite a simple little plotter that uses only two pens.

The plotter itself needed a drop of oil on the rail, but otherwise worked fine.

The manual lists the HP-IB version as the one to use with the HP-85, so I had a bit of reading to do to work out if it could work over the serial line. In principle, it could be done by directing the plotter output to the serial line:

PLOTTER IS 10

Many people have reported that this causes the HP-85 to just hang.  There was some suggestion that this was due to the serial version of the plotter sending just a CR rather than a CR/LF at the end of its transmission. (10 is actually set on the serial card.)

https://forum.vcfed.org/index.php?threads/serial-plotting-on-the-hp85.41043

The last post which came very late is key.

The plotter can be programmed to send a CR/LF.  I did the required reading and found that this worked:

PRINTER IS 10
PRINT CHR$(27);”.M;;;13;10:”
PLOTTER is 10

No hang!  I tried some test code and found that I could send HPGL and use the HP 85 plotter commands.  I didn’t have any success with the Graphics Presentation software on disk.  I suspect that it resets the interface.  There may be a workaround for that, but I’m not overly concerned.  I don’t mind writing a bit of BASIC to make the plotter do its thing.

I used 2400 baud, 8 bits, 1 stop bit, no parity as per the serial card.  This is done through DIP switches next to the serial connector.  The serial card and the plotter both had female connectors but the transmit/receive was reversed so I just used a M-M gender changer between them.

The plotter commands are the same as for the screen.  Using PLOTTER IS 10 points them to the plotter instead.

The HPGL codes are in the plotter interfacing manual. 

Comms are more reliable with flow control.  I’ve used xon/xoff a lot in the past – this sets up the machine and the plotter to use xon/xoff.

Xon/xoff at plotter – 7470A Interfacing and programming manual

PRINTER IS 10
PRINT CHR$(27);”.M;;;13;10:”
PRINT CHR$(27);”.I;;17:”
PRINT CHR$(27);”.N;19:”
PLOTTER is 10

Xon/Xoff at computer – 82939A Serial Port Manual

I changed the DIP switch settings on the serial card to suit the datacomms pac, so the settings for the plotter need to be programmed.

CONTROL 10,3 ; 11 ! 2400 baud
CONTROL 10,4;7 ! No parity, 2 stop bits, 8 data bits

The I/O ROM provides a command, TRANSLATE, which converts a program to play nicely with it.  Load the program (eg CALEND in the standard pac, and type TRANSLATE.  It can then be STORED as an external plotter variant. 

For the serial plotter, load and run the instructions above and then load and run the external plot variant.

HP-85 Serial Card

I feel like a computer is incomplete without a serial line, so i procured a HP82939A Serial Interface. It requires the I/O ROM for operation.

The serial properties are set by DIP switches inside the package, so it’s a screwdriver job.  I used 2400 baud, 8 bits, 1 stop bit, no parity. 

Then I set this back to defaults to appease the terminal program which insisted on factory defaults: 7 data bits, 1 stop, 300baud. 

I left the plotter at the original settings, so the initialisation program needs to program the serial port via CONTROL statements. (See I/O ROM Manual)

The device number is 10 which is the default.

It worked fine with the plotter.

The Data Communications Pac includes a terminal program, TERMEM.  The comms parameters can be changed via the soft keys.

Tandy TRS-80 Model I

Generously given to me by Michael from the ARC Group.

The Model I was originally released in 1977, but this one was made in about 1980. It has 16k of memory and has been highly modified.

It also came with an expansion unit with RS232 interface and 32k of additional memory.  There was no disk drive, but that was only a minor obstacle.

It also came with an original monitor (probably not the ideal one to use with the expansion box), buffered cable to connect the computer to the expansion unit, a box which turned out to be a high resolution graphics mod, a joystick, and dust covers.

Model I Inspection and Power On

Inspection didn’t show any particular problems.  The power supplies are quite simple and don’t seem to have any of the usual EMI filtering.

Everything fired up without smoke.  The rails looked clean, and I adjusted the supplies on both the computer and the expansion unit.

There are a lot of modifications including:

  1. High resolution graphics
  2. Lower case mod
  3. High speed mod
  4. Joystick
  5. Termination of control signals on the expansion unit
  6. Cassette modification
  7. Reset switch

This machine was obviously owned by an enthusiast.

I only briefly got clear text on the monitor, and then it would not sync.  This was traced to Z5 in the sync generator, which is a common failure point.  This is a CMOS part and I replaced it with an 74HC02.

Some keys were generating strange character sequences.  This was caused by a broken wire ground on the keyboard cable which was somewhat fragile. 

The machine uses an ALPS keyboard and the key switches seem to be working well.

I replaced the keyboard cable using the instructions here:

I found the keyboard ic positions too close to the connector so I had to bend the pins up at 45°.  I also added some earth lines to try to provide some shielding. The keyboard is mounted using some rubber mounts which had deteriorated.  I replaced them with rubber tubing.

The amount of RAM reported by the ROM basic (PRINT MEM) was variable.  I had four spare 16k RAM chips, so I kept on swapping the mainboard RAM chips until I got the full 15572.  Then I repeated the exercise on the expansion interface.  I found 5 dubious RAM chips which were replaced.

Expansion Interface 48k topFFFF-1
Expansion Interface 48k bottomC000-16384
Expansion Interface 32k topBFFF-16385
Expansion Interface 32k bottom8000-32768
16k top7FFF32767
16k bottom400016384
 3FFF16383
 00000

The screen showed artefacts on the two bottom lines and occasionally on the two lines above.  These changed as new text was displayed over them but the text was incorrect.  Looking at the text it was apparent that the LSB was always set.

This becomes very annoying because the bottom lines are copied up as the text scrolls.  Eventually the whole screen is filled with corrupt text.  For now, I can keep clearing the screen, but it needs to be fixed.  This was due to a faulty video RAM chip 2102 at Z48.  It was replaced.

With this last fix the machine appeared to be working.

Model I High Resolution Graphics

The machine came with a high-resolution add-on / modification by Microware Computing Services.  It seems to be an unusual thing and is probably of limited use but is interesting nevertheless.

The Model I in its base form allocates 6 bits for each character on its 64 x 16 character display.  Each character consists of 6 x 12 pixels.  In text mode each character is translated from its 6 bit representation to a 6×12 pixel “picture” by a PROM.  The PROM (according to legend) supports 128 characters including lower case letters.  A common mod adds one more video ram chip to allow access to the other 64 characters.

The video RAM is 8 bits wide (with no bit 6) with bit 7 indicating that the character is graphic character.  Each of the 6 bits can be used to turn on or off one of 6 graphic cells each of which is 2×3 pixels ie half the width and one third the height of a character.  This gives “low resolution graphics”. 

The high resolution mod drops into the socket for original PROM.  It includes an EPROM that fulfils the role of the PROM when the high resolution mode is off.  When the high resolution mode is on the mod takes over.

Physically, the mod consists of a box which hangs off the expansion port, a small daughterboard that sits in the main unit.  The daughterboard plugs into the original ROM socket.

The mod includes 2k of RAM which is used to store 16 bytes for each of 128 graphics characters.  Only 6 bits are used (characters are 6 pixels wide) and only 12 bytes are used (characters are 12 pixels high). Note – this is not video RAM – its is more like the original PROM but writeable.

The RAM is accessed via the expansion bus. It is mapped over the system ROM so it is write-only memory which makes it a little hard to test. 

The RAM is dual ported and a register in I/O space (accessed via the expansion interface) is used to control whether data is read by the graphics generator or written to as memory.

The bottom 3 bits of the I/O address are don’t cares. 

OUT 130, 1 -> Character data read by graphics generator

OUT 140, 1 -> Character data writeable starting at #0000

A second register in I/O space is used to select between the standard text/graphics or the high resolution graphics.

OUT 150, 1 -> Use the default text/graphics (holds the high res graphics shift register in reset)

OUT 155,1 -> Use high resolution graphics (holds the text and standard graphics registers in reset)

There are demonstration disks show how the graphics work. 

  1. Boot up on the demo disk
  2. Load basic.  Hit return at “number of files” and 60000 at “memory”.
  3. LOAD “START/BAS”
  4. Select 2 to get the engine demo
  5. Select 1 to get the chess demo

Model I High Speed Mod

The machine included a modification that allowed either the original clock (1.7MHz) or a slightly faster clock (2.6MHz) to be routed to the processor.  The high speed was enabled at power-up, although that seemed to be a matter of luck as there was no reset on the register.  I’ve added a system reset so that it defaults to the normal speed.  I suspect that this might be more reliable.

The mod includes a register in I/O space to enable / disable the high speed clock.

OUT 254, 1 --> Changes to the high speed clock

OUT 254, 0 --> Changes to the normal clock

The mod includes a LED to indicate whether “turbo” mode is activated.  I’ve added a series connector so that the lid can be separated.

Model I Joystick Mod

The joystick mod was incomplete – there are some cut wires and an unused DPDT switch nearby that is unused.  It’s possible that the mod was completed or stopped working and was disabled.

Commonly, a joystick was added by using the switches to tug down on D[4:0] using the joystick switches.   Apparently, sometimes this wasn’t even gated with an address, but it looks like this mod had some address decoding.

Reverse engineering it shows three signals ANDed together.  One of these would have been IN_L and the other two would have been address lines (both 0).  This doesn’t fully decode the I/O space but does restrict it to a quarter of the space.  This at least gets it away from the cassette interface and the high-res graphics at 255 and 254.

I found an instruction sheet for the “Alpha” joystick.  It has the same data line assignments as the mod:

D0 UP

D1 DOWN

D2 LEFT

D3 RIGHT

D4 FIRE

The instructions indicate the address is 0 which is again consistent.

It notes that some games expect FIRE to be indicated by D0 and D1 being low simultaneously (STICK-80 vs TRISSTICK).  I expect that the toggle switch was used to configure the interface accordingly.

I wired it all up. Being something of a tangled mess of flying leads makes it very easy to break wires, so I’ve added an inline connector.

I used the alpha test program:

Alas – no joy.  The scope showed that there was no IN strobe and this was because of a dwarf pulse at Z23-8 (74LS32).  I replaced the IC and it came good.

Scarfman played ok!

Model I Smaller Mods

Lower Case Modification

I have not tested this yet.  An additional character RAM has been added at Z46.  The machine seems really designed to have this IC because the modification seems quite simple. This is covered by Technical bulletin I:35.

The lower case version of scripsit “SCRIPSIT/LC” demonstrates it.

Signal Terminations

As per Technical Bulletin I:12 (source unknown):

Cassette Modification

XRX-111 modification as per Technical Bulletin I:15 (source unknown):

Reset Switch

The reset switch just parallels the existing reset switch.  I added a series connector so that the lid could be separated.

Top cover connections

The mods add an LED (turbo), reset button, and joystick mod.  This makes it impossible to remove the cover from the main board.  I’ve added in-line connectors so it can be detached.

Model I Floppy Disk Drive

The system did not come with a floppy disk drive.  I did my set-to work using a Dick Smith drive from my System 80 and my generic drive unit.

Ben G from the Australian Vintage Computer Collectors had a genuine one, though, which he passed on at very reasonable cost (not the first time he’s helped me out).

I made up a new cable, as I’d been using the System 80 cable.  The Tandy cables used connector pin removal to set the drive numbers – all the selects are connected inside the drives.  I really need to pull some pins from the connector but for the short term I taped over DS1 (p12), DS2 (P14), and DS3 (p32) leaving just DS0 (p10) on the drive connector for the Tandy floppy drive. 

As is often the case with 40-year-old drives, it did not immediately work.  I did the usual clean up, lubrication, and alignment (using Imagedisk) but it had a peculiar issue of losing half the head steps.  This turned out to be a timing problem with two monostables that control the stepper motor.  One had an adjustment pot, but I had to change the resistor on the other one. 

Apparently i couldn’t find a schematic.

Once the timing issue was resolved, the drive could be aligned. Adjustment is by loosening the motor screws and rotating the motor body, but it didn’t have enough play, so i had to move the shaft coupling a little as well.

I found the cable unreliable and after several frustrating hours of checking and rechecking I found that the floppy drive connector on the expansion box had been ever so slightly modified.  One side had been filed down – presumably to accommodate a tight floppy cable connector. 

The connectors I used on my new cable were just a little wider, so it was possible to be out by half to one pin, resulting in shorts/opens. I need to build up the connector again, but it works fine as long as you know and position correctly!