Refine BIOS and unmapped memory accesses
Turns out there's a couple of inaccuracies that do affect a couple of games. Most of them are buggy games but emulating these accesses correctly helps jumping over some bugs.
This commit is contained in:
parent
08372aae64
commit
3f976c9557
4
cpu.c
4
cpu.c
|
@ -868,7 +868,7 @@ const u32 spsr_masks[4] = { 0x00000000, 0x000000EF, 0xF0000000, 0xF00000EF };
|
||||||
} \
|
} \
|
||||||
if(((_address >> 24) == 0) && (pc >= 0x4000)) \
|
if(((_address >> 24) == 0) && (pc >= 0x4000)) \
|
||||||
{ \
|
{ \
|
||||||
ror(dest, reg[REG_BUS_VALUE], (_address & 0x03) << 3); \
|
dest = (type)(reg[REG_BUS_VALUE] >> ((_address & 0x03) << 3)); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
\
|
\
|
||||||
|
@ -950,7 +950,7 @@ const u32 spsr_masks[4] = { 0x00000000, 0x000000EF, 0xF0000000, 0xF00000EF };
|
||||||
fast_read_memory(8, u8, address, dest) \
|
fast_read_memory(8, u8, address, dest) \
|
||||||
|
|
||||||
#define load_memory_u16(address, dest) \
|
#define load_memory_u16(address, dest) \
|
||||||
fast_read_memory(16, u32, address, dest) \
|
fast_read_memory(16, u16, address, dest) \
|
||||||
|
|
||||||
#define load_memory_u32(address, dest) \
|
#define load_memory_u32(address, dest) \
|
||||||
fast_read_memory(32, u32, address, dest) \
|
fast_read_memory(32, u32, address, dest) \
|
||||||
|
|
12
gba_memory.c
12
gba_memory.c
|
@ -569,10 +569,14 @@ u32 function_cc read_eeprom(void)
|
||||||
{ \
|
{ \
|
||||||
case 0x00: \
|
case 0x00: \
|
||||||
/* BIOS */ \
|
/* BIOS */ \
|
||||||
if(reg[REG_PC] >= 0x4000) \
|
if (address < 0x4000) { \
|
||||||
ror(value, reg[REG_BUS_VALUE], (address & 0x03) << 3); \
|
if(reg[REG_PC] >= 0x4000) \
|
||||||
else \
|
value = (u##type)(reg[REG_BUS_VALUE] >> ((address & 0x03) << 3)); \
|
||||||
value = readaddress##type(bios_rom, address & 0x3FFF); \
|
else \
|
||||||
|
value = readaddress##type(bios_rom, address & 0x3FFF); \
|
||||||
|
} else { \
|
||||||
|
read_open##type(); \
|
||||||
|
} \
|
||||||
break; \
|
break; \
|
||||||
\
|
\
|
||||||
case 0x02: \
|
case 0x02: \
|
||||||
|
|
Loading…
Reference in New Issue