This is a work-in-progress collection of notes I've been making as I'm exploring the Heathkit H89.
-
-
Save jblang/3f13784f7c469da4b65b23d082ac0cf4 to your computer and use it in GitHub Desktop.
Logical Device | Device Name | Port (Octal) | Port (Hex) | Interrupt Level |
---|---|---|---|---|
Console Terminal | TT: | 350-357 | E8-EF | 3 |
Line Printer | LP: | 340-347 | E0-E7 | |
Alternate Terminal | AT: | 320-327 | D0-D7 | |
5.25" Floppy | SY:, DK: | 174-177 | 7C-7F | |
8" Floppy | SY:, DK: | 170-173 | 78-7B | 5 |
Reserved | 376-377 | FE-FF | ||
Reserved | 360-361 | F0-F1 |
HDOS device names for system drives are SY0:
, SY1:
, and SY2:
; alternate drives are DK0:
, DK1:
, and DK2:
. Whether a drive is considered a system or alternate drive depends on how the controller it's attached to is configured.
The boot drive is SY0:
and the drive name can be omitted for files stored on that drive. Unlike CP/M or DOS, it's not possible to change the default drive, so files on any other drive have to be qualified with the device name.
Similar to CP/M and DOS, files are limited to 8 characters with a 3 character extension.
Displays the following help:
Command | Description |
---|---|
HELP | Print This List |
BYE | Dismount all Mounted Disks, and Reboot |
CAT [DEV:] | List Files on Disk |
COPY TO=FROM | Copy FROM file to TO |
DATE [NEWDATE] | Display or Set Date |
DELETE FNAME | Delete File(s) |
DISMOUNT DEV: | Dismount Volume from Drive |
PIP | Execute PIP |
MOUNT DEV: | Mount Volume on Device |
RENAME TO=FROM | Rename File FROM to TO |
RUN FNAME | Run Program |
SET dev: opt | Select Option for Device |
SET HELP | Documentation for SET Command |
STATUS | Display Disk Statistics |
TYPE FNAME | Type file contents on terminal |
VER | Display the Current Version of HDOS |
FNAME | Same as RUN SY0:FNAME.ABS |
Disks must be mounted with the MOUNT
command before use. The command takes the device name of the drive as a parameter (SY0:
-SY2
: or DK0:
-DK2:
)
MOUNT DVn:
HDOS keeps parts of the directory for mounted disks in memory. To ensure that any changes to the directory are written to disk, the UNMOUNT
command must be run before removing the disk or turning off the system:
UNMOUNT DVn:
The BYE
command dismounts all mounted drives so the system can be shutdown or rebooted.
From Mark Garlanger via SEBHC mailing list:
By default HDOS assumes the worst (that the terminal does not support lower case or backspace). If the letters you are seeing are upper-case, then that would be the issue, in graphics mode, only the lower-case letters are graphic symbols. So you will need to enter a few set commands on the command-line.
set tt: bks
set tt: nomlo
set tt: nomli
First one lets the backspace work. The second 2 are to prevent mapping lower case to upper on output and input respectively. It seems like only one is needed, but I don't remember which and for completeness, I always do both. The emulator should auto save the disks you are using to something like "saveA.tmpDisk" (not positive on what extension I had set in the latest github version). But that is just a raw image, which the emulator supports, so you can rename your configured HDOS disk to hdos.h17raw, then update the emulator configure file to use it. Then you won't have to do the changes every time you boot.
Another thing I usually do is to set the floppy drives to 6ms to speed it up slightly. You can do that with set sy0: step 6
and repeat for the other drives. Being a virtual drive, it could even be 0, but HDOS has a lower limit of 6.
Physical Device | Name | Hex Port | Octal Port | MTR-89 References |
---|---|---|---|---|
8251 Console UART (R/W) | SC.UART | FA | 372 | |
Casette Data (R) | IP.TPD | F9 | 371 | |
Casette Data (W) | OP.TPD | F9 | 371 | |
Casette Control (R) | IP.TPC | F8 | 370 | |
Casette Control (W) | OP.TPC | F8 | 370 | 660 |
Switch (R) | H88.SW | F2 | 362 | 1253, 1430, 1798, 1828 |
Control (W) | H88.CTL | F2 | 362 | 1791, 1959, 2636 |
H8 Front Panel* Pad (R) | IP.PAD | F0 | 360 | |
H8 Front Panel* Control (W) | OP.CTL | F0 | 360 | 771, 1069, 1083 |
H8 Front Panel* Digit (W) | OP.DIG | F0 | 360 | |
H8 Front Panel* Segment (W) | OP.SEG | F1 | 361 | |
8250 Console UART (R/W) | SC.ACE | E8-EF | 350-357 | 1580, 1586, 1686, 1690, 1707, 1712, 1796, 1808, 1811, 1813, 1815, 2015, 2019 |
H17 Disk Control (R/W) | DP.DC | 7F | 177 | 1325, 1402 |
H17 Status Flags (R) | UP.ST | 7E | 176 | |
H17 Fill Character (W) | UP.FC | 7E | 176 | |
H17 Sync Reset (R) | UP.SR | 7D | 175 | |
H17 Sync Character (W) | UP.SC | 7D | 175 | |
H17 Data (R/W) | UP.DP | 7C | 174 | 1440 |
Z47 Data (R/W) | D.DAT | 79 | 171 | |
Z47 Status (R/W) | D.STA | 78 | 170 | 212, 1423 |
* The front panel is not present on the H89 so these ports trigger an NMI instead.
Mask | Name | Description | MTR-89 References |
---|---|---|---|
80 | H88S.AT | Auto boot switch (0 = Disable, 1 = Enable) | 1254 |
40 | H88S.BR | Baud rate switch (0 = 9600, 1 = 19200) | 1799 |
20 | H88S.M | Memory test (1) / normal operation (0) | 1829 |
10 | H88S.DV | Boot device (0 = 174-177Q, 1 = 170-173Q) | 1432 |
0C | H88S.0 | 174-177Q Device Type (0 = None, 1 = Z47) | 1462 |
03 | H88S.4 | 170-173Q Device Type (0 = H17, 1 = Z47) | 1443 |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
02 | H88B.CK | 2ms clock enable/disable | 1790 |
01 | H88B.SS | Single step enable/disable |
The Heathkit uses 8250-compatible UARTs for both the console I/O and the serial card. Further info:
Reg | Name | Description | MTR-89 References |
---|---|---|---|
0+DLAB | UR.DLL | Divisor Latch (LSB) | 1811 |
1+DLAB | UR.DLH | Divisor Latch (MSB) | 1808 |
0 | UR.RBR | Receive Data | |
0 | UR.THR | Transmit Data | |
1 | UR.IER | Interrupt Enable | 1815 |
2 | UR.IIR | Interrupt Identification | |
3 | UR.LCR | Line control | 1796, 1813 |
4 | UR.MCR | Modem control | |
5 | UR.LSR | Line status | 1580, 1686, 1707, 2015 |
6 | UR.MCR | Modem status |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
1 | UC.EDA | Enable received data available interrupt | |
2 | UC.TRE | Enable transmit hold register empty interrupt | |
4 | UC.RSI | Enable receive status interrupt | |
8 | UC.MSI | Enable modem status interrupt |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
1 | UC.IIP | Inverted interrupt pending | |
6 | UC.IID | Interrupt ID |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
00 | UC.5BW | 5 bit words | |
01 | UC.6BW | 6 bit words | |
02 | UC.7BW | 7 bit words | |
03 | UC.8BW | 8 bit words | 1812 |
04 | UC.2SB | 2 stop bits | |
08 | UC.PEN | parity enabled | |
10 | UC.EPS | even parity select | |
20 | UC.SKP | stick parity | |
40 | UC.SB | set break | |
80 | UC.DLA | divisor latch access | 1795 |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | UC.DTR | data terminal ready | |
02 | UC.RTS | request to send | |
04 | UC.OU1 | out 1 | |
08 | UC.OU2 | out 2 | |
10 | UC.LOO | loop |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | UC.DR | data ready | 1687, 2016 |
02 | UC.OR | overrun | |
04 | UC.PE | parity error | |
08 | UC.FE | framing error | |
10 | UC.BI | break interrupt | |
20 | UC.THE | transmitter holding register empty | 1581, 1708 |
40 | UC.TSE | transmitter shift register empty |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | UC.DCS | delta clear to send | |
02 | UC.DDR | delta data set ready | |
04 | UC.TER | trailing edge of ring | |
08 | UC.DRL | delta receive line signal detect | |
10 | UC.CTS | clear to send | |
20 | UC.DSR | data set ready | |
40 | UC.RI | ring indicator | |
80 | UC.RLS | received line signal |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | DF.HD | hole detect | |
02 | DF.TO | track 0 detect | |
04 | DF.WP | write protect | |
08 | DF.SD | sync detect |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | DF.WG | write gate enable | |
02 | DF.DS0 | drive select 0 | |
04 | DF.DS1 | drive select 1 | |
08 | DF.DS2 | drive select 2 | |
10 | DF.MO | motor on (both drives) | |
20 | DF.DI | direction (0=out) | |
40 | DF.ST | step command (active high) | |
80 | DF.WR | write enable ram |
Mask | Name | Description | MTR-89 References |
---|---|---|---|
01 | UF.RDA | receive data available | |
02 | UF.ROR | receiver overrun | |
04 | UF.RPE | receiver parity error | |
40 | UF.FCT | fill char transmitted | |
80 | UF.TBM | transmitter buffer empty |
Heathkit | Unicode | Codepoint | Description |
---|---|---|---|
^ | ● | 25CF | BLACK CIRCLE. |
- | ◥ | 25E5 | UPPER RIGHT TRIANGLE. |
` | │ | 2503 | LIGHT VERTICLE LINE. |
a | ─ | 2501 | LIGHT HORIZONTAL LINE. |
b | ┼ | 254B | LIGHT PLUS. |
c | ┐ | 2513 | LIGHT UPPER RIGHT CORNER. |
d | ┘ | 251B | LIGHT LOWER RIGHT CORNER. |
e | └ | 2517 | LIGHT LOWER LEFT CORNER. |
f | ┌ | 250F | LIGHT UPPER LEFT CORNER. |
g | ± | 00B1 | LIGHT PLUS MINUS. |
h | → | 279C | RIGHT ARROW. |
i | ▒ | 2591 | MEDIUM SHADE. |
j | ▚ | 259A | QUADRANT UPPER LEFT LOWER R. |
k | ↓ | 2B07 | DOWN ARROW. |
l | ▗ | 2597 | QUADRANT LOWER RIGHT. |
m | ▖ | 2596 | QUADRANT LOWER LEFT. |
n | ▘ | 2598 | QUADRANT UPPER LEFT. |
o | ▝ | 259D | QUADRANT UPPER RIGHT. |
p | ▀ | 2580 | UPPER HALF BLOCK. |
q | ▐ | 2590 | RIGHT HALF BLOCK. |
r | ◤ | 25E4 | UPPER LEFT TRIANGLE. |
s | ┬ | 2533 | LIGHT DOWN HORIZONTAL. |
t | ┤ | 252B | LIGHT VERTICAL LEFT. |
u | ┴ | 253B | LIGHT UP HORIZONTAL. |
v | ├ | 2523 | LIGHT VERTICAL RIGHT. |
w | ╳ | 2573 | LIGHT CROSS. |
x | ╱ | 2571 | LIGHT RIGHT. |
y | ╲ | 2572 | LIGHT LEFT. |
z | ▔ | 2594 | UPPER HORIZONTAL LINE. |
{ | ▁ | 2581 | LOWER HORIZONTAL LINE. |
| | ▏ | 258F | LEFT VERTICAL LINE. |
} | ▕ | 2595 | RIGHT VERTICAL LINE. |
~ | ¶ | 00B6 | PILCROW SIGN |