Fix several potential regressions

This commit is contained in:
Lior Halphon 2022-05-04 19:30:29 +03:00
parent 36e2896ec7
commit 69a5ed3396

View File

@ -145,6 +145,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
/* The DMG STAT-write bug is basically the STAT register being read as FF for a single T-cycle */ /* The DMG STAT-write bug is basically the STAT register being read as FF for a single T-cycle */
case GB_CONFLICT_STAT_DMG: case GB_CONFLICT_STAT_DMG:
GB_advance_cycles(gb, gb->pending_cycles); GB_advance_cycles(gb, gb->pending_cycles);
GB_display_sync(gb);
/* State 7 is the edge between HBlank and OAM mode, and it behaves a bit weird. /* State 7 is the edge between HBlank and OAM mode, and it behaves a bit weird.
The OAM interrupt seems to be blocked by HBlank interrupts in that case, despite The OAM interrupt seems to be blocked by HBlank interrupts in that case, despite
the timing not making much sense for that. the timing not making much sense for that.
@ -206,7 +207,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
uint8_t old_value = GB_read_memory(gb, addr); uint8_t old_value = GB_read_memory(gb, addr);
GB_advance_cycles(gb, gb->pending_cycles - 2); GB_advance_cycles(gb, gb->pending_cycles - 2);
GB_display_sync(gb);
if (gb->model != GB_MODEL_MGB && gb->position_in_line == 0 && (old_value & 2) && !(value & 2)) { if (gb->model != GB_MODEL_MGB && gb->position_in_line == 0 && (old_value & 2) && !(value & 2)) {
old_value &= ~2; old_value &= ~2;
} }
@ -277,6 +278,7 @@ static void cycle_write(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
GB_advance_cycles(gb, gb->pending_cycles); GB_advance_cycles(gb, gb->pending_cycles);
if (gb->model <= GB_MODEL_CGB_C) { if (gb->model <= GB_MODEL_CGB_C) {
// TODO: Double speed mode? This logic is also a bit weird, it needs more tests // TODO: Double speed mode? This logic is also a bit weird, it needs more tests
GB_apu_run(gb, true);
if (gb->apu.square_sweep_calculate_countdown > 3 && gb->apu.enable_zombie_calculate_stepping) { if (gb->apu.square_sweep_calculate_countdown > 3 && gb->apu.enable_zombie_calculate_stepping) {
gb->apu.square_sweep_calculate_countdown -= 2; gb->apu.square_sweep_calculate_countdown -= 2;
} }