diff options
Diffstat (limited to 'ppu.c')
| -rw-r--r-- | ppu.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -121,9 +121,6 @@ static inline void ppu_render_pixel(struct nes_state *state) { uint8_t sp_prio = 0; uint8_t sp_zero = 0; - // uint8_t bg_mask = (ppu->reg_mask & 0x08) ? 0xff : 0x00; - // uint8_t sp_mask = (ppu->reg_mask & 0x10) ? 0xff : 0x00; - uint8_t show_bg = ppu->reg_mask & 0x08; uint8_t show_sprites = ppu->reg_mask & 0x10; uint8_t left_bg = ppu->reg_mask & 0x02; @@ -139,7 +136,6 @@ static inline void ppu_render_pixel(struct nes_state *state) { uint8_t a1 = !!(ppu->bg_shift_attrib_high & bit); bg_pixel = ((p1 << 1) | p0) & bg_mask; - bg_palette = ((a1 << 1) | a0) & bg_mask; // Sprite @@ -171,6 +167,8 @@ static inline void ppu_render_pixel(struct nes_state *state) { case 3: { ppu->reg_status |= (sp_zero && x < 255) ? 0x40 : 0; // NOTE(peter): Sprite zero hit! palette_index = (sp_prio) ? bg_index : 0x10 | sp_index; +// printf("sprite zero hit: scanline: %3.3d dot: %3.3d\n", ppu->scanline, ppu->dot); + } break; } @@ -414,11 +412,17 @@ static void ppu_tick(struct nes_state *state) { if(dot > 340) { dot = 0; scanline++; + + if(UNLIKELY(scanline == 261 && !ppu->even_frame && (ppu->reg_mask & 0x18))) { + dot = 1; + } + if(scanline > 261) { scanline = 0; ppu->frame_ready = 1; ppu->even_frame = !ppu->even_frame; } + } ppu->dot = dot; |
