From 6321f071ed2ab36242e857a9414b7f4c53092d72 Mon Sep 17 00:00:00 2001 From: Peter Fors Date: Wed, 16 Apr 2025 12:37:40 +0200 Subject: Battletoads working --- ppu_registers.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'ppu_registers.c') 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); } } -- cgit v1.2.3