summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mknes_ppu_registers.c61
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;