Debugger: GB - Fixed crash when debugger accessed APU registers while running

This commit is contained in:
Sour 2020-07-03 14:06:02 -04:00
parent 15f2ee6012
commit 4c4d3c75d6
4 changed files with 17 additions and 0 deletions

View file

@ -90,6 +90,9 @@ public:
case SnesMemoryType::GbBootRom:
case SnesMemoryType::SaveRam: //Include save ram here to avoid uninit memory read warnings on save ram
return true;
default:
return false;
}
}

View file

@ -161,10 +161,19 @@ void GbApu::ClockFrameSequencer()
_state.FrameSequenceStep = (_state.FrameSequenceStep + 1) & 0x07;
}
uint8_t GbApu::Peek(uint16_t addr)
{
return InternalRead(addr);
}
uint8_t GbApu::Read(uint16_t addr)
{
Run();
return InternalRead(addr);
}
uint8_t GbApu::InternalRead(uint16_t addr)
{
switch(addr) {
case 0xFF10: case 0xFF11: case 0xFF12: case 0xFF13: case 0xFF14:
return _square1->Read(addr - 0xFF10);

View file

@ -40,6 +40,8 @@ private:
GbApuState _state = {};
uint8_t InternalRead(uint16_t addr);
public:
GbApu();
virtual ~GbApu();
@ -54,6 +56,7 @@ public:
void ClockFrameSequencer();
uint8_t Peek(uint16_t addr);
uint8_t Read(uint16_t addr);
void Write(uint16_t addr, uint8_t value);

View file

@ -231,6 +231,8 @@ uint8_t GbMemoryManager::PeekRegister(uint16_t addr)
return _ppu->PeekOam((uint8_t)addr);
} else if(addr >= 0x8000 && addr <= 0x9FFF) {
return _ppu->PeekVram(addr);
} else if(addr >= 0xFF10 && addr <= 0xFF3F) {
return _apu->Peek(addr);
} else {
return ReadRegister(addr);
}