changeset 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
files m68k_to_x86.c
diffstat 1 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/m68k_to_x86.c	Thu Dec 27 23:00:11 2012 -0800
+++ b/m68k_to_x86.c	Fri Dec 28 10:37:09 2012 -0800
@@ -1443,6 +1443,7 @@
 		break;
 	default:
 		printf("address mode %d not yet supported (jsr)\n", inst->src.addr_mode);
+		exit(1);
 	}
 	return dst;
 }
@@ -1913,15 +1914,21 @@
 			}
 		}
 		break;
-	//case M68K_EXT:
-	//	break;
 	case M68K_ILLEGAL:
 		dst = call(dst, (uint8_t *)m68k_save_context);
 		dst = mov_rr(dst, CONTEXT, RDI, SZ_Q);
 		dst = call(dst, (uint8_t *)print_regs_exit);
 		break;
-	/*case M68K_MOVE_FROM_SR:
-		break;*/
+	case M68K_MOVE_FROM_SR:
+		//TODO: Trap if not in system mode
+		dst = call(dst, (uint8_t *)get_sr);
+		if (dst_op.mode == MODE_REG_DIRECT) {
+			dst = mov_rr(dst, SCRATCH1, dst_op.base, SZ_W);
+		} else {
+			dst = mov_rrdisp8(dst, SCRATCH1, dst_op.base, dst_op.disp, SZ_W);
+		}
+		dst = m68k_save_result(inst, dst, opts);
+		break;
 	case M68K_MOVE_CCR:
 	case M68K_MOVE_SR:
 		//TODO: Privilege check for MOVE to SR