comparison m68k_to_x86.c @ 105:1a0fd122ca8f

Implemented move from SR
author Mike Pavone <pavone@retrodev.com>
date Fri, 28 Dec 2012 10:37:09 -0800
parents a0fdaa134964
children 1eba2b9455f8
comparison
equal deleted inserted replaced
104:a0fdaa134964 105:1a0fd122ca8f
1441 //would add_ir(dst, 8, RSP, SZ_Q) be faster here? 1441 //would add_ir(dst, 8, RSP, SZ_Q) be faster here?
1442 dst = pop_r(dst, SCRATCH1); 1442 dst = pop_r(dst, SCRATCH1);
1443 break; 1443 break;
1444 default: 1444 default:
1445 printf("address mode %d not yet supported (jsr)\n", inst->src.addr_mode); 1445 printf("address mode %d not yet supported (jsr)\n", inst->src.addr_mode);
1446 exit(1);
1446 } 1447 }
1447 return dst; 1448 return dst;
1448 } 1449 }
1449 1450
1450 uint8_t * translate_m68k_rts(uint8_t * dst, m68kinst * inst, x86_68k_options * opts) 1451 uint8_t * translate_m68k_rts(uint8_t * dst, m68kinst * inst, x86_68k_options * opts)
1911 dst = mov_rrdisp8(dst, SCRATCH1, dst_op.base, dst_op.disp, SZ_D); 1912 dst = mov_rrdisp8(dst, SCRATCH1, dst_op.base, dst_op.disp, SZ_D);
1912 dst = mov_rrdisp8(dst, SCRATCH2, src_op.base, src_op.disp, SZ_D); 1913 dst = mov_rrdisp8(dst, SCRATCH2, src_op.base, src_op.disp, SZ_D);
1913 } 1914 }
1914 } 1915 }
1915 break; 1916 break;
1916 //case M68K_EXT:
1917 // break;
1918 case M68K_ILLEGAL: 1917 case M68K_ILLEGAL:
1919 dst = call(dst, (uint8_t *)m68k_save_context); 1918 dst = call(dst, (uint8_t *)m68k_save_context);
1920 dst = mov_rr(dst, CONTEXT, RDI, SZ_Q); 1919 dst = mov_rr(dst, CONTEXT, RDI, SZ_Q);
1921 dst = call(dst, (uint8_t *)print_regs_exit); 1920 dst = call(dst, (uint8_t *)print_regs_exit);
1922 break; 1921 break;
1923 /*case M68K_MOVE_FROM_SR: 1922 case M68K_MOVE_FROM_SR:
1924 break;*/ 1923 //TODO: Trap if not in system mode
1924 dst = call(dst, (uint8_t *)get_sr);
1925 if (dst_op.mode == MODE_REG_DIRECT) {
1926 dst = mov_rr(dst, SCRATCH1, dst_op.base, SZ_W);
1927 } else {
1928 dst = mov_rrdisp8(dst, SCRATCH1, dst_op.base, dst_op.disp, SZ_W);
1929 }
1930 dst = m68k_save_result(inst, dst, opts);
1931 break;
1925 case M68K_MOVE_CCR: 1932 case M68K_MOVE_CCR:
1926 case M68K_MOVE_SR: 1933 case M68K_MOVE_SR:
1927 //TODO: Privilege check for MOVE to SR 1934 //TODO: Privilege check for MOVE to SR
1928 if (src_op.mode == MODE_IMMED) { 1935 if (src_op.mode == MODE_IMMED) {
1929 dst = mov_ir(dst, src_op.disp & 0x1, FLAG_C, SZ_B); 1936 dst = mov_ir(dst, src_op.disp & 0x1, FLAG_C, SZ_B);