H-89 file transfersr


This Web page last updated Oct 12 2016. copyright Herb Johnson (C) 2016. . In Summer 2016, I'm repairing some Heath Zenith H89 computers. One H89 was rebuilt and is in use as my development system. Now I have to move some files to the hard-sectored H89 diskettes - that has to be done by a serial transfer from another computer. But I didn't have H89 serial transfer programs around, either for H89 CP/M or for HDOS. So these are notes about how I'm going about this. Thanks to Lee Hart, for his work, disks, notes and commentary, which I've added to this or other H89 Web pages. Lee suggested using PIP for simple file transfers. Also Dwight Elvey's instructions for H89LDR suggested methods which led me to the process I describe in this Web page. Thanks to both Dwight and Lee. - Herb Johnson


Why serial file & disk-image transfers?

H89's have a boot-strap problem when using their original hard-sectored diskette controllers. Namely, they are unique to H89's and H8's. So if you don't have an inventory of H89 hard-sectored disks with programs, how do you get those programs for use? The 21st century online archives for H89 (and H8) programs, are kept online as "H8D" disk images - not as collections of sets of individual files. These images are either imaged HDOS disks, or imaged CP/M disks. And, over time, various "utility" programs evolved to manage those images.

The original programs used to image these disks, on the native H8 or H89 systems, sent the image to a serial-linked MS-DOS computer which created the H8D-format file. The format is "essentially" the sequence of sectors, track by track. I don't pretend to know the details of the format. The corresponding recieve and image-to-disk programs were written by Dwight Elvey, decades ago. They are an ASM program which resides on the H8 or H89, and a compiled FORTH program which runs under MS-DOS. The MS-DOS program as "server" sends the image file, and the "client" ASM program on the H89 recieves and recreates the disk previously imaged. There's even a procedure, to octal-enter a "stub" program on the H89, which can barely recieve the HDOS binary program which, when saved and run, acts as the "receiver" or client. So even without HDOS, you can create an HDOS disk!

Others have written more elaborate programs to manage these H8D images. The utilities section of the SEBHC H8D archive offers several. Super Duper Disk Duplicator apparently offers both transfer and disk duplication under HDOS. There's a Windows "server" to manage H8D images, which also emulates the H89 on the Windows system. (Source is included but it's written under some development enviroment of long ago.). There's a Linux server, which I believe is written in Python (available in most Linuxes). Recently I stumbled onto Dan Emrick's H89 project pages which have some hard-sectored disk imaging and H89 emulation software (C++ and Qt4) he's written in 2009.

And there's likely others. It's a dizzying array of resources - each with their own elaborate sets of features, supported under one or another server operating systems, written in various programming languages. And they have adjunct H89 utilities which run under HDOS or CP/M. Since I'm new to these, since I find them all confusing, and most of them require some amount of prior set-up to make them work - I refuse to comment on their merits or liabilities beyond this paragraph.

I chose to look at the simplest and more general resources, to transfer files and disks, for which one can look at sources which can be modified today with simple 8-bit or 16-bit tools. The first choice, is simple file transfer.

A simple way to move a file to the H89 under CP/M

CP/M supports the 3-port serial serial on the H89, as various "devices" which are standard to CP/M, and then supported by BIOSes such as the H89's BIOS.SYS. The H89 serial I/O port at 330Q is supported for reading as "RDR:" and for writing as "PUN:". The default baud rate is 300 baud, 8 bit. The 330Q port corresponds to the "DTE" connector on the 3-port serial card, which is connected to P605 on that card. CP/M supports those devices through PIP, the CP/M file transfer program.

So, under PIP, a transfer such as "filename.ext=RDR:" will simply open a file of that name and fill it with whatever comes down the DTE serial port; until a CTRL-Z end-of-file character is recieved. Don't send a big file, because when you run out of PIP memory, it will write to the disk and stop recieving!

The simple method, is to send a SMALL file, in ASCII - namely an Intel Hex record file, as an assembled program. The HEX records already have checksums and memory locations. And CP/M knows what to do with assembled hex files - the LOAD command will convert a .HEX file to a .COM file. Or, you could load the .HEX file into DDT, and perhaps patch it, before SAVEing it as a .COM file. Read CP/M documentation for more details. Note this method works for most any CP/M program that has BIOS support for serial I/O.

Simple CP/M file transfer to the H89

So - what H89 (or H8) programs are available via the Web - that is, not by begging for a hard-sectored disk of programs from another H89 owner? And ones I can transfer as .HEX files, small enough not to choke PIP?

The most obvious resource, is CP/M programs from CP/M archives that support the H89. And the best-known source of those, is images of the "Walnut Creek CP/M CD-ROM" of decade ago. Blah blah blah.... a Heath directory from one W/C CP/M archive. It's not a bad collection from the 1980's of CP/M programs for H-89's and Z-100's. For some reason they weren't described well. Here's my description of that part of the archive.

One of the programs is described as "MBOOTH89.ASM 4751 08-05-84". It's 8080 source which by inspection, is some kind of serial file transfer program. No documentation, the ASM is minimized. My guess, so you can file-transfer the source for assembly under CP/M. But, I can assemble the source myself, on a Windows or MS-DOS machine, thanks to a MS-DOS C-sourced 8080 assembler I have. Of course there are many other cross-assemblers, or you can run ASM under an emulated CP/M, etc.

A Sunday's afternoon's effort later, and I assembled the MBOOTH89 program. Some minor edits were needed to accomodate an unfamilar assembler. And, it took some careful reading, to understand the sparsely-commented ASM listing. I took some notes. Here's the MBOOTH89 program, assembled, with my notes, also my A85 MS-DOS cross assembler.

With a XMODEM client on the H89 under CP/M, then any terminal emulator as a "server" should be able to send a file - hex, binary, text, whatever. I chose an old-school "QMODEM version 2.3" on an MS-DOS '486 box I use for such purposes. And...it worked! The simplest Xmodem protocol it supported, was acceptable to MBOOT.

So here's the sequence of events

[H89] [H89]

Run a terminal emulator on a server - Windows, MS-DOS - for testing.
Figure out what my client H89 CP/M does with its serial ports, by reading manuals and tests.
Establish which CP/M devices will work with PIP. that was the "RDR:" for H89 input/recieve.
Run PIP to create a file from the "reader", "MBOOT.HEX=RDR:"
...and send the hex records from my MS-DOS box via QMODEM as a text "upload".
In QMODEM terminal mode, send a CTRL-Z to end the PIP transfer and save the file...
...and CTRL-C out of PIP >to see the HEX file result

[H89] [H89]

Run the MBOOT.HEX through LOAD as "LOAD MBOOT.HEX" to create MBOOT.COM
Run MBOOT.COM to accept a file from the QMODEM MS-DOS XModem server - the MBOOT.ASM file
"PIP MB.ASM=MBOOT.ASM" to make a safe copy of the ASM source.
use ASM and LOAD to re-create MB.HEX and MB.COM
Run MB.COM and confirm it works - confirming the XMODEM file transfer was good - to transfer MBOOT.TXT.

And...it all worked out. I won't go into some of the uglier details. For instance on my '486 MS-DOS box, it took a day to get the serial ports and cables straight, with a serial tester. On the Packard-Bell 486, I pulled out the old modem card and jumper-disabled the modem port. Futzing around to figure out my H89's serial ports versus what CP/M was CONFIGURed to do, took some time. (I did not have a full CONFIGURE program for my particular version of CP/M. So I used the default, 300 baud rate; very slow). But now, I can move over more complicated programs under CP/M, and get something done on either machine.

What I had not yet done in July 2016, was to get the HDOS equivalent client program on the H-89. HDOS is new to me (as of a few decades at least), and HDOS resources are more scarce on the Web as it's largely "out of favor". Or, of course....it's all in H8D images I couldn't unlock in July 2016.

Unlocking HDOS and CP/M disk images

In Sept 2016, I came across a sample C program by Glen Roberts, a contributor to SEBHC, which read HDOS 100K disk images. With his concent I rewrote the program to work with a common C compiler under 32-bit MS-DOS (command line in modern Windows). Then I modified a version of the program to support 100K CP/M disk images. These are the hard-sectored disk distributions used by Zenith to distribute their H-8 and H-89 software; those are imaged on SEBHC's archive Web site. This linked Web page shows the resulting programs and provides details.

related information

serial ports

[H89]

CP/M supports the 3-port serial serial on the H89, as various "devices" which are standard to CP/M, and then supported by BIOSes such as the H89's BIOS.SYS. The H89 serial I/O port at 330Q is supported for reading as "RDR:" and for writing as "PUN:". The default baud rate is 300 baud, 8 bit. The 330Q port corresponds to the "DTE" connector on the 3-port serial card, which is connected to P605 on that card.

I have some CP/M support for the "line printer" LST: port at 340Q, on the serial port P603 connector, which I have on the "DCE" connector (not standard). The H89 CP/M "Configure" program can change these but my version is not readily available or incomplete. My remaining port 320Q, on connector P604, should use the "DCE" connector but for now it's empty. - Herb

File list of a Walnut Creek CP/M Heath archive

Here's the files and here's a description. - Herb

Descriptions updated Herb Johnson 7/2016

CONSOL.H          641  09-09-83  for teledt.c
DIAL.ASM         6988  11-12-85  Z100 dialer program
DIAL.INS          663  11-12-85  howto assemble DIAL
DIRF38HZ.LBR    17920  09-26-87  HZ19/89 DIR list with descriptions
H19CODES.DOC     2927  09-09-83  H19 escape sequences
H19H89.CNV       8262  09-09-83  Upgrade Z-19 to a H-89
H19SUP.ROM      23424  07-13-94  Super 19 ROM for H19/H89
H19SUP.RQM      16256  02-09-85  Squeezed version?
H89-FIX.MSG      2058  03-24-84  PALs for H89 & CP/M
H89CPU.LST       1716  09-09-83  H89 parts list
H89MODOC         8696  09-09-83  mod H89 for 4MHz
H8UPGRAD         1345  09-09-83  S-100 Jade DD controller on H8
HEATHH29.DOC     5150  09-09-83  H/Z-29 brief specifications
HEATHOPT.OP      2312  09-09-83  patching Microsoft F80, M80
HMODEM20.LBR    54272  05-16-88  X/Y/ZMODEM for Heath/Zenith 89
HMSRC20.LBR     77952  05-16-88  X/Y/ZMODEM for HZ89 source code
HZ-VENIX.MSG      759  04-21-85  No description available
HZ100IBM.KIT     1683  12-26-84  No description available
JMODZ100.LBR     7424  05-20-85  No description available
MBOOTH89.ASM     4751  08-05-84  8080 XModem reciever for H89
MONEY.LBR       30848  03-22-87  Financial Utilities for H/Z-89
REPEAT89.DOC     6016  07-13-94  hardware fix for autorepeat on H89
REPEAT89.DQC     3712  04-14-85  squeezed version?
SZOFRM.C          170  09-09-83  part of Teledt
TELEDT.ABS      12288  02-09-85  HDOS exe, maybe incomplete?
TELEDT.C        18100  09-09-83  HDOS & BDS C for Xmodem program
TELEDT.DOC       5067  09-09-83  document for TELEDT
Z100WRAP.DOC     1218  04-19-85  Z100 and ESC sequences
Z19CN.MDC        1346  09-09-83  No description available
ZB4MHZ.ASM       6979  09-09-83  4MHz fixes for BIOS
ZB4MHZ.DOC       5346  09-09-83  4MHz fixes for BIOS
ZDS.BB         304651  01-24-85  Dump of Zenith BBS info


Copyright © 2016 Herb Johnson

Herb Johnson
New Jersey, USA
to email @ me follow this link