Project Status
CPU
The Z80 emulation uses an enhanced version of Ian Collier's Z80 core
(from xz80),
giving full instruction set coverage, including all undocumented
instructions and flags.
Instruction timings are built entirely from memory and I/O accesses,
giving accurate emulation of ASIC contention. RAM accesses are
restricted to once every 4 cycles, or every 8 cycles during the
main screen area (and additional mode 1 bands). Also supported are
unrounded instruction timings, as required for ROM accesses to be
correct. This level of accuracy does require more processing power,
but is essential for the majority of visual effects in SAM demos
to be correct.
FRAME, LINE and MIDI OUT interrupts are present, with the correct
triggering points (start of right-hand border) and duration. MIDI IN interrupt are not yet generated.
Memory configuration allows for 256K or 512K main memory, and up
to 4MB external memory (in 1MB units).
Graphics
SAM's four display modes are fully supported, with updates accurate
to a single 8x1 pixel cell. This allows for any kind of video effect
(mode mixing, on/off-screen border and palette effects, etc.) to
be displayed correctly.
Also supported are a few display related quirks. The first is the cell artefact produced when switching
between certain screen modes, as a result of the ASIC drawing in the new
mode using display data read for the previous mode. The second is seen when re-enabling the display using the border port, which generates a partial pixel in the previous border colour. This also happens over the main screen area since the ASIC hasn't read any data to display.
Screen disabling is supported (for modes 3 and 4 only, as with
the real SAM), which also eliminates ASIC contention during the
off period.
Sound
The Philips SAA 1099 sound chip emulation has been complete for
a while now, mainly thanks to Dave Hooper's excellent SAASound
library. As well as regular music playback this also include sound
sample playback, as well as various other quirky ways of driving
the chip.
Parallel port 8-bit mono and stereo DACs (SAMDAC/EDDAC) are present,
as also used for sample/MOD playack. The Spectrum-style beeper is
also supported in the same way, as used by BASIC for BEEP/ZAP/POW/ZOOM
commands (and of course Spectrum software). Sample recording is
not currently supported, but may be added in the future.
MIDI OUT is available for driving real MIDI devices and software/hardware
synths. No MIDI IN support is available yet, though basic support
probably wouldn't require much work.
There are no plans to add support for the 16-bit Quazar
Surround hardware, on the request of Quazar.
Input
By default, all keyboard input is mapped to the key strokes requires
to produce the same letters or symbols on the SAM, so no special
knowledge of SAM key positions is required. A Spectrum mapping is
also available, or the mapping can be disabled to allow input of
unusual key combinations. Multiple key-presses are only limited
by the capabilities of the keyboard being used.
System joysticks can be mapped to either SAM joystick device, generating
keys 6 to 0 and 1 to 5 as appropriate.
SAM Mouse support is available as a polled device. Support for
the Keyboard Mouse may be added for completeness, but no titles
are known to use it.
Disk
All 1772-02 floppy controller commands are implemented, giving
control down to the format of each track (if the disk image format
supports it). DSK and SAD images are also supported, and all can
be used uncompressed, gzipped or zipped (read-only, at present).
The SDF image format allows for unformatted tracks, mixed sector
sizes, disk errors and modified ID field values - enough for all
known SAM protected disks.
Access to real SAM disks is possible only if the platform-specific
implementation allows it. Implementations currently exist for NT/W2K
and Linux, but no other platforms at this time. Also, only regular
format disks are supported, due to limitations of modern floppy
drives.
Edwin Blink's ATOM
hard-disk interface is supported, making a single virtual ATA
hard disk available for BDOS.
Future support will allow a second hard disk or an ATAPI CD-ROM
to be present as a slave device.
Nev Young's SD-IDE interface is supported, as used by
H-DOS. Preliminary support for Jarek Adamski's YAMOD.ATBUS interface is also available, but requires further testing.
The ATOM, SD-IDE and YAMOD.ATBUS interfaces all use Ramsoft's HDF format to store the hard disk contents. Win32 and Linux versions can also access SAM-formatted IDE hard disks and Compact Flash cards, for convenient sharing of files with a real SAM.
Peripherals
SAMBUS and DALLAS clocks are implemented, and can be enabled independently.
MIDI network support has yet to be added, but is likely to be implemented
using TCP sockets, enabling daft things like Internet connected
instances of SimCoupe.
Serial support has been started, but needs lots more work. It will
allow the use of a modem by communications programs, and if/when
a TCP/IP stack is ported, it should give us direct dial-up access!
After a few requests, TAP/TZX support will be added to an up-coming version.
Misc
Much of the debugger core has been completed already, giving powerful
control over the emulated system, with minimal effect on running
speed. The debugger UI, for editing/viewing breakpoints/memory/state is unfinished.