| 3770 | } |
| 3771 | |
| 3772 | static void cpu_do_fallback() |
| 3773 | { |
| 3774 | bool fallbackmode = false; |
| 3775 | if ((fallback_new_cpu_model < 68020 && !(currprefs.chipset_mask & CSMASK_AGA)) || (fallback_new_cpu_model == 68020 && (currprefs.chipset_mask & CSMASK_AGA))) { |
| 3776 | // -> 68000/68010 or 68EC020 |
| 3777 | fallback_cpu_model = currprefs.cpu_model; |
| 3778 | fallback_fpu_model = currprefs.fpu_model; |
| 3779 | fallback_mmu_model = currprefs.mmu_model; |
| 3780 | fallback_cpu_compatible = currprefs.cpu_compatible; |
| 3781 | fallback_cpu_address_space_24 = currprefs.address_space_24; |
| 3782 | changed_prefs.cpu_model = currprefs.cpu_model_fallback && fallback_new_cpu_model <= 68020 ? currprefs.cpu_model_fallback : fallback_new_cpu_model; |
| 3783 | changed_prefs.fpu_model = 0; |
| 3784 | changed_prefs.mmu_model = 0; |
| 3785 | changed_prefs.cpu_compatible = true; |
| 3786 | changed_prefs.address_space_24 = true; |
| 3787 | memcpy(&fallback_regs, ®s, sizeof(struct regstruct)); |
| 3788 | fallback_regs.pc = M68K_GETPC; |
| 3789 | fallbackmode = true; |
| 3790 | } else { |
| 3791 | // -> 68020+ |
| 3792 | changed_prefs.cpu_model = fallback_cpu_model; |
| 3793 | changed_prefs.fpu_model = fallback_fpu_model; |
| 3794 | changed_prefs.mmu_model = fallback_mmu_model; |
| 3795 | changed_prefs.cpu_compatible = fallback_cpu_compatible; |
| 3796 | changed_prefs.address_space_24 = fallback_cpu_address_space_24; |
| 3797 | fallback_cpu_model = 0; |
| 3798 | } |
| 3799 | init_m68k(); |
| 3800 | build_cpufunctbl(); |
| 3801 | m68k_reset2(false); |
| 3802 | if (!fallbackmode) { |
| 3803 | // restore original 68020+ |
| 3804 | memcpy(®s, &fallback_regs, sizeof(regs)); |
| 3805 | restore_banks(); |
| 3806 | memory_restore(); |
| 3807 | #ifdef DEBUGGER |
| 3808 | memory_map_dump(); |
| 3809 | #endif |
| 3810 | m68k_setpc(fallback_regs.pc); |
| 3811 | } else { |
| 3812 | // 68000/010/EC020 |
| 3813 | memory_restore(); |
| 3814 | expansion_cpu_fallback(); |
| 3815 | #ifdef DEBUGGER |
| 3816 | memory_map_dump(); |
| 3817 | #endif |
| 3818 | } |
| 3819 | } |
| 3820 | |
| 3821 | static void m68k_reset_restore() |
| 3822 | { |
no test coverage detected