mirror of https://github.com/mgba-emu/mgba.git
GBA Memory: Fix alignment of open bus 8- and 16-bit loads
This commit is contained in:
parent
1119d773e1
commit
06bf931b77
1
CHANGES
1
CHANGES
|
@ -57,6 +57,7 @@ Bugfixes:
|
||||||
- GBA Memory: Fix initial DMA state
|
- GBA Memory: Fix initial DMA state
|
||||||
- GBA BIOS: Fix BIOS prefetch after returning from an IRQ
|
- GBA BIOS: Fix BIOS prefetch after returning from an IRQ
|
||||||
- GBA BIOS: Fix BIOS prefetch after reset
|
- GBA BIOS: Fix BIOS prefetch after reset
|
||||||
|
- GBA Memory: Fix alignment of open bus 8- and 16-bit loads
|
||||||
Misc:
|
Misc:
|
||||||
- Qt: Disable sync to video by default
|
- Qt: Disable sync to video by default
|
||||||
- GBA: Exit cleanly on FATAL if the port supports it
|
- GBA: Exit cleanly on FATAL if the port supports it
|
||||||
|
|
|
@ -297,14 +297,14 @@ uint32_t GBALoad16(struct ARMCore* cpu, uint32_t address, int* cycleCounter) {
|
||||||
LOAD_16(value, address, memory->bios);
|
LOAD_16(value, address, memory->bios);
|
||||||
} else {
|
} else {
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad BIOS Load16: 0x%08X", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad BIOS Load16: 0x%08X", address);
|
||||||
value = memory->biosPrefetch & 0xFFFF;
|
LOAD_16(value, address & 2, &memory->biosPrefetch);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load16: 0x%08X", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load16: 0x%08X", address);
|
||||||
if (cpu->cycles >= cpu->nextEvent) {
|
if (cpu->cycles >= cpu->nextEvent) {
|
||||||
value = gba->bus & 0xFFFF;
|
LOAD_16(value, address & 2, &gba->bus);
|
||||||
} else {
|
} else {
|
||||||
value = cpu->prefetch[1] & 0xFFFF;
|
LOAD_16(value, address & 2, &cpu->prefetch[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -364,9 +364,9 @@ uint32_t GBALoad16(struct ARMCore* cpu, uint32_t address, int* cycleCounter) {
|
||||||
default:
|
default:
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load16: 0x%08X", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load16: 0x%08X", address);
|
||||||
if (cpu->cycles >= cpu->nextEvent) {
|
if (cpu->cycles >= cpu->nextEvent) {
|
||||||
value = gba->bus;
|
LOAD_16(value, address & 2, &gba->bus);
|
||||||
} else {
|
} else {
|
||||||
value = cpu->prefetch[1];
|
LOAD_16(value, address & 2, &cpu->prefetch[1]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -392,14 +392,14 @@ uint32_t GBALoad8(struct ARMCore* cpu, uint32_t address, int* cycleCounter) {
|
||||||
value = ((int8_t*) memory->bios)[address];
|
value = ((int8_t*) memory->bios)[address];
|
||||||
} else {
|
} else {
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad BIOS Load8: 0x%08X", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad BIOS Load8: 0x%08X", address);
|
||||||
value = memory->biosPrefetch;
|
value = ((uint8_t*) &memory->biosPrefetch)[address & 3];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load8: 0x%08x", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load8: 0x%08x", address);
|
||||||
if (cpu->cycles >= cpu->nextEvent) {
|
if (cpu->cycles >= cpu->nextEvent) {
|
||||||
value = gba->bus;
|
value = ((uint8_t*) &gba->bus)[address & 3];
|
||||||
} else {
|
} else {
|
||||||
value = cpu->prefetch[1];
|
value = ((uint8_t*) &cpu->prefetch[1])[address & 3];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -461,9 +461,9 @@ uint32_t GBALoad8(struct ARMCore* cpu, uint32_t address, int* cycleCounter) {
|
||||||
default:
|
default:
|
||||||
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load8: 0x%08x", address);
|
GBALog(gba, GBA_LOG_GAME_ERROR, "Bad memory Load8: 0x%08x", address);
|
||||||
if (cpu->cycles >= cpu->nextEvent) {
|
if (cpu->cycles >= cpu->nextEvent) {
|
||||||
value = gba->bus;
|
value = ((uint8_t*) &gba->bus)[address & 3];
|
||||||
} else {
|
} else {
|
||||||
value = cpu->prefetch[1];
|
value = ((uint8_t*) &cpu->prefetch[1])[address & 3];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue