diff options
-rw-r--r-- | arm7/Makefile | 2 | ||||
-rw-r--r-- | arm7/arm7.lsf | 2 | ||||
-rw-r--r-- | arm7/asm/OS_alarm.s | 12 | ||||
-rw-r--r-- | arm7/asm/OS_alloc.s | 8 | ||||
-rw-r--r-- | arm7/asm/OS_arena.s | 149 | ||||
-rw-r--r-- | arm7/asm/OS_interrupt.s | 20 | ||||
-rw-r--r-- | arm7/asm/OS_irqTable.s | 20 | ||||
-rw-r--r-- | arm7/asm/OS_reset.s | 12 | ||||
-rw-r--r-- | arm7/asm/OS_spinLock.s | 8 | ||||
-rw-r--r-- | arm7/asm/OS_thread.s | 44 | ||||
-rw-r--r-- | arm7/asm/OS_tick.s | 16 | ||||
-rw-r--r-- | arm7/asm/OS_timer.s | 8 | ||||
-rw-r--r-- | arm7/asm/OS_valarm.s | 20 | ||||
-rw-r--r-- | arm7/asm/PXI_fifo.s | 12 | ||||
-rw-r--r-- | arm7/asm/dtcm_bss.s | 139 | ||||
-rw-r--r-- | arm7/lib/include/OS_arena.h | 14 | ||||
-rw-r--r-- | arm7/lib/include/OS_init.h | 1 | ||||
-rw-r--r-- | arm7/lib/include/consts.h | 1 | ||||
-rw-r--r-- | arm7/lib/include/mmap.h | 26 | ||||
-rw-r--r-- | arm7/lib/src/OS_arena.c | 110 | ||||
-rw-r--r-- | arm7/lib/src/OS_init.c | 1 | ||||
-rw-r--r-- | arm7/lib/src/OS_system.c | 2 | ||||
-rw-r--r-- | arm9/lib/include/OS_arena.h | 27 | ||||
-rw-r--r-- | arm9/lib/include/consts.h | 1 | ||||
-rw-r--r-- | arm9/lib/include/mmap.h | 13 | ||||
-rw-r--r-- | include/nitro/OS_arena_shared.h | 38 | ||||
-rw-r--r-- | include/nitro/consts_shared.h | 3 | ||||
-rw-r--r-- | include/nitro/mmap_shared.h | 24 |
28 files changed, 396 insertions, 337 deletions
diff --git a/arm7/Makefile b/arm7/Makefile index 063e287a..1ade0ed4 100644 --- a/arm7/Makefile +++ b/arm7/Makefile @@ -89,7 +89,7 @@ OBJCOPY := $(CROSS)objcopy # ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o ASFLAGS = -proc arm4t -i .. -CFLAGS = -O4,p -proc arm7tdmi -fp soft -lang c99 -Cpp_exceptions off -i ../include -ir ../include-mw -ir lib/include -interworking -DFS_IMPLEMENT -enum int -W all +CFLAGS = -O4,s -proc arm7tdmi -fp soft -lang c99 -Cpp_exceptions off -i ../include -ir ../include-mw -ir lib/include -interworking -DFS_IMPLEMENT -enum int -W all LDFLAGS = -map -nodead -w off -proc v4t -interworking -map -symtab -m _start ####################### Other Tools ######################### diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 65b9a5c8..3b988f59 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -2,7 +2,7 @@ Static arm7 { Address 0x02380000 - StackSize 1024 512 + StackSize 1024 1024 } Autoload MAIN diff --git a/arm7/asm/OS_alarm.s b/arm7/asm/OS_alarm.s index 762c5372..fe55ccb2 100644 --- a/arm7/asm/OS_alarm.s +++ b/arm7/asm/OS_alarm.s @@ -1,7 +1,17 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _03807930 +_03807930: ;0x03807930 + .space 0x03807934 - 0x03807930 + + .global _03807934 +_03807934: ;0x03807934 + .space 0x0380793C - 0x03807934 + + .section .text arm_func_start OSi_AlarmHandler OSi_AlarmHandler: ; 0x037FA540 diff --git a/arm7/asm/OS_alloc.s b/arm7/asm/OS_alloc.s index 43372371..1c174548 100644 --- a/arm7/asm/OS_alloc.s +++ b/arm7/asm/OS_alloc.s @@ -1,7 +1,13 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global OSiHeapInfo +OSiHeapInfo: ;0x038078F8 + .space 0x0380791C - 0x038078F8 + + .section .text arm_func_start OS_CheckHeap OS_CheckHeap: ; 0x037F9D88 diff --git a/arm7/asm/OS_arena.s b/arm7/asm/OS_arena.s deleted file mode 100644 index 3b444cdd..00000000 --- a/arm7/asm/OS_arena.s +++ /dev/null @@ -1,149 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start OS_SetArenaLo -OS_SetArenaLo: ; 0x037F9BBC - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - str r1, [r0, #3488] ; 0xda0 - bx lr - - arm_func_start OS_SetArenaHi -OS_SetArenaHi: ; 0x037F9BD0 - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - str r1, [r0, #3524] ; 0xdc4 - bx lr - - arm_func_start OS_GetInitArenaLo -OS_GetInitArenaLo: ; 0x037F9BE4 - cmp r0, #1 - beq _037F9C00 - cmp r0, #7 - beq _037F9C08 - cmp r0, #8 - beq _037F9C18 - b _037F9C2C -_037F9C00: - ldr r0, _037F9C34 ; =0x027FAFCC - bx lr -_037F9C08: - ldr r0, _037F9C38 ; =0x0380B92C - cmp r0, #58720256 ; 0x03800000 - movhi r0, #58720256 ; 0x03800000 - bx lr -_037F9C18: - mov r0, #58720256 ; 0x03800000 - ldr r1, _037F9C38 ; =0x0380B92C - cmp r1, #58720256 ; 0x03800000 - movhi r0, r1 - bx lr -_037F9C2C: - mov r0, #0 - bx lr -_037F9C34: .word 0x027FAFCC -_037F9C38: .word 0x0380B92C - - arm_func_start OS_GetInitArenaHi -OS_GetInitArenaHi: ; 0x037F9C3C - cmp r0, #1 - beq _037F9C58 - cmp r0, #7 - beq _037F9C60 - cmp r0, #8 - beq _037F9C68 - b _037F9CA0 -_037F9C58: - ldr r0, _037F9CA8 ; =0x027FF000 - bx lr -_037F9C60: - mov r0, #58720256 ; 0x03800000 - bx lr -_037F9C68: - ldr r1, _037F9CAC ; =0x00000400 - ldr r0, _037F9CB0 ; =0x0380FF80 - sub r2, r0, r1 - mov r0, #58720256 ; 0x03800000 - ldr r1, _037F9CB4 ; =0x0380B92C - cmp r1, #58720256 ; 0x03800000 - movhi r0, r1 - ldr r1, _037F9CB8 ; =0x00000400 - cmp r1, #0 - bxeq lr - cmp r1, #0 - sublt r0, r0, r1 - subge r0, r2, r1 - bx lr -_037F9CA0: - mov r0, #0 - bx lr -_037F9CA8: .word 0x027FF000 -_037F9CAC: .word 0x00000400 -_037F9CB0: .word 0x0380FF80 -_037F9CB4: .word 0x0380B92C -_037F9CB8: .word 0x00000400 - - arm_func_start OS_GetArenaLo -OS_GetArenaLo: ; 0x037F9CBC - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - ldr r0, [r0, #3488] ; 0xda0 - bx lr - - arm_func_start OS_GetArenaHi -OS_GetArenaHi: ; 0x037F9CD0 - mov r0, r0, lsl #2 - add r0, r0, #40894464 ; 0x2700000 - add r0, r0, #1044480 ; 0xff000 - ldr r0, [r0, #3524] ; 0xdc4 - bx lr - - arm_func_start OS_InitArena -OS_InitArena: ; 0x037F9CE4 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037F9D84 ; =_038078F4 - ldr r0, [r1] - cmp r0, #0 - bne _037F9D78 - mov r0, #1 - str r0, [r1] - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #1 - bl OS_SetArenaHi - mov r0, #1 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #1 - bl OS_SetArenaLo - mov r0, #7 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #7 - bl OS_SetArenaHi - mov r0, #7 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #7 - bl OS_SetArenaLo - mov r0, #8 - bl OS_GetInitArenaHi - mov r1, r0 - mov r0, #8 - bl OS_SetArenaHi - mov r0, #8 - bl OS_GetInitArenaLo - mov r1, r0 - mov r0, #8 - bl OS_SetArenaLo -_037F9D78: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037F9D84: .word _038078F4 diff --git a/arm7/asm/OS_interrupt.s b/arm7/asm/OS_interrupt.s index 48fc9d1b..0a999637 100644 --- a/arm7/asm/OS_interrupt.s +++ b/arm7/asm/OS_interrupt.s @@ -1,7 +1,25 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _03807744 +_03807744: ;0x03807744 + .space 0x03807748 - 0x03807744 + + .global _03807748 +_03807748: ;0x03807748 + .space 0x0380774C - 0x03807748 + + .global _0380774C +_0380774C: ;0x0380774C + .space 0x03807774 - 0x0380774C + + .global _03807774 +_03807774: ;0x03807774 + .space 0x03807780 - 0x03807774 + + .section .text arm_func_start OS_ResetRequestIrqMask OS_ResetRequestIrqMask: ; 0x037F8824 diff --git a/arm7/asm/OS_irqTable.s b/arm7/asm/OS_irqTable.s index 56eea302..a61e448f 100644 --- a/arm7/asm/OS_irqTable.s +++ b/arm7/asm/OS_irqTable.s @@ -1,7 +1,25 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global OSi_IrqThreadQueue +OSi_IrqThreadQueue: ;0x0380770C + .space 0x03807714 - 0x0380770C + + .global OSi_IrqCallbackInfo +OSi_IrqCallbackInfo: ;0x03807714 + .space 0x03807718 - 0x03807714 + + .global _03807718 +_03807718: ;0x03807718 + .space 0x0380771C - 0x03807718 + + .global _0380771C +_0380771C: ;0x0380771C + .space 0x03807744 - 0x0380771C + + .section .text arm_func_start OSi_IrqVBlank OSi_IrqVBlank: ; 0x037F86B4 diff --git a/arm7/asm/OS_reset.s b/arm7/asm/OS_reset.s index 100514c0..b2a8ffe6 100644 --- a/arm7/asm/OS_reset.s +++ b/arm7/asm/OS_reset.s @@ -1,7 +1,17 @@ .include "asm/macros.inc" .include "global.inc" - .text + .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 diff --git a/arm7/asm/OS_spinLock.s b/arm7/asm/OS_spinLock.s index 04f4683b..bb15916e 100644 --- a/arm7/asm/OS_spinLock.s +++ b/arm7/asm/OS_spinLock.s @@ -1,7 +1,13 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _03807780 +_03807780: ;0x03807780 + .space 0x03807784 - 0x03807780 + + .section .text arm_func_start OS_UnLockCartridge OS_UnLockCartridge: ; 0x037F8A18 diff --git a/arm7/asm/OS_thread.s b/arm7/asm/OS_thread.s index 64aebb04..027b2130 100644 --- a/arm7/asm/OS_thread.s +++ b/arm7/asm/OS_thread.s @@ -1,7 +1,49 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global OSi_StackForDestructor +OSi_StackForDestructor: ;0x03807784 + .space 0x03807788 - 0x03807784 + + .global OSi_RescheduleCount +OSi_RescheduleCount: ;0x03807788 + .space 0x0380778C - 0x03807788 + + .global _0380778C +_0380778C: ;0x0380778C + .space 0x03807790 - 0x0380778C + + .global OSi_SystemCallbackInSwitchThread +OSi_SystemCallbackInSwitchThread: ;0x03807790 + .space 0x03807794 - 0x03807790 + + .global OSi_CurrentThreadPtr +OSi_CurrentThreadPtr: ;0x03807794 + .space 0x03807798 - 0x03807794 + + .global OSi_IsThreadInitialized +OSi_IsThreadInitialized: ;0x03807798 + .space 0x0380779C - 0x03807798 + + .global OSi_ThreadInfo +OSi_ThreadInfo: ;0x0380779C + .space 0x038077A0 - 0x0380779C + + .global _038077A0 +_038077A0: ;0x038077A0 + .space 0x038077AC - 0x038077A0 + + .global OSi_IdleThread +OSi_IdleThread: ;0x038077AC + .space 0x03807850 - 0x038077AC + + .global OSi_LauncherThread +OSi_LauncherThread: ;0x03807850 + .space 0x038078F4 - 0x03807850 + + .section .text arm_func_start OS_SetThreadDestructor OS_SetThreadDestructor: ; 0x037F8D48 diff --git a/arm7/asm/OS_tick.s b/arm7/asm/OS_tick.s index 40589867..f9688b9e 100644 --- a/arm7/asm/OS_tick.s +++ b/arm7/asm/OS_tick.s @@ -1,7 +1,21 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _03807920 +_03807920: ;0x03807920 + .space 0x03807924 - 0x03807920 + + .global OSi_NeedResetTimer +OSi_NeedResetTimer: ;0x03807924 + .space 0x03807928 - 0x03807924 + + .global OSi_TickCounter +OSi_TickCounter: ;0x03807928 + .space 0x03807930 - 0x03807928 + + .section .text arm_func_start OS_GetTick OS_GetTick: ; 0x037FA364 diff --git a/arm7/asm/OS_timer.s b/arm7/asm/OS_timer.s index 5794046e..434be17a 100644 --- a/arm7/asm/OS_timer.s +++ b/arm7/asm/OS_timer.s @@ -1,7 +1,13 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _0380791C +_0380791C: ;0x0380791C + .space 0x03807920 - 0x0380791C + + .section .text arm_func_start OSi_SetTimerReserved OSi_SetTimerReserved: ; 0x037FA348 diff --git a/arm7/asm/OS_valarm.s b/arm7/asm/OS_valarm.s index 07e22fc5..bfd681df 100644 --- a/arm7/asm/OS_valarm.s +++ b/arm7/asm/OS_valarm.s @@ -1,7 +1,25 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _0380793C +_0380793C: ;0x0380793C + .space 0x03807940 - 0x0380793C + + .global _03807940 +_03807940: ;0x03807940 + .space 0x03807944 - 0x03807940 + + .global _03807944 +_03807944: ;0x03807944 + .space 0x03807948 - 0x03807944 + + .global _03807948 +_03807948: ;0x03807948 + .space 0x03807950 - 0x03807948 + + .section .text arm_func_start OSi_GetVFrame OSi_GetVFrame: ; 0x037FAA0C diff --git a/arm7/asm/PXI_fifo.s b/arm7/asm/PXI_fifo.s index 9824f7a9..a6e60692 100644 --- a/arm7/asm/PXI_fifo.s +++ b/arm7/asm/PXI_fifo.s @@ -1,7 +1,17 @@ .include "asm/macros.inc" .include "global.inc" - .text + .section .bss + + .global _03807958 +_03807958: ;0x03807958 + .space 0x0380795C - 0x03807958 + + .global _0380795C +_0380795C: ;0x0380795C + .space 0x038079DC - 0x0380795C + + .section .text arm_func_start PXIi_HandlerRecvFifoNotEmpty PXIi_HandlerRecvFifoNotEmpty: ; 0x037FB5BC diff --git a/arm7/asm/dtcm_bss.s b/arm7/asm/dtcm_bss.s index 6ef48112..516b5508 100644 --- a/arm7/asm/dtcm_bss.s +++ b/arm7/asm/dtcm_bss.s @@ -1,145 +1,6 @@ .include "asm/macros.inc" .include "global.inc" .section .bss - .global OSi_IrqThreadQueue -OSi_IrqThreadQueue: ;0x0380770C - .space 0x03807714 - 0x0380770C - - .global OSi_IrqCallbackInfo -OSi_IrqCallbackInfo: ;0x03807714 - .space 0x03807718 - 0x03807714 - - .global _03807718 -_03807718: ;0x03807718 - .space 0x0380771C - 0x03807718 - - .global _0380771C -_0380771C: ;0x0380771C - .space 0x03807744 - 0x0380771C - - .global _03807744 -_03807744: ;0x03807744 - .space 0x03807748 - 0x03807744 - - .global _03807748 -_03807748: ;0x03807748 - .space 0x0380774C - 0x03807748 - - .global _0380774C -_0380774C: ;0x0380774C - .space 0x03807774 - 0x0380774C - - .global _03807774 -_03807774: ;0x03807774 - .space 0x03807780 - 0x03807774 - - .global _03807780 -_03807780: ;0x03807780 - .space 0x03807784 - 0x03807780 - - .global OSi_StackForDestructor -OSi_StackForDestructor: ;0x03807784 - .space 0x03807788 - 0x03807784 - - .global OSi_RescheduleCount -OSi_RescheduleCount: ;0x03807788 - .space 0x0380778C - 0x03807788 - - .global _0380778C -_0380778C: ;0x0380778C - .space 0x03807790 - 0x0380778C - - .global OSi_SystemCallbackInSwitchThread -OSi_SystemCallbackInSwitchThread: ;0x03807790 - .space 0x03807794 - 0x03807790 - - .global OSi_CurrentThreadPtr -OSi_CurrentThreadPtr: ;0x03807794 - .space 0x03807798 - 0x03807794 - - .global OSi_IsThreadInitialized -OSi_IsThreadInitialized: ;0x03807798 - .space 0x0380779C - 0x03807798 - - .global OSi_ThreadInfo -OSi_ThreadInfo: ;0x0380779C - .space 0x038077A0 - 0x0380779C - - .global _038077A0 -_038077A0: ;0x038077A0 - .space 0x038077AC - 0x038077A0 - - .global OSi_IdleThread -OSi_IdleThread: ;0x038077AC - .space 0x03807850 - 0x038077AC - - .global OSi_LauncherThread -OSi_LauncherThread: ;0x03807850 - .space 0x038078F4 - 0x03807850 - - .global _038078F4 -_038078F4: ;0x038078F4 - .space 0x038078F8 - 0x038078F4 - - .global OSiHeapInfo -OSiHeapInfo: ;0x038078F8 - .space 0x0380791C - 0x038078F8 - - .global _0380791C -_0380791C: ;0x0380791C - .space 0x03807920 - 0x0380791C - - .global _03807920 -_03807920: ;0x03807920 - .space 0x03807924 - 0x03807920 - - .global OSi_NeedResetTimer -OSi_NeedResetTimer: ;0x03807924 - .space 0x03807928 - 0x03807924 - - .global OSi_TickCounter -OSi_TickCounter: ;0x03807928 - .space 0x03807930 - 0x03807928 - - .global _03807930 -_03807930: ;0x03807930 - .space 0x03807934 - 0x03807930 - - .global _03807934 -_03807934: ;0x03807934 - .space 0x0380793C - 0x03807934 - - .global _0380793C -_0380793C: ;0x0380793C - .space 0x03807940 - 0x0380793C - - .global _03807940 -_03807940: ;0x03807940 - .space 0x03807944 - 0x03807940 - - .global _03807944 -_03807944: ;0x03807944 - .space 0x03807948 - 0x03807944 - - .global _03807948 -_03807948: ;0x03807948 - .space 0x03807950 - 0x03807948 - - .global _03807950 -_03807950: ;0x03807950 - .space 0x03807954 - 0x03807950 - - .global _03807954 -_03807954: ;0x03807954 - .space 0x03807958 - 0x03807954 - - .global _03807958 -_03807958: ;0x03807958 - .space 0x0380795C - 0x03807958 - - .global _0380795C -_0380795C: ;0x0380795C - .space 0x038079DC - 0x0380795C .global PADi_XYButtonAvailable PADi_XYButtonAvailable: ;0x038079DC diff --git a/arm7/lib/include/OS_arena.h b/arm7/lib/include/OS_arena.h new file mode 100644 index 00000000..9227e539 --- /dev/null +++ b/arm7/lib/include/OS_arena.h @@ -0,0 +1,14 @@ +#ifndef POKEDIAMOND_ARM7_OS_ARENA_H +#define POKEDIAMOND_ARM7_OS_ARENA_H + +#include "nitro/OS_arena_shared.h" + +void OS_InitArena(void); +void* OS_GetArenaHi(OSArenaId id); +void* OS_GetArenaLo(OSArenaId id); +void* OS_GetInitArenaHi(OSArenaId id); +void* OS_GetInitArenaLo(OSArenaId id); +void OS_SetArenaHi(OSArenaId id, void* newHi); +void OS_SetArenaLo(OSArenaId id, void* newLo); + +#endif //POKEDIAMOND_ARM7_OS_ARENA_H diff --git a/arm7/lib/include/OS_init.h b/arm7/lib/include/OS_init.h index 50d5e3c4..9c9b1f93 100644 --- a/arm7/lib/include/OS_init.h +++ b/arm7/lib/include/OS_init.h @@ -3,6 +3,7 @@ #include "nitro/types.h" #include "OS_system.h" +#include "OS_arena.h" void OS_Init(void); diff --git a/arm7/lib/include/consts.h b/arm7/lib/include/consts.h index aaf8e429..dd297402 100644 --- a/arm7/lib/include/consts.h +++ b/arm7/lib/include/consts.h @@ -2,5 +2,6 @@ #define POKEDIAMOND_ARM7_CONSTS_H #include "nitro/consts_shared.h" +#include "mmap.h" #endif //POKEDIAMOND_ARM7_CONSTS_H diff --git a/arm7/lib/include/mmap.h b/arm7/lib/include/mmap.h new file mode 100644 index 00000000..24d15ad7 --- /dev/null +++ b/arm7/lib/include/mmap.h @@ -0,0 +1,26 @@ +#ifndef POKEDIAMOND_ARM7_MMAP_H +#define POKEDIAMOND_ARM7_MMAP_H + +#include "nitro/mmap_shared.h" + +#define HW_WRAM_END 0x03800000 +#define HW_PRV_WRAM 0x03800000 +#define HW_PRV_WRAM_END 0x03810000 + +#define HW_PRV_WRAM_SIZE (HW_PRV_WRAM_END-HW_PRV_WRAM) + +#define HW_SVC_STACK_SIZE 0x40 +#define HW_PRV_WRAM_SYSRV_SIZE 0x40 + +#define HW_MAIN_MEM_SUB_SIZE (HW_MAIN_MEM_SIZE - HW_MAIN_MEM_MAIN_SIZE - HW_MAIN_MEM_SHARED_SIZE) + +#define HW_MAIN_MEM_SUB (HW_MAIN_MEM_MAIN_END + 0x400000) +#define HW_MAIN_MEM_SUB_END (HW_MAIN_MEM_SUB + HW_MAIN_MEM_SUB_SIZE) + +#define HW_PRV_WRAM_IRQ_STACK_END (HW_PRV_WRAM_SVC_STACK) +#define HW_PRV_WRAM_SVC_STACK (HW_PRV_WRAM_SVC_STACK_END - HW_SVC_STACK_SIZE) +#define HW_PRV_WRAM_SVC_STACK_END (HW_PRV_WRAM_SYSRV) + +#define HW_PRV_WRAM_SYSRV (HW_PRV_WRAM + HW_PRV_WRAM_SIZE - HW_PRV_WRAM_SYSRV_SIZE) + +#endif //POKEDIAMOND_ARM7_MMAP_H diff --git a/arm7/lib/src/OS_arena.c b/arm7/lib/src/OS_arena.c new file mode 100644 index 00000000..516fc10b --- /dev/null +++ b/arm7/lib/src/OS_arena.c @@ -0,0 +1,110 @@ +#include "function_target.h" +#include "consts.h" +#include "OS_arena.h" + +static BOOL OSi_Initialized = FALSE; + +extern void SDK_SUBPRIV_ARENA_LO(void); +extern void SDK_WRAM_ARENA_LO(void); +extern void SDK_IRQ_STACKSIZE(void); +extern void SDK_SYS_STACKSIZE(void); + +ARM_FUNC void OS_InitArena(void) +{ + if (OSi_Initialized) + { + return; + } + OSi_Initialized = TRUE; + + OS_SetArenaHi(OS_ARENA_MAIN_SUBPRIV, OS_GetInitArenaHi(OS_ARENA_MAIN_SUBPRIV)); + OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, OS_GetInitArenaLo(OS_ARENA_MAIN_SUBPRIV)); + + OS_SetArenaHi(OS_ARENA_WRAM_SUB, OS_GetInitArenaHi(OS_ARENA_WRAM_SUB)); + OS_SetArenaLo(OS_ARENA_WRAM_SUB, OS_GetInitArenaLo(OS_ARENA_WRAM_SUB)); + + OS_SetArenaHi(OS_ARENA_WRAM_SUBPRIV, OS_GetInitArenaHi(OS_ARENA_WRAM_SUBPRIV)); + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, OS_GetInitArenaLo(OS_ARENA_WRAM_SUBPRIV)); +} + +ARM_FUNC void* OS_GetArenaHi(OSArenaId id) +{ + return OSi_GetArenaInfo().hi[id]; +} + +ARM_FUNC void* OS_GetArenaLo(OSArenaId id) +{ + return OSi_GetArenaInfo().lo[id]; +} + +ARM_FUNC void* OS_GetInitArenaHi(OSArenaId id) +{ + switch (id) { + case OS_ARENA_MAIN_SUBPRIV: + return (void *)HW_MAIN_MEM_SUB_END; + case OS_ARENA_WRAM_SUB: + return (void *)HW_WRAM_END; + case OS_ARENA_WRAM_SUBPRIV: + { + u32 irqStackLo = (u32)HW_PRV_WRAM_IRQ_STACK_END - (s32)SDK_IRQ_STACKSIZE; + u32 sysStackLo = (u32)HW_PRV_WRAM; + + if ((u32)SDK_WRAM_ARENA_LO > (u32)HW_PRV_WRAM) + { + sysStackLo = (u32)SDK_WRAM_ARENA_LO; + } + + if (!(s32)SDK_SYS_STACKSIZE) + { + return (void *)sysStackLo; + } + else if ((s32)SDK_SYS_STACKSIZE < 0) + { + sysStackLo -= (s32)SDK_SYS_STACKSIZE; + } + else + { + sysStackLo = irqStackLo - (s32)SDK_SYS_STACKSIZE; + } + + return (void *)sysStackLo; + } + default: + return NULL; + } +} + +ARM_FUNC void* OS_GetInitArenaLo(OSArenaId id) { + switch (id) { + case OS_ARENA_MAIN_SUBPRIV: + return (void *)((u32)0x027fafcc); //todo SDK_SUBPRIV_ARENA_LO + case OS_ARENA_WRAM_SUB: + { + u32 wramSubLo = ((u32)SDK_WRAM_ARENA_LO); + if ((u32)HW_WRAM_END < (u32)wramSubLo) + { + wramSubLo = (u32)HW_WRAM_END; + } + return (void *)wramSubLo; + } + case OS_ARENA_WRAM_SUBPRIV: + { + u32 privWramLo = HW_PRV_WRAM; + if ((u32)SDK_WRAM_ARENA_LO > (u32)privWramLo) + { + privWramLo = (u32)SDK_WRAM_ARENA_LO; + } + return (void *)privWramLo; + } + default: + return NULL; + } +} + +ARM_FUNC void OS_SetArenaHi(OSArenaId id, void* newHi) { + OSi_GetArenaInfo().hi[id] = newHi; +} + +ARM_FUNC void OS_SetArenaLo(OSArenaId id, void* newLo) { + OSi_GetArenaInfo().lo[id] = newLo; +} diff --git a/arm7/lib/src/OS_init.c b/arm7/lib/src/OS_init.c index 082b3e70..f4972638 100644 --- a/arm7/lib/src/OS_init.c +++ b/arm7/lib/src/OS_init.c @@ -1,7 +1,6 @@ #include "function_target.h" #include "OS_init.h" -extern void OS_InitArena(void); extern void PXI_Init(void); extern void OS_InitLock(void); extern void OS_InitIrqTable(void); diff --git a/arm7/lib/src/OS_system.c b/arm7/lib/src/OS_system.c index 120eddbf..11417e91 100644 --- a/arm7/lib/src/OS_system.c +++ b/arm7/lib/src/OS_system.c @@ -1,8 +1,6 @@ #include "function_target.h" #include "OS_system.h" -#pragma optimize_for_size on - extern void FUN_037F8CB4(s32 count); ARM_FUNC asm OSIntrMode OS_EnableInterrupts(void) diff --git a/arm9/lib/include/OS_arena.h b/arm9/lib/include/OS_arena.h index 7608835a..a26cf3bd 100644 --- a/arm9/lib/include/OS_arena.h +++ b/arm9/lib/include/OS_arena.h @@ -1,27 +1,8 @@ -#ifndef POKEDIAMOND_OS_ARENA_H -#define POKEDIAMOND_OS_ARENA_H +#ifndef POKEDIAMOND_ARM9_OS_ARENA_H +#define POKEDIAMOND_ARM9_OS_ARENA_H #include "nitro/types.h" - -typedef enum { - OS_ARENA_MAIN = 0, - OS_ARENA_MAIN_SUBPRIV = 1, - OS_ARENA_MAINEX = 2, - OS_ARENA_ITCM = 3, - OS_ARENA_DTCM = 4, - OS_ARENA_SHARED = 5, - OS_ARENA_WRAM_MAIN = 6, - OS_ARENA_WRAM_SUB = 7, - OS_ARENA_WRAM_SUBPRIV = 8, - OS_ARENA_MAX = 9 -} OSArenaId; - -typedef struct { - void* lo[OS_ARENA_MAX]; - void* hi[OS_ARENA_MAX]; - u16 initialized; - u8 padding[2]; -} OSArenaInfo; +#include "nitro/OS_arena_shared.h" void OS_InitArena(void); void OS_InitArenaEx(void); @@ -34,4 +15,4 @@ void OS_SetArenaLo(OSArenaId id, void *newLo); void* OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align); void* OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align); -#endif //POKEDIAMOND_OS_ARENA_H +#endif //POKEDIAMOND_ARM9_OS_ARENA_H diff --git a/arm9/lib/include/consts.h b/arm9/lib/include/consts.h index 6c83bce8..885deff0 100644 --- a/arm9/lib/include/consts.h +++ b/arm9/lib/include/consts.h @@ -38,7 +38,6 @@ #define OSi_TCM_REGION_BASE_MASK 0xfffff000 -#define OSi_GetArenaInfo() (*(OSArenaInfo*)HW_ARENA_INFO_BUF) #define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1)) #define OSi_ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index 8f9d8dcd..d0e73aec 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -1,15 +1,12 @@ -#ifndef NITRO_MMAP_H -#define NITRO_MMAP_H +#ifndef POKEDIAMOND_ARM9_MMAP_H +#define POKEDIAMOND_ARM9_MMAP_H #include "nitro/types.h" +#include "nitro/mmap_shared.h" extern u32 SDK_AUTOLOAD_DTCM_START[]; -#define HW_MAIN_MEM 0x02000000 -#define HW_MAIN_MEM_SIZE 0x00400000 #define HW_MAIN_MEM_EX_SIZE 0x00800000 -#define HW_MAIN_MEM_MAIN_SIZE 0x003E0000 -#define HW_MAIN_MEM_SHARED_SIZE 0x00001000 #define HW_MAIN_MEM_DEBUGGER_OFFSET 0x00700000 #define HW_ITCM_IMAGE 0x01000000 @@ -31,11 +28,9 @@ 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_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) // Arena data structure #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) -#define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) #define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE) #define HW_MAIN_MEM_SHARED (HW_MAIN_MEM_EX_END - HW_MAIN_MEM_SHARED_SIZE) #define HW_DTCM_SVC_STACK_END (HW_DTCM + 0x00003fc0) @@ -115,4 +110,4 @@ typedef struct { #define OS_GetSystemWork() ((OSSystemWork *)HW_MAIN_MEM_SYSTEM) -#endif
\ No newline at end of file +#endif //POKEDIAMOND_ARM9_MMAP_H
\ No newline at end of file diff --git a/include/nitro/OS_arena_shared.h b/include/nitro/OS_arena_shared.h new file mode 100644 index 00000000..df6d526a --- /dev/null +++ b/include/nitro/OS_arena_shared.h @@ -0,0 +1,38 @@ +/* + * 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_arena.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_OS_ARENA_SHARED_H +#define POKEDIAMOND_OS_ARENA_SHARED_H + +#include "nitro/types.h" + +typedef enum { + OS_ARENA_MAIN = 0, + OS_ARENA_MAIN_SUBPRIV = 1, + OS_ARENA_MAINEX = 2, + OS_ARENA_ITCM = 3, + OS_ARENA_DTCM = 4, + OS_ARENA_SHARED = 5, + OS_ARENA_WRAM_MAIN = 6, + OS_ARENA_WRAM_SUB = 7, + OS_ARENA_WRAM_SUBPRIV = 8, + OS_ARENA_MAX = 9 +} OSArenaId; + +typedef struct { + void* lo[OS_ARENA_MAX]; + void* hi[OS_ARENA_MAX]; + u16 initialized; + u8 padding[2]; +} OSArenaInfo; + +#endif //POKEDIAMOND_OS_ARENA_SHARED_H diff --git a/include/nitro/consts_shared.h b/include/nitro/consts_shared.h index e515831e..a7fd9dcf 100644 --- a/include/nitro/consts_shared.h +++ b/include/nitro/consts_shared.h @@ -14,6 +14,7 @@ #define POKEDIAMOND_CONSTS_SHARED_H #include "nitro/types.h" +#include "nitro/mmap_shared.h" //Shared Consts @@ -23,4 +24,6 @@ #define HW_PSR_DISABLE_IRQ 0x80 // Disable IRQ #define HW_PSR_DISABLE_IRQ_FIQ 0xc0 // Disable FIQ and IRQ +#define OSi_GetArenaInfo() (*(OSArenaInfo*)HW_ARENA_INFO_BUF) + #endif //POKEDIAMOND_CONSTS_SHARED_H diff --git a/include/nitro/mmap_shared.h b/include/nitro/mmap_shared.h new file mode 100644 index 00000000..ad97c912 --- /dev/null +++ b/include/nitro/mmap_shared.h @@ -0,0 +1,24 @@ +/* + * 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 mmap.h from the specific proc's lib + */ + +#ifndef POKEDIAMOND_MMAP_SHARED_H +#define POKEDIAMOND_MMAP_SHARED_H + +#define HW_MAIN_MEM 0x02000000 +#define HW_MAIN_MEM_SIZE 0x00400000 +#define HW_MAIN_MEM_MAIN_SIZE 0x003E0000 +#define HW_MAIN_MEM_SHARED_SIZE 0x00001000 + +#define HW_ARENA_INFO_BUF (HW_MAIN_MEM + 0x007ffda0) +#define HW_MAIN_MEM_MAIN_END (HW_MAIN_MEM + HW_MAIN_MEM_MAIN_SIZE) + +#endif //POKEDIAMOND_MMAP_SHARED_H |