comparison m68k_to_x86.c @ 183:2f08d9e90a4c

Fix (a7)+ src when size is byte, fix trap return address, make div with areg src decoded to invalid
author Mike Pavone <pavone@retrodev.com>
date Wed, 09 Jan 2013 22:31:07 -0800
parents 924af8b2f7a0
children ebcbdd1c4cc8
comparison
equal deleted inserted replaced
182:924af8b2f7a0 183:2f08d9e90a4c
165 out = call(out, (char *)m68k_read_long_scratch1); 165 out = call(out, (char *)m68k_read_long_scratch1);
166 break; 166 break;
167 } 167 }
168 168
169 if (inst->src.addr_mode == MODE_AREG_POSTINC) { 169 if (inst->src.addr_mode == MODE_AREG_POSTINC) {
170 inc_amount = inst->extra.size == OPSIZE_WORD ? 2 : (inst->extra.size == OPSIZE_LONG ? 4 : 1); 170 inc_amount = inst->extra.size == OPSIZE_WORD ? 2 : (inst->extra.size == OPSIZE_LONG ? 4 : (inst->src.params.regs.pri == 7 ? 2 : 1));
171 if (opts->aregs[inst->src.params.regs.pri] >= 0) { 171 if (opts->aregs[inst->src.params.regs.pri] >= 0) {
172 out = add_ir(out, inc_amount, opts->aregs[inst->src.params.regs.pri], SZ_D); 172 out = add_ir(out, inc_amount, opts->aregs[inst->src.params.regs.pri], SZ_D);
173 } else { 173 } else {
174 out = add_irdisp8(out, inc_amount, CONTEXT, reg_offset(&(inst->src)), SZ_D); 174 out = add_irdisp8(out, inc_amount, CONTEXT, reg_offset(&(inst->src)), SZ_D);
175 } 175 }
3482 dst = mov_ir(dst, 0, FLAG_V, SZ_B); 3482 dst = mov_ir(dst, 0, FLAG_V, SZ_B);
3483 break; 3483 break;
3484 //case M68K_TAS: 3484 //case M68K_TAS:
3485 case M68K_TRAP: 3485 case M68K_TRAP:
3486 dst = mov_ir(dst, src_op.disp, SCRATCH2, SZ_D); 3486 dst = mov_ir(dst, src_op.disp, SCRATCH2, SZ_D);
3487 dst = mov_ir(dst, inst->address, SCRATCH1, SZ_D); 3487 dst = mov_ir(dst, inst->address+2, SCRATCH1, SZ_D);
3488 dst = jmp(dst, (uint8_t *)m68k_trap); 3488 dst = jmp(dst, (uint8_t *)m68k_trap);
3489 break; 3489 break;
3490 //case M68K_TRAPV: 3490 //case M68K_TRAPV:
3491 case M68K_TST: 3491 case M68K_TST:
3492 dst = cycles(dst, BUS); 3492 dst = cycles(dst, BUS);