diff options
author | red031000 <rubenru09@aol.com> | 2020-06-07 22:33:50 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-07 22:35:13 +0100 |
commit | 8baf7924fc2770e491a14494c35565f4b36c99ce (patch) | |
tree | b5976a135c50b1e5ddb5c8f6fa7cfe1c85826260 | |
parent | 5dfe3440383dd530bda24985f802d8c94bb452b8 (diff) |
finally finish OS_reset and stop git being stupid
-rw-r--r-- | arm9/asm/arm9_itcm.s | 21 | ||||
-rw-r--r-- | arm9/lib/.gitignore | 3 | ||||
-rw-r--r-- | arm9/lib/include/OS_reset.h | 5 | ||||
-rw-r--r-- | arm9/lib/src/OS_reset.c | 45 | ||||
-rw-r--r-- | files/.gitattributes | 2 |
5 files changed, 34 insertions, 42 deletions
diff --git a/arm9/asm/arm9_itcm.s b/arm9/asm/arm9_itcm.s index 13f0ad5c..5c3dc240 100644 --- a/arm9/asm/arm9_itcm.s +++ b/arm9/asm/arm9_itcm.s @@ -2,27 +2,6 @@ .include "global.inc" .section .text - ; OS - arm_func_start OSi_DoResetSystem ;OS_reset.c -OSi_DoResetSystem: ; 0x01FF84A4 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _01FF84DC -_01FF84B0: - ldrh r1, [r0] - cmp r1, #0 - beq _01FF84B0 - ldr r0, _01FF84E0 - mov r1, #0 - strh r1, [r0] - bl OSi_ReloadRomData - bl OSi_DoBoot - add sp, sp, #4 - ldmfd sp!, {lr} - bx lr -_01FF84DC: .word OSi_IsResetOccurred -_01FF84E0: .word 0x04000208 - ; MI arm_func_start MIi_DmaSetParams_wait_noInt MIi_DmaSetParams_wait_noInt: ; 0x01FF84E4 diff --git a/arm9/lib/.gitignore b/arm9/lib/.gitignore new file mode 100644 index 00000000..f64bee72 --- /dev/null +++ b/arm9/lib/.gitignore @@ -0,0 +1,3 @@ +libsyscall.a + +syscall/*.o diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h index fd918370..cb7680d1 100644 --- a/arm9/lib/include/OS_reset.h +++ b/arm9/lib/include/OS_reset.h @@ -16,10 +16,11 @@ void OS_InitReset(void); static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); static void OSi_SendToPxi(u16 data); void OS_ResetSystem(u32 parameter); +static void OSi_DoResetSystem(void); void OSi_DoBoot(void); static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size); -void OSi_ReloadRomData(void); -void OSi_ReadCardRom32(u32 src, void *dst, s32 len); +static void OSi_ReloadRomData(void); +static void OSi_ReadCardRom32(u32 src, void *dst, s32 len); static inline u32 OS_GetResetParameter(void) { diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c index b7bf5f0b..0857bf0b 100644 --- a/arm9/lib/src/OS_reset.c +++ b/arm9/lib/src/OS_reset.c @@ -23,7 +23,6 @@ extern void DC_StoreAll(void); extern void DC_InvalidateAll(void); extern void IC_InvalidateAll(void); extern void DC_WaitWriteBufferEmpty(void); -extern void OSi_DoResetSystem(void); //in itcm, should technically be in this file ARM_FUNC void OS_InitReset(void) { if (OSi_IsInitReset) { @@ -64,10 +63,19 @@ ARM_FUNC void OS_ResetSystem(u32 parameter) { (void)OS_ResetRequestIrqMask((u32)~0); *(u32 *)HW_RESET_PARAMETER_BUF = parameter; OSi_SendToPxi(OS_PXI_COMMAND_RESET); - OSi_DoResetSystem(); //oh boy this is in itcm, that's gonna be fun to deal with Kappa + OSi_DoResetSystem(); } #pragma section ITCM begin +ARM_FUNC static void OSi_DoResetSystem(void) +{ + while (!OSi_IsResetOccurred) { } + + reg_OS_IME = 0; + OSi_ReloadRomData(); + OSi_DoBoot(); +} + ARM_FUNC asm void OSi_DoBoot(void) { mov ip, #0x04000000 @@ -127,22 +135,7 @@ _01FF8284: bx lr } -enum -{ - CARD_MASTER_SELECT_ROM = 0x0, - CARD_MASTER_ENABLE = 0x80, - CARD_CMD_READ_PAGE = 0xb7, - CARD_CTRL_CMD_MASK = 0x07000000, - CARD_CTRL_CMD_PAGE = 0x01000000, - CARD_CTRL_READ = 0x00000000, - CARD_CTRL_RESET_HI = 0x20000000, - CARD_CTRL_START = 0x80000000, - CARD_CTRL_READY = 0x00800000, - CARD_ENUM_END -}; - - -ARM_FUNC void OSi_ReloadRomData(void) +ARM_FUNC static void OSi_ReloadRomData(void) { u32 header = (u32)HW_ROM_HEADER_BUF; const u32 rom_base = *(u32 *)HW_ROM_BASE_OFFSET_BUF; @@ -182,7 +175,21 @@ ARM_FUNC void OSi_ReloadRomData(void) OSi_ReadCardRom32(src_arm7, (void *)dst_arm7, (s32)len_arm7); } -ARM_FUNC void OSi_ReadCardRom32(u32 src, void *dst, s32 len) //should be static, can't mark as such +enum +{ + CARD_MASTER_SELECT_ROM = 0x0, + CARD_MASTER_ENABLE = 0x80, + CARD_CMD_READ_PAGE = 0xb7, + CARD_CTRL_CMD_MASK = 0x07000000, + CARD_CTRL_CMD_PAGE = 0x01000000, + CARD_CTRL_READ = 0x00000000, + CARD_CTRL_RESET_HI = 0x20000000, + CARD_CTRL_START = 0x80000000, + CARD_CTRL_READY = 0x00800000, + CARD_ENUM_END +}; + +ARM_FUNC static void OSi_ReadCardRom32(u32 src, void *dst, s32 len) { vu32 *const hdr_GAME_BUF = (vu32 *)(HW_ROM_HEADER_BUF + 0x60); diff --git a/files/.gitattributes b/files/.gitattributes new file mode 100644 index 00000000..6129766f --- /dev/null +++ b/files/.gitattributes @@ -0,0 +1,2 @@ +*.bin binary +*.txt eol=crlf |