The Z80 emulation is based on Kevin Thacker's 'ENTER' emulator, and implements both all documented and many undocumented opcodes fairly well. The timing of CPU instructions and memory access is still not perfect, but has been improved in recent versions of the emulator, and is now close to that of the original machine in most cases.
Emulation of the DAVE chip is quite accurate, as far as sound, timers, and interrupts
are concerned. Version 1.5.0 of ep128emu introduces a new DAVE implementation that is
based on extensive tests of a real Enterprise 128, and all timers and sound related
registers reproduce the behavior of the original machine fairly well.
All timers and interrupts are implemented, and appear to work correctly.
Switching the input clock frequency (bit 1 of I/O port BF) is supported, and is
emulated accurately.
All memory wait state modes (no wait, wait on reading the first byte of an opcode,
and wait on all memory access) are supported as of version 1.5.2, and can be selected
with I/O port BF.
Of the external ports (B5, B6, and B7), only the keyboard and tape input are emulated.
Having an implementation of the serial port, printer, and external joysticks would be
useful, although is of lower priority than some other missing features.
All documented video modes are supported, and are implemented correctly in general.
NICK registers are emulated, and can be accessed both at the standard location (ports
80 to 83), as well as undocumented ports (84 to 8F). Bits 5 and 6 (control external
color input), and bit 7 (controls internal speaker) of port 80 are ignored, as these
features do not make much sense in the case of an emulated machine.
One known limitation of the current NICK implementation is that it may not behave in
the correct way if an unusual (e.g. interlaced display, excess number of lines etc.)
line parameter table is encountered. Fortunately, problems related to this are not
common, but with the help of more documentation, the NICK emulation could be improved
to always generate the same display as the real hardware.
Any number of RAM segments can be emulated from 8 (64k memory) to 248 (3968k memory), controlled by the 'ram_kb' option. Up to 8 ROM images of 16384 bytes can be loaded from external files to segments 0 to 7.
Tape I/O is implemented, using 24 kHz 1-bit MSB mono sound files (there is no header),
that can be both read and written.
It is also possible to copy data to a real Enterprise 128 by connecting the tape input
to the output of the sound card (it may be necessary to adjust the output level (EXOS
variable 35), though, and the 'fast_tape_mode' option must be disabled).
The emulator can turn off synchronization to real time while the tape is being
accessed (controlled by the above mentioned 'fast_tape_mode' option), significantly
reducing tape load/save times, especially on fast machines.
Several utilities for manipulating tape files are included with the emulator.
There is experimental disk emulation starting from ep128emu version 1.6.0, that allows
read/write access to up to four disk images. Disks can also be made write-protected by
setting the access permissions of the image files.
Known limitations (as of version 1.6.0):
© Istvan Varga <istvan_v@mailbox.hu>, 2004, 2005