|
z80full.tap Tests all flags and registers. |
z80doc.tap Tests all registers, but only officially documented flags. |
|
|
|
z80flags.tap Tests all flags, ignores registers. |
z80docflags.tap Tests documented flags only, ignores registers. |
|
|
|
z80ccf.tap Tests all flags after executing ccf after each instruction tested.
|
z80memptr.tap Tests all flags after executing bit N,(hl) after each instruction tested.
|
|
|
|
z80full.tap Tests all flags and registers. |
z80doc.tap Tests all registers, but only officially documented flags. |
|
|
|
z80flags.tap Tests all flags, ignores registers. |
z80docflags.tap Tests documented flags only, ignores registers. |
|
|
|
z80ccf.tap Tests all flags after executing ccf after each instruction tested.
|
z80memptr.tap Tests all flags after executing bit N,(hl) after each instruction tested.
|
|
|
|
z80tests.tap |
|
|
|
|
zexdoc.tap Tests officially documented flag effects. |
zexall.tap Tests all flag changes. |
|
|
|
zexfix.tap Tests all flag changes. |
zexbit.tap Tests all flag changes of the bit instructions.
|
|
|
|
zexall2.tap |
|
-D[CMAKE_BUILD_TYPE](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html)=(Debug|Release|RelWithDebInfo|MinSizeRel)**
Choose the type of build (configuration) to generate.
The default is `Release`.
* **-D[CMAKE_INSTALL_NAME_DIR](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_NAME_DIR.html)="\" **
Specify the [directory portion](https://developer.apple.com/documentation/xcode/build-settings-reference#Dynamic-Library-Install-Name-Base) of the [dynamic library install name](https://developer.apple.com/documentation/xcode/build-settings-reference#Dynamic-Library-Install-Name) on Apple platforms (for installed shared libraries).
Not defined by default.
* **-D[CMAKE_INSTALL_PREFIX](https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX.html)="\" **
Specify the installation prefix.
The default is `"/usr/local"` (on [UNIX](https://en.wikipedia.org/wiki/Unix) and [UNIX-like](https://en.wikipedia.org/wiki/Unix-like) operating systems).
Package-specific options are prefixed with `Z80_` and can be divided into two groups. The first one controls aspects not related to the source code of the library:
* **`-DZ80_DEPOT_LOCATION=""${[CMAKE_INSTALL_LIBDIR](https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html)}/cmake/Z80".
* **`-DZ80_INSTALL_PKGCONFIGDIR=""${[CMAKE_INSTALL_LIBDIR](https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html)}/pkgconfig".
* **`-DZ80_NOSTDLIB_FLAGS=(Auto|"[ld a,{i|r} instructions.
The default is `NO`.
Package maintainers are encouraged to use at least the following options for the shared library:
```
-DZ80_WITH_EXECUTE=YES
-DZ80_WITH_FULL_IM0=YES
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=YES
-DZ80_WITH_Q=YES
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=YES
```
### Build and install
Finally, once the build system is configured according to your needs, build and install the package:
```shell
cmake --build . [--config (Debug|Release|RelWithDebInfo|MinSizeRel)]
cmake --install . [--config -D[Z80_WITH_TESTING_TOOL](#cmake_option_z80_with_testing_tool)=YES to enable its compilation and -D[Z80_FETCH_TEST_FILES](#cmake_option_z80_fetch_test_files)=YES to download the firmware and software required. Also note that the Z80 library must be built with -D[Z80_WITH_Q](#cmake_option_z80_with_q)=YES to be able to pass [Patrik Rak's tests](#zilog-z80-cpu-test-suite-by-patrik-rak).
Once you have built the package, type the following to run all tests:
```shell
./test-Z80 -p depot/firmware -p depot/software/POSIX -p "depot/software/ZX Spectrum" -a
```
The tool supports options and can run the tests individually (type ./test-Z80 -h for help).
If you prefer to run all tests through [CTest](https://cmake.org/cmake/help/latest/manual/ctest.1.html), use this:
```shell
ctest -N # List available tests
ctest --verbose --build-config (Debug|Release|RelWithDebInfo|MinSizeRel) [-I -D[Z80_WITH_EXECUTE](#cmake_option_z80_with_execute)=YES, CTest will run the tests twice to increase coverage. Using [`-I`](https://cmake.org/cmake/help/latest/manual/ctest.1.html#cmdoption-ctest-I) allows you to run only the test corresponding to the specified index.
### TL;DR
Use the following to build and test the emulator:
```shell
mkdir work && cd work
git clone https://github.com/redcode/Zeta.git
git clone https://github.com/redcode/Z80.git
cd Z80
mkdir build && cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DZ80_FETCH_TEST_FILES=YES \
-DZ80_WITH_TESTING_TOOL=YES \
-DZ80_WITH_EXECUTE=YES \
-DZ80_WITH_FULL_IM0=YES \
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=YES \
-DZ80_WITH_Q=YES \
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=YES \
..
cmake --build . --config Release
ctest --verbose --build-config Release
```
**[#include "Z80.h" instead of `#define [Z80_WITH_EXECUTE](#cmake_option_z80_with_execute)**
* **#define [Z80_WITH_FULL_IM0](#cmake_option_z80_with_full_im0)**
* **#define [Z80_WITH_IM0_RETX_NOTIFICATIONS](#cmake_option_z80_with_im0_retx_notifications)**
* **#define [Z80_WITH_PARITY_COMPUTATION](#cmake_option_z80_with_parity_computation)**
* **#define [Z80_WITH_PRECOMPUTED_DAA](#cmake_option_z80_with_precomputed_daa)**
* **#define [Z80_WITH_Q](#cmake_option_z80_with_q)**
* **#define [Z80_WITH_SPECIAL_RESET](#cmake_option_z80_with_special_reset)**
* **#define [Z80_WITH_UNOFFICIAL_RETI](#cmake_option_z80_with_unofficial_reti)**
* **#define [Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG](#cmake_option_z80_with_zilog_nmos_ld_a_ir_bug)**
Except for [`Z80_EXTERNAL_HEADER`](#macro_z80_external_header), the above macros can be empty; the source code only checks whether they are defined.
> [!IMPORTANT]
> The activation of some of the optional features affects the speed of the emulator due to various factors (read the [documentation](https://zxe.io/software/Z80/documentation/latest/introduction.html#optional-features) for more details).
## Showcase
This emulator has been used by the following projects (listed in alphabetical order):
* **[Augmentinel](https://simonowen.com/spectrum/augmentinel/)** _by [Simon Owen](https://simonowen.com)_ ⟩ [GitHub](https://github.com/simonowen/augmentinel)
* **ceda-cemu** _by [Retrofficina GLG Programs](https://retrofficina.glgprograms.it)_ ⟩ [GitHub](https://github.com/GLGPrograms/ceda-cemu)
* **CPM-Emulator** _by [Marc Sibert](https://github.com/Marcussacapuces91)_ ⟩ [GitHub](https://github.com/Marcussacapuces91/CPM-Emulator)
* **f80** _by [Richard J. Prinz](https://www.min.at/prinz)_ ⟩ [GitHub](https://github.com/rprinz08/f80)
* **[Google Capture the Flag (2021)](https://capturetheflag.withgoogle.com)** _by [Google](https://www.google.com)_ ⟩ [GitHub](https://github.com/google/google-ctf)
* **[King of the Grid](https://kingofthegrid.com)** _by [Alex Siryi](https://github.com/desertkun)_ ⟩ [GitHub](https://github.com/kingofthegrid/king-of-the-grid)
* **MSX1 Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/msxemulator)
* **MZ-1500 Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/mz1500emulator)
* **MZ-2000/80B Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/mz2000emulator)
* **PASOPIA/PASOPIA 7 Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/pasopiaemulator)
* **PC-6001mkII Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/p6mk2emulator)
* **pico-sorcerer-2** _by [fruit-bat](https://github.com/fruit-bat)_ ⟩ [GitHub](https://github.com/fruit-bat/pico-sorcerer-2)
* **pico-zxspectrum** _by [fruit-bat](https://github.com/fruit-bat)_ ⟩ [GitHub](https://github.com/fruit-bat/pico-zxspectrum)
* **[picoZ80](https://eaw.app/picoz80)** _by [Philip Smart](https://eaw.app/contact)_
* **RadZ80** _by [RadAd](https://github.com/RadAd)_ ⟩ [GitHub](https://github.com/RadAd/RadZ80)
* **SEGA SC-3000 Emulator for Raspberry Pi Pico** _by [shippoiincho](https://github.com/shippoiincho)_ ⟩ [GitHub](https://github.com/shippoiincho/sc3000emulator)
* **[SpeccyP](https://t.me/c/ZX_MURMULATOR/241406)** _by [Constantin](https://github.com/billgilbert7000)_ ⟩ [GitHub](https://github.com/billgilbert7000/SpeccyP)
* **[The Second-Worst ZX Spectrum Emulator in the World](https://fuzzix.org/building-the-secondworst-zx-spectrum-emulator-in-the-world-with-perl)** _by [John Barrett](https://fuzzix.org/about)_ ⟩ [GitHub Gist](https://gist.github.com/jbarrett/1dbcbd92d08af2f089bf6baff5cf065b)
* **[tihle](https://www.taricorp.net/2020/introducing-tihle/)** _by [Peter Marheine](https://www.taricorp.net/about/)_ ⟩ [GitHub](https://github.com/tari/tihle) · [GitLab](https://gitlab.com/taricorp/tihle)
* **[TileMap](https://simonowen.com/spectrum/tilemap/)** _by [Simon Owen](https://simonowen.com/)_ ⟩ [GitHub](https://github.com/simonowen/tilemap)
* **tranZPUterFusionX** _by [Philip Smart](https://eaw.app/contact)_
* **Zemu** _by [Jay Valentine](https://jayvalentine.github.io/)_ ⟩ [GitHub](https://github.com/jayvalentine/zemu) · [RubyGems](https://rubygems.org/gems/zemu)
## Thanks
Many thanks to the following individuals (in alphabetical order):
* **Akimov, Vadim (lvd)**
* For testing the library on many different platforms and CPU architectures.
* **Anisimov, Alexey (SoftLight)**
* For testing the `ccf/scf` instructions on real hardware. [1](#r_1)
* **azesmbog** :trophy:
1. For validating tests on real hardware. [2.1](#r_2_1)
2. For discovering the unstable behavior of the `ccf/scf` instructions.
3. For testing the `ccf/scf` instructions on real hardware. [1](#r_1), [3](#r_3)
4. For his invaluable help.
* **Banks, David (hoglet)** :trophy:
1. For deciphering the additional flag changes of the block instructions. [4.1](#r_4_1), [4.2](#r_4_2), [5](#r_5)
2. For his research on the `ccf/scf` instructions. [5](#r_5), [6](#r_6)
* **Beliansky, Anatoly (Tolik_Trek)**
* For validating tests on real hardware. [2.2](#r_2_2)
* **Bobrowski, Jan**
* For fixing _"Z80 Full Instruction Set Exerciser for Spectrum"_. [7](#r_7)
* **boo_boo** :trophy:
* For deciphering the behavior of MEMPTR. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **Brady, Stuart**
* For his research on the `ccf/scf` instructions. [12](#r_12)
* **Brewer, Tony** :trophy:
1. For his research on the special RESET. [4.3](#r_4_3), [13](#r_13)
2. For helping to decipher the additional flag changes of the block instructions. [4](#r_4)
3. For conducting low-level tests on real hardware. [4](#r_4)
4. For helping me to test different undocumented behaviors of the Zilog Z80.
5. For discovering that the `DD/FD` prefixes affect the behavior of the `ccf/scf` instructions. [4.4](#r_4_4)
* **Bystrov, Dmitry (Alone Coder)**
* For validating tests on real hardware. [2.2](#r_2_2)
* **Chaikin, Mikhail (P321)**
* For testing the `ccf/scf` instructions on real hardware. [1](#r_1)
* **Chandler, Richard**
1. For his corrections to the documentation.
2. For validating tests on real hardware. [14](#r_14)
* **Chunin, Roman (CHRV)**
* For testing the behavior of MEMPTR on real hardware. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **Conway, Simon (BadBeard)**
* For validating _"Z80 Test Suite"_ on several Z80 clones. [15](#r_15)
* **Cooke, Simon** :trophy:
* For discovering how the out (c),0 instruction behaves on the Zilog Z80 CMOS. [16](#r_16)
* **Cringle, Frank D.**
* For writing _"Z80 Instruction Set Exerciser"_. [17](#r_17)
* **Devic, Goran**
* For his research on undocumented behaviors of the Z80 CPU. [18](#r_18)
* **Dmitriev, Dmitry (DDp)**
* For testing the `ccf/scf` instructions on real hardware. [3](#r_3)
* **Dunn, Paul (ZXDunny)**
* For his corrections to the documentation.
* **Equinox**
* For his corrections to the documentation.
* **Flammenkamp, Achim**
* For his article on Z80 interrupts. [19](#r_19)
* **Gimeno Fortea, Pedro** :trophy:
1. For his research work. [20](#r_20)
2. For writing the first-ever ZX Spectrum emulator. [21](#r_21), [22](#r_22)
* **Greenway, Ian**
* For testing the `ccf/scf` instructions on real hardware. [12](#r_12), [23](#r_23)
* **Harston, Jonathan Graham**
1. For his research work.
2. For his technical documents about the Zilog Z80. [24](#r_24), [25](#r_25), [26](#r_26)
3. For porting _"Z80 Instruction Set Exerciser"_ to the ZX Spectrum. [27](#r_27)
* **Helcmanovsky, Peter (Ped7g)** :medal_military:
1. For helping me to write _"IN-MEMPTR"_.
2. For writing _"Z80 Block Flags Test"_. [2](#r_2), [28](#r_28)
3. For writing _"Z80 CCF SCF Outcome Stability"_. [28](#r_28)
4. For writing _"Z80 INT Skip"_. [28](#r_28)
5. For writing _"FDDD2"_, _"Z80 DDFD3"_, _"Z80 IM1 vs JR"_ and many other tests.
6. For his research on the unstable behavior of the `ccf/scf` instructions.
7. For his invaluable help.
* **Iborra Debón, Víctor (Eremus)**
* For validating tests on real hardware.
* **icebear**
* For testing the behavior of MEMPTR on real hardware. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **ICEknight**
* For validating tests on real hardware.
* **Ilyichev, Ivan (ivang78)**
* For testing the behavior of MEMPTR on real hardware. [29](#r_29)
* **Kladov, Vladimir** :trophy:
* For deciphering the behavior of MEMPTR. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **Kovrigin, Alexey (creator)**
* For testing the `ccf/scf` instructions on real hardware. [1](#r_1), [3](#r_3)
* **Krook, Magnus**
* For validating tests on real hardware. [2.3](#r_2_3)
* **London, Matthew (mattinx)**
* For validating tests on real hardware.
* **Martínez Cantero, Ricardo (Kyp)**
* For validating tests on real hardware.
* **Molodtsov, Aleksandr**
* For testing the behavior of MEMPTR on real hardware. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **Nair, Arjun**
* For validating tests on real hardware. [2](#r_2)
* **Nicolás-González, César**
* For helping me to investigate the unstable behavior of the `ccf/scf` instructions.
* **Ortega Sosa, Sofía**
1. For optimizing the emulator.
2. For her help and support.
* **Owen, Simon**
* For the idea of the hooking method used in this emulator.
* **Ownby, Matthew P.**
* For his research on the state of the registers after POWER-ON. [30](#r_30)
* **Rak, Patrik** :trophy:
1. For improving _"Z80 Instruction Set Exerciser for Spectrum"_. [31](#r_31)
2. For deciphering the behavior of the `ccf/scf` instructions. [15](#r_15), [31](#r_31)
3. For writing _"Zilog Z80 CPU Test Suite"_. [31](#r_31), [32](#r_32)
4. For his research on the unstable behavior of the `ccf/scf` instructions.
* **Rodríguez Jódar, Miguel Ángel (mcleod_ideafix)**
1. For his research on the state of the registers after POWER-ON/RESET. [33](#r_33)
2. For writing _"Z80 Initial Condition Retriever"_. [33.1](#r_33_1)
* **Rodríguez Palomino, Mario (r-lyeh)**
* For teaching me how emulators work.
* **Sainz de Baranda y Romero, Manuel**
* For teaching me programming and giving me my first computer.
* **Sanarin, Dmitry (haywire)**
* For testing the `ccf/scf` instructions on real hardware. [3](#r_3)
* **Sánchez Ordiñana, José Ismael (Vaporatorius)**
* For validating tests on real hardware. [32.1](#r_32_1), [34](#r_34)
* **Sapach, Michael (cafedead)**
* For writing _"CPD-Test"_. [29](#r_29)
* **Sevillano Mancilla, Marta (TheMartian)**
* For validating tests on real hardware. [14.1](#r_14_1)
* **Stevenson, Dave**
1. For testing the special RESET on real hardware. [13](#r_13)
2. For conducting low-level tests on real hardware. [4.5](#r_4_5)
* **Titov, Andrey (Titus)**
* For his research on the `ccf/scf` instructions. [1](#r_1), [3](#r_3)
* **Vasin, Yuriy (goodboy)**
1. For testing the behavior of MEMPTR on real hardware. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11), [29](#r_29)
2. For testing the `ccf/scf` instructions on real hardware. [1](#r_1), [29](#r_29)
* **Vučenović, Zoran**
* For writing the [Pascal binding](sources/Z80.pas).
* **Weissflog, Andre (Floh)** :trophy:
1. For discovering that the `reti/retn` instructions defer the acceptance of the maskable interrupt. [35](#r_35)
2. For writing the _"Visual Z80 Remix"_ simulator. [36](#r_36)
* **Wilkinson, Oli (evolutional)**
* For validating tests on real hardware. [2](#r_2)
* **Wlodek**
* For testing the behavior of MEMPTR on real hardware. [8](#r_8), [9](#r_9), [10](#r_10), [11](#r_11)
* **Woodmass, Mark (Woody)** :medal_military:
1. For his invaluable contributions to the emuscene.
2. For writing _"Z80 Test Suite"_. [15](#r_15)
3. For writing _"ED777F"_, _"FDDD"_, _"EI48K"_, _"EIHALT"_, _"HALT2INT"_, _"IFF2 Bug"_, _"Super HALT Invaders Test"_ and many other tests.
4. For his research on the `ccf/scf` instructions. [37](#r_37)
* **Young, Sean** :trophy:
1. For his research work.
2. For his technical documents about the Zilog Z80. [20](#r_20), [30](#r_30), [38](#r_38)
* **Zarubin, Stanislav (JeRrS)**
* For testing the `ccf/scf` instructions on real hardware. [3](#r_3), [29](#r_29)
* **ZXGuesser**
* For validating tests on real hardware.
### References
1. https://zx-pk.ru/threads/34173-revers-inzhiniring-z80.html
2. https://spectrumcomputing.co.uk/forums/viewtopic.php?t=6102
1. https://spectrumcomputing.co.uk/forums/viewtopic.php?p=83384#p83384
2. https://spectrumcomputing.co.uk/forums/viewtopic.php?p=83041#p83041
3. https://spectrumcomputing.co.uk/forums/viewtopic.php?p=83157#p83157
3. https://zx-pk.ru/threads/35936-zagadka-plavayushchikh-flagov-scf-ccf-raskryta!.html
4. https://stardot.org.uk/forums/viewtopic.php?t=15464
1. https://stardot.org.uk/forums/viewtopic.php?p=211042#p211042
2. https://stardot.org.uk/forums/viewtopic.php?p=212021#p212021
3. https://stardot.org.uk/forums/viewtopic.php?p=357136#p357136
4. https://stardot.org.uk/forums/viewtopic.php?p=481595#p481595
5. https://stardot.org.uk/forums/viewtopic.php?p=212360#p212360
5. Banks, David (2018-08-21). _"Undocumented Z80 Flags"_ rev. 1.0.
* https://stardot.org.uk/forums/download/file.php?id=39831
* https://github.com/hoglet67/Z80Decoder/wiki/Undocumented-Flags
6. https://github.com/hoglet67/Z80Decoder/wiki/Unstable-CCF-SCF-Behaviour
7. http://wizard.ae.krakow.pl/~jb/qaop/tests.html
8. https://zxpress.ru/zxnet/zxnet.pc/5909
9. https://zx-pk.ru/threads/2506-komanda-bit-n-(hl).html
10. https://zx-pk.ru/threads/2586-prosba-realshchikam-ot-emulyatorshchikov.html
11. boo_boo; Kladov, Vladimir (2006-03-29). _"MEMPTR, Esoteric Register of the Zilog Z80 CPU"_.
* https://zx-pk.ru/showpost.php?p=43688
* https://zx-pk.ru/attachment.php?attachmentid=2984
* https://zx-pk.ru/showpost.php?p=43800
* https://zx-pk.ru/attachment.php?attachmentid=2989
12. https://sourceforge.net/p/fuse-emulator/mailman/message/6929573
13. Brewer, Tony (2014-12). _"Z80 Special Reset"_.
* http://primrosebank.net/computers/z80/z80_special_reset.htm
14. https://spectrumcomputing.co.uk/forums/viewtopic.php?t=10555
1. https://spectrumcomputing.co.uk/forums/viewtopic.php?p=132144#p132144
15. https://worldofspectrum.org/forums/discussion/20345
16. https://groups.google.com/g/comp.os.cpm/c/HfSTFpaIkuU/m/KotvMWu3bZoJ
17. Cringle, Frank D. (1998-01-28). _"Yaze - Yet Another Z80 Emulator"_ v1.10.
* ftp://ftp.ping.de/pub/misc/emulators/yaze-1.10.tar.gz
18. https://baltazarstudios.com/zilog-z80-undocumented-behavior
19. Flammenkamp, Achim. _"Interrupt Behaviour of the Z80 CPU"_.
* http://z80.info/interrup.htm
20. Young, Sean (1998-10). _"Z80 Undocumented Features (in Software Behaviour)"_ v0.3.
* http://www.msxnet.org/tech/Z80/z80undoc.txt
21. https://elmundodelspectrum.com/desenterrando-el-primer-emulador-de-spectrum
22. https://elmundodelspectrum.com/con-vosotros-el-emulador-de-pedro-gimeno-1989
23. https://sourceforge.net/p/fuse-emulator/mailman/message/4502844
24. Harston, Jonathan Graham (2008). _"Full Z80 Opcode List Including Undocumented Opcodes"_ v0.11 (revised).
* http://www.mdfsnet.f9.co.uk/Docs/Comp/Z80/OpList
25. Harston, Jonathan Graham (2012). _"Z80 Microprocessor Undocumented Instructions"_ v0.15.
* http://mdfs.net/Docs/Comp/Z80/UnDocOps
26. Harston, Jonathan Graham (2014). _"Z80 Opcode Map"_ v0.10 (revised).
* http://mdfs.net/Docs/Comp/Z80/OpCodeMap
27. http://mdfs.net/Software/Z80/Exerciser/Spectrum
28. https://github.com/MrKWatkins/ZXSpectrumNextTests
29. https://zx-pk.ru/threads/36139-cpd-test-dlya-proverki-izmeneniya-registra-memptr-instruktsiyami-proverte-na-reale-plz.html
30. Young, Sean (2005-09-18). _"Undocumented Z80 Documented, The"_ v0.91.
* http://www.myquest.nl/z80undocumented
* http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf
31. https://worldofspectrum.org/forums/discussion/41704
* http://zxds.raxoft.cz/taps/misc/zexall2.zip
32. https://worldofspectrum.org/forums/discussion/41834
* http://zxds.raxoft.cz/taps/misc/z80test-1.0.zip
* https://github.com/raxoft/z80test
1. https://worldofspectrum.org/forums/discussion/comment/668760/#Comment_668760
33. https://worldofspectrum.org/forums/discussion/34574
1. https://worldofspectrum.org/forums/discussion/comment/539714/#Comment_539714
* http://zxprojects.com/images/stories/z80_startup/reg_start_value.zip
34. https://jisanchez.com/test-a-dos-placas-de-zx-spectrum
35. Weissflog, Andre (2021-12-17). _"New Cycle-Stepped Z80 Emulator, A"_.
* https://floooh.github.io/2021/12/17/cycle-stepped-z80.html
36. https://github.com/floooh/v6502r
37. https://groups.google.com/g/comp.sys.sinclair/c/WPsPr6j6w5k/m/O_u1zNQf3VYJ
38. Young, Sean (1997-09-21). _"Zilog Z80 CPU Specifications"_.
* http://www.msxnet.org/tech/Z80/z80.zip
## License
Copyright © 1999-2026 Manuel Sainz de Baranda y Goñi.