summaryrefslogtreecommitdiff
path: root/ppu_registers.c
diff options
context:
space:
mode:
authorPeter Fors <peter.fors@mindkiller.com>2025-04-16 12:37:40 +0200
committerPeter Fors <peter.fors@mindkiller.com>2025-04-16 12:37:40 +0200
commit6321f071ed2ab36242e857a9414b7f4c53092d72 (patch)
tree80eb868cc206c932d32943d101e7f337324fa7f4 /ppu_registers.c
parent18a2c1406f1fa585f4574cd687b0791e52ab5d7a (diff)
Battletoads working
Diffstat (limited to 'ppu_registers.c')
-rw-r--r--ppu_registers.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/ppu_registers.c b/ppu_registers.c
index dd8c7fa..e2e7940 100644
--- a/ppu_registers.c
+++ b/ppu_registers.c
@@ -16,10 +16,12 @@ static inline void ppu_write(struct nes_state *state, uint32_t offset, uint8_t v
case 3: { // 2003
ppu->oam_addr = value;
+ ppu->open_bus = value;
} break;
case 4: { // 2004
ppu->oam[ppu->oam_addr++] = value;
+ ppu->open_bus = value;
} break;
case 5: { // 2005
@@ -47,11 +49,13 @@ static inline void ppu_write(struct nes_state *state, uint32_t offset, uint8_t v
} break;
case 7: { // 2007
- uint32_t addr = ppu->vram_addr & 0x3fff;
- if(addr < 0x2000) {
+ uint32_t addr = ppu->vram_addr;
+ if(LIKELY(addr < 0x2000)) {
state->mapper.chr_write(state, addr, value);
- } else if(addr < 0x3f00) {
+
+ } else if(LIKELY(addr < 0x3f00)) {
state->mapper.ciram_write(state, addr, value);
+
} else if(addr < 0x4000) {
uint32_t pal_addr = addr & 0x1f;
if((pal_addr & 3) == 0) {
@@ -60,6 +64,7 @@ static inline void ppu_write(struct nes_state *state, uint32_t offset, uint8_t v
ppu->palette[pal_addr] = value;
}
ppu->vram_addr += (ppu->reg_ctrl & 0x04) ? 32 : 1;
+ ppu->open_bus = value;
} break;
}
}
@@ -81,13 +86,16 @@ static inline uint8_t ppu_read(struct nes_state *state, uint32_t offset) {
} break;
case 7: { // 2007
- uint32_t addr = ppu->vram_addr & 0x3fff;
+ uint32_t addr = ppu->vram_addr;
- if(addr < 0x2000) {
+ if(LIKELY(addr < 0x2000)) {
result = ppu->vram_read_buffer;
ppu->vram_read_buffer = state->mapper.chr_read(state, addr);
- } else if(addr < 0x3f00) {
- result = state->mapper.ciram_read(state, addr);
+
+ } else if(LIKELY(addr < 0x3f00)) {
+ result = ppu->vram_read_buffer;
+ ppu->vram_read_buffer = state->mapper.ciram_read(state, addr);
+
} else if(addr < 0x4000) {
uint32_t pal_addr = addr & 0x1f;
if((pal_addr & 0x13) == 0x10) {
@@ -125,7 +133,6 @@ static inline void ppu_dma_4014(struct nes_state *state, uint8_t page) {
state->cycles++;
ppu_tick(state);
- // ppu_write_2004(state, value);
ppu_write(state, 4, value);
}
}