Add latching to ppu

This commit is contained in:
scawful
2024-04-24 23:35:46 -04:00
parent 66922ccd7f
commit 4356bd3b08
2 changed files with 16 additions and 8 deletions

View File

@@ -590,7 +590,7 @@ void Ppu::HandleVblank() {
frame_interlace = interlace; // set if we have a interlaced frame
}
uint8_t Ppu::Read(uint8_t adr) {
uint8_t Ppu::Read(uint8_t adr, bool latch) {
switch (adr) {
case 0x04:
case 0x14:
@@ -621,9 +621,9 @@ uint8_t Ppu::Read(uint8_t adr) {
}
case 0x37: {
// TODO: only when ppulatch is set
hCount = memory_.h_pos() / 4;
vCount = memory_.v_pos();
countersLatched = true;
if (latch) {
LatchHV();
}
return memory_.open_bus();
}
case 0x38: {
@@ -711,9 +711,11 @@ uint8_t Ppu::Read(uint8_t adr) {
val |= ppu2openBus & 0x20;
val |= countersLatched << 6;
val |= even_frame << 7;
countersLatched = false; // TODO: only when ppulatch is set
hCountSecond = false;
vCountSecond = false;
if (latch) {
countersLatched = false;
hCountSecond = false;
vCountSecond = false;
}
ppu2openBus = val;
return val;
}

View File

@@ -314,6 +314,12 @@ class Ppu : public SharedRom {
void RunLine(int line);
void HandlePixel(int x, int y);
void LatchHV() {
hCount = memory_.h_pos() / 4;
vCount = memory_.v_pos();
countersLatched = true;
}
int GetPixel(int x, int y, bool sub, int* r, int* g, int* b);
void EvaluateSprites(int line);
@@ -350,7 +356,7 @@ class Ppu : public SharedRom {
uint16_t GetOffsetValue(int col, int row);
int GetPixelForBgLayer(int x, int y, int layer, bool priority);
uint8_t Read(uint8_t adr);
uint8_t Read(uint8_t adr, bool latch);
void Write(uint8_t adr, uint8_t val);
uint16_t GetVramRemap();