Fixed zelda lyc first line timing issue

This commit is contained in:
2025-05-22 20:51:04 -06:00
parent 237b68892e
commit 2a5f083929
2 changed files with 11 additions and 10 deletions

View File

@ -104,7 +104,7 @@ bool pipeline_fifo_add() {
color = lcd_get_context()->bg_colors[0];
}
if(LCDC_OBJ_ENABLE && !ppu_get_context()->debug) {
if(LCDC_OBJ_ENABLE) {
color = fetch_sprite_pixels(bit, color, hi | lo);
}
@ -287,7 +287,7 @@ void pipeline_push_pixel() {
}
if(ppu_get_context()->rendering_window) {
ppu_get_context()->video_buffer[ppu_get_context()->pfc.pushed_x +
(lcd_get_context()->ly * XRES)] = pixel_data;//interpolate(ppu_get_context()->video_buffer[ppu_get_context()->pfc.pushed_x +
(lcd_get_context()->ly * XRES)] = ppu_get_context()->debug ? 0xFF0000 : pixel_data;//interpolate(ppu_get_context()->video_buffer[ppu_get_context()->pfc.pushed_x +
//(lcd_get_context()->ly * XRES)], pixel_data);
ppu_get_context()->pfc.pushed_x++;

View File

@ -121,14 +121,8 @@ void ppu_mode_xfer() {
void ppu_mode_vblank() {
if(ppu_get_context()->line_ticks >= TICKS_PER_LINE) {
increment_ly();
if(lcd_get_context()->ly >= LINES_PER_FRAME) {
LCDS_MODE_SET(MODE_OAM);
if(LCDS_STAT_INT(SS_OAM)) {
cpu_request_interrupt(IT_LCD_STAT);
}
lcd_get_context()->ly = 0;
if(lcd_get_context()->ly == lcd_get_context()->ly_compare) {
if(lcd_get_context()->ly == LINES_PER_FRAME-1) {
if(lcd_get_context()->ly_compare == 0) {
LCDS_LYC_SET(1);
if(LCDS_STAT_INT(SS_LYC)) {
cpu_request_interrupt(IT_LCD_STAT);
@ -136,6 +130,13 @@ void ppu_mode_vblank() {
} else {
LCDS_LYC_SET(0);
}
}
if(lcd_get_context()->ly >= LINES_PER_FRAME) {
LCDS_MODE_SET(MODE_OAM);
if(LCDS_STAT_INT(SS_OAM)) {
cpu_request_interrupt(IT_LCD_STAT);
}
lcd_get_context()->ly = 0;
ppu_get_context()->window_line = 0;
}