Open Bus: Fixes to open bus implementation - fixes allpads-r2a test result

This commit is contained in:
Souryo 2016-07-12 18:25:58 -04:00
parent 20d9b6bbd5
commit 092176348c
8 changed files with 23 additions and 12 deletions

View File

@ -177,7 +177,7 @@ uint8_t ControlManager::GetPortValue(uint8_t port)
//"In the NES and Famicom, the top three (or five) bits are not driven, and so retain the bits of the previous byte on the bus.
//Usually this is the most significant byte of the address of the controller port - 0x40.
//Paperboy relies on this behavior and requires that reads from the controller ports return exactly $40 or $41 as appropriate."
uint8_t value = 0x40;
uint8_t value = MemoryManager::GetOpenBus(0xE0);
if(device) {
value |= device->GetPortOutput();
}

View File

@ -307,8 +307,7 @@ uint8_t FDS::ReadRegister(uint16_t addr)
}
}
//Return open bus
return (addr & 0xFF00) >> 8;
return MemoryManager::GetOpenBus();
}
void FDS::StreamState(bool saving)

View File

@ -93,8 +93,7 @@ public:
}
}
//Open bus
return (addr >> 8);
return MemoryManager::GetOpenBus();
}
void WriteRegister(uint16_t addr, uint8_t value)

View File

@ -510,7 +510,6 @@ protected:
case 0x5206: return (_multiplierValue1*_multiplierValue2) >> 8;
}
//Open bus
return (addr >> 8);
return MemoryManager::GetOpenBus();
}
};

View File

@ -111,8 +111,7 @@ public:
return status;
}
//Open bus
return (addr >> 8);
return MemoryManager::GetOpenBus();
}
void WriteRegister(uint16_t addr, uint8_t value)

View File

@ -4,9 +4,13 @@
#include "Debugger.h"
#include "CheatManager.h"
//Used for open bus
uint8_t MemoryManager::_lastReadValue = 0;
MemoryManager::MemoryManager(shared_ptr<BaseMapper> mapper)
{
_mapper = mapper;
_lastReadValue = 0;
_internalRAM = new uint8_t[InternalRAMSize];
for(int i = 0; i < 2; i++) {
@ -49,7 +53,7 @@ uint8_t MemoryManager::ReadRegister(uint16_t addr)
if(_ramReadHandlers[addr]) {
return _ramReadHandlers[addr]->ReadRAM(addr);
} else {
return (addr & 0xFF00) >> 8;
return GetOpenBus();
}
}
@ -94,6 +98,7 @@ uint8_t MemoryManager::DebugRead(uint16_t addr)
}
CheatManager::ApplyRamCodes(addr, value);
return value;
}
@ -115,6 +120,8 @@ uint8_t MemoryManager::Read(uint16_t addr, MemoryOperationType operationType)
Debugger::ProcessRamOperation(operationType, addr, value);
_lastReadValue = value;
return value;
}
@ -175,4 +182,9 @@ void MemoryManager::StreamState(bool saving)
ArrayInfo<uint8_t> nameTable0Ram = { _nametableRAM[0], MemoryManager::NameTableScreenSize };
ArrayInfo<uint8_t> nameTable1Ram = { _nametableRAM[1], MemoryManager::NameTableScreenSize };
Stream(internalRam, nameTable0Ram, nameTable1Ram);
}
uint8_t MemoryManager::GetOpenBus(uint8_t mask)
{
return _lastReadValue & mask;
}

View File

@ -14,6 +14,8 @@ class MemoryManager: public Snapshotable
static const int VRAMSize = 0x4000;
static const int NameTableScreenSize = 0x400;
static uint8_t _lastReadValue;
shared_ptr<BaseMapper> _mapper;
uint8_t *_internalRAM;
@ -51,5 +53,7 @@ class MemoryManager: public Snapshotable
void WriteVRAM(uint16_t addr, uint8_t value);
uint32_t ToAbsoluteChrAddress(uint16_t vramAddr);
static uint8_t GetOpenBus(uint8_t mask = 0xFF);
};

View File

@ -289,8 +289,7 @@ uint8_t NsfMapper::ReadRegister(uint16_t addr)
}
}
//Open bus
return (addr >> 8);
return MemoryManager::GetOpenBus();
}
void NsfMapper::WriteRegister(uint16_t addr, uint8_t value)