Mercurial > repos > blastem
comparison z80_to_x86.c @ 286:872a8911e0f4
Implemente RLD
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 04 May 2013 18:51:53 -0700 |
parents | 021aeb6df19b |
children | fb840e0a48cd |
comparison
equal
deleted
inserted
replaced
285:021aeb6df19b | 286:872a8911e0f4 |
---|---|
1081 if (inst->reg == Z80_UNUSED) { | 1081 if (inst->reg == Z80_UNUSED) { |
1082 dst = z80_save_result(dst, inst); | 1082 dst = z80_save_result(dst, inst); |
1083 } else { | 1083 } else { |
1084 dst = z80_save_reg(dst, inst, opts); | 1084 dst = z80_save_reg(dst, inst, opts); |
1085 } | 1085 } |
1086 /*case Z80_RLD: | 1086 case Z80_RLD: |
1087 case Z80_RRD:*/ | 1087 dst = zcycles(dst, 8); |
1088 dst = mov_rr(dst, opts->regs[Z80_HL], SCRATCH1, SZ_W); | |
1089 dst = call(dst, (uint8_t *)z80_read_byte); | |
1090 //Before: (HL) = 0x12, A = 0x34 | |
1091 //After: (HL) = 0x24, A = 0x31 | |
1092 dst = mov_rr(dst, opts->regs[Z80_A], SCRATCH2, SZ_B); | |
1093 dst = shl_ir(dst, 4, SCRATCH1, SZ_W); | |
1094 dst = and_ir(dst, 0xF, SCRATCH2, SZ_W); | |
1095 dst = and_ir(dst, 0xFFF, SCRATCH1, SZ_W); | |
1096 dst = and_ir(dst, 0xF0, opts->regs[Z80_A], SZ_B); | |
1097 dst = or_rr(dst, SCRATCH2, SCRATCH1, SZ_W); | |
1098 //SCRATCH1 = 0x0124 | |
1099 dst = ror_ir(dst, 8, SCRATCH1, SZ_W); | |
1100 dst = zcycles(dst, 4); | |
1101 dst = or_rr(dst, SCRATCH1, opts->regs[Z80_A], SZ_B); | |
1102 dst = mov_rr(dst, opts->regs[Z80_HL], SCRATCH2, SZ_W); | |
1103 dst = ror_ir(dst, 8, SCRATCH1, SZ_W); | |
1104 dst = call(dst, (uint8_t *)z80_write_byte); | |
1105 break; | |
1106 //case Z80_RRD:*/ | |
1088 case Z80_BIT: | 1107 case Z80_BIT: |
1089 cycles = (inst->addr_mode == Z80_IX_DISPLACE || inst->addr_mode == Z80_IY_DISPLACE) ? 8 : 16; | 1108 cycles = (inst->addr_mode == Z80_IX_DISPLACE || inst->addr_mode == Z80_IY_DISPLACE) ? 8 : 16; |
1090 dst = zcycles(dst, cycles); | 1109 dst = zcycles(dst, cycles); |
1091 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, DONT_MODIFY); | 1110 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, DONT_MODIFY); |
1092 if (inst->addr_mode != Z80_REG) { | 1111 if (inst->addr_mode != Z80_REG) { |