H89 Emulator - The Virtual H89 All-in-One Computer

This project is currently under develop. Source has been released on github: VirtualH89.

Video clip of the Emulator

A quick little clip of the emulator running the snake game:

A longer clip of the emulator captured directly on the computer, showing the boot process and a short game of gravitron:

Goals

To work with both CP/M, HDOS, and UCSD Pascal.

Clock accurate emulation of the entire system. (Be able to play fast-action graphic games). Option to run emulator at 'max speed'.

Emulation of the H19 Terminal functions (including accurate character and graphic representation). Accurate baud rate between the computer and terminal.

Be able to select hardware options of the system, i.e. amount of memory, which ROM, which controllers, add-on disk drive systems.

Portable to a wide-range of the platforms (Windows, Linux, Mac, etc.).

Written in C++.

Status - First release of source has been uploaded to GitHub - VirtualH89

Virtual H89 Operating System Status Table

OS

Status

Comments

HDOS 1.0
(Issue #50.00.00 890-1)

Does not Boot

This initial release of HDOS appears to be hard-coded for the H8's 8251 UART. Since the H89 does not use an 8251 for the console port or even the same address as the H8, the H89 emulator will not support this initial release of Version 1.0.

HDOS 1.0
(Issue #50.03.00 890-1-3)

Boots

This release of version 1.0 supports the 8250 serial port and currently boots on the emulator. No obvious problems.

HDOS 1.5
(Issue #50.04.00 890-1-4)

Boots

No obvious problems.

HDOS 1.6
(Issue #50.05.00 890-1-5)

Boots

No obvious problems.

HDOS 2.0
(Issue #50.06.00 890-64)

Boots

No obvious problems. Writing works. INIT is now working.

HDOS 3.02
(Issue #50.07.00)

Boots

A hard-sectored HDOS 3.02 boot disk was located by Les Bird. This disk image boots without any obvious problems.

The CONFIGUR.COM program now correctly auto-detects the virtual floppy drives, there was 2 flags in the H17 status register that needed to be set. FORMAT works.

CP/M 2.2.04

Boots

Configur.com and the extra 'Setup' Disk correctly detects the virtual disk drives, but when generating the boot disk, it adds support for the H47. Need to determine why. DUP works. FORMAT works. SYSGEN appears to work.

UCSD Pascal

Boots

The image I have only supports 2 floppies, so I had to modify the source to have only 2 disks, to allow it to boot.

More screenshots below.

Z80 Emulation selection (done)

Examined both z80pack and yaze-ag. Both are good, but z80pack provides the option to run at a given speed.

Started with z80pack.

Encapsulated the Z80 emulation into a new C++ class (done - but may need further refinement).

Updated the code to have accurate flag handling on some of the rarely used instructions. (done - documented behavior appears complete and accurate)

Abstracted the memory / address bus (done)

Adding support for more 'undocumented' opcodes as defined in "The Undocumented Z80 Documented". (done)

Phase 1 (Done)

Support for both ROM and RAM objects are implemented(done)

The Monitor ROM (MTR-90-1) is running.

2 ms timer works (done).

Changed the way the accurate clock emulation was coded, it now uses an interval timer instead of sleep() calls. (The existing code did not appear to take into account the amount of time executing instructions. Although on a current computer, this time was < 3% with the generic CP/M system z80pack provides. This could be a problem on slower systems or as more code is added for the emulator.)

Interrupts are working.

A 2 mSec timer works on Linux and Leopard (10.5.x), but not on Tiger (10.4.x) (done).

A redesign would be needed to work on systems that only support a 10 mSec timer, this currently is low priority and may not be implemented. (may not implement).

Basic 8250 Serial port support (done).

Very rudimentary support for the 8250 is complete. Input and output of characters work. But further work is needed to fully implement the 8250 into a C++ class.

Add support for baud rate selection/detection, mismatches between terminal/computer and the 'spaces' baud selection in HDOS(Done)

Phases 2/3 (In progress)

Implementing the H-88-1 (Hard-sectored controller). Found the H17 ROM listing, which helps.

The Disk rotational speed test (Go 7372) is working(done)

Boot (done)

HDOS (done).

V.1.0 - one of two 1.0 versions is working.

890-1 Version only supported the 8251 serial port, which an H89 does not have. I expect that this version will only work on an H8 with an H-8-5 Serial/Cassette Interface board.

890-1-3 Version supporting 8250 serial port working

V. 1.5 working

V. 1.6 working

V. 2.0 working

V. 3.02 working

CP/M (done)

2.2.02 working

2.2.03 working

2.2.04 working

Writing(done)

Writing to images that have already been FORMATed (CP/M) or INITed (HDOS) is working.

the changes to the disk last while the program is running, and are written out to a new file.

FORMAT(cp/m) and INIT(hdos) are now working.

Saving Disk Images(done)

Currently saving disk image to a new file - working.

The Z-89-37 - soft-sectored controller (working)

The Z-89-47 - 8" controller (likely to be delayed to a later phase)

The Z-89-67 - Winchester controller (likely to be delayed to a later phase)

Contact Details

Social

About

This site is dedicated to preserving the history of the original Heathkit computers. They were initially release in 1977 and included the 8-bit H-8 and 16-bit H-11 systems. The H89 was released in 1979.