Emulator evaluation tools

  • Watch this page

While it is easy to create an approximate emulation, the Amstrad CPC and Plus are very difficult to emulate accurately.

Each chip has its own challenges:

  • Z80 is a bloated architecture, with lots of special cases and complex bus logic. The difference with the lean GBZ80 and 6502 is striking.
  • CRTC has a character-based addressing logic, many incompatible chip implementations, and requires accurate VDU emulation too.
  • Gate Array has a weird interrupt system and adds an unnecessary layer of complexity to sync signals.
  • ASIC is buggy and lacks precise documentation.
  • Memory management is overly complex and limited.
  • PPI has more functionalities than what the CPC needs.
  • PSG cannot be accessed directly as it is behind the PPI. It is simple to emulate though, but it cannot do much.
  • 765 FDC is bloated with 40 pins, compared to 28 pins for the WD1772 FDC used in the Atari ST. It is also a black box internally, while the C64 uses a regular 6502 (with its own ROM and RAM) as FDC.

Thankfully, many tools and tests exist to help emulation authors.

Quick evaluation

Categories

Z80 CPU


Diagnostics


Amstrad Plus


Colorimetry

  • CPC DiAG also shows that the primary colours themselves are a bit different. Blue is more vivid and Green is less fluorescent on Amstrad displays.
  • Colours are less saturated and black is not as profound on CRT monitors than they are on modern displays.
  • On CRT displays, bright pixels will spill on their neighbours while dark pixels will get eaten by their neighbours (ie. bright pixels are bigger than dark pixels on CRT displays), affecting dithered colours. This effect is absent on LCD displays.
  • The usual scanline effect of CRT monitors is barely noticeable on the Amstrad CTM colour monitor. But it is very pronounced on Amstrad monochrome monitors.
  • The slot mask is the texture that is visible in the CTM colour monitor. CRT masks do not exist on monochrome monitors.
  • To test emulators VSYNC (screen-tearing and skipped frames): Source
border 22,17:ink 0,4,9:speed ink 1,1


Graphics


Audio


Peripherals

Note: Open standards like Albireo (CH376 USB and mass storage) and Net4CPC (W5100S Ethernet) should be favored over proprietary protocols (Multiplay, Symbiface 3, M4 Board)


Copy-protection


Other


Emulator detection methods

If you are a programmer who wants to promote usage of real CPC computers, you can detect CPC emulators by:

  • Checking if the memory is initialised with zeroes, as RAM in real machines is not initialised during boot. Source
  • Configuring the CRTC to stop refreshing part of the RAM. This behaviour has never been emulated. Source
The way to cause the RAM refresh to fail in both a Plus or normal CPC is simply to stop a few bits of the CRTC address changing (ie. never refresh the selected area).
Generally, only the Row address needs to be cycled, so stopping MA0 through MA7 from changing, and stopping the CPU from reading those rows, will cause data to be lost, quite quickly (generally around 4ms).
  • Playing with the "floating" bus. Using Z80 read I/O commands to write to chip registers. Accessing ghost registers. Using undocumented I/O ports. Writing to multiple chips simultaneously. Changing PPI and PSG ports direction.
  • Focusing on the minute details in Z80, CRTC, PPI and PAL chips. They are most often wrong in emulators.
  • Examining the FDC chip. It is only replicated more or less superficially in all emulators because the internals of the chip are still unknown. Many emulators don't even support the FDC SCAN or FORMAT TRACK commands.

Combining these methods will definitely get you a 100% success rate in detecting emulators, even the toughest ones.

Additionally, an Emulator IDs system is available for easier detection of CPC emulators.

On ZX Spectrum, gamedevs are challenging emulators real hard with titles like MEMPTR Snake, Super HALT Invaders Test and Chromatrons Attack.