mirror of https://github.com/mgba-emu/mgba.git
GBA DMA: Fix invalid DMA handling (fixes #1301)
This commit is contained in:
parent
ab4de2301f
commit
d6ff7538ee
1
CHANGES
1
CHANGES
|
@ -20,6 +20,7 @@ Bugfixes:
|
||||||
- Qt: Fix quick load recent accidentally saving (fixes mgba.io/i/1309)
|
- Qt: Fix quick load recent accidentally saving (fixes mgba.io/i/1309)
|
||||||
- GBA: Fix video timing when skipping BIOS (fixes mgba.io/i/1318)
|
- GBA: Fix video timing when skipping BIOS (fixes mgba.io/i/1318)
|
||||||
- 3DS: Work around menu freezing (fixes mgba.io/i/1294)
|
- 3DS: Work around menu freezing (fixes mgba.io/i/1294)
|
||||||
|
- GBA DMA: Fix invalid DMA handling (fixes mgba.io/i/1301)
|
||||||
Misc:
|
Misc:
|
||||||
- GBA Video: Improve sprite cycle counting (fixes mgba.io/i/1274)
|
- GBA Video: Improve sprite cycle counting (fixes mgba.io/i/1274)
|
||||||
- Qt: Updated Italian translation (by Vecna)
|
- Qt: Updated Italian translation (by Vecna)
|
||||||
|
|
|
@ -260,8 +260,6 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) {
|
||||||
}
|
}
|
||||||
gba->bus = memory->dmaTransferRegister;
|
gba->bus = memory->dmaTransferRegister;
|
||||||
cpu->memory.store32(cpu, dest, memory->dmaTransferRegister, 0);
|
cpu->memory.store32(cpu, dest, memory->dmaTransferRegister, 0);
|
||||||
memory->dmaTransferRegister &= 0xFFFF0000;
|
|
||||||
memory->dmaTransferRegister |= memory->dmaTransferRegister >> 16;
|
|
||||||
} else {
|
} else {
|
||||||
if (sourceRegion == REGION_CART2_EX && memory->savedata.type == SAVEDATA_EEPROM) {
|
if (sourceRegion == REGION_CART2_EX && memory->savedata.type == SAVEDATA_EEPROM) {
|
||||||
if (memory->savedata.type == SAVEDATA_AUTODETECT) {
|
if (memory->savedata.type == SAVEDATA_AUTODETECT) {
|
||||||
|
@ -269,10 +267,10 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) {
|
||||||
GBASavedataInitEEPROM(&memory->savedata);
|
GBASavedataInitEEPROM(&memory->savedata);
|
||||||
}
|
}
|
||||||
memory->dmaTransferRegister = GBASavedataReadEEPROM(&memory->savedata);
|
memory->dmaTransferRegister = GBASavedataReadEEPROM(&memory->savedata);
|
||||||
} else {
|
memory->dmaTransferRegister |= memory->dmaTransferRegister << 16;
|
||||||
if (source) {
|
} else if (source) {
|
||||||
memory->dmaTransferRegister = cpu->memory.load16(cpu, source, 0);
|
memory->dmaTransferRegister = cpu->memory.load16(cpu, source, 0);
|
||||||
}
|
memory->dmaTransferRegister |= memory->dmaTransferRegister << 16;
|
||||||
}
|
}
|
||||||
if (destRegion == REGION_CART2_EX) {
|
if (destRegion == REGION_CART2_EX) {
|
||||||
if (memory->savedata.type == SAVEDATA_AUTODETECT) {
|
if (memory->savedata.type == SAVEDATA_AUTODETECT) {
|
||||||
|
@ -286,7 +284,6 @@ void GBADMAService(struct GBA* gba, int number, struct GBADMA* info) {
|
||||||
cpu->memory.store16(cpu, dest, memory->dmaTransferRegister, 0);
|
cpu->memory.store16(cpu, dest, memory->dmaTransferRegister, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
memory->dmaTransferRegister |= memory->dmaTransferRegister << 16;
|
|
||||||
gba->bus = memory->dmaTransferRegister;
|
gba->bus = memory->dmaTransferRegister;
|
||||||
}
|
}
|
||||||
int sourceOffset = DMA_OFFSET[GBADMARegisterGetSrcControl(info->reg)] * width;
|
int sourceOffset = DMA_OFFSET[GBADMARegisterGetSrcControl(info->reg)] * width;
|
||||||
|
|
Loading…
Reference in New Issue