diff --git a/include/mem_map.h b/include/mem_map.h index 66fd392..f702de9 100644 --- a/include/mem_map.h +++ b/include/mem_map.h @@ -109,6 +109,7 @@ #define A11_MMU_TABLES_BASE (AXIWRAM_BASE) #define A11_VECTORS_START (AXIWRAM_BASE + AXIWRAM_SIZE - 0x60) #define A11_VECTORS_SIZE (0x60) +#define A11_FALLBACK_ENTRY (AXIWRAM_BASE + AXIWRAM_SIZE - 0x4) #define A11_STUB_ENTRY (AXIWRAM_BASE + AXIWRAM_SIZE - 0x200) #define A11_STUB_SIZE (0x1A0) // Don't overwrite the vectors #define A11_STACK_START (A11_STUB_ENTRY - 0xE00) diff --git a/source/arm11/firm.c b/source/arm11/firm.c index 62f52fc..9445b13 100644 --- a/source/arm11/firm.c +++ b/source/arm11/firm.c @@ -8,7 +8,7 @@ { // Answer ARM0 REG_PXI_SYNC11 = 0; // Disable all IRQs - *((vu32*)0x1FFFFFFC) = 0; + *((vu32*)A11_FALLBACK_ENTRY) = 0; while(REG_PXI_CNT11 & PXI_SEND_FIFO_FULL); REG_PXI_SEND11 = PXI_RPL_OK; @@ -23,7 +23,7 @@ if(!e) { - while(!(e = (intptr_t)*((vu32*)0x1FFFFFFC))); + while(!(e = (intptr_t)*((vu32*)A11_FALLBACK_ENTRY))); } ((void (*)(void))e)(); diff --git a/source/arm9/exception.s b/source/arm9/exception.s index 78d007d..3bfd45d 100644 --- a/source/arm9/exception.s +++ b/source/arm9/exception.s @@ -51,7 +51,7 @@ irqHandler: stmfd sp!, {r0-r3, r12, lr} ldr r12, =(IO_MEM_ARM9_ONLY + 0x1000) @ REG_IRQ_IE - ldmia r12, {r1, r2} + ldm r12, {r1, r2} and r1, r1, r2 mov r3, #0x80000000 irqHandler_find_first_lp: diff --git a/source/arm9/firm.c b/source/arm9/firm.c index 905b77b..cfb647f 100644 --- a/source/arm9/firm.c +++ b/source/arm9/firm.c @@ -255,7 +255,6 @@ NDMA_copy((u32*)A9_STUB_ENTRY, (u32*)firmLaunchStub, A9_STUB_SIZE>>2); //printf("Starting firm launch...\n"); - void (*stub)(void) = (void (*)(void))A9_STUB_ENTRY; - stub(); + ((void (*)(void))A9_STUB_ENTRY)(); while(1); } diff --git a/source/arm9/ndma.c b/source/arm9/ndma.c index 1606864..fa8b68e 100644 --- a/source/arm9/ndma.c +++ b/source/arm9/ndma.c @@ -58,11 +58,6 @@ REG_NDMA7_BLOCK_CNT = NDMA_BLOCK_SYS_FREQ; REG_NDMA7_FILL_DATA = value; REG_NDMA7_CNT = NDMA_ENABLE | NDMA_IRQ_ENABLE | NDMA_STARTUP_IMMEDIATE | NDMA_SRC_UPDATE_FILL | NDMA_DST_UPDATE_INC; - - while(REG_NDMA7_CNT & NDMA_ENABLE) - { - waitForIrq(); - } } void NDMA_fill(u32 *dest, u32 value, u32 num) diff --git a/source/arm9/start.s b/source/arm9/start.s index 46c17ea..56699b5 100644 --- a/source/arm9/start.s +++ b/source/arm9/start.s @@ -63,7 +63,7 @@ mov sp, #0 @ SVC mode sp (Unused, aborts) msr cpsr_cxsf, #0xD2 @ IRQ mode - ldr sp, =(A9_STACK_END - 0x3000) + ldr sp, =(A9_STACK_END - 0x2000) msr cpsr_cxsf, #0xDF @ System mode ldr sp, =A9_STACK_END