Fixed crash when loading VS-DualSystem games that are marked as having no work ram
This commit is contained in:
parent
55199beda7
commit
829c51957e
6 changed files with 22 additions and 5 deletions
|
@ -438,7 +438,9 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile, bool forP
|
|||
}
|
||||
|
||||
//Used by netplay to take save state after UpdateInputState() is called above, to ensure client+server are in sync
|
||||
if(!_master) {
|
||||
_notificationManager->SendNotification(ConsoleNotificationType::GameInitCompleted);
|
||||
}
|
||||
|
||||
Resume();
|
||||
return true;
|
||||
|
@ -627,7 +629,9 @@ void Console::ResetComponents(bool softReset)
|
|||
_resetRunTimers = true;
|
||||
|
||||
//This notification MUST be sent before the UpdateInputState() below to allow MovieRecorder to grab the first frame's worth of inputs
|
||||
if(!_master) {
|
||||
_notificationManager->SendNotification(softReset ? ConsoleNotificationType::GameReset : ConsoleNotificationType::GameLoaded);
|
||||
}
|
||||
|
||||
if(softReset) {
|
||||
shared_ptr<Debugger> debugger = _debugger;
|
||||
|
|
|
@ -24,10 +24,16 @@ void VsControlManager::Reset(bool softReset)
|
|||
_vsSystemType = _console->GetRomInfo().VsType;
|
||||
|
||||
if(!softReset && !_console->IsMaster() && _console->GetDualConsole()) {
|
||||
UnregisterInputProvider(this);
|
||||
RegisterInputProvider(this);
|
||||
}
|
||||
}
|
||||
|
||||
VsControlManager::~VsControlManager()
|
||||
{
|
||||
UnregisterInputProvider(this);
|
||||
}
|
||||
|
||||
void VsControlManager::StreamState(bool saving)
|
||||
{
|
||||
ControlManager::StreamState(saving);
|
||||
|
|
|
@ -52,6 +52,7 @@ protected:
|
|||
|
||||
public:
|
||||
using ControlManager::ControlManager;
|
||||
~VsControlManager();
|
||||
|
||||
void StreamState(bool saving) override;
|
||||
void Reset(bool softReset) override;
|
||||
|
|
|
@ -99,9 +99,14 @@ public:
|
|||
VsSystem* otherMapper = dynamic_cast<VsSystem*>(dualConsole->GetMapper());
|
||||
|
||||
//Give memory access to master CPU or slave CPU, based on "slaveMasterBit"
|
||||
if(_saveRamSize == 0 && _workRamSize == 0) {
|
||||
RemoveCpuMemoryMapping(0x6000, 0x7FFF);
|
||||
otherMapper->RemoveCpuMemoryMapping(0x6000, 0x7FFF);
|
||||
}
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
SetCpuMemoryMapping(0x6000 + i * 0x800, 0x67FF + i * 0x800, _workRam, slaveMasterBit ? MemoryAccessType::ReadWrite : MemoryAccessType::NoAccess);
|
||||
otherMapper->SetCpuMemoryMapping(0x6000 + i * 0x800, 0x67FF + i * 0x800, _workRam, slaveMasterBit ? MemoryAccessType::NoAccess : MemoryAccessType::ReadWrite);
|
||||
SetCpuMemoryMapping(0x6000 + i * 0x800, 0x67FF + i * 0x800, HasBattery() ? _saveRam : _workRam, slaveMasterBit ? MemoryAccessType::ReadWrite : MemoryAccessType::NoAccess);
|
||||
otherMapper->SetCpuMemoryMapping(0x6000 + i * 0x800, 0x67FF + i * 0x800, HasBattery() ? _saveRam : _workRam, slaveMasterBit ? MemoryAccessType::NoAccess : MemoryAccessType::ReadWrite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -669,7 +669,7 @@ namespace Mesen.GUI.Forms
|
|||
private void _notifListener_OnNotification(InteropEmu.NotificationEventArgs e)
|
||||
{
|
||||
switch(e.NotificationType) {
|
||||
case InteropEmu.ConsoleNotificationType.GameLoaded:
|
||||
case InteropEmu.ConsoleNotificationType.GameInitCompleted:
|
||||
VideoInfo.ApplyOverscanConfig();
|
||||
_currentGame = InteropEmu.GetRomInfo().GetRomName();
|
||||
InteropEmu.SetNesModel(ConfigManager.Config.Region);
|
||||
|
|
|
@ -951,6 +951,7 @@ namespace Mesen.GUI
|
|||
BeforeEmulationStop = 19,
|
||||
VsDualSystemStarted = 20,
|
||||
VsDualSystemStopped = 21,
|
||||
GameInitCompleted = 22
|
||||
}
|
||||
|
||||
public enum ControllerType
|
||||
|
|
Loading…
Add table
Reference in a new issue