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) {