diff options
Diffstat (limited to 'ppu.c')
| -rw-r--r-- | ppu.c | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -22,8 +22,8 @@ static inline void ppu_evaluate_sprites(struct nes_state *state) { uint8_t sprite_height = (ppu->reg_ctrl & 0x20) ? 16 : 8; uint8_t n = 0; - uint8_t *src = ppu->oam; - uint8_t *dst = ppu->secondary_oam; + uint8_t * restrict src = ppu->oam; + uint8_t * restrict dst = ppu->secondary_oam; for(uint8_t i = 0; i < 64; i++) { uint8_t y = src[0]; int32_t row = (int32_t)ppu->scanline - y; @@ -55,8 +55,10 @@ static inline void ppu_fetch_sprite_patterns(struct nes_state *state) { struct ppu_state *restrict ppu = &state->ppu; uint32_t addr; uint32_t bank; + uint8_t lsb; + uint8_t msb; - uint8_t *s = ppu->secondary_oam; + uint8_t * restrict s = ppu->secondary_oam; uint8_t height = (ppu->reg_ctrl & 0x20) ? 16 : 8; for(uint8_t i = 0; i < ppu->sprite_count; i++) { @@ -77,12 +79,12 @@ static inline void ppu_fetch_sprite_patterns(struct nes_state *state) { } addr = bank + tile * 16 + row; - uint8_t lsb = state->mapper.chr_read(state, addr); - uint8_t msb = state->mapper.chr_read(state, addr + 8); - if(attr & 0x40) { - lsb = ppu_bitreverse_lut[lsb]; - msb = ppu_bitreverse_lut[msb]; + lsb = ppu_bitreverse_lut[state->mapper.chr_read(state, addr)]; + msb = ppu_bitreverse_lut[state->mapper.chr_read(state, addr + 8)]; + } else { + lsb = state->mapper.chr_read(state, addr); + msb = state->mapper.chr_read(state, addr + 8); } ppu->sprite_shift_lo[i] = lsb; |
