Starting G/HDMA directly takes one more M-cycle (More research required)
This commit is contained in:
parent
dbc338a887
commit
11c148c851
@ -833,7 +833,6 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
|
|||||||
gb->hdma_on_hblank = (value & 0x80) != 0;
|
gb->hdma_on_hblank = (value & 0x80) != 0;
|
||||||
if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0) {
|
if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0) {
|
||||||
gb->hdma_on = true;
|
gb->hdma_on = true;
|
||||||
gb->hdma_cycles = -8;
|
|
||||||
}
|
}
|
||||||
gb->io_registers[GB_IO_HDMA5] = value;
|
gb->io_registers[GB_IO_HDMA5] = value;
|
||||||
gb->hdma_steps_left = (gb->io_registers[GB_IO_HDMA5] & 0x7F) + 1;
|
gb->hdma_steps_left = (gb->io_registers[GB_IO_HDMA5] & 0x7F) + 1;
|
||||||
@ -841,7 +840,7 @@ static void write_high_memory(GB_gameboy_t *gb, uint16_t addr, uint8_t value)
|
|||||||
if (gb->hdma_current_dest + (gb->hdma_steps_left << 4) > 0xFFFF) {
|
if (gb->hdma_current_dest + (gb->hdma_steps_left << 4) > 0xFFFF) {
|
||||||
gb->hdma_steps_left = (0x10000 - gb->hdma_current_dest) >> 4;
|
gb->hdma_steps_left = (0x10000 - gb->hdma_current_dest) >> 4;
|
||||||
}
|
}
|
||||||
gb->hdma_cycles = -8;
|
gb->hdma_cycles = -12;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Todo: what happens when starting a transfer during a transfer?
|
/* Todo: what happens when starting a transfer during a transfer?
|
||||||
|
Loading…
Reference in New Issue
Block a user