It's more reasonable to do it this way
This commit is contained in:
parent
fe7667a00c
commit
34cf0f558d
@ -741,6 +741,14 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
|
|||||||
GB_timing_sync(gb);
|
GB_timing_sync(gb);
|
||||||
GB_lcd_off(gb);
|
GB_lcd_off(gb);
|
||||||
}
|
}
|
||||||
|
/* Handle disabling objects while already fetching an object */
|
||||||
|
if ((gb->io_registers[GB_IO_LCDC] & 2) && !(value & 2)) {
|
||||||
|
if (gb->during_object_fetch) {
|
||||||
|
gb->cycles_for_line += gb->display_cycles;
|
||||||
|
gb->display_cycles = 0;
|
||||||
|
gb->object_fetch_aborted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
gb->io_registers[GB_IO_LCDC] = value;
|
gb->io_registers[GB_IO_LCDC] = value;
|
||||||
if (!(value & 0x20)) {
|
if (!(value & 0x20)) {
|
||||||
gb->wx_triggered = false;
|
gb->wx_triggered = false;
|
||||||
|
@ -208,29 +208,12 @@ 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);
|
||||||
|
|
||||||
/* Handle disabling objects while already fetching an object */
|
|
||||||
if ((old_value & 2) && !(value & 2)) {
|
|
||||||
if (gb->during_object_fetch) {
|
|
||||||
gb->cycles_for_line += gb->display_cycles;
|
|
||||||
gb->display_cycles = 0;
|
|
||||||
gb->object_fetch_aborted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
GB_write_memory(gb, addr, old_value | (value & 1));
|
GB_write_memory(gb, addr, old_value | (value & 1));
|
||||||
GB_advance_cycles(gb, 1);
|
GB_advance_cycles(gb, 1);
|
||||||
/* Handle disabling objects while already fetching an object */
|
|
||||||
if ((old_value & 2) && !(value & 2)) {
|
|
||||||
if (gb->during_object_fetch) {
|
|
||||||
gb->cycles_for_line += gb->display_cycles;
|
|
||||||
gb->display_cycles = 0;
|
|
||||||
gb->object_fetch_aborted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GB_write_memory(gb, addr, value);
|
GB_write_memory(gb, addr, value);
|
||||||
gb->pending_cycles = 5;
|
gb->pending_cycles = 5;
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user