PPU: Fixed VRAM read behavior

This commit is contained in:
Sour 2019-02-24 09:38:22 -05:00
parent 073e7b2bf3
commit 21791170f4
2 changed files with 14 additions and 5 deletions

View file

@ -1036,6 +1036,11 @@ void Ppu::LatchLocationValues()
_locationLatched = true;
}
void Ppu::UpdateVramReadBuffer()
{
_vramReadBuffer = _vram[_vramAddress << 1] | (_vram[(_vramAddress << 1) + 1] << 8);
}
uint8_t Ppu::Read(uint16_t addr)
{
switch(addr) {
@ -1063,9 +1068,9 @@ uint8_t Ppu::Read(uint16_t addr)
case 0x2139: {
//VMDATALREAD - VRAM Data Read low byte
uint8_t returnValue = _vramReadBuffer;
_vramReadBuffer = _vram[_vramAddress << 1];
uint8_t returnValue = (uint8_t)_vramReadBuffer;
if(!_vramAddrIncrementOnSecondReg) {
UpdateVramReadBuffer();
_vramAddress = (_vramAddress + _vramIncrementValue) & 0x7FFF;
}
return returnValue;
@ -1073,9 +1078,9 @@ uint8_t Ppu::Read(uint16_t addr)
case 0x213A: {
//VMDATAHREAD - VRAM Data Read high byte
uint8_t returnValue = _vramReadBuffer;
_vramReadBuffer = _vram[(_vramAddress << 1) + 1];
uint8_t returnValue = (uint8_t)(_vramReadBuffer >> 8);
if(_vramAddrIncrementOnSecondReg) {
UpdateVramReadBuffer();
_vramAddress = (_vramAddress + _vramIncrementValue) & 0x7FFF;
}
return returnValue;
@ -1281,11 +1286,13 @@ void Ppu::Write(uint32_t addr, uint8_t value)
case 0x2116:
//VMADDL - VRAM Address low byte
_vramAddress = (_vramAddress & 0x7F00) | value;
UpdateVramReadBuffer();
break;
case 0x2117:
//VMADDH - VRAM Address high byte
_vramAddress = (_vramAddress & 0x00FF) | ((value & 0x7F) << 8);
UpdateVramReadBuffer();
break;
case 0x2118:

View file

@ -70,7 +70,7 @@ private:
uint8_t _vramIncrementValue;
uint8_t _vramAddressRemapping;
bool _vramAddrIncrementOnSecondReg;
uint8_t _vramReadBuffer = 0;
uint16_t _vramReadBuffer = 0;
uint16_t _cgramAddress;
uint8_t _cgram[Ppu::CgRamSize];
@ -198,6 +198,8 @@ private:
bool ProcessMaskWindow(uint8_t activeWindowCount, int x);
void ProcessWindowMaskSettings(uint8_t value, uint8_t offset);
void UpdateVramReadBuffer();
void SendFrame();
public: