Mercurial > repos > blastem
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; |