summaryrefslogtreecommitdiff
path: root/ppu.c
diff options
context:
space:
mode:
Diffstat (limited to 'ppu.c')
-rw-r--r--ppu.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/ppu.c b/ppu.c
index 9e081de..7042b19 100644
--- a/ppu.c
+++ b/ppu.c
@@ -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;