diff m68k_core.c @ 687:a61d33ccea7d

Moved translate_m68k_rte and translate_m68k_reset to m68k_core.c
author Michael Pavone <pavone@retrodev.com>
date Thu, 08 Jan 2015 19:11:56 -0800
parents e26640daf1ae
children 8c546bc1d773
line wrap: on
line diff
--- a/m68k_core.c	Thu Jan 08 09:36:54 2015 -0800
+++ b/m68k_core.c	Thu Jan 08 19:11:56 2015 -0800
@@ -503,6 +503,32 @@
 	native_to_areg(opts, opts->gen.scratch2, 8);
 }
 
+void translate_m68k_reset(m68k_options *opts, m68kinst *inst)
+{
+	code_info *code = &opts->gen.code;
+	call(code, opts->gen.save_context);
+	call_args(code, (code_ptr)print_regs_exit, 1, opts->gen.context_reg);
+}
+
+void translate_m68k_rte(m68k_options *opts, m68kinst *inst)
+{
+	code_info *code = &opts->gen.code;
+	//TODO: Trap if not in system mode
+	//Read saved SR
+	areg_to_native(opts, 7, opts->gen.scratch1);
+	call(code, opts->read_16);
+	addi_areg(opts, 2, 7);
+	call(code, opts->set_sr);
+	//Read saved PC
+	areg_to_native(opts, 7, opts->gen.scratch1);
+	call(code, opts->read_32);
+	addi_areg(opts, 4, 7);
+	check_user_mode_swap_ssp_usp(opts);
+	//Get native address, sync components, recalculate integer points and jump to returned address
+	call(code, opts->native_addr_and_sync);
+	jmp_r(code, opts->gen.scratch1);
+}
+
 code_ptr get_native_address(native_map_slot * native_code_map, uint32_t address)
 {
 	address &= 0xFFFFFF;