Mercurial > repos > blastem
comparison z80_to_x86.c @ 307:b6393b89a7e4
Complete flag behavior for Z80 BIT instruction
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 08 May 2013 23:44:49 -0700 |
parents | 3970006fae90 |
children | e0e81551fd7e |
comparison
equal
deleted
inserted
replaced
306:3970006fae90 | 307:b6393b89a7e4 |
---|---|
1158 //Reads normally take 3 cycles, but the read at the end of a bit instruction takes 4 | 1158 //Reads normally take 3 cycles, but the read at the end of a bit instruction takes 4 |
1159 dst = zcycles(dst, 1); | 1159 dst = zcycles(dst, 1); |
1160 } | 1160 } |
1161 dst = bt_ir(dst, inst->immed, src_op.base, SZ_B); | 1161 dst = bt_ir(dst, inst->immed, src_op.base, SZ_B); |
1162 dst = setcc_rdisp8(dst, CC_NC, CONTEXT, zf_off(ZF_Z)); | 1162 dst = setcc_rdisp8(dst, CC_NC, CONTEXT, zf_off(ZF_Z)); |
1163 dst = setcc_rdisp8(dst, CC_NC, CONTEXT, zf_off(ZF_PV)); | |
1164 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | |
1165 if (inst->immed == 7) { | |
1166 dst = cmp_ir(dst, 0, src_op.base, SZ_B); | |
1167 dst = setcc_rdisp8(dst, CC_S, CONTEXT, zf_off(ZF_S)); | |
1168 } else { | |
1169 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_S), SZ_B); | |
1170 } | |
1163 break; | 1171 break; |
1164 case Z80_SET: | 1172 case Z80_SET: |
1165 cycles = (inst->addr_mode == Z80_IX_DISPLACE || inst->addr_mode == Z80_IY_DISPLACE) ? 8 : 16; | 1173 cycles = (inst->addr_mode == Z80_IX_DISPLACE || inst->addr_mode == Z80_IY_DISPLACE) ? 8 : 16; |
1166 dst = zcycles(dst, cycles); | 1174 dst = zcycles(dst, cycles); |
1167 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, MODIFY); | 1175 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, MODIFY); |