diff options
Diffstat (limited to 'mknes_ppu_registers.c')
| -rw-r--r-- | mknes_ppu_registers.c | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/mknes_ppu_registers.c b/mknes_ppu_registers.c index 148158f..6720958 100644 --- a/mknes_ppu_registers.c +++ b/mknes_ppu_registers.c @@ -47,22 +47,16 @@ static inline void ppu_write(struct nes_state *state, uint32_t offset, uint8_t v case 7: { uint32_t addr = ppu->vram_addr; - switch(addr) { - case 0x0000 ... 0x1fff: { - state->mapper_function.chr_write(state, addr, value); - } break; - - case 0x2000 ... 0x3eff: { - state->mapper_function.ciram_write(state, addr, value); - } break; - - case 0x3f00 ... 0x3fff: { - uint32_t pal_addr = addr & 0x1f; - if((pal_addr & 3) == 0) { - pal_addr &= ~0x10; - } - ppu->palette[pal_addr] = value; - } break; + if(addr <= 0x1fff) { + state->mapper_function.chr_write(state, addr, value); + } else if(addr >= 0x2000 && addr <= 0x3eff) { + state->mapper_function.ciram_write(state, addr, value); + } else if(addr >= 0x3f00 && addr <= 0x3fff) { + uint32_t pal_addr = addr & 0x1f; + if((pal_addr & 3) == 0) { + pal_addr &= ~0x10; + } + ppu->palette[pal_addr] = value; } ppu->vram_addr += (ppu->reg_ctrl & PPU_CTRL_VRAM_INCREMENT) ? 32 : 1; @@ -98,27 +92,20 @@ static inline uint8_t ppu_read(struct nes_state *state, uint32_t offset) { case 7: { uint32_t addr = ppu->vram_addr; - switch(addr) { - case 0x0000 ... 0x1fff: { - result = ppu->vram_read_buffer; - ppu->vram_read_buffer = state->mapper_function.chr_read(state, addr); - } break; - - case 0x2000 ... 0x3eff: { - result = ppu->vram_read_buffer; - ppu->vram_read_buffer = state->mapper_function.ciram_read(state, addr); - } break; - - case 0x3f00 ... 0x3fff: { - uint32_t pal_addr = addr & 0x1f; - if((pal_addr & 0x13) == 0x10) { - pal_addr &= ~0x10; - } - result = ppu->palette[pal_addr] & 0x3f; - result |= ppu->open_bus & 0xc0; - ppu->vram_read_buffer = state->mapper_function.ciram_read(state, addr - 0x1000); - } break; - + if(addr <= 0x1fff) { + result = ppu->vram_read_buffer; + ppu->vram_read_buffer = state->mapper_function.chr_read(state, addr); + } else if(addr >= 0x2000 && addr <= 0x3eff) { + result = ppu->vram_read_buffer; + ppu->vram_read_buffer = state->mapper_function.ciram_read(state, addr); + } else if(addr >= 0x3f00 && addr <= 0x3fff) { + uint32_t pal_addr = addr & 0x1f; + if((pal_addr & 0x13) == 0x10) { + pal_addr &= ~0x10; + } + result = ppu->palette[pal_addr] & 0x3f; + result |= ppu->open_bus & 0xc0; + ppu->vram_read_buffer = state->mapper_function.ciram_read(state, addr - 0x1000); } ppu->vram_addr += (ppu->reg_ctrl & PPU_CTRL_VRAM_INCREMENT) ? 32 : 1; |
