diff --git a/source/arm11/firm.c b/source/arm11/firm.c index 0049d08..62f52fc 100644 --- a/source/arm11/firm.c +++ b/source/arm11/firm.c @@ -8,19 +8,25 @@ { // Answer ARM0 REG_PXI_SYNC11 = 0; // Disable all IRQs + *((vu32*)0x1FFFFFFC) = 0; while(REG_PXI_CNT11 & PXI_SEND_FIFO_FULL); REG_PXI_SEND11 = PXI_RPL_OK; // Wait for entry address while(REG_PXI_CNT11 & PXI_RECV_FIFO_EMPTY); - void (*entry11)(void) = (void (*)(void))REG_PXI_RECV11; + intptr_t e = (intptr_t)REG_PXI_RECV11; // Tell ARM9 we got the entry while(REG_PXI_CNT11 & PXI_SEND_FIFO_FULL); REG_PXI_SEND11 = PXI_RPL_FIRM_LAUNCH_READY; REG_PXI_CNT11 = 0; // Disable PXI - entry11(); + if(!e) + { + while(!(e = (intptr_t)*((vu32*)0x1FFFFFFC))); + } + + ((void (*)(void))e)(); } noreturn void firm_launch(void)