DMC: Improve DMA timing after 4015 write
This commit is contained in:
parent
c1f841b6dd
commit
650dfb35f1
2 changed files with 14 additions and 5 deletions
|
@ -209,15 +209,24 @@ void DeltaModulationChannel::SetEnabled(bool enabled)
|
||||||
_needToRun = false;
|
_needToRun = false;
|
||||||
} else if(_bytesRemaining == 0) {
|
} else if(_bytesRemaining == 0) {
|
||||||
InitSample();
|
InitSample();
|
||||||
_needInit = true;
|
|
||||||
|
//Delay a number of cycles based on odd/even cycles
|
||||||
|
//Allows behavior to match dmc_dma_start_test
|
||||||
|
if((_console->GetCpu()->GetCycleCount() & 0x01) == 0) {
|
||||||
|
_needInit = 2;
|
||||||
|
} else {
|
||||||
|
_needInit = 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeltaModulationChannel::NeedToRun()
|
bool DeltaModulationChannel::NeedToRun()
|
||||||
{
|
{
|
||||||
if(_needInit && (_console->GetCpu()->GetCycleCount() & 0x01) == 0) {
|
if(_needInit > 0) {
|
||||||
StartDmcTransfer();
|
_needInit--;
|
||||||
_needInit = false;
|
if(_needInit == 0) {
|
||||||
|
StartDmcTransfer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _needToRun;
|
return _needToRun;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ private:
|
||||||
uint8_t _bitsRemaining = 0;
|
uint8_t _bitsRemaining = 0;
|
||||||
bool _silenceFlag = true;
|
bool _silenceFlag = true;
|
||||||
bool _needToRun = false;
|
bool _needToRun = false;
|
||||||
bool _needInit = false;
|
uint8_t _needInit = 0;
|
||||||
|
|
||||||
uint8_t _lastValue4011 = 0;
|
uint8_t _lastValue4011 = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue