Changes

Emulators

2,206 bytes removed, Monday at 19:47
/* Emulator Detection */
*[https://github.com/digital-sound-antiques/vgm-conv vgm-conv] [https://github.com/QuinnPainter/YMtoVGM YMtoVGM] [https://cpcrulez.fr/emulateurs_UTIL-MUSIC-YMCruncher.htm YMcruncher] [https://osdk.org/index.php?page=documentation&subpage=ym2mym Ym2Mym] [https://github.com/EdouardBERGE/wav2ay wav2ay] [https://kichiki.github.io/waon/ WaoN (wav2midi)] [https://cpcrulez.fr/coding-crossdev-music-ym_to_midi.htm YMtoMIDI] Music converters
*[http://cngsoft.no-ip.org/chipnsfx.htm CHIPNSFX] [https://grimware.org/doku.php/sources/pt3 Vortex Tracker II] [https://github.com/AugustoRuiz/WYZTracker WYZTracker] [https://julien-nevo.com/at3test/ Arkos Tracker] [https://tildearrow.org/furnace/ Furnace] Cross-platform CPC music creation suites
 
<br>
 
= Emulator Detection =
 
If you want 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. [https://www.cpcwiki.eu/forum/emulators/weird-thing-about-memory-dump-on-winapecaprice-vs-cpcemuace/msg243929/ Source]
*Configuring the CRTC to stop refreshing part of the RAM. This behaviour has never been emulated. [https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/memory-refresh-plus/ 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]], [[8255|PPI]] and [[PAL16L8|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.
 
<gallery>
Emulator undetected.png|Emulator undetected in Open Tower Defense
Emulator detected.png|Emulator detected in Open Tower Defense
</gallery>
 
Additionally, an [[Emulator_IDs|Emulator IDs]] system is available for easier detection of CPC emulators.
 
On ZX Spectrum, gamedevs are challenging emulators real hard with titles like [https://spectrumcomputing.co.uk/entry/31198/ZX-Spectrum/MEMPTR_Snake MEMPTR Snake], [https://github.com/redcode/Z80/wiki/Super-HALT-Invaders-Test Super HALT Invaders Test] and [https://spectrumcomputing.co.uk/entry/31261/ZX-Spectrum/Chromatrons_Attack Chromatrons Attack].
<br>
8,999
edits