Speed optimization for some XY-prefixed instructions
This commit is contained in:
4
HISTORY
4
HISTORY
@@ -49,7 +49,9 @@ Changes:
|
||||
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.
|
||||
source register with NOPs. In addition, the "illegal" forms of the `ld O,P`,
|
||||
`ld O,BYTE`, `U [a,]P` and `V O` instructions are now executed without using
|
||||
the illegal instruction handler.
|
||||
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`.
|
||||
|
||||
@@ -40,7 +40,7 @@ Changes:
|
||||
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.
|
||||
32. 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 ``ld O,P``, ``ld O,BYTE``, ``U [a,]P`` and ``V O`` instructions are now executed without using the illegal instruction handler.
|
||||
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.
|
||||
|
||||
@@ -1739,18 +1739,18 @@ static Instruction const ed_instruction_table[256] = {
|
||||
|
||||
static Instruction const xy_instruction_table[256] = {
|
||||
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||
/* 0 */ nop_nop, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal,
|
||||
/* 1 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal,
|
||||
/* 0 */ nop_nop, xy_illegal, xy_illegal, xy_illegal, V_O, V_O, ld_O_BYTE, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, V_O, V_O, ld_O_BYTE, xy_illegal,
|
||||
/* 1 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, V_O, V_O, ld_O_BYTE, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, V_O, V_O, ld_O_BYTE, xy_illegal,
|
||||
/* 2 */ xy_illegal, ld_XY_WORD, ld_vWORD_XY, inc_XY, V_O, V_O, ld_O_BYTE, xy_illegal, xy_illegal, add_XY_WW, ld_XY_vWORD, dec_XY, V_O, V_O, ld_O_BYTE, xy_illegal,
|
||||
/* 3 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, V_vXYpOFFSET, V_vXYpOFFSET, ld_vXYpOFFSET_BYTE, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal,
|
||||
/* 4 */ nop_nop, xy_illegal, xy_illegal, xy_illegal, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, xy_illegal, xy_illegal, nop_nop, xy_illegal, xy_illegal, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, xy_illegal,
|
||||
/* 5 */ xy_illegal, xy_illegal, nop_nop, xy_illegal, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, xy_illegal, xy_illegal, xy_illegal, xy_illegal, nop_nop, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, xy_illegal,
|
||||
/* 3 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, V_vXYpOFFSET, V_vXYpOFFSET, ld_vXYpOFFSET_BYTE, xy_illegal, xy_illegal, add_XY_WW, xy_illegal, xy_illegal, V_O, V_O, ld_O_BYTE, xy_illegal,
|
||||
/* 4 */ nop_nop, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, ld_O_P, ld_O_P, nop_nop, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, ld_O_P,
|
||||
/* 5 */ ld_O_P, ld_O_P, nop_nop, ld_O_P, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, ld_O_P, ld_O_P, ld_O_P, ld_O_P, nop_nop, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, ld_O_P,
|
||||
/* 6 */ ld_O_P, ld_O_P, ld_O_P, ld_O_P, nop_nop, ld_O_P, ld_J_vXYpOFFSET, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_O_P, nop_nop, ld_J_vXYpOFFSET, ld_O_P,
|
||||
/* 7 */ ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, xy_illegal, ld_vXYpOFFSET_K, xy_illegal, xy_illegal, xy_illegal, xy_illegal, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, nop_nop,
|
||||
/* 8 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal,
|
||||
/* 9 */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal,
|
||||
/* A */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal,
|
||||
/* B */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, U_a_P, U_a_P, U_a_vXYpOFFSET, xy_illegal,
|
||||
/* 7 */ ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, ld_vXYpOFFSET_K, xy_illegal, ld_vXYpOFFSET_K, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_O_P, ld_J_vXYpOFFSET, nop_nop,
|
||||
/* 8 */ U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P,
|
||||
/* 9 */ U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P,
|
||||
/* A */ U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P,
|
||||
/* B */ U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_P, U_a_vXYpOFFSET, U_a_P,
|
||||
/* C */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_cb_prefix, xy_illegal, xy_illegal, xy_illegal, xy_illegal,
|
||||
/* D */ xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_xy, xy_illegal, xy_illegal,
|
||||
/* E */ xy_illegal, pop_XY, xy_illegal, ex_vsp_XY, xy_illegal, push_XY, xy_illegal, xy_illegal, xy_illegal, jp_XY, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal, xy_illegal,
|
||||
|
||||
Reference in New Issue
Block a user