Mercurial > repos > blastem
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); |