comparison m68k_to_x86.c @ 97:c7185fd840fc

Fix address register indexed addressing (probably)
author Mike Pavone <pavone@retrodev.com>
date Thu, 27 Dec 2012 21:32:00 -0800
parents f894f85cf39d
children 104e257fb93c
comparison
equal deleted inserted replaced
96:f894f85cf39d 97:c7185fd840fc
222 out = add_rr(out, SCRATCH2, SCRATCH1, SZ_D); 222 out = add_rr(out, SCRATCH2, SCRATCH1, SZ_D);
223 } 223 }
224 if (inst->src.params.regs.displacement) { 224 if (inst->src.params.regs.displacement) {
225 out = add_ir(out, inst->src.params.regs.displacement, SCRATCH1, SZ_D); 225 out = add_ir(out, inst->src.params.regs.displacement, SCRATCH1, SZ_D);
226 } 226 }
227 switch (inst->extra.size)
228 {
229 case OPSIZE_BYTE:
230 out = call(out, (char *)m68k_read_byte_scratch1);
231 break;
232 case OPSIZE_WORD:
233 out = call(out, (char *)m68k_read_word_scratch1);
234 break;
235 case OPSIZE_LONG:
236 out = call(out, (char *)m68k_read_long_scratch1);
237 break;
238 }
239 ea->mode = MODE_REG_DIRECT;
240 ea->base = SCRATCH1;
227 break; 241 break;
228 case MODE_PC_DISPLACE: 242 case MODE_PC_DISPLACE:
229 out = cycles(out, BUS); 243 out = cycles(out, BUS);
230 out = mov_ir(out, inst->src.params.regs.displacement + inst->address+2, SCRATCH1, SZ_D); 244 out = mov_ir(out, inst->src.params.regs.displacement + inst->address+2, SCRATCH1, SZ_D);
231 switch (inst->extra.size) 245 switch (inst->extra.size)