105 lines
5.4 KiB
Plaintext
105 lines
5.4 KiB
Plaintext
Z80 v0.2 (2022-XX-XX)
|
|
=====================
|
|
|
|
This is an important update that addresses a number of issues and also includes
|
|
new features. Please note that the changes introduced in this release break the
|
|
binary compatibility with the previous version.
|
|
|
|
Changes:
|
|
1. Changed the license from GPL to LGPL (by popular request).
|
|
2. Moved the public header from <emulation/CPU/Z80.h> to <Z80.h>.
|
|
3. Removed the Xcode project.
|
|
4. Switched the build system from Premake to CMake.
|
|
5. Switched to Zeta v0.1.
|
|
6. Added pkg-config support.
|
|
7. Added the .vimrc dotfile.
|
|
8. Added the CITATION.cff file.
|
|
9. Added the file_id.diz file.
|
|
10. Added the THANKS file.
|
|
11. Added detailed documentation.
|
|
12. Added tests.
|
|
13. Added public macros for checking the library version.
|
|
14. Added public macros with bit masks for working with flags.
|
|
15. Added public macros for accessing the 16-bit registers.
|
|
16. Added the `z80_execute` function for running a simplified emulation without
|
|
RESET and interrupts.
|
|
17. Added the `z80_refresh_address` function for getting the refresh address of
|
|
the current M1 cycle.
|
|
18. Added the `z80_in_cycle` and `z80_out_cycle` functions for obtaining the
|
|
clock cycle at which the I/O M-cycle begins, relative to the start of the
|
|
instruction.
|
|
19. Fixed a bug in the `sll` instruction.
|
|
20. Fixed a bug in the `INX` and `OUTX` macros affecting the S and N flags.
|
|
21. Fixed a bug in the `OUTX` macro affecting the MSByte of the port number.
|
|
22. Fixed the clock cycles of the `dec XY` and `in (c)` instructions.
|
|
23. Fixed the `read_16` function so that the order of the memory read operations
|
|
is not determined by the order in which the compiler evaluates expressions.
|
|
24. Fixed the order in which the memory write operations are performed when the
|
|
SP register is involved. This affects the NMI response, the INT response in
|
|
modes 1 and 2, and the following instructions: `ex (sp),{hl|XY}`, `push TT`,
|
|
`push XY`, `call WORD`, `call Z,WORD` and `rst N`.
|
|
25. Fixed the handling of illegal instructions to avoid stack overflows in long
|
|
sequences of DDh/FDh prefixes.
|
|
26. Fixed several implicit conversions to avoid warnings about loss of sign and
|
|
precision.
|
|
27. Fixed some bitwise operations to avoid undefined behavior and arithmetic
|
|
right shifts on signed integers.
|
|
28. Fixed violations of the C standard in several identifiers.
|
|
29. Renamed the 8-bit register lists: X/Y to J/K; J/K and P/Q to O/P.
|
|
30. Replaced all P/V overflow computation functions with a single, faster macro.
|
|
31. Replaced all register resolution functions with macros.
|
|
32. Replaced all `ld {J,K|O,P}` instructions that have the same destination and
|
|
source register with NOPs.
|
|
33. Reimplemented the HALT state. The emulation should now be fully accurate.
|
|
HALTskip is also supported.
|
|
34. Renamed the `z80_reset` function to `z80_instant_reset`.
|
|
35. Added optional emulation of the special RESET, along with the new
|
|
`z80_special_reset` function.
|
|
36. Added the `Z80::fetch_opcode` and `Z80::fetch` callbacks for performing
|
|
opcode fetch operations and memory read operations on instruction data
|
|
respectively.
|
|
37. Added the `Z80::nop` callback for performing disregarded opcode fetch
|
|
operations during internal NOP M-cycles.
|
|
38. Added emulation of the NMI acknowledge M-cycle through the new `Z80::nmia`
|
|
callback.
|
|
39. Added emulation of the INT acknowledge M-cycle through the new `Z80::inta`
|
|
callback, which replaces `Z80::int_data`.
|
|
40. Added optional full emulation of the interrupt mode 0, along with the new
|
|
`Z80::int_fetch` callback for performing bus read operations on instruction
|
|
data. If not enabled at compile-time, the old simplified emulation is built,
|
|
which supports only the most typical instructions.
|
|
41. Added four callbacks for notifying the execution of important instructions:
|
|
`Z80::ld_i_a`, `Z80::ld_r_a`, `Z80::reti` and `Z80::retn`.
|
|
42. Added hooking functionality through the `ld h,h` instruction and the new
|
|
`Z80::hook` callback.
|
|
43. Added the `Z80::illegal` callback for delegating the emulation of illegal
|
|
instructions.
|
|
44. Added accurate flag behavior in the following instructions: `ldir`, `lddr`,
|
|
`cpir`, `cpdr`, `inir`, `indr`, `otir` and `otdr`.
|
|
45. Added emulation of the interrupt acceptance deferral that occurs during the
|
|
`reti` and `retn` instructions.
|
|
46. Added MEMPTR emulation. The `bit N,(hl)` instruction now produces a correct
|
|
value of F.
|
|
47. Added optional emulation of the Q "register". If enabled at compile-time,
|
|
the `ccf` and `scf` instructions produce a correct value of F.
|
|
48. Added emulation options that can be configured at runtime.
|
|
49. Added emulation of the `out (c),255` instruction (Zilog Z80 CMOS).
|
|
50. Added optional emulation of the bug affecting the `ld a,{i|r}` instructions
|
|
(Zilog Z80 NMOS). If enabled at compile-time, the P/V flag is reset when an
|
|
INT is accepted during the execution of these instructions.
|
|
51. Removed `Z80::state`. Replaced with individual members for the registers,
|
|
the interrupt enable flip-flops and the interrupt mode.
|
|
52. Removed the superfluous EI flag. The previous opcode is checked instead,
|
|
which is faster and makes the `Z80` object smaller.
|
|
53. Removed all module-related stuff.
|
|
54. Optimizations in flag computation and condition evaluation.
|
|
55. New source code comments and improvements to existing ones.
|
|
56. Improved code aesthetics.
|
|
57. Other improvements, optimizations and minor changes.
|
|
|
|
|
|
Z80 v0.1 (2018-11-10)
|
|
=====================
|
|
|
|
Initial public release.
|