From b758e9775358a40d37891468d973acced66d499c Mon Sep 17 00:00:00 2001 From: Sour Date: Sat, 23 May 2020 13:01:59 -0400 Subject: [PATCH] GB: Fixed open bus behavior for some registers Fixes unused_hwio-GS and if_ie_registers --- Core/GbMemoryManager.cpp | 6 +++--- Core/GbPpu.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/GbMemoryManager.cpp b/Core/GbMemoryManager.cpp index 87b22a9..228670a 100644 --- a/Core/GbMemoryManager.cpp +++ b/Core/GbMemoryManager.cpp @@ -154,7 +154,7 @@ bool GbMemoryManager::IsOamDmaRunning() void GbMemoryManager::WriteDma(uint16_t addr, uint8_t value) { _console->ProcessMemoryRead(addr, value, MemoryOperationType::DmaWrite); - _ppu->WriteOam(addr, value, true); + _ppu->WriteOam((uint8_t)addr, value, true); } uint8_t GbMemoryManager::ReadDma(uint16_t addr) @@ -254,7 +254,7 @@ uint8_t GbMemoryManager::ReadRegister(uint16_t addr) case 0xFF04: case 0xFF05: case 0xFF06: case 0xFF07: return _timer->Read(addr); - case 0xFF0F: return _state.IrqRequests; break; //IF - Interrupt flags (R/W) + case 0xFF0F: return _state.IrqRequests | 0xE0; break; //IF - Interrupt flags (R/W) default: return 0xFF; //Open bus } @@ -325,7 +325,7 @@ void GbMemoryManager::WriteRegister(uint16_t addr, uint8_t value) _timer->Write(addr, value); break; - case 0xFF0F: _state.IrqRequests = value; break; //IF - Interrupt flags (R/W) + case 0xFF0F: _state.IrqRequests = value & 0x1F; break; //IF - Interrupt flags (R/W) } } } else if(addr >= 0xFE00) { diff --git a/Core/GbPpu.cpp b/Core/GbPpu.cpp index 2ce32b7..205784a 100644 --- a/Core/GbPpu.cpp +++ b/Core/GbPpu.cpp @@ -440,7 +440,7 @@ uint8_t GbPpu::Read(uint16_t addr) } LogDebug("[Debug] GB - Missing read handler: $" + HexUtilities::ToHex(addr)); - return 0; + return 0xFF; } void GbPpu::Write(uint16_t addr, uint8_t value)