comparison z80_to_x86.c @ 262:d97c9eca49f4

Implement ld to and from the I and R registers
author Mike Pavone <pavone@retrodev.com>
date Tue, 30 Apr 2013 20:33:30 -0700
parents f0c53a4bbfa3
children 8fd6652e56f8
comparison
equal deleted inserted replaced
261:f0c53a4bbfa3 262:d97c9eca49f4
86 } else { 86 } else {
87 ea->mode = MODE_REG_DIRECT; 87 ea->mode = MODE_REG_DIRECT;
88 if (inst->reg == Z80_IYH) { 88 if (inst->reg == Z80_IYH) {
89 ea->base = opts->regs[Z80_IYL]; 89 ea->base = opts->regs[Z80_IYL];
90 dst = ror_ir(dst, 8, opts->regs[Z80_IY], SZ_W); 90 dst = ror_ir(dst, 8, opts->regs[Z80_IY], SZ_W);
91 } else { 91 } else if(opts->regs[inst->reg] >= 0) {
92 ea->base = opts->regs[inst->reg]; 92 ea->base = opts->regs[inst->reg];
93 } else {
94 ea->mode = MODE_REG_DISPLACE8;
95 ea->base = CONTEXT;
96 ea->disp = offsetof(z80_context, regs) + inst->reg;
93 } 97 }
94 } 98 }
95 return dst; 99 return dst;
96 } 100 }
97 101
299 } else { 303 } else {
300 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, DONT_MODIFY); 304 dst = translate_z80_ea(inst, &src_op, dst, opts, READ, DONT_MODIFY);
301 dst = translate_z80_reg(inst, &dst_op, dst, opts); 305 dst = translate_z80_reg(inst, &dst_op, dst, opts);
302 } 306 }
303 if (src_op.mode == MODE_REG_DIRECT) { 307 if (src_op.mode == MODE_REG_DIRECT) {
304 dst = mov_rr(dst, src_op.base, dst_op.base, size); 308 if(dst_op.mode == MODE_REG_DISPLACE8) {
305 } else { 309 dst = mov_rrdisp8(dst, src_op.base, dst_op.base, dst_op.disp, size);
310 } else {
311 dst = mov_rr(dst, src_op.base, dst_op.base, size);
312 }
313 } else if(src_op.mode == MODE_IMMED) {
306 dst = mov_ir(dst, src_op.disp, dst_op.base, size); 314 dst = mov_ir(dst, src_op.disp, dst_op.base, size);
315 } else {
316 dst = mov_rdisp8r(dst, src_op.base, src_op.disp, dst_op.base, size);
307 } 317 }
308 dst = z80_save_reg(dst, inst, opts); 318 dst = z80_save_reg(dst, inst, opts);
309 dst = z80_save_ea(dst, inst, opts); 319 dst = z80_save_ea(dst, inst, opts);
310 if (inst->addr_mode & Z80_DIR) { 320 if (inst->addr_mode & Z80_DIR) {
311 dst = z80_save_result(dst, inst); 321 dst = z80_save_result(dst, inst);