comparison genesis.c @ 1208:95f5253e75c7

Implement soft reset in Genesis mode
author Michael Pavone <pavone@retrodev.com>
date Fri, 27 Jan 2017 21:27:37 -0800
parents d7be5b6e0a8d
children cf69a179aeaf
comparison
equal deleted inserted replaced
1207:9d6f155732ed 1208:95f5253e75c7
788 gen->normal_clock = MCLKS_NTSC; 788 gen->normal_clock = MCLKS_NTSC;
789 } 789 }
790 gen->master_clock = gen->normal_clock; 790 gen->master_clock = gen->normal_clock;
791 } 791 }
792 792
793 static void handle_reset_requests(genesis_context *gen)
794 {
795 while (gen->reset_requested)
796 {
797 gen->reset_requested = 0;
798 z80_assert_reset(gen->z80, gen->m68k->current_cycle);
799 z80_clear_busreq(gen->z80, gen->m68k->current_cycle);
800 //Is there any sort of VDP reset?
801 m68k_reset(gen->m68k);
802 }
803 }
804
793 static void start_genesis(system_header *system, char *statefile) 805 static void start_genesis(system_header *system, char *statefile)
794 { 806 {
795 genesis_context *gen = (genesis_context *)system; 807 genesis_context *gen = (genesis_context *)system;
796 set_keybindings(&gen->io); 808 set_keybindings(&gen->io);
797 render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC); 809 render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC);
813 uint32_t address = gen->cart[2] << 16 | gen->cart[3]; 825 uint32_t address = gen->cart[2] << 16 | gen->cart[3];
814 insert_breakpoint(gen->m68k, address, gen->header.debugger_type == DEBUGGER_NATIVE ? debugger : gdb_debug_enter); 826 insert_breakpoint(gen->m68k, address, gen->header.debugger_type == DEBUGGER_NATIVE ? debugger : gdb_debug_enter);
815 } 827 }
816 m68k_reset(gen->m68k); 828 m68k_reset(gen->m68k);
817 } 829 }
830 handle_reset_requests(gen);
818 } 831 }
819 832
820 static void resume_genesis(system_header *system) 833 static void resume_genesis(system_header *system)
821 { 834 {
822 genesis_context *gen = (genesis_context *)system; 835 genesis_context *gen = (genesis_context *)system;
823 map_all_bindings(&gen->io); 836 map_all_bindings(&gen->io);
824 render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC); 837 render_set_video_standard((gen->version_reg & HZ50) ? VID_PAL : VID_NTSC);
825 resume_68k(gen->m68k); 838 resume_68k(gen->m68k);
839 handle_reset_requests(gen);
826 } 840 }
827 841
828 static void inc_debug_mode(system_header *system) 842 static void inc_debug_mode(system_header *system)
829 { 843 {
830 genesis_context *gen = (genesis_context *)system; 844 genesis_context *gen = (genesis_context *)system;
874 fclose(f); 888 fclose(f);
875 if (read > 0) { 889 if (read > 0) {
876 printf("Loaded %s from %s\n", gen->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename); 890 printf("Loaded %s from %s\n", gen->save_type == SAVE_I2C ? "EEPROM" : "SRAM", save_filename);
877 } 891 }
878 } 892 }
893 }
894
895 static void soft_reset(system_header *system)
896 {
897 genesis_context *gen = (genesis_context *)system;
898 gen->m68k->should_return = 1;
899 gen->reset_requested = 1;
879 } 900 }
880 901
881 static void free_genesis(system_header *system) 902 static void free_genesis(system_header *system)
882 { 903 {
883 genesis_context *gen = (genesis_context *)system; 904 genesis_context *gen = (genesis_context *)system;
910 gen->header.set_speed_percent = set_speed_percent; 931 gen->header.set_speed_percent = set_speed_percent;
911 gen->header.start_context = start_genesis; 932 gen->header.start_context = start_genesis;
912 gen->header.resume_context = resume_genesis; 933 gen->header.resume_context = resume_genesis;
913 gen->header.load_save = load_save; 934 gen->header.load_save = load_save;
914 gen->header.persist_save = persist_save; 935 gen->header.persist_save = persist_save;
936 gen->header.soft_reset = soft_reset;
915 gen->header.free_context = free_genesis; 937 gen->header.free_context = free_genesis;
916 gen->header.get_open_bus_value = get_open_bus_value; 938 gen->header.get_open_bus_value = get_open_bus_value;
917 gen->header.request_exit = request_exit; 939 gen->header.request_exit = request_exit;
918 gen->header.inc_debug_mode = inc_debug_mode; 940 gen->header.inc_debug_mode = inc_debug_mode;
919 gen->header.inc_debug_pal = inc_debug_pal; 941 gen->header.inc_debug_pal = inc_debug_pal;