all repos — mgba @ f7ed6ec99f2054dc9dbd3650da33f56d7998c45c

mGBA Game Boy Advance Emulator

DS Memory: Add loading from ITCM
Vicki Pfau vi@endrift.com
Mon, 30 Jan 2017 12:17:58 -0800
commit

f7ed6ec99f2054dc9dbd3650da33f56d7998c45c

parent

7ff9c0af5b1bf774042b2f6adc140bc0cde82992

1 files changed, 26 insertions(+), 2 deletions(-)

jump to
M src/ds/memory.csrc/ds/memory.c

@@ -661,6 +661,14 @@ uint32_t value = 0;

int wait = ds->ds9.memory.waitstatesNonseq32[address >> DS_BASE_OFFSET]; switch (address >> DS_BASE_OFFSET) { + case DS9_REGION_ITCM: + case DS9_REGION_ITCM_MIRROR: + if (address < (512U << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { + LOAD_32(value, address & (DS9_SIZE_ITCM - 1), memory->itcm); + break; + } + mLOG(DS_MEM, STUB, "Bad DS9 Load32: %08X:%08X", address, value); + break; case DS_REGION_RAM: if ((address & ~(DS9_SIZE_DTCM - 1)) == DS9_BASE_DTCM) { LOAD_32(value, address & (DS9_SIZE_DTCM - 1), memory->dtcm);

@@ -701,6 +709,14 @@ uint32_t value = 0;

int wait = ds->ds9.memory.waitstatesNonseq16[address >> DS_BASE_OFFSET]; switch (address >> DS_BASE_OFFSET) { + case DS9_REGION_ITCM: + case DS9_REGION_ITCM_MIRROR: + if (address < (512U << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { + LOAD_16(value, address & (DS9_SIZE_ITCM - 1), memory->itcm); + break; + } + mLOG(DS_MEM, STUB, "Bad DS9 Load16: %08X:%08X", address, value); + break; case DS_REGION_RAM: if ((address & ~(DS9_SIZE_DTCM - 1)) == DS9_BASE_DTCM) { LOAD_16(value, address & (DS9_SIZE_DTCM - 1), memory->dtcm);

@@ -740,6 +756,14 @@ uint32_t value = 0;

int wait = ds->ds9.memory.waitstatesNonseq16[address >> DS_BASE_OFFSET]; switch (address >> DS_BASE_OFFSET) { + case DS9_REGION_ITCM: + case DS9_REGION_ITCM_MIRROR: + if (address < (512U << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { + value = ((uint8_t*) memory->itcm)[address & (DS9_SIZE_ITCM - 1)]; + break; + } + mLOG(DS_MEM, STUB, "Bad DS9 Load8: %08X:%08X", address, value); + break; case DS_REGION_RAM: if ((address & ~(DS9_SIZE_DTCM - 1)) == DS9_BASE_DTCM) { value = ((uint8_t*) memory->dtcm)[address & (DS9_SIZE_DTCM - 1)];

@@ -775,7 +799,7 @@

switch (address >> DS_BASE_OFFSET) { case DS9_REGION_ITCM: case DS9_REGION_ITCM_MIRROR: - if (address < (512 << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { + if (address < (512U << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { STORE_32(value, address & (DS9_SIZE_ITCM - 1), memory->itcm); break; }

@@ -814,7 +838,7 @@

switch (address >> DS_BASE_OFFSET) { case DS9_REGION_ITCM: case DS9_REGION_ITCM_MIRROR: - if (address < (512 << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { + if (address < (512U << ARMTCMControlGetVirtualSize(cpu->cp15.r9.i))) { STORE_16(value, address & (DS9_SIZE_ITCM - 1), memory->itcm); break; }