Run Ahead: Fixed some issues with FDS/VS System system actions not being processed properly

This commit is contained in:
Sour 2020-01-25 13:40:24 -05:00
parent 78288fc456
commit 3fde8f8073
4 changed files with 13 additions and 3 deletions

View file

@ -488,7 +488,10 @@ void FDS::StreamState(bool saving)
Stream(_irqReloadValue, _irqCounter, _irqEnabled, _irqRepeatEnabled, _diskRegEnabled, _soundRegEnabled, _writeDataReg, _motorOn, _resetTransfer,
_readMode, _crcControl, _diskReady, _diskIrqEnabled, _extConWriteReg, _badCrc, _endOfHead, _readWriteEnabled, _readDataReg, _diskWriteProtected,
_diskNumber, _diskPosition, _delay, _previousCrcControlFlag, _gapEnded, _scanningDisk, _transferComplete, audio);
_diskNumber, _diskPosition, _delay, _previousCrcControlFlag, _gapEnded, _scanningDisk, _transferComplete, audio,
_autoDiskEjectCounter, _autoDiskSwitchCounter, _restartAutoInsertCounter, _previousFrame, _lastDiskCheckFrame,
_successiveChecks, _previousDiskNumber, _crcAccumulator
);
if(saving) {
for(size_t i = 0; i < _fdsDiskSides.size(); i++) {

View file

@ -73,7 +73,7 @@ private:
vector<vector<uint8_t>> _orgDiskSides;
vector<vector<uint8_t>> _orgDiskHeaders;
bool _gameStarted;
bool _gameStarted = false;
bool _needSave = false;
protected:

View file

@ -72,7 +72,6 @@ public:
if(diskToInsert >= 0) {
mapper->InsertDisk(diskToInsert);
}
}
}
@ -105,7 +104,9 @@ public:
if(!IsAutoInsertDiskEnabled()) {
shared_ptr<FDS> mapper = _mapper.lock();
if(mapper && mapper->IsDiskInserted()) {
_console->Pause();
InsertDisk((mapper->GetCurrentDisk() ^ 0x01) % mapper->GetSideCount());
_console->Resume();
}
}
}
@ -115,7 +116,9 @@ public:
if(!IsAutoInsertDiskEnabled()) {
shared_ptr<FDS> mapper = _mapper.lock();
if(mapper) {
_console->Pause();
InsertDisk(((mapper->GetCurrentDisk() & 0xFE) + 2) % mapper->GetSideCount());
_console->Resume();
}
}
}

View file

@ -76,13 +76,17 @@ public:
void InsertCoin(uint8_t port)
{
if(port < 4) {
_console->Pause();
_needInsertCoin[port] = VsSystemActionManager::InsertCoinFrameCount;
MessageManager::DisplayMessage("VS System", "CoinInsertedSlot", std::to_string(port + 1));
_console->Resume();
}
}
void SetServiceButtonState(int consoleId, bool pressed)
{
_console->Pause();
_needServiceButton[consoleId] = pressed;
_console->Resume();
}
};