diff options
-rw-r--r-- | arm7/asm/OS_reset.s | 100 | ||||
-rw-r--r-- | arm7/lib/include/OS_init.h | 2 | ||||
-rw-r--r-- | arm7/lib/include/OS_interrupt.h | 6 | ||||
-rw-r--r-- | arm7/lib/include/OS_reset.h | 14 | ||||
-rw-r--r-- | arm7/lib/include/PXI_fifo.h | 6 | ||||
-rw-r--r-- | arm7/lib/src/OS_init.c | 1 | ||||
-rw-r--r-- | arm7/lib/src/OS_reset.c | 59 | ||||
-rw-r--r-- | arm9/lib/include/OS_interrupt.h | 9 | ||||
-rw-r--r-- | arm9/lib/include/OS_reset.h | 15 | ||||
-rw-r--r-- | arm9/lib/include/PXI_fifo.h | 35 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 1 | ||||
-rw-r--r-- | arm9/lib/src/OS_reset.c | 4 | ||||
-rw-r--r-- | include/nitro/OS_interrupt_shared.h | 20 | ||||
-rw-r--r-- | include/nitro/OS_reset_shared.h | 20 | ||||
-rw-r--r-- | include/nitro/PXI_fifo_shared.h | 37 | ||||
-rw-r--r-- | include/nitro/mmap_shared.h | 1 |
16 files changed, 177 insertions, 153 deletions
diff --git a/arm7/asm/OS_reset.s b/arm7/asm/OS_reset.s deleted file mode 100644 index b2a8ffe6..00000000 --- a/arm7/asm/OS_reset.s +++ /dev/null @@ -1,100 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .bss - - .global _03807950 -_03807950: ;0x03807950 - .space 0x03807954 - 0x03807950 - - .global _03807954 -_03807954: ;0x03807954 - .space 0x03807958 - 0x03807954 - - .section .text - - arm_func_start OS_ResetSystem -OS_ResetSystem: ; 0x037FB0E0 - stmfd sp!, {lr} - sub sp, sp, #4 - mov r0, #0 - bl MI_StopDma - mov r0, #1 - bl MI_StopDma - mov r0, #2 - bl MI_StopDma - mov r0, #3 - bl MI_StopDma - mov r0, #262144 ; 0x40000 - bl OS_SetIrqMask - mvn r0, #0 - bl OS_ResetRequestIrqMask - bl SND_Shutdown - mov r0, #16 - bl OSi_SendToPxi - bl FUN_038073EC - add sp, sp, #4 - ldmia sp!, {lr} - bx lr - - arm_func_start OSi_SendToPxi -OSi_SendToPxi: ; 0x037FB134 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0, lsl #8 - mov r5, #12 - mov r4, #0 -_037FB144: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo - cmp r0, #0 - bne _037FB144 - ldmia sp!, {r4, r5, r6, lr} - bx lr - - arm_func_start OSi_CommonCallback -OSi_CommonCallback: ; 0x037FB164 - stmfd sp!, {lr} - sub sp, sp, #4 - and r0, r1, #32512 ; 0x7f00 - mov r0, r0, lsl #8 - mov r0, r0, lsr #16 - cmp r0, #16 - moveq r1, #1 - ldreq r0, _037FB19C ; =_03807954 - streqh r1, [r0] - beq _037FB190 - bl OS_Terminate -_037FB190: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037FB19C: .word _03807954 - - arm_func_start OS_IsResetOccurred -OS_IsResetOccurred: ; 0x037FB1A0 - ldr r0, _037FB1AC ; =_03807954 - ldrh r0, [r0] - bx lr -_037FB1AC: .word _03807954 - - arm_func_start OS_InitReset -OS_InitReset: ; 0x037FB1B0 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r0, _037FB1E8 ; =_03807950 - ldrh r1, [r0] - cmp r1, #0 - bne _037FB1DC - mov r1, #1 - strh r1, [r0] - mov r0, #12 - ldr r1, _037FB1EC ; =OSi_CommonCallback - bl PXI_SetFifoRecvCallback -_037FB1DC: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037FB1E8: .word _03807950 -_037FB1EC: .word OSi_CommonCallback diff --git a/arm7/lib/include/OS_init.h b/arm7/lib/include/OS_init.h index 9c9b1f93..c90740c2 100644 --- a/arm7/lib/include/OS_init.h +++ b/arm7/lib/include/OS_init.h @@ -4,6 +4,8 @@ #include "nitro/types.h" #include "OS_system.h" #include "OS_arena.h" +#include "OS_alloc.h" +#include "OS_reset.h" void OS_Init(void); diff --git a/arm7/lib/include/OS_interrupt.h b/arm7/lib/include/OS_interrupt.h new file mode 100644 index 00000000..afcb9b5f --- /dev/null +++ b/arm7/lib/include/OS_interrupt.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_OS_INTERRUPT_H +#define POKEDIAMOND_ARM7_OS_INTERRUPT_H + +#include "nitro/OS_interrupt_shared.h" + +#endif //POKEDIAMOND_ARM7_OS_INTERRUPT_H diff --git a/arm7/lib/include/OS_reset.h b/arm7/lib/include/OS_reset.h new file mode 100644 index 00000000..f643dd58 --- /dev/null +++ b/arm7/lib/include/OS_reset.h @@ -0,0 +1,14 @@ +#ifndef POKEDIAMOND_ARM7_OS_RESET_H +#define POKEDIAMOND_ARM7_OS_RESET_H + +#include "nitro/types.h" +#include "nitro/OS_reset_shared.h" +#include "PXI_fifo.h" + +void OS_InitReset(void); +BOOL OS_IsResetOccurred(void); +static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); +static void OSi_SendToPxi(u16 data); +void OS_ResetSystem(void); + +#endif //POKEDIAMOND_ARM7_OS_RESET_H diff --git a/arm7/lib/include/PXI_fifo.h b/arm7/lib/include/PXI_fifo.h new file mode 100644 index 00000000..6d634f72 --- /dev/null +++ b/arm7/lib/include/PXI_fifo.h @@ -0,0 +1,6 @@ +#ifndef POKEDIAMOND_ARM7_PXI_FIFO_H +#define POKEDIAMOND_ARM7_PXI_FIFO_H + +#include "nitro/PXI_fifo_shared.h" + +#endif //POKEDIAMOND_ARM7_PXI_FIFO_H diff --git a/arm7/lib/src/OS_init.c b/arm7/lib/src/OS_init.c index f4972638..583bb75e 100644 --- a/arm7/lib/src/OS_init.c +++ b/arm7/lib/src/OS_init.c @@ -7,7 +7,6 @@ extern void OS_InitIrqTable(void); extern void OS_InitTick(void); extern void OS_InitAlarm(void); extern void OS_InitThread(void); -extern void OS_InitReset(void); extern void CTRDG_Init(void); ARM_FUNC void OS_Init(void) diff --git a/arm7/lib/src/OS_reset.c b/arm7/lib/src/OS_reset.c new file mode 100644 index 00000000..c40fcff3 --- /dev/null +++ b/arm7/lib/src/OS_reset.c @@ -0,0 +1,59 @@ +#include "function_target.h" +#include "OS_reset.h" +#include "OS_interrupt.h" + +static u16 OSi_IsInitReset = 0; +vu16 OSi_IsResetOccurred = 0; + +extern void MI_StopDma(u32 dma); +extern OSIrqMask OS_SetIrqMask(OSIrqMask mask); +extern OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); +extern void SND_Shutdown(void); +extern void PXI_SetFifoRecvCallback(u32 param1, void* callback); +extern void OS_Terminate(void); +extern u32 PXI_SendWordByFifo(u32 param1, u32 data, u32 param2); +extern void FUN_038073EC(void); //OSi_DoResetSystem, in wram + +ARM_FUNC void OS_InitReset(void) +{ + if (OSi_IsInitReset) + return; + OSi_IsInitReset = TRUE; + + PXI_SetFifoRecvCallback(PXI_FIFO_TAG_OS, OSi_CommonCallback); +} + +ARM_FUNC BOOL OS_IsResetOccurred(void) +{ + return OSi_IsResetOccurred; +} + +ARM_FUNC static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err) +{ +#pragma unused(tag, err) + u16 command = (u16)((data & OS_PXI_COMMAND_MASK) >> OS_PXI_COMMAND_SHIFT); + if (command == OS_PXI_COMMAND_RESET) + { + OSi_IsResetOccurred = TRUE; + return; + } + OS_Terminate(); +} + +ARM_FUNC static void OSi_SendToPxi(u16 data) +{ + while (PXI_SendWordByFifo(PXI_FIFO_TAG_OS, (u32) data << 0x8, FALSE)) {} +} + +ARM_FUNC void OS_ResetSystem(void) { + MI_StopDma(0); + MI_StopDma(1); + MI_StopDma(2); + MI_StopDma(3); + + (void)OS_SetIrqMask(0x40000); + (void)OS_ResetRequestIrqMask((u32)~0); + SND_Shutdown(); + OSi_SendToPxi(OS_PXI_COMMAND_RESET); + FUN_038073EC(); //OSi_DoResetSystem, in wram +} diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index 6ffa3a10..ec58a636 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -1,7 +1,8 @@ -#ifndef POKEDIAMOND_OS_INTERRUPT_H -#define POKEDIAMOND_OS_INTERRUPT_H +#ifndef POKEDIAMOND_ARM9_OS_INTERRUPT_H +#define POKEDIAMOND_ARM9_OS_INTERRUPT_H #include "nitro/types.h" +#include "nitro/OS_interrupt_shared.h" typedef void (*OSIrqFunction) (void); @@ -12,8 +13,6 @@ typedef struct void* arg; } OSIrqCallbackInfo; -typedef u32 OSIrqMask; - extern OSIrqFunction OS_IRQTable[]; extern OSIrqCallbackInfo OSi_IrqCallbackInfo[8]; @@ -28,4 +27,4 @@ OSIrqMask OS_DisableIrqMask(OSIrqMask mask); OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); void OS_SetIrqStackChecker(void); -#endif //POKEDIAMOND_OS_INTERRUPT_H +#endif //POKEDIAMOND_ARM9_OS_INTERRUPT_H diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h index cb7680d1..ef62184b 100644 --- a/arm9/lib/include/OS_reset.h +++ b/arm9/lib/include/OS_reset.h @@ -1,17 +1,10 @@ -// -// Created by red031000 on 2020-05-06. -// - -#ifndef POKEDIAMOND_OS_RESET_H -#define POKEDIAMOND_OS_RESET_H +#ifndef POKEDIAMOND_ARM9_OS_RESET_H +#define POKEDIAMOND_ARM9_OS_RESET_H #include "consts.h" +#include "nitro/OS_reset_shared.h" #include "PXI_fifo.h" -#define OS_PXI_COMMAND_MASK 0x7f00 -#define OS_PXI_COMMAND_SHIFT 8 -#define OS_PXI_COMMAND_RESET 0x10 - void OS_InitReset(void); static void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err); static void OSi_SendToPxi(u16 data); @@ -27,4 +20,4 @@ static inline u32 OS_GetResetParameter(void) return (u32)*(u32 *)HW_RESET_PARAMETER_BUF; } -#endif //POKEDIAMOND_OS_RESET_H +#endif //POKEDIAMOND_ARM9_OS_RESET_H diff --git a/arm9/lib/include/PXI_fifo.h b/arm9/lib/include/PXI_fifo.h index 1d45dda2..45caa906 100644 --- a/arm9/lib/include/PXI_fifo.h +++ b/arm9/lib/include/PXI_fifo.h @@ -1,33 +1,6 @@ -// -// Created by red031000 on 2020-05-06. -// +#ifndef POKEDIAMOND_ARM9_PXI_FIFO_H +#define POKEDIAMOND_ARM9_PXI_FIFO_H -#ifndef POKEDIAMOND_PXI_FIFO_H -#define POKEDIAMOND_PXI_FIFO_H +#include "nitro/PXI_fifo_shared.h" -#include "function_target.h" - -ENUMS_ALWAYS_INT_ON -typedef enum { - PXI_FIFO_TAG_EX = 0, // Extension format - PXI_FIFO_TAG_USER_0, // for application programmer, use it in free - PXI_FIFO_TAG_USER_1, // for application programmer, use it in free - PXI_FIFO_TAG_SYSTEM, // SDK inner usage - PXI_FIFO_TAG_NVRAM, // NVRAM - PXI_FIFO_TAG_RTC, // RTC - PXI_FIFO_TAG_TOUCHPANEL, // Touch Panel - PXI_FIFO_TAG_SOUND, // Sound - PXI_FIFO_TAG_PM, // Power Management - PXI_FIFO_TAG_MIC, // Microphone - PXI_FIFO_TAG_WM, // Wireless Manager - PXI_FIFO_TAG_FS, // File System - PXI_FIFO_TAG_OS, // OS - PXI_FIFO_TAG_CTRDG, // Cartridge - PXI_FIFO_TAG_CARD, // Card - PXI_FIFO_TAG_WVR, // Control driving wireless library - PXI_FIFO_TAG_CTRDG_Ex, // Cartridge Ex - PXI_MAX_FIFO_TAG = 32 // MAX FIFO TAG -} PXIFifoTag; -ENUMS_ALWAYS_INT_RESET - -#endif //POKEDIAMOND_PXI_FIFO_H +#endif //POKEDIAMOND_ARM9_PXI_FIFO_H diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index d0e73aec..6a5f23c5 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -27,7 +27,6 @@ extern u32 SDK_AUTOLOAD_DTCM_START[]; #define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM + 0x007ffc20) #define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM + 0x007ffc2c) -#define HW_WM_BOOT_BUF (HW_MAIN_MEM + 0x007ffc40) #define HW_ROM_HEADER_BUF (HW_MAIN_MEM + 0x007ffe00) // ROM registration area data buffer #define HW_RED_RESERVED (HW_MAIN_MEM + 0x007ff800) // Some kind of reserved data for shared memory #define HW_MAIN_MEM_SYSTEM (HW_MAIN_MEM + 0x007ffc00) diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c index 0857bf0b..f22b0e3c 100644 --- a/arm9/lib/src/OS_reset.c +++ b/arm9/lib/src/OS_reset.c @@ -1,7 +1,3 @@ -// -// Created by red031000 on 2020-05-06. -// - #include "function_target.h" #include "OS_reset.h" #include "MB_mb.h" diff --git a/include/nitro/OS_interrupt_shared.h b/include/nitro/OS_interrupt_shared.h new file mode 100644 index 00000000..97bed8b1 --- /dev/null +++ b/include/nitro/OS_interrupt_shared.h @@ -0,0 +1,20 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include OS_interrupt.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_OS_INTERRUPT_SHARED_H +#define POKEDIAMOND_OS_INTERRUPT_SHARED_H + +#include "nitro/types.h" + +typedef u32 OSIrqMask; + +#endif //POKEDIAMOND_OS_INTERRUPT_SHARED_H diff --git a/include/nitro/OS_reset_shared.h b/include/nitro/OS_reset_shared.h new file mode 100644 index 00000000..22f0b972 --- /dev/null +++ b/include/nitro/OS_reset_shared.h @@ -0,0 +1,20 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include OS_reset.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_OS_RESET_SHARED_H +#define POKEDIAMOND_OS_RESET_SHARED_H + +#define OS_PXI_COMMAND_MASK 0x7f00 +#define OS_PXI_COMMAND_SHIFT 8 +#define OS_PXI_COMMAND_RESET 0x10 + +#endif //POKEDIAMOND_OS_RESET_SHARED_H diff --git a/include/nitro/PXI_fifo_shared.h b/include/nitro/PXI_fifo_shared.h new file mode 100644 index 00000000..2698e89d --- /dev/null +++ b/include/nitro/PXI_fifo_shared.h @@ -0,0 +1,37 @@ +/* + * NOTE: + * This file is shared between ARM9 and ARM7 + * DO NOT PUT PROC SPECIFIC CODE IN HERE + * Thank You! + */ + +/* + * DO NOT INCLUDE THIS FILE DIRECTLY + * Include PXI_fifo.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_PXI_FIFO_SHARED_H +#define POKEDIAMOND_PXI_FIFO_SHARED_H + +typedef enum { + PXI_FIFO_TAG_EX = 0, // Extension format + PXI_FIFO_TAG_USER_0, // for application programmer, use it in free + PXI_FIFO_TAG_USER_1, // for application programmer, use it in free + PXI_FIFO_TAG_SYSTEM, // SDK inner usage + PXI_FIFO_TAG_NVRAM, // NVRAM + PXI_FIFO_TAG_RTC, // RTC + PXI_FIFO_TAG_TOUCHPANEL, // Touch Panel + PXI_FIFO_TAG_SOUND, // Sound + PXI_FIFO_TAG_PM, // Power Management + PXI_FIFO_TAG_MIC, // Microphone + PXI_FIFO_TAG_WM, // Wireless Manager + PXI_FIFO_TAG_FS, // File System + PXI_FIFO_TAG_OS, // OS + PXI_FIFO_TAG_CTRDG, // Cartridge + PXI_FIFO_TAG_CARD, // Card + PXI_FIFO_TAG_WVR, // Control driving wireless library + PXI_FIFO_TAG_CTRDG_Ex, // Cartridge Ex + PXI_MAX_FIFO_TAG = 32 // MAX FIFO TAG +} PXIFifoTag; + +#endif //POKEDIAMOND_PXI_FIFO_SHARED_H diff --git a/include/nitro/mmap_shared.h b/include/nitro/mmap_shared.h index ad97c912..587887bb 100644 --- a/include/nitro/mmap_shared.h +++ b/include/nitro/mmap_shared.h @@ -18,6 +18,7 @@ #define HW_MAIN_MEM_MAIN_SIZE 0x003E0000 #define HW_MAIN_MEM_SHARED_SIZE 0x00001000 +#define HW_WM_BOOT_BUF (HW_MAIN_MEM + 0x007ffc40) #define HW_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) #define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) |