VRAM conflicts during halt/stop on a CGB
This commit is contained in:
parent
196aaaa7ed
commit
0ab7bf7749
@ -679,18 +679,19 @@ static inline uint8_t vram_read(GB_gameboy_t *gb, uint16_t addr)
|
|||||||
// DMAing from VRAM!
|
// DMAing from VRAM!
|
||||||
/* TODO: AGS has its own, very different pattern, but AGS is not currently a supported model */
|
/* TODO: AGS has its own, very different pattern, but AGS is not currently a supported model */
|
||||||
/* TODO: Research this when researching odd modes */
|
/* TODO: Research this when researching odd modes */
|
||||||
|
/* TODO: probably not 100% on the first few reads during halt/stop modes*/
|
||||||
if (GB_is_cgb(gb)) {
|
if (GB_is_cgb(gb)) {
|
||||||
if (gb->dma_ppu_vram_conflict) {
|
if (gb->dma_ppu_vram_conflict) {
|
||||||
addr = (gb->dma_ppu_vram_conflict_addr & 0x1FFF) | (addr & 0x2000);
|
addr = (gb->dma_ppu_vram_conflict_addr & 0x1FFF) | (addr & 0x2000);
|
||||||
}
|
}
|
||||||
else if (gb->dma_cycles_modulo) {
|
else if (gb->dma_cycles_modulo && !gb->halted && !gb->stopped) {
|
||||||
addr &= 0x2000;
|
addr &= 0x2000;
|
||||||
addr |= ((gb->dma_current_src - 1) & 0x1FFF);
|
addr |= ((gb->dma_current_src - 1) & 0x1FFF);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
addr &= 0x2000 | ((gb->dma_current_src - 1) & 0x1FFF);
|
addr &= 0x2000 | ((gb->dma_current_src - 1) & 0x1FFF);
|
||||||
gb->dma_ppu_vram_conflict_addr = addr;
|
gb->dma_ppu_vram_conflict_addr = addr;
|
||||||
gb->dma_ppu_vram_conflict = true;
|
gb->dma_ppu_vram_conflict = !gb->halted && !gb->stopped;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user