Mercurial > repos > blastem
comparison z80_to_x86.c @ 1561:5a6339e46917
Fix timing for Z80 JP cc, nn instruction
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 08 Apr 2018 12:26:18 -0700 |
parents | 2e6320d261ff |
children | 31effaadf877 |
comparison
equal
deleted
inserted
replaced
1560:18ffa9caa00c | 1561:5a6339e46917 |
---|---|
2073 jmp_r(code, opts->gen.scratch1); | 2073 jmp_r(code, opts->gen.scratch1); |
2074 } | 2074 } |
2075 break; | 2075 break; |
2076 } | 2076 } |
2077 case Z80_JPCC: { | 2077 case Z80_JPCC: { |
2078 cycles(&opts->gen, num_cycles + 3);//T States: 4,3 | 2078 cycles(&opts->gen, num_cycles + 6);//T States: 4,3,3 |
2079 uint8_t cond = CC_Z; | 2079 uint8_t cond = CC_Z; |
2080 switch (inst->reg) | 2080 switch (inst->reg) |
2081 { | 2081 { |
2082 case Z80_CC_NZ: | 2082 case Z80_CC_NZ: |
2083 cond = CC_NZ; | 2083 cond = CC_NZ; |
2100 cmp_irdisp(code, 0, opts->gen.context_reg, zf_off(ZF_S), SZ_B); | 2100 cmp_irdisp(code, 0, opts->gen.context_reg, zf_off(ZF_S), SZ_B); |
2101 break; | 2101 break; |
2102 } | 2102 } |
2103 uint8_t *no_jump_off = code->cur+1; | 2103 uint8_t *no_jump_off = code->cur+1; |
2104 jcc(code, cond, code->cur+2); | 2104 jcc(code, cond, code->cur+2); |
2105 cycles(&opts->gen, 5);//T States: 5 | |
2106 uint16_t dest_addr = inst->immed; | 2105 uint16_t dest_addr = inst->immed; |
2107 code_ptr call_dst = z80_get_native_address(context, dest_addr); | 2106 code_ptr call_dst = z80_get_native_address(context, dest_addr); |
2108 if (!call_dst) { | 2107 if (!call_dst) { |
2109 opts->gen.deferred = defer_address(opts->gen.deferred, dest_addr, code->cur + 1); | 2108 opts->gen.deferred = defer_address(opts->gen.deferred, dest_addr, code->cur + 1); |
2110 //fake address to force large displacement | 2109 //fake address to force large displacement |