comparison 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
comparison
equal deleted inserted replaced
686:8cb61671777b 687:a61d33ccea7d
499 void swap_ssp_usp(m68k_options * opts) 499 void swap_ssp_usp(m68k_options * opts)
500 { 500 {
501 areg_to_native(opts, 7, opts->gen.scratch2); 501 areg_to_native(opts, 7, opts->gen.scratch2);
502 areg_to_native(opts, 8, opts->aregs[7]); 502 areg_to_native(opts, 8, opts->aregs[7]);
503 native_to_areg(opts, opts->gen.scratch2, 8); 503 native_to_areg(opts, opts->gen.scratch2, 8);
504 }
505
506 void translate_m68k_reset(m68k_options *opts, m68kinst *inst)
507 {
508 code_info *code = &opts->gen.code;
509 call(code, opts->gen.save_context);
510 call_args(code, (code_ptr)print_regs_exit, 1, opts->gen.context_reg);
511 }
512
513 void translate_m68k_rte(m68k_options *opts, m68kinst *inst)
514 {
515 code_info *code = &opts->gen.code;
516 //TODO: Trap if not in system mode
517 //Read saved SR
518 areg_to_native(opts, 7, opts->gen.scratch1);
519 call(code, opts->read_16);
520 addi_areg(opts, 2, 7);
521 call(code, opts->set_sr);
522 //Read saved PC
523 areg_to_native(opts, 7, opts->gen.scratch1);
524 call(code, opts->read_32);
525 addi_areg(opts, 4, 7);
526 check_user_mode_swap_ssp_usp(opts);
527 //Get native address, sync components, recalculate integer points and jump to returned address
528 call(code, opts->native_addr_and_sync);
529 jmp_r(code, opts->gen.scratch1);
504 } 530 }
505 531
506 code_ptr get_native_address(native_map_slot * native_code_map, uint32_t address) 532 code_ptr get_native_address(native_map_slot * native_code_map, uint32_t address)
507 { 533 {
508 address &= 0xFFFFFF; 534 address &= 0xFFFFFF;