summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-29 14:45:08 +0100
committerred031000 <rubenru09@aol.com>2020-05-29 14:46:26 +0100
commit77463372468870d20c6751fff4d7708f93fae571 (patch)
tree2a9dd929bae96d370cb766a6a0800b116ad78b86
parent03100d9a6c0da43f02e3b1f3d3e062ecf884d8b4 (diff)
more itcm, asm funcs in OS_reset.c
-rw-r--r--arm9/arm9.lcf1
-rw-r--r--arm9/asm/arm9_itcm.s71
-rw-r--r--arm9/global.inc1
-rw-r--r--arm9/lib/include/OS_reset.h2
-rw-r--r--arm9/lib/include/mmap.h9
-rw-r--r--arm9/lib/include/registers.h3
-rw-r--r--arm9/lib/src/OS_reset.c62
7 files changed, 80 insertions, 69 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 1153d481..061ec8d5 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -964,6 +964,7 @@ SECTIONS {
. = ALIGN(32);
SDK_AUTOLOAD.ITCM.START = .;
OS_irqHandler.o (.itcm)
+ OS_reset.o (.itcm)
arm9_itcm.o (.text)
. = ALIGN(32);
SDK_AUTOLOAD.ITCM.END = .;
diff --git a/arm9/asm/arm9_itcm.s b/arm9/asm/arm9_itcm.s
index e53c9b74..33a26758 100644
--- a/arm9/asm/arm9_itcm.s
+++ b/arm9/asm/arm9_itcm.s
@@ -3,72 +3,7 @@
.section .text
; OS
- arm_func_start OSi_DoBoot
-OSi_DoBoot: ; 0x01FF81B4
- mov ip, #0x04000000
- str ip, [ip, #0x208]
- ldr r1, _01FF8260
- add r1, r1, #0x3fc0
- add r1, r1, #0x3c
- mov r0, #0x0
- str r0, [r1]
- ldr r1, _01FF8264
-_01FF81D4:
- ldrh r0, [r1]
- and r0, r0, #0xf
- cmp r0, #0x1
- bne _01FF81D4
- mov r0, #0x100
- strh r0, [r1]
- mov r0, #0x0
- ldr r3, _01FF8268
- ldr r4, [r3]
- ldr r1, _01FF826C
- mov r2, #0x80
- bl OSi_CpuClear32
- str r4, [r3]
- ldr r1, _01FF8270
- mov r2, #0x18
- bl OSi_CpuClear32
- ldr r1, _01FF8274
- strh r0, [r1]
- ldr r1, _01FF8278
- mov r2, #0x64
- bl OSi_CpuClear32
- ldr r1, _01FF8264
-_01FF822C:
- ldrh r0, [r1]
- and r0, r0, #0xf
- cmp r0, #0x1
- beq _01FF822C
- mov r0, #0x0
- strh r0, [r1]
- ldr r3, _01FF827C
- ldr ip, [r3, #0x24]
- mov lr, ip
- ldr fp, _01FF8270
- ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl}
- mov fp, #0x0
- bx ip
-_01FF8260: .word SDK_AUTOLOAD_DTCM_START
-_01FF8264: .word 0x04000180
-_01FF8268: .word 0x027FFD9C
-_01FF826C: .word 0x027FFD80
-_01FF8270: .word 0x027FFF80
-_01FF8274: .word 0x027FFF98
-_01FF8278: .word 0x027FFF9C
-_01FF827C: .word 0x027FFE00
-
- arm_func_start OSi_CpuClear32
-OSi_CpuClear32: ; 01FF8280
- add ip, r1, r2
-_01FF8284:
- cmp r1, ip
- stmltia r1!, {r0}
- blt _01FF8284
- bx lr
-
- arm_func_start OSi_ReadCardRom32
+ arm_func_start OSi_ReadCardRom32 ;OS_reset.c
OSi_ReadCardRom32: ; 01FF8294
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
@@ -152,7 +87,7 @@ _01FF83B8: .word 0x040001AD
_01FF83BC: .word 0x040001AE
_01FF83C0: .word 0x040001AF
- arm_func_start OSi_ReloadRomData
+ arm_func_start OSi_ReloadRomData ;OS_reset.c
OSi_ReloadRomData: ; 0x01FF83C4
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
@@ -212,7 +147,7 @@ _01FF8498: .word 0x027FFE30
_01FF849C: .word 0x027FFE38
_01FF84A0: .word 0x027FFE3C
- arm_func_start OSi_DoResetSystem
+ arm_func_start OSi_DoResetSystem ;OS_reset.c
OSi_DoResetSystem: ; 0x01FF84A4
stmfd sp!, {lr}
sub sp, sp, #4
diff --git a/arm9/global.inc b/arm9/global.inc
index 67ee8f6b..b68a9983 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -7256,6 +7256,7 @@
.extern OSi_AlarmQueue
.extern OSi_CurrentThreadPtr
.extern OSi_DebuggerHandler
+.extern OSi_DoBoot
.extern OSi_DoLockByWord
.extern OSi_DoResetSystem
.extern OSi_DoTryLockByWord
diff --git a/arm9/lib/include/OS_reset.h b/arm9/lib/include/OS_reset.h
index c50106da..4f0b80a9 100644
--- a/arm9/lib/include/OS_reset.h
+++ b/arm9/lib/include/OS_reset.h
@@ -16,5 +16,7 @@ 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);
+void OSi_DoBoot(void);
+static void OSi_CpuClear32(register u32 data, register void *destp, register u32 size);
#endif //POKEDIAMOND_OS_RESET_H
diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h
index 8eb3f623..386ee0e4 100644
--- a/arm9/lib/include/mmap.h
+++ b/arm9/lib/include/mmap.h
@@ -42,6 +42,15 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];
#define HW_DTCM_SVC_STACK (HW_DTCM_SVC_STACK_END - HW_SVC_STACK_SIZE)
#define HW_DTCM_IRQ_STACK_END (HW_DTCM_SVC_STACK)
+#define HW_BIOS_EXCP_STACK_MAIN (HW_MAIN_MEM + 0x007ffd80)
+#define HW_EXCP_VECTOR_MAIN (HW_MAIN_MEM + 0x007ffd9c)
+
+#define HW_PXI_SIGNAL_PARAM_ARM9 (HW_MAIN_MEM + 0x007fff80)
+
+#define HW_WM_RSSI_POOL (HW_MAIN_MEM + 0x007fff98)
+
+#define HW_COMPONENT_PARAM (HW_MAIN_MEM + 0x007fff9c)
+
#define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM + 0x007fffb0)
#define HW_SHARED_LOCK_BUF (HW_MAIN_MEM + 0x007fffc0)
#define HW_CARD_LOCK_BUF (HW_MAIN_MEM + 0x007fffe0)
diff --git a/arm9/lib/include/registers.h b/arm9/lib/include/registers.h
index 598ba3f9..366f4654 100644
--- a/arm9/lib/include/registers.h
+++ b/arm9/lib/include/registers.h
@@ -92,7 +92,8 @@
#define reg_PAD_KEYINPUT (*(REGType16v *)0x4000130)
#define reg_PAD_KEYCNT (*(REGType16v *)0x4000132)
-#define reg_PXI_SUBPINTF (*(REGType16v *)0x4000180)
+#define REG_SUBPINTF_ADDR 0x4000180
+#define reg_PXI_SUBPINTF (*(REGType16v *)REG_SUBPINTF_ADDR)
#define reg_PXI_SUBP_FIFO_CNT (*(REGType16v *)0x4000184)
#define reg_PXI_SEND_FIFO (*(REGType32v *)0x4000188)
diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c
index b3aff389..6389fe45 100644
--- a/arm9/lib/src/OS_reset.c
+++ b/arm9/lib/src/OS_reset.c
@@ -7,6 +7,7 @@
#include "MB_mb.h"
#include "OS_terminate_proc.h"
#include "OS_interrupt.h"
+#include "sections.h"
static u16 OSi_IsInitReset = 0;
vu16 OSi_IsResetOccurred = 0;
@@ -60,3 +61,64 @@ ARM_FUNC void OS_ResetSystem(u32 parameter) {
OSi_SendToPxi(OS_PXI_COMMAND_RESET);
OSi_DoResetSystem(); //oh boy this is in itcm, that's gonna be fun to deal with Kappa
}
+
+#pragma section ITCM begin
+ARM_FUNC asm void OSi_DoBoot(void)
+{
+ mov ip, #0x04000000
+ str ip, [ip, #0x208]
+ ldr r1, =SDK_AUTOLOAD_DTCM_START
+ add r1, r1, #0x3fc0
+ add r1, r1, #0x3c
+ mov r0, #0x0
+ str r0, [r1]
+ ldr r1, =REG_SUBPINTF_ADDR
+_01FF81D4:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _01FF81D4
+ mov r0, #0x100
+ strh r0, [r1]
+ mov r0, #0x0
+ ldr r3, =HW_EXCP_VECTOR_MAIN
+ ldr r4, [r3]
+ ldr r1, =HW_BIOS_EXCP_STACK_MAIN
+ mov r2, #0x80
+ bl OSi_CpuClear32
+ str r4, [r3]
+ ldr r1, =HW_PXI_SIGNAL_PARAM_ARM9
+ mov r2, #0x18
+ bl OSi_CpuClear32
+ ldr r1, =HW_WM_RSSI_POOL
+ strh r0, [r1]
+ ldr r1, =HW_COMPONENT_PARAM
+ mov r2, #0x64
+ bl OSi_CpuClear32
+ ldr r1, =REG_SUBPINTF_ADDR
+_01FF822C:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ beq _01FF822C
+ mov r0, #0x0
+ strh r0, [r1]
+ ldr r3, =HW_ROM_HEADER_BUF
+ ldr ip, [r3, #0x24]
+ mov lr, ip
+ ldr r11, =HW_PXI_SIGNAL_PARAM_ARM9
+ ldmia r11, {r0-r10}
+ mov r11, #0x0
+ bx ip
+}
+
+ARM_FUNC static asm void OSi_CpuClear32(register u32 data, register void *destp, register u32 size)
+{
+ add ip, r1, r2
+_01FF8284:
+ cmp r1, ip
+ stmltia r1!, {r0}
+ blt _01FF8284
+ bx lr
+}
+#pragma section ITCM end