modifySystemState(system_state_t systemState)1void Utility::modifySystemState(system_state_t systemState) { 2 diskBrowser->hide(); //avoid edge case oddities (eg movie playback window still open from previous game) 3 state.resetHistory(); //do not allow rewinding past a destructive system action 4 movie.stop(); //movies cannot continue to record after destructive system actions 5 6 video.clear(); 7 audio.clear(); 8 9 switch(systemState) { 10 case LoadCartridge: { 11 //must call cartridge.load_cart_...() before calling modifySystemState(LoadCartridge) 12 if(SNES::cartridge.loaded() == false) break; 13 cartridge.loadCheats(); 14 15 application.power = true; 16 application.pause = false; 17 SNES::system.power(); 18 19 //warn if unsupported hardware detected 20 string chip; 21 if(0); 22 else if(SNES::cartridge.has_dsp3()) chip = "DSP3"; 23 else if(SNES::cartridge.has_st011()) chip = "ST011"; 24 else if(SNES::cartridge.has_st018()) chip = "ST018"; 25 if(chip != "") { 26 QMessageBox::warning(mainWindow, "Warning", string() 27 << "<p><b>Warning:</b><br> The " << chip << " chip was detected, which is not fully emulated yet.<br>" 28 << "It is unlikely that this title will work properly.</p>"); 29 } 30 31 showMessage(string() 32 << "Loaded " << cartridge.name 33 << (cartridge.patchApplied ? ", and applied UPS patch." : ".")); 34 mainWindow->setWindowTitle(string() << cartridge.name << " - " << bsnesTitle << " v" << bsnesVersion); 35 #if defined(DEBUGGER) 36 debugger->echo(string() << "Loaded " << cartridge.name << ".<br>"); 37 #endif 38 } break; 39 40 case UnloadCartridge: { 41 if(SNES::cartridge.loaded() == false) break; //no cart to unload? 42 cartridge.saveCheats(); 43 44 SNES::system.unload(); //flush all memory to memory::* devices 45 cartridge.saveMemory(); //save memory to disk 46 SNES::cartridge.unload(); //deallocate memory 47 48 application.power = false; 49 application.pause = true; 50 51 showMessage(string() << "Unloaded " << cartridge.name << "."); 52 mainWindow->setWindowTitle(string() << bsnesTitle << " v" << bsnesVersion); 53 } break; 54 55 case PowerOn: { 56 if(SNES::cartridge.loaded() == false || application.power == true) break; 57 58 application.power = true; 59 application.pause = false; 60 SNES::system.power(); 61 62 showMessage("Power on."); 63 } break; 64 65 case PowerOff: { 66 if(SNES::cartridge.loaded() == false || application.power == false) break; 67 68 application.power = false; 69 application.pause = true; 70 71 showMessage("Power off."); 72 } break; 73 74 case PowerCycle: { 75 if(SNES::cartridge.loaded() == false) break; 76 77 application.power = true; 78 application.pause = false; 79 SNES::system.power(); 80 81 showMessage("System power was cycled."); 82 } break; 83 84 case Reset: { 85 if(SNES::cartridge.loaded() == false || application.power == false) break; 86 87 application.pause = false; 88 SNES::system.reset(); 89 90 showMessage("System was reset."); 91 } break; 92 } 93 94 mainWindow->syncUi(); 95 #if defined(DEBUGGER) 96 debugger->modifySystemState(systemState); 97 debugger->synchronize(); 98 #endif 99 cheatEditorWindow->synchronize(); 100 cheatFinderWindow->synchronize(); 101 stateManagerWindow->reload(); 102 } 103