Core: Open bus improvements

This commit is contained in:
Sour 2019-03-09 00:31:54 -05:00
parent b8624003f0
commit 348da3879b
3 changed files with 13 additions and 4 deletions

View file

@ -15,6 +15,7 @@
void MemoryManager::Initialize(shared_ptr<Console> console) void MemoryManager::Initialize(shared_ptr<Console> console)
{ {
_masterClock = 0; _masterClock = 0;
_openBus = 0;
_console = console; _console = console;
_regs = console->GetInternalRegisters().get(); _regs = console->GetInternalRegisters().get();
_ppu = console->GetPpu(); _ppu = console->GetPpu();
@ -160,10 +161,10 @@ uint8_t MemoryManager::Read(uint32_t addr, MemoryOperationType type)
uint8_t value; uint8_t value;
if(_handlers[addr >> 12]) { if(_handlers[addr >> 12]) {
value = _handlers[addr >> 12]->Read(addr); value = _handlers[addr >> 12]->Read(addr);
_openBus = value;
} else { } else {
//open bus //open bus
value = (addr >> 12); value = _openBus;
MessageManager::DisplayMessage("Debug", "Read - missing handler: $" + HexUtilities::ToHex(addr)); MessageManager::DisplayMessage("Debug", "Read - missing handler: $" + HexUtilities::ToHex(addr));
} }
_console->ProcessCpuRead(addr, value, type); _console->ProcessCpuRead(addr, value, type);
@ -176,9 +177,10 @@ uint8_t MemoryManager::ReadDma(uint32_t addr)
uint8_t value; uint8_t value;
if(_handlers[addr >> 12]) { if(_handlers[addr >> 12]) {
value = _handlers[addr >> 12]->Read(addr); value = _handlers[addr >> 12]->Read(addr);
_openBus = value;
} else { } else {
//open bus //open bus
value = (addr >> 12); value = _openBus;
MessageManager::DisplayMessage("Debug", "Read - missing handler: $" + HexUtilities::ToHex(addr)); MessageManager::DisplayMessage("Debug", "Read - missing handler: $" + HexUtilities::ToHex(addr));
} }
_console->ProcessCpuRead(addr, value, MemoryOperationType::DmaRead); _console->ProcessCpuRead(addr, value, MemoryOperationType::DmaRead);
@ -226,6 +228,11 @@ void MemoryManager::WriteDma(uint32_t addr, uint8_t value)
} }
} }
uint8_t MemoryManager::GetOpenBus()
{
return _openBus;
}
uint64_t MemoryManager::GetMasterClock() uint64_t MemoryManager::GetMasterClock()
{ {
return _masterClock; return _masterClock;

View file

@ -30,6 +30,7 @@ private:
vector<unique_ptr<RamHandler>> _workRamHandlers; vector<unique_ptr<RamHandler>> _workRamHandlers;
uint8_t *_workRam; uint8_t *_workRam;
uint8_t _openBus;
uint64_t _masterClock; uint64_t _masterClock;
uint8_t _masterClockTable[2][0x10000]; uint8_t _masterClockTable[2][0x10000];
@ -56,6 +57,7 @@ public:
void Write(uint32_t addr, uint8_t value, MemoryOperationType type); void Write(uint32_t addr, uint8_t value, MemoryOperationType type);
void WriteDma(uint32_t addr, uint8_t value); void WriteDma(uint32_t addr, uint8_t value);
uint8_t GetOpenBus();
uint64_t GetMasterClock(); uint64_t GetMasterClock();
uint8_t* DebugGetWorkRam(); uint8_t* DebugGetWorkRam();

View file

@ -1255,7 +1255,7 @@ uint8_t Ppu::Read(uint16_t addr)
break; break;
} }
return addr >> 8; return _console->GetMemoryManager()->GetOpenBus();
} }
void Ppu::Write(uint32_t addr, uint8_t value) void Ppu::Write(uint32_t addr, uint8_t value)