diff options
author | Michael Pavone <pavone@retrodev.com> | 2014-01-27 22:12:22 -0800 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2014-01-27 22:12:22 -0800 |
commit | 21c31dc425d0c599aecffa5f3d0e7b9202d2d465 (patch) | |
tree | 91eb7df6ae0dd9ab09c9625d64111f466db7553d | |
parent | e6825f6403036a874216d58fe1ac3989898e61f3 (diff) |
Fix timing of certain ld and jp instructions in the Z80 core
-rw-r--r-- | z80_to_x86.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/z80_to_x86.c b/z80_to_x86.c index c1702bd..2cab1c9 100644 --- a/z80_to_x86.c +++ b/z80_to_x86.c @@ -346,6 +346,9 @@ uint8_t * translate_z80inst(z80inst * inst, uint8_t * dst, z80_context * context if (inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { cycles += 4; } + if (inst->reg == Z80_I || inst->ea_reg == Z80_I) { + cycles += 5; + } break; case Z80_IMMED: cycles = size == SZ_B ? 7 : 10; @@ -355,7 +358,7 @@ uint8_t * translate_z80inst(z80inst * inst, uint8_t * dst, z80_context * context break; case Z80_IX_DISPLACE: case Z80_IY_DISPLACE: - cycles = 12; + cycles = 16; break; } if ((inst->reg >= Z80_IXL && inst->reg <= Z80_IYH) || inst->reg == Z80_IX || inst->reg == Z80_IY) { @@ -1312,7 +1315,7 @@ uint8_t * translate_z80inst(z80inst * inst, uint8_t * dst, z80_context * context } case Z80_JP: { cycles = 4; - if (inst->addr_mode != Z80_REG) { + if (inst->addr_mode != Z80_REG_INDIRECT) { cycles += 6; } else if(inst->ea_reg == Z80_IX || inst->ea_reg == Z80_IY) { cycles += 4; |