summaryrefslogtreecommitdiff
path: root/ppu.c
diff options
context:
space:
mode:
authorPeter Fors <peter.fors@mindkiller.com>2025-04-08 13:42:13 +0200
committerPeter Fors <peter.fors@mindkiller.com>2025-04-08 13:42:13 +0200
commitc9bd7fecdb5d6c8954cf31efef910ed734386c70 (patch)
treeab59d3ca3e256ee7a431d82a6412e9c323f418ed /ppu.c
parent205dc47111125aa2f7458be948cd9cd434d0344c (diff)
2690fps
Diffstat (limited to 'ppu.c')
-rw-r--r--ppu.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/ppu.c b/ppu.c
index cef45fa..bab97d5 100644
--- a/ppu.c
+++ b/ppu.c
@@ -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;