Skip to content

Commit

Permalink
Version history.
Browse files Browse the repository at this point in the history
  • Loading branch information
redcode committed Dec 25, 2024
1 parent 2ae3bf1 commit 633c131
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 98 deletions.
100 changes: 51 additions & 49 deletions HISTORY
Original file line number Diff line number Diff line change
Expand Up @@ -15,100 +15,102 @@ Changes:
7. Added the following files to the project: .vimrc, CITATION.cff and THANKS.
8. Added detailed documentation.
9. Added Pascal binding, courtesy of Zoran Vučenović.
10. Added tests.
11. Renamed the macros `CPU_Z80_DEPENDENCIES_H` and `CPU_Z80_STATIC` to
10. Added `test-Z80`, a tool that runs various Z80-specific tests for CP/M and
ZX Spectrum.
11. Added `step-test-Z80`, a tool for unit tests in JSON format.
12. Renamed the macros `CPU_Z80_DEPENDENCIES_H` and `CPU_Z80_STATIC` to
`Z80_EXTERNAL_HEADER` and `Z80_STATIC`, respectively.
12. Added public macros for checking the library version, working with flags,
13. Added public macros for checking the library version, working with flags,
accessing the 16-bit registers and other purposes.
13. Added the ability to end the emulation loop immediately, and the `z80_break`
14. Added the ability to end the emulation loop immediately, and the `z80_break`
function.
14. Added the `z80_execute` function for running a simplified emulation without
15. Added the `z80_execute` function for running a simplified emulation without
RESET and interrupts.
15. Added the `z80_in_cycle` and `z80_out_cycle` functions for obtaining the
16. 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.
16. Added the `z80_refresh_address` function for getting the refresh address of
17. Added the `z80_refresh_address` function for getting the refresh address of
the current M1 cycle.
17. Renamed the `z80_reset` function to `z80_instant_reset`.
18. Added optional emulation of the special RESET, and the `z80_special_reset`
18. Renamed the `z80_reset` function to `z80_instant_reset`.
19. Added optional emulation of the special RESET, and the `z80_special_reset`
function.
19. Added the `Z80::fetch_opcode` and `Z80::fetch` callbacks for performing,
20. Added the `Z80::fetch_opcode` and `Z80::fetch` callbacks for performing,
respectively, opcode fetch operations and memory read operations on
instruction data.
20. Added the `Z80::nop` callback for performing disregarded opcode fetch
21. Added the `Z80::nop` callback for performing disregarded opcode fetch
operations during internal NOP M-cycles.
21. Added emulation of the NMI acknowledge M-cycle through the new `Z80::nmia`
22. Added emulation of the NMI acknowledge M-cycle through the new `Z80::nmia`
callback.
22. Added emulation of the INT acknowledge M-cycle through the new `Z80::inta`
23. Added emulation of the INT acknowledge M-cycle through the new `Z80::inta`
callback, which replaces `Z80::int_data`.
23. Added optional full emulation of the interrupt mode 0, along with the new
24. 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.
24. Added four callbacks for notifying the execution of important instructions:
25. Added four callbacks for notifying the execution of important instructions:
`Z80::ld_i_a`, `Z80::ld_r_a`, `Z80::reti` and `Z80::retn`.
25. Added hooking functionality through the `ld h,h` instruction and the new
26. Added hooking functionality through the `ld h,h` instruction and the new
`Z80::hook` callback.
26. Added the `Z80::illegal` callback for delegating the emulation of illegal
27. Added the `Z80::illegal` callback for delegating the emulation of illegal
instructions.
27. Added emulation options that can be configured at runtime.
28. Removed `Z80::state`. Replaced with individual members for the registers,
28. Added emulation options that can be configured at runtime.
29. Removed `Z80::state`. Replaced with individual members for the registers,
the interrupt enable flip-flops and the interrupt mode.
29. Removed the superfluous EI flag. The previous opcode is checked instead,
30. Removed the superfluous EI flag. The previous opcode is checked instead,
which is faster and makes the `Z80` object smaller.
30. Removed all module-related stuff.
31. Added emulation of the additional flag changes performed during the extra 5
31. Removed all module-related stuff.
32. Added emulation of the additional flag changes performed during the extra 5
clock cycles of the following instructions: `ldir`, `lddr`, `cpir`, `cpdr`,
`inir`, `indr`, `otir` and `otdr`.
32. Added emulation of the interrupt acceptance deferral that occurs during the
33. Added emulation of the interrupt acceptance deferral that occurs during the
`reti` and `retn` instructions.
33. Added MEMPTR emulation. The `bit N,(hl)` instruction now produces a correct
34. Added MEMPTR emulation. The `bit N,(hl)` instruction now produces a correct
value of F.
34. Added optional emulation of Q. If enabled at compile-time, the `ccf` and
35. Added optional emulation of Q. If enabled at compile-time, the `ccf` and
`scf` instructions will produce a correct value of F.
35. Added emulation of the `out (c),255` instruction (Zilog Z80 CMOS).
36. Added optional emulation of the bug affecting the `ld a,{i|r}` instructions
36. Added emulation of the `out (c),255` instruction (Zilog Z80 CMOS).
37. Added optional emulation of the bug affecting the `ld a,{i|r}` instructions
(Zilog Z80 NMOS). If enabled at compile-time and configured at runtime, the
P/V flag will be reset if an INT is accepted during the execution of these
instructions.
37. Added an optional implementation of the parity calculation for the P/V flag
38. Added an optional implementation of the parity calculation for the P/V flag
that performs the actual computation instead of using a table of precomputed
values.
38. Added an optional implementation of the `daa` instruction that uses a table
39. Added an optional implementation of the `daa` instruction that uses a table
of precomputed values.
39. Increased granularity. The emulator can now stop directly after fetching a
40. Increased granularity. The emulator can now stop directly after fetching a
prefix DDh or FDh if it runs out of clock cycles. This also works during the
INT response in mode 0.
40. Reimplemented the HALT state. The emulation should now be fully accurate.
41. Reimplemented the HALT state. The emulation should now be fully accurate.
HALTskip optimization is also supported.
41. Fixed a bug in the `sll` instruction.
42. Fixed a bug in the `INX` and `OUTX` macros affecting the S and N flags.
43. Fixed a bug in the `OUTX` macro affecting the MSByte of the port number.
44. Fixed the clock cycles of the `dec XY` and `in (c)` instructions.
45. Fixed the `read_16` function so that the order of the memory read operations
42. Fixed a bug in the `sll` instruction.
43. Fixed a bug in the `INX` and `OUTX` macros affecting the S and N flags.
44. Fixed a bug in the `OUTX` macro affecting the MSByte of the port number.
45. Fixed the clock cycles of the `dec XY` and `in (c)` instructions.
46. 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.
46. Fixed the order in which the memory write operations are performed when the
47. 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`.
47. Fixed the handling of illegal instructions to avoid stack overflows in long
48. Fixed the handling of illegal instructions to avoid stack overflows in long
sequences of DDh/FDh prefixes.
48. Fixed several implicit conversions to avoid warnings about loss of sign and
49. Fixed several implicit conversions to avoid warnings about loss of sign and
precision.
49. Fixed some bitwise operations to avoid undefined behavior and arithmetic
50. Fixed some bitwise operations to avoid undefined behavior and arithmetic
right shifts on signed integers.
50. Fixed violations of the C standard in several identifiers.
51. Renamed the 8-bit register lists: X/Y to J/K; J/K and P/Q to O/P.
52. Replaced all P/V overflow computation functions with a single, faster macro.
53. Replaced all register resolution functions with macros.
54. Replaced all `ld {J,K|O,P}` instructions that have the same destination and
51. Fixed violations of the C standard in several identifiers.
52. Renamed the 8-bit register lists: X/Y to J/K; J/K and P/Q to O/P.
53. Replaced all P/V overflow computation functions with a single, faster macro.
54. Replaced all register resolution functions with macros.
55. Replaced all `ld {J,K|O,P}` instructions that have the same destination and
source register with NOPs. In addition, the "illegal" forms of the following
instructions are now executed without using the illegal instruction handler:
`ld O,P`, `ld O,BYTE`, `U [a,]P` and `V O`.
55. Optimizations in flag computation and condition evaluation.
56. New source code comments and improvements to existing ones.
57. Improved code aesthetics.
58. Other improvements, optimizations and minor changes.
56. Optimizations in flag computation and condition evaluation.
57. New source code comments and improvements to existing ones.
58. Improved code aesthetics.
59. Other improvements, optimizations and minor changes.


Z80 v0.1 (2018-11-10)
Expand Down
Loading

0 comments on commit 633c131

Please sign in to comment.