PCE: tweak VDC register commit logic
This commit is contained in:
parent
69146e5c1b
commit
64741e8973
|
@ -123,23 +123,27 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
|
||||
if (RegisterLatch == BYR)
|
||||
BackgroundY = Registers[BYR] & 0x1FF;
|
||||
|
||||
RegisterCommit(RegisterLatch, msbComplete: false);
|
||||
}
|
||||
else if (port == MSB)
|
||||
{
|
||||
Registers[RegisterLatch] &= 0x00FF;
|
||||
Registers[RegisterLatch] |= (ushort)(value << 8);
|
||||
CompleteMSBWrite(RegisterLatch);
|
||||
RegisterCommit(RegisterLatch, msbComplete: true);
|
||||
}
|
||||
}
|
||||
|
||||
void CompleteMSBWrite(int register)
|
||||
void RegisterCommit(int register, bool msbComplete)
|
||||
{
|
||||
switch (register)
|
||||
{
|
||||
case MARR: // Memory Address Read Register
|
||||
if (!msbComplete) break;
|
||||
ReadBuffer = VRAM[Registers[MARR] & 0x7FFF];
|
||||
break;
|
||||
case VWR: // VRAM Write Register
|
||||
if (!msbComplete) break;
|
||||
if (Registers[MAWR] < VramSize) // Several games attempt to write past the end of VRAM
|
||||
{
|
||||
VRAM[Registers[MAWR]] = Registers[VWR];
|
||||
|
@ -172,9 +176,11 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
FrameBuffer = new int[FramePitch * FrameHeight];
|
||||
break;
|
||||
case LENR: // Initiate DMA transfer
|
||||
if (!msbComplete) break;
|
||||
DmaRequested = true;
|
||||
break;
|
||||
case SATB:
|
||||
if (!msbComplete) break;
|
||||
SatDmaRequested = true;
|
||||
break;
|
||||
}
|
||||
|
@ -328,8 +334,8 @@ namespace BizHawk.Emulation.Cores.PCEngine
|
|||
UpdateSpriteData(i);
|
||||
}
|
||||
|
||||
CompleteMSBWrite(HDR);
|
||||
CompleteMSBWrite(VDW);
|
||||
RegisterCommit(HDR, true);
|
||||
RegisterCommit(VDW, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue