summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm7/arm7.lsf14
-rw-r--r--arm7/asm/CARD_common.s105
-rw-r--r--arm7/asm/CARD_fifo.s90
-rw-r--r--arm7/asm/CARD_pullOut.s218
-rw-r--r--arm7/asm/CARD_rom.s194
-rw-r--r--arm7/asm/CARD_spi.s644
-rw-r--r--arm7/asm/CARD_thread.s156
-rw-r--r--arm7/asm/FS_file.s10
-rw-r--r--arm7/asm/OS_irqHandler.s40
-rw-r--r--arm7/asm/SND.s6
-rw-r--r--arm7/asm/SND_util.s8
-rw-r--r--arm7/asm/dtcm.s1322
-rw-r--r--arm7/asm/wram2.s (renamed from arm7/asm/dtcm2.s)0
-rw-r--r--arm7/asm/wram_bss.s (renamed from arm7/asm/dtcm_bss.s)40
-rw-r--r--arm7/asm/wram_data.s (renamed from arm7/asm/dtcm_data.s)56
-rw-r--r--arm7/global.inc18
16 files changed, 1496 insertions, 1425 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf
index 3b988f59..46486c4f 100644
--- a/arm7/arm7.lsf
+++ b/arm7/arm7.lsf
@@ -55,11 +55,17 @@ Autoload WRAM
Object SND_work.o
Object SND_alarm.o
Object SND_command.o
- Object dtcm.o
+ Object FS_file.o
+ Object CARD_common.o
+ Object CARD_spi.o
+ Object CARD_rom.o
+ Object CARD_thread.o
+ Object CARD_fifo.o
+ Object CARD_pullOut.o
Object libsyscall.o
- Object dtcm2.o
- Object dtcm_data.o
- Object dtcm_bss.o
+ Object wram2.o
+ Object wram_data.o
+ Object wram_bss.o
}
Autoload EXT
diff --git a/arm7/asm/CARD_common.s b/arm7/asm/CARD_common.s
new file mode 100644
index 00000000..be71fcdf
--- /dev/null
+++ b/arm7/asm/CARD_common.s
@@ -0,0 +1,105 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _0380912C
+_0380912C: ;0x0380912C
+ .space 0x03809140 - 0x0380912C
+
+ .global cardi_common
+cardi_common: ;0x03809140
+ .space 0x03809188 - 0x03809140
+
+ .global _03809188
+_03809188: ;0x03809188
+ .space 0x03809760 - 0x03809188
+
+ .global _03809760
+_03809760: ;0x03809760
+ .space 0x03809764 - 0x03809760
+
+ .section .text
+
+ arm_func_start CARD_GetRomHeader
+CARD_GetRomHeader: ; 0x037FFF20
+ ldr r0, _037FFF28 ; =0x027FFA80
+ bx lr
+_037FFF28: .word 0x027FFA80
+
+ arm_func_start CARD_SetThreadPriority
+CARD_SetThreadPriority: ; 0x037FFF2C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ ldr r6, _037FFF70 ; =cardi_common
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r5, [r6, #240] ; 0xf0
+ str r7, [r6, #240] ; 0xf0
+ add r0, r6, #72 ; 0x48
+ ldr r1, [r6, #240] ; 0xf0
+ bl OS_SetThreadPriority
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FFF70: .word cardi_common
+
+ arm_func_start CARD_Enable
+CARD_Enable: ; 0x037FFF74
+ ldr r1, _037FFF80 ; =_0380912C
+ str r0, [r1]
+ bx lr
+_037FFF80: .word _0380912C
+
+ arm_func_start CARDi_InitCommon
+CARDi_InitCommon: ; 0x037FFF84
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ mvn r1, #2
+ ldr r0, _0380001C ; =cardi_common
+ str r1, [r0, #12]
+ mov r2, #0
+ str r2, [r0, #16]
+ str r2, [r0, #28]
+ str r2, [r0]
+ str r2, [r0, #8]
+ str r2, [r0, #24]
+ str r2, [r0, #20]
+ str r2, [r0, #248] ; 0xf8
+ str r2, [r0, #244] ; 0xf4
+ mov r1, #4
+ str r1, [r0, #240] ; 0xf0
+ mov r1, #1024 ; 0x400
+ str r1, [sp]
+ ldr r0, [r0, #240] ; 0xf0
+ str r0, [sp, #4]
+ ldr r0, _03800020 ; =_03809188
+ ldr r1, _03800024 ; =CARDi_TaskThread
+ ldr r3, _03800028 ; =_03809760
+ bl OS_CreateThread
+ ldr r0, _03800020 ; =_03809188
+ bl OS_WakeupThreadDirect
+ mov r0, #11
+ ldr r1, _0380002C ; =CARDi_OnFifoRecv
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _03800030 ; =0x027FFC40
+ ldrh r0, [r0]
+_03800000:
+ cmp r0, #2
+ beq _03800010
+ mov r0, #1
+ bl CARD_Enable
+_03800010:
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_0380001C: .word cardi_common
+_03800020: .word _03809188
+_03800024: .word CARDi_TaskThread
+_03800028: .word _03809760
+_0380002C: .word CARDi_OnFifoRecv
+_03800030: .word 0x027FFC40
diff --git a/arm7/asm/CARD_fifo.s b/arm7/asm/CARD_fifo.s
new file mode 100644
index 00000000..7e3cd489
--- /dev/null
+++ b/arm7/asm/CARD_fifo.s
@@ -0,0 +1,90 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CARDi_OnFifoRecv
+CARDi_OnFifoRecv: ; 0x03800D2C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #11
+ bne _03800DFC
+ cmp r2, #0
+ beq _03800DFC
+ ldr r0, _03800E08 ; =cardi_common
+ ldr r2, [r0, #8]
+ cmp r2, #0
+ streq r1, [r0, #4]
+ ldr r2, [r0, #4]
+ cmp r2, #12
+ addls pc, pc, r2, lsl #2
+ b _03800DC8
+ b _03800D98
+ b _03800DC8
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+_03800D98:
+ ldr r2, [r0, #8]
+ cmp r2, #0
+ beq _03800DC8
+ cmp r2, #1
+ streq r1, [r0]
+ ldreq r1, [r0, #252] ; 0xfc
+ orreq r1, r1, #16
+ streq r1, [r0, #252] ; 0xfc
+ b _03800DC8
+_03800DBC:
+ ldr r1, [r0, #252] ; 0xfc
+ orr r1, r1, #16
+ str r1, [r0, #252] ; 0xfc
+_03800DC8:
+ ldr r1, [r0, #252] ; 0xfc
+ ands r1, r1, #16
+ ldreq r1, [r0, #8]
+ addeq r1, r1, #1
+ streq r1, [r0, #8]
+ beq _03800DFC
+ mov r1, #0
+ str r1, [r0, #8]
+ ldr r1, [r0, #252] ; 0xfc
+ ands r1, r1, #4
+ ldrne r0, [r0, #236] ; 0xec
+ addeq r0, r0, #72 ; 0x48
+ bl OS_WakeupThreadDirect
+_03800DFC:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800E08: .word cardi_common
+
+ arm_func_start FUN_03800E0C
+FUN_03800E0C: ; 0x03800E0C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, #14
+ mov r4, #0
+ b _03800E30
+_03800E28:
+ mov r0, r6
+ bl FUN_037F8CB4
+_03800E30:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _03800E28
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
diff --git a/arm7/asm/CARD_pullOut.s b/arm7/asm/CARD_pullOut.s
new file mode 100644
index 00000000..ed919647
--- /dev/null
+++ b/arm7/asm/CARD_pullOut.s
@@ -0,0 +1,218 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global _03807668
+_03807668:
+ .word 0xFFFFFFFF
+
+ .global _0380766C
+_0380766C:
+ .word 0x00000001
+
+ .section .bss
+
+ .global _038099A0
+_038099A0: ;0x038099A0
+ .space 0x038099A4 - 0x038099A0
+
+ .global _038099A4
+_038099A4: ;0x038099A4
+ .space 0x038099A8 - 0x038099A4
+
+ .global _038099A8
+_038099A8: ;0x038099A8
+ .space 0x038099AC - 0x038099A8
+
+ .section .text
+
+ arm_func_start FUN_03800E54
+FUN_03800E54: ; 0x03800E54
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl CTRDG_VibPulseEdgeUpdate
+ bl SND_BeginSleep
+ bl WVR_Shutdown
+ bl OS_Terminate
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CARD_CheckPullOut_Polling
+CARD_CheckPullOut_Polling: ; 0x03800E7C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03800F50 ; =_038099A0
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03800F44
+ ldr r0, _03800F54 ; =0x027FFC40
+ ldrh r0, [r0]
+ cmp r0, #2
+ beq _03800F44
+ ldr r1, _03800F58 ; =_03807668
+ ldr r3, [r1]
+ mvn r0, #0
+ cmp r3, r0
+ ldreq r0, _03800F5C ; =0x027FFC3C
+ ldreq r0, [r0]
+ addeq r0, r0, #10
+ streq r0, [r1]
+ beq _03800F44
+ ldr r2, _03800F5C ; =0x027FFC3C
+ ldr r0, [r2]
+ cmp r0, r3
+ bcc _03800F44
+ ldr r0, [r2]
+ add r0, r0, #10
+ str r0, [r1]
+ bl CARD_IsPulledOut
+ cmp r0, #0
+ beq _03800F1C
+ mov r1, #1
+ ldr r0, _03800F50 ; =_038099A0
+ str r1, [r0]
+ bl CARD_GetRomHeader
+ ldr r0, [r0, #12]
+ cmp r0, #0
+ bne _03800F1C
+ ldr r0, _03800F60 ; =_0380766C
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03800F44
+_03800F1C:
+ mov r1, #0
+ ldr r0, _03800F60 ; =_0380766C
+ str r1, [r0]
+ ldr r0, _03800F50 ; =_038099A0
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _03800F44
+ mov r0, #17
+ mov r1, #100 ; 0x64
+ bl FUN_03800E0C
+_03800F44:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800F50: .word _038099A0
+_03800F54: .word 0x027FFC40
+_03800F58: .word _03807668
+_03800F5C: .word 0x027FFC3C
+_03800F60: .word _0380766C
+
+ arm_func_start CARD_IsCardIreqLo
+CARD_IsCardIreqLo: ; 0x03800F64
+ mov r2, #1
+ mov r0, r2
+ ldr r1, _03800F88 ; =0x04000214
+ ldr r1, [r1]
+ ands r1, r1, #1048576 ; 0x100000
+ movne r0, #0
+ ldrne r1, _03800F8C ; =_038099A8
+ strne r2, [r1]
+ bx lr
+_03800F88: .word 0x04000214
+_03800F8C: .word _038099A8
+
+ arm_func_start CARD_CompareCardID
+CARD_CompareCardID: ; 0x03800F90
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03800FE8 ; =0x027FFC10
+ ldrh r0, [r0]
+ cmp r0, #0
+ ldreq r0, _03800FEC ; =0x027FF800
+ ldrne r0, _03800FF0 ; =0x027FFC00
+ ldr r0, [r0]
+ str r0, [sp]
+ bl CARDi_ReadRomID
+ ldr r1, [sp]
+ cmp r0, r1
+ moveq r0, #1
+ movne r0, #0
+ cmp r0, #0
+ moveq r2, #1
+ movne r2, #0
+ ldr r1, _03800FF4 ; =_038099A8
+ str r2, [r1]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800FE8: .word 0x027FFC10
+_03800FEC: .word 0x027FF800
+_03800FF0: .word 0x027FFC00
+_03800FF4: .word _038099A8
+
+ arm_func_start CARD_IsPulledOut
+CARD_IsPulledOut: ; 0x03800FF8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03801040 ; =_038099A8
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _0380102C
+ ldr r0, _03801044 ; =0x027FFC1F
+ ldrb r0, [r0]
+ ands r0, r0, #1
+ beq _03801028
+ bl CARD_CompareCardID
+ b _0380102C
+_03801028:
+ bl CARD_IsCardIreqLo
+_0380102C:
+ ldr r0, _03801040 ; =_038099A8
+ ldr r0, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801040: .word _038099A8
+_03801044: .word 0x027FFC1F
+
+ arm_func_start FUN_03801048
+FUN_03801048: ; 0x03801048
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ; 0x3f
+ cmp r0, #1
+ bne _03801064
+ bl FUN_03800E54
+ b _03801068
+_03801064:
+ bl OS_Terminate
+_03801068:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CARD_InitPulledOutCallback
+CARD_InitPulledOutCallback: ; 0x03801074
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _038010CC ; =_038099A4
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _038010C0
+ mov r1, #1
+ str r1, [r0]
+ bl PXI_Init
+ mov r5, #14
+ mov r4, #0
+_038010A0:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+ cmp r0, #0
+ beq _038010A0
+ mov r0, #14
+ ldr r1, _038010D0 ; =FUN_03801048
+ bl PXI_SetFifoRecvCallback
+_038010C0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_038010CC: .word _038099A4
+_038010D0: .word FUN_03801048
+ .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/asm/CARD_rom.s b/arm7/asm/CARD_rom.s
new file mode 100644
index 00000000..51725ca1
--- /dev/null
+++ b/arm7/asm/CARD_rom.s
@@ -0,0 +1,194 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global cardi_rom_header_addr
+cardi_rom_header_addr:
+ .word 0x027FFE00
+
+ .section .bss
+
+ .global cardi_rom_base
+cardi_rom_base: ;0x03809774
+ .space 0x03809780 - 0x03809774
+
+ .global rom_stat
+rom_stat: ;0x03809780
+ .space 0x038099A0 - 0x03809780
+
+ .section .text
+
+ arm_func_start CARDi_GetRomAccessor
+CARDi_GetRomAccessor: ; 0x038008C4
+ ldr r0, _038008CC ; =_03800A7C
+ bx lr
+_038008CC: .word _03800A7C
+
+ arm_func_start CARD_Init
+CARD_Init: ; 0x038008D0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _03800940 ; =cardi_common
+ ldr r0, [r2, #252] ; 0xfc
+ cmp r0, #0
+ bne _03800934
+ mov r0, #1
+ str r0, [r2, #252] ; 0xfc
+ mov r1, #0
+ str r1, [r2, #40] ; 0x28
+ ldr r0, [r2, #40] ; 0x28
+ str r0, [r2, #36] ; 0x24
+ ldr r0, [r2, #36] ; 0x24
+ str r0, [r2, #32]
+ mvn r0, #0
+ str r0, [r2, #44] ; 0x2c
+ str r1, [r2, #60] ; 0x3c
+ str r1, [r2, #64] ; 0x40
+ ldr r0, _03800944 ; =cardi_rom_base
+ str r1, [r0]
+ bl CARDi_InitCommon
+ bl CARDi_GetRomAccessor
+ ldr r1, _03800948 ; =rom_stat
+ str r0, [r1]
+ bl CARD_InitPulledOutCallback
+_03800934:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800940: .word cardi_common
+_03800944: .word cardi_rom_base
+_03800948: .word rom_stat
+
+ arm_func_start CARDi_ReadRomID
+CARDi_ReadRomID: ; 0x0380094C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ ldr r5, _03800A10 ; =cardi_common
+ bl OS_DisableInterrupts
+ mov r4, r0
+ add r6, r5, #244 ; 0xf4
+ b _0380096C
+_03800964:
+ mov r0, r6
+ bl OS_SleepThread
+_0380096C:
+ ldr r0, [r5, #252] ; 0xfc
+ ands r0, r0, #4
+ bne _03800964
+ ldr r0, [r5, #252] ; 0xfc
+ orr r0, r0, #4
+ str r0, [r5, #252] ; 0xfc
+ mov r0, #0
+ str r0, [r5, #60] ; 0x3c
+ str r0, [r5, #64] ; 0x40
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ bl CARDi_ReadRomIDCore
+ mov r8, r0
+ ldr r7, _03800A10 ; =cardi_common
+ mov r1, #0
+ ldr r0, [r7]
+ str r1, [r0]
+ ldr r6, [r7, #60] ; 0x3c
+ ldr r5, [r7, #64] ; 0x40
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, [r7, #252] ; 0xfc
+ bic r0, r0, #76 ; 0x4c
+ str r0, [r7, #252] ; 0xfc
+ add r0, r7, #244 ; 0xf4
+ bl OS_WakeupThread
+ ldr r0, [r7, #252] ; 0xfc
+ ands r0, r0, #16
+ beq _038009E8
+ add r0, r7, #72 ; 0x48
+ bl OS_WakeupThreadDirect
+_038009E8:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ cmp r6, #0
+ beq _03800A04
+ mov r0, r5
+ mov lr, pc
+ bx r6
+_03800A04:
+ mov r0, r8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03800A10: .word cardi_common
+
+ arm_func_start CARDi_ReadRomIDCore
+CARDi_ReadRomIDCore: ; 0x03800A14
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #-1207959552 ; 0xb8000000
+ mov r1, #0
+ bl CARDi_SetRomOp
+ ldr r0, _03800A70 ; =cardi_rom_header_addr
+ ldr r0, [r0]
+ ldr r0, [r0, #96] ; 0x60
+ bic r0, r0, #117440512 ; 0x7000000
+ orr r1, r0, #-1493172224 ; 0xa7000000
+ mov r0, #8192 ; 0x2000
+ rsb r0, r0, #0
+ and r0, r1, r0
+ ldr r1, _03800A74 ; =0x040001A4
+ str r0, [r1]
+_03800A50:
+ ldr r0, [r1]
+ ands r0, r0, #8388608 ; 0x800000
+ beq _03800A50
+ ldr r0, _03800A78 ; =0x04100010
+ ldr r0, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800A70: .word cardi_rom_header_addr
+_03800A74: .word 0x040001A4
+_03800A78: .word 0x04100010
+_03800A7C:
+ bx lr
+
+ arm_func_start CARDi_SetRomOp
+CARDi_SetRomOp: ; 0x03800A80
+ ldr r3, _03800AF8 ; =0x040001A4
+_03800A84:
+ ldr r2, [r3]
+ ands r2, r2, #-2147483648 ; 0x80000000
+ bne _03800A84
+ mov r3, #192 ; 0xc0
+ ldr r2, _03800AFC ; =0x040001A1
+ strb r3, [r2]
+ mov r3, r0, lsr #24
+ ldr r2, _03800B00 ; =0x040001A8
+ strb r3, [r2]
+ mov r3, r0, lsr #16
+ ldr r2, _03800B04 ; =0x040001A9
+ strb r3, [r2]
+ mov r3, r0, lsr #8
+ ldr r2, _03800B08 ; =0x040001AA
+ strb r3, [r2]
+ ldr r2, _03800B0C ; =0x040001AB
+ strb r0, [r2]
+ mov r2, r1, lsr #24
+ ldr r0, _03800B10 ; =0x040001AC
+ strb r2, [r0]
+ mov r2, r1, lsr #16
+ ldr r0, _03800B14 ; =0x040001AD
+ strb r2, [r0]
+ mov r2, r1, lsr #8
+ ldr r0, _03800B18 ; =0x040001AE
+ strb r2, [r0]
+ ldr r0, _03800B1C ; =0x040001AF
+ strb r1, [r0]
+ bx lr
+_03800AF8: .word 0x040001A4
+_03800AFC: .word 0x040001A1
+_03800B00: .word 0x040001A8
+_03800B04: .word 0x040001A9
+_03800B08: .word 0x040001AA
+_03800B0C: .word 0x040001AB
+_03800B10: .word 0x040001AC
+_03800B14: .word 0x040001AD
+_03800B18: .word 0x040001AE
+_03800B1C: .word 0x040001AF
diff --git a/arm7/asm/CARD_spi.s b/arm7/asm/CARD_spi.s
new file mode 100644
index 00000000..bf82b91d
--- /dev/null
+++ b/arm7/asm/CARD_spi.s
@@ -0,0 +1,644 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global _03809764
+_03809764: ;0x03809764
+ .space 0x03809774 - 0x03809764
+
+ .section .text
+
+ arm_func_start CARDi_SetWriteProtectCore
+CARDi_SetWriteProtectCore: ; 0x03800034
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _038000BC
+ ldr r0, _038000C8 ; =cardi_common
+ ldr sl, [r0]
+ mov r9, #10
+ mov r0, #1
+ strb r0, [sp]
+ strb r4, [sp, #1]
+ mov r8, #2
+ add r7, sp, #0
+ mov r6, #0
+ ldr r5, _038000CC ; =CARDi_CommWriteCore
+ mov r4, #5
+_03800078:
+ bl CARDi_WriteEnable
+ mov r0, r8
+ bl CARDi_CommandBegin
+ mov r0, r7
+ mov r1, r6
+ mov r2, r8
+ mov r3, r5
+ bl CARDi_CommArray
+ mov r0, r4
+ mov r1, r6
+ bl CARDi_CommandEnd
+ ldr r0, [sl]
+ cmp r0, #4
+ bne _038000BC
+ sub r9, r9, #1
+ cmp r9, #0
+ bgt _03800078
+_038000BC:
+ add sp, sp, #8
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_038000C8: .word cardi_common
+_038000CC: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_EraseChipCore
+CARDi_EraseChipCore: ; 0x038000D0
+ stmdb sp!, {r4, lr}
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _03800114
+ ldr r0, _0380011C ; =cardi_common
+ ldr r4, [r0]
+ bl CARDi_WriteEnable
+ mov r0, #1
+ bl CARDi_CommandBegin
+ ldr r0, _03800120 ; =_038072BC
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800124 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ ldr r0, [r4, #52] ; 0x34
+ ldr r1, [r4, #56] ; 0x38
+ bl CARDi_CommandEnd
+_03800114:
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380011C: .word cardi_common
+_03800120: .word _038072BC
+_03800124: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_EraseBackupSectorCore
+CARDi_EraseBackupSectorCore: ; 0x03800128
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r6, r1
+ ldr r0, _038001B8 ; =cardi_common
+ ldr r5, [r0]
+ ldr r4, [r5, #28]
+ sub r1, r4, #1
+ orr r0, r7, r6
+ ands r0, r1, r0
+ movne r0, #2
+ strne r0, [r5]
+ bne _038001B0
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _038001B0
+ mov r8, #216 ; 0xd8
+ b _038001A8
+_0380016C:
+ bl CARDi_WriteEnable
+ ldr r0, [r5, #36] ; 0x24
+ add r0, r0, #1
+ bl CARDi_CommandBegin
+ mov r0, r7
+ mov r1, r8
+ bl CARDi_SendSpiAddressingCommand
+ ldr r0, [r5, #60] ; 0x3c
+ ldr r1, [r5, #64] ; 0x40
+ bl CARDi_CommandEnd
+ ldr r0, [r5]
+ cmp r0, #0
+ bne _038001B0
+ add r7, r7, r4
+ sub r6, r6, r4
+_038001A8:
+ cmp r6, #0
+ bne _0380016C
+_038001B0:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_038001B8: .word cardi_common
+
+ arm_func_start CARDi_VerifyBackupCore
+CARDi_VerifyBackupCore: ; 0x038001BC
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _0380024C
+ ldr r0, _03800258 ; =cardi_common
+ ldr r4, [r0]
+ mov r1, #1
+ ldr r0, _0380025C ; =_03809764
+ str r1, [r0, #12]
+ ldr r0, [r4, #36] ; 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl CARDi_CommandBegin
+ mov r0, r7
+ mov r1, #3
+ bl CARDi_SendSpiAddressingCommand
+ mov r0, r6
+ mov r1, #0
+ mov r2, r5
+ ldr r3, _03800260 ; =CARDi_CommVerifyCore
+ bl CARDi_CommArray
+ mov r0, #0
+ mov r1, r0
+ bl CARDi_CommandEnd
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _0380024C
+ ldr r0, _0380025C ; =_03809764
+ ldr r0, [r0, #12]
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r4]
+_0380024C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03800258: .word cardi_common
+_0380025C: .word _03809764
+_03800260: .word CARDi_CommVerifyCore
+
+ arm_func_start CARDi_WriteBackupCore
+CARDi_WriteBackupCore: ; 0x03800264
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r8, r2
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _03800314
+ ldr r0, _03800320 ; =cardi_common
+ ldr r7, [r0]
+ ldr r6, [r7, #32]
+ sub r4, r6, #1
+ mov fp, #10
+ mov r0, #0
+ str r0, [sp]
+ b _0380030C
+_038002A4:
+ and r0, sl, r4
+ sub r5, r6, r0
+ cmp r5, r8
+ movhi r5, r8
+ bl CARDi_WriteEnable
+ ldr r0, [r7, #36] ; 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl CARDi_CommandBegin
+ mov r0, sl
+ mov r1, fp
+ bl CARDi_SendSpiAddressingCommand
+ mov r0, r9
+ ldr r1, [sp]
+ mov r2, r5
+ ldr r3, _03800324 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ ldr r0, [r7, #44] ; 0x2c
+ ldr r1, [r7, #48] ; 0x30
+ bl CARDi_CommandEnd
+ ldr r0, [r7]
+ cmp r0, #0
+ bne _03800314
+ add r9, r9, r5
+ add sl, sl, r5
+ sub r8, r8, r5
+_0380030C:
+ cmp r8, #0
+ bne _038002A4
+_03800314:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03800320: .word cardi_common
+_03800324: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_ProgramBackupCore
+CARDi_ProgramBackupCore: ; 0x03800328
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r8, r2
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _038003D8
+ ldr r0, _038003E4 ; =cardi_common
+ ldr r7, [r0]
+ ldr r6, [r7, #32]
+ sub r4, r6, #1
+ mov r0, #2
+ str r0, [sp]
+ mov fp, #0
+ b _038003D0
+_03800368:
+ and r0, sl, r4
+ sub r5, r6, r0
+ cmp r5, r8
+ movhi r5, r8
+ bl CARDi_WriteEnable
+ ldr r0, [r7, #36] ; 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl CARDi_CommandBegin
+ mov r0, sl
+ ldr r1, [sp]
+ bl CARDi_SendSpiAddressingCommand
+ mov r0, r9
+ mov r1, fp
+ mov r2, r5
+ ldr r3, _038003E8 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ ldr r0, [r7, #40] ; 0x28
+ mov r1, fp
+ bl CARDi_CommandEnd
+ ldr r0, [r7]
+ cmp r0, #0
+ bne _038003D8
+ add r9, r9, r5
+ add sl, sl, r5
+ sub r8, r8, r5
+_038003D0:
+ cmp r8, #0
+ bne _03800368
+_038003D8:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_038003E4: .word cardi_common
+_038003E8: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_ReadBackupCore
+CARDi_ReadBackupCore: ; 0x038003EC
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl CARDi_WaitPrevCommand
+ cmp r0, #0
+ beq _0380044C
+ ldr r0, _03800454 ; =cardi_common
+ ldr r0, [r0]
+ ldr r0, [r0, #36] ; 0x24
+ add r0, r0, #1
+ add r0, r0, r4
+ bl CARDi_CommandBegin
+ mov r0, r6
+ mov r1, #3
+ bl CARDi_SendSpiAddressingCommand
+ mov r0, #0
+ mov r1, r5
+ mov r2, r4
+ ldr r3, _03800458 ; =CARDi_CommReadCore
+ bl CARDi_CommArray
+ mov r0, #0
+ mov r1, r0
+ bl CARDi_CommandEnd
+_0380044C:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_03800454: .word cardi_common
+_03800458: .word CARDi_CommReadCore
+
+ arm_func_start CARDi_InitStatusRegister
+CARDi_InitStatusRegister: ; 0x0380045C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ldr r0, _038004F8 ; =cardi_common
+ ldr r0, [r0]
+ ldrb r4, [r0, #72] ; 0x48
+ cmp r4, #255 ; 0xff
+ beq _038004EC
+ ldr r0, _038004FC ; =_03809760
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _038004EC
+ mov r0, #5
+ strb r0, [sp]
+ mov r0, #2
+ bl CARDi_CommandBegin
+ add r0, sp, #0
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800500 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ mov r0, #0
+ add r1, sp, #1
+ mov r2, #1
+ ldr r3, _03800504 ; =CARDi_CommReadCore
+ bl CARDi_CommArray
+ mov r0, #0
+ mov r1, r0
+ bl CARDi_CommandEnd
+ ldrb r0, [sp, #1]
+ cmp r0, r4
+ beq _038004E0
+ mov r0, r4
+ bl CARDi_SetWriteProtectCore
+_038004E0:
+ mov r1, #1
+ ldr r0, _038004FC ; =_03809760
+ str r1, [r0]
+_038004EC:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_038004F8: .word cardi_common
+_038004FC: .word _03809760
+_03800500: .word CARDi_CommWriteCore
+_03800504: .word CARDi_CommReadCore
+
+ arm_func_start CARDi_SendSpiAddressingCommand
+CARDi_SendSpiAddressingCommand: ; 0x03800508
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _038005AC ; =cardi_common
+ ldr r2, [r2]
+ ldr r2, [r2, #36] ; 0x24
+ cmp r2, #1
+ beq _03800538
+ cmp r2, #2
+ beq _03800554
+ cmp r2, #3
+ beq _0380056C
+ b _0380058C
+_03800538:
+ and r3, r0, #255 ; 0xff
+ mov r0, r0, lsr #5
+ and r0, r0, #8
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #8
+ str r0, [sp]
+ b _0380058C
+_03800554:
+ and r3, r0, #255 ; 0xff
+ and r0, r0, #65280 ; 0xff00
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #16
+ str r0, [sp]
+ b _0380058C
+_0380056C:
+ and ip, r0, #255 ; 0xff
+ and r3, r0, #65280 ; 0xff00
+ mov r0, r0, lsr #8
+ and r0, r0, #65280 ; 0xff00
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #8
+ orr r0, r0, ip, lsl #24
+ str r0, [sp]
+_0380058C:
+ add r0, sp, #0
+ mov r1, #0
+ add r2, r2, #1
+ ldr r3, _038005B0 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038005AC: .word cardi_common
+_038005B0: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_WriteEnable
+CARDi_WriteEnable: ; 0x038005B4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #1
+ bl CARDi_CommandBegin
+ ldr r0, _038005F0 ; =_038072C0
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _038005F4 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ mov r0, #0
+ mov r1, r0
+ bl CARDi_CommandEnd
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038005F0: .word _038072C0
+_038005F4: .word CARDi_CommWriteCore
+
+ arm_func_start CARDi_CommVerifyCore
+CARDi_CommVerifyCore: ; 0x038005F8
+ mov r2, #0
+ ldr r1, _03800658 ; =0x040001A2
+ strh r2, [r1]
+ ldr r2, _0380065C ; =0x040001A0
+_03800608:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ; 0x80
+ bne _03800608
+ ldr r1, _03800658 ; =0x040001A2
+ ldrh r1, [r1]
+ and r2, r1, #255 ; 0xff
+ ldr r1, [r0, #4]
+ ldrb r1, [r1]
+ cmp r2, r1
+ beq _03800648
+ mov r1, #0
+ str r1, [r0, #12]
+ ldr r1, [r0]
+ cmp r1, #1
+ movhi r1, #1
+ strhi r1, [r0]
+_03800648:
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ bx lr
+_03800658: .word 0x040001A2
+_0380065C: .word 0x040001A0
+
+ arm_func_start CARDi_CommWriteCore
+CARDi_CommWriteCore: ; 0x03800660
+ sub sp, sp, #8
+ ldr r1, [r0, #4]
+ ldrb r2, [r1]
+ ldr r1, _038006A4 ; =0x040001A2
+ strh r2, [r1]
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ ldr r1, _038006A8 ; =0x040001A0
+_03800684:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ; 0x80
+ bne _03800684
+ ldr r0, _038006A4 ; =0x040001A2
+ ldrh r0, [r0]
+ strh r0, [sp]
+ add sp, sp, #8
+ bx lr
+_038006A4: .word 0x040001A2
+_038006A8: .word 0x040001A0
+
+ arm_func_start CARDi_CommReadCore
+CARDi_CommReadCore: ; 0x038006AC
+ mov r2, #0
+ ldr r1, _038006E8 ; =0x040001A2
+ strh r2, [r1]
+ ldr r2, _038006EC ; =0x040001A0
+_038006BC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ; 0x80
+ bne _038006BC
+ ldr r1, _038006E8 ; =0x040001A2
+ ldrh r2, [r1]
+ ldr r1, [r0, #8]
+ strb r2, [r1]
+ ldr r1, [r0, #8]
+ add r1, r1, #1
+ str r1, [r0, #8]
+ bx lr
+_038006E8: .word 0x040001A2
+_038006EC: .word 0x040001A0
+
+ arm_func_start CARDi_CommArray
+CARDi_CommArray: ; 0x038006F0
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r2
+ mov r6, r3
+ ldr r5, _03800774 ; =_03809764
+ str r0, [r5, #4]
+ str r1, [r5, #8]
+ ldr r0, _03800778 ; =0x0000A040
+ ldr r4, _0380077C ; =0x040001A0
+ strh r0, [r4]
+ mov r8, #40960 ; 0xa000
+ b _03800750
+_0380071C:
+ ldr r0, [r5]
+ sub r0, r0, #1
+ str r0, [r5]
+ ldr r0, [r5]
+ cmp r0, #0
+ streqh r8, [r4]
+_03800734:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ; 0x80
+ bne _03800734
+ mov r0, r5
+ mov lr, pc
+ bx r6
+ sub r7, r7, #1
+_03800750:
+ cmp r7, #0
+ bne _0380071C
+ ldr r0, [r5]
+ cmp r0, #0
+ moveq r1, #0
+ ldreq r0, _0380077C ; =0x040001A0
+ streqh r1, [r0]
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03800774: .word _03809764
+_03800778: .word 0x0000A040
+_0380077C: .word 0x040001A0
+
+ arm_func_start CARDi_WaitPrevCommand
+CARDi_WaitPrevCommand: ; 0x03800780
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ mov r1, #50 ; 0x32
+ bl CARDi_CommandEnd
+ ldr r0, _038007C0 ; =cardi_common
+ ldr r1, [r0]
+ ldr r0, [r1]
+ cmp r0, #4
+ moveq r0, #6
+ streq r0, [r1]
+ moveq r0, #0
+ movne r0, #1
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038007C0: .word cardi_common
+
+ arm_func_start CARDi_CommandCheckBusy
+CARDi_CommandCheckBusy: ; 0x038007C4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #2
+ bl CARDi_CommandBegin
+ ldr r0, _03800824 ; =_038072C4
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800828 ; =CARDi_CommWriteCore
+ bl CARDi_CommArray
+ mov r0, #0
+ add r1, sp, #0
+ mov r2, #1
+ ldr r3, _0380082C ; =CARDi_CommReadCore
+ bl CARDi_CommArray
+ mov r0, #0
+ mov r1, r0
+ bl CARDi_CommandEnd
+ ldrb r0, [sp]
+ ands r0, r0, #1
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800824: .word _038072C4
+_03800828: .word CARDi_CommWriteCore
+_0380082C: .word CARDi_CommReadCore
+
+ arm_func_start CARDi_CommandEnd
+CARDi_CommandEnd: ; 0x03800830
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r5, r0
+ mov r4, r1
+ adds r1, r5, r4
+ beq _038008A8
+ cmp r5, #0
+ beq _03800850
+ bl OS_Sleep
+_03800850:
+ cmp r4, #0
+ beq _03800890
+ sub r6, r4, r5
+ mov r4, #5
+ b _0380087C
+_03800864:
+ cmp r6, #5
+ movlt r5, r6
+ movge r5, r4
+ mov r0, r5
+ bl OS_Sleep
+ sub r6, r6, r5
+_0380087C:
+ bl CARDi_CommandCheckBusy
+ cmp r0, #0
+ bne _03800890
+ cmp r6, #0
+ bgt _03800864
+_03800890:
+ bl CARDi_CommandCheckBusy
+ cmp r0, #0
+ moveq r1, #4
+ ldreq r0, _038008B0 ; =cardi_common
+ ldreq r0, [r0]
+ streq r1, [r0]
+_038008A8:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_038008B0: .word cardi_common
+
+ arm_func_start CARDi_CommandBegin
+CARDi_CommandBegin: ; 0x038008B4
+ ldr r1, _038008C0 ; =_03809764
+ str r0, [r1]
+ bx lr
+_038008C0: .word _03809764
diff --git a/arm7/asm/CARD_thread.s b/arm7/asm/CARD_thread.s
new file mode 100644
index 00000000..fba1cf76
--- /dev/null
+++ b/arm7/asm/CARD_thread.s
@@ -0,0 +1,156 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CARDi_TaskThread
+CARDi_TaskThread: ; 0x03800B20
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r9, _03800D28 ; =cardi_common
+ add r5, r9, #72 ; 0x48
+ mov r8, #0
+ add r7, r9, #252 ; 0xfc
+ mov r6, #1
+ mov r4, #3
+ mov fp, #11
+_03800B44:
+ mov sl, r8
+ bl OS_DisableInterrupts
+ str r0, [sp]
+_03800B50:
+ ldr r0, [r9, #252] ; 0xfc
+ ands r0, r0, #4
+ bne _03800B88
+ ldr r0, [r9, #252] ; 0xfc
+ ands r0, r0, #16
+ beq _03800B94
+ ldr r0, [r7]
+ orr r0, r0, #4
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #16
+ str r0, [r7]
+ mov sl, r6
+ b _03800BA4
+_03800B88:
+ ldr r0, [r9, #252] ; 0xfc
+ ands r0, r0, #8
+ bne _03800BA4
+_03800B94:
+ str r5, [r9, #236] ; 0xec
+ mov r0, r8
+ bl OS_SleepThread
+ b _03800B50
+_03800BA4:
+ ldr r0, [sp]
+ bl OS_RestoreInterrupts
+ cmp sl, #0
+ beq _03800D14
+ ldr r0, [r9]
+ str r8, [r0]
+ ldr r2, [r9]
+ ldr r1, [r2, #76] ; 0x4c
+ ldr r0, [r9, #4]
+ mov r0, r6, lsl r0
+ ands r0, r1, r0
+ streq r4, [r2]
+ ldr r0, [r9, #4]
+ cmp r0, #12
+ addls pc, pc, r0, lsl #2
+ b _03800CB8
+ b _03800CC0
+ b _03800CC0
+ b _03800C18
+ b _03800C20
+ b _03800C30
+ b _03800CB8
+ b _03800C3C
+ b _03800C54
+ b _03800C6C
+ b _03800C84
+ b _03800CB8
+ b _03800C9C
+ b _03800CB0
+_03800C18:
+ bl CARDi_InitStatusRegister
+ b _03800CC0
+_03800C20:
+ bl CARDi_ReadRomIDCore
+ ldr r1, [r9]
+ str r0, [r1, #8]
+ b _03800CC0
+_03800C30:
+ ldr r0, [r9]
+ str r4, [r0]
+ b _03800CC0
+_03800C3C:
+ ldr r2, [r9]
+ ldr r0, [r2, #12]
+ ldr r1, [r2, #16]
+ ldr r2, [r2, #20]
+ bl CARDi_ReadBackupCore
+ b _03800CC0
+_03800C54:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl CARDi_WriteBackupCore
+ b _03800CC0
+_03800C6C:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl CARDi_ProgramBackupCore
+ b _03800CC0
+_03800C84:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl CARDi_VerifyBackupCore
+ b _03800CC0
+_03800C9C:
+ ldr r1, [r9]
+ ldr r0, [r1, #16]
+ ldr r1, [r1, #20]
+ bl CARDi_EraseBackupSectorCore
+ b _03800CC0
+_03800CB0:
+ bl CARDi_EraseChipCore
+ b _03800CC0
+_03800CB8:
+ ldr r0, [r9]
+ str r4, [r0]
+_03800CC0:
+ mov r0, fp
+ mov r1, r6
+ mov r2, r6
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _03800CC0
+ bl OS_DisableInterrupts
+ mov sl, r0
+ ldr r0, [r9, #252] ; 0xfc
+ bic r0, r0, #76 ; 0x4c
+ str r0, [r9, #252] ; 0xfc
+ add r0, r9, #244 ; 0xf4
+ bl OS_WakeupThread
+ ldr r0, [r9, #252] ; 0xfc
+ ands r0, r0, #16
+ beq _03800D08
+ mov r0, r5
+ bl OS_WakeupThreadDirect
+_03800D08:
+ mov r0, sl
+ bl OS_RestoreInterrupts
+ b _03800B44
+_03800D14:
+ mov r0, r9
+ ldr r1, [r9, #68] ; 0x44
+ mov lr, pc
+ bx r1
+ b _03800B44
+_03800D28: .word cardi_common
diff --git a/arm7/asm/FS_file.s b/arm7/asm/FS_file.s
new file mode 100644
index 00000000..28f14661
--- /dev/null
+++ b/arm7/asm/FS_file.s
@@ -0,0 +1,10 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start FS_Init
+FS_Init: ; 0x037FFF14
+ ldr ip, _037FFF1C ; =CARD_Init
+ bx ip
+_037FFF1C: .word CARD_Init
diff --git a/arm7/asm/OS_irqHandler.s b/arm7/asm/OS_irqHandler.s
index ed96fdae..6c3ffc5a 100644
--- a/arm7/asm/OS_irqHandler.s
+++ b/arm7/asm/OS_irqHandler.s
@@ -1,7 +1,45 @@
.include "asm/macros.inc"
.include "global.inc"
- .text
+ .section .data
+
+ .global _038075E4
+_038075E4:
+ .word 0x00090008
+ .word 0x000B000A
+ .word 0x00040003
+ .word 0x00060005
+ .word 0x00000000
+
+ .global OS_IRQTable
+OS_IRQTable:
+ .word OSi_IrqVBlank
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OSi_IrqTimer0
+ .word OSi_IrqTimer1
+ .word OSi_IrqTimer2
+ .word OSi_IrqTimer3
+ .word OS_IrqDummy
+ .word OSi_IrqDma0
+ .word OSi_IrqDma1
+ .word OSi_IrqDma2
+ .word OSi_IrqDma3
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+
+ .section .text
arm_func_start OS_IrqHandler
OS_IrqHandler: ; 0x037F853C
diff --git a/arm7/asm/SND.s b/arm7/asm/SND.s
index 43e137e1..8bab9030 100644
--- a/arm7/asm/SND.s
+++ b/arm7/asm/SND.s
@@ -3,6 +3,12 @@
.include "asm/macros.inc"
.include "global.inc"
+ .section .data
+
+ .global sMasterPan
+sMasterPan:
+ .word 0xFFFFFFFF
+
.section .bss
.global sSurroundDecay
diff --git a/arm7/asm/SND_util.s b/arm7/asm/SND_util.s
index 256f5f41..4d136781 100644
--- a/arm7/asm/SND_util.s
+++ b/arm7/asm/SND_util.s
@@ -1,7 +1,13 @@
.include "asm/macros.inc"
.include "global.inc"
- .text
+ .section .data
+
+ .global _03807660
+_03807660:
+ .word 0x12345678
+
+ .section .text
arm_func_start SND_CalcRandom
SND_CalcRandom: ; 0x037FC058
diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s
deleted file mode 100644
index 454742e5..00000000
--- a/arm7/asm/dtcm.s
+++ /dev/null
@@ -1,1322 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .text
- arm_func_start FS_Init
-FS_Init: ; 0x037FFF14
- ldr ip, _037FFF1C ; =CARD_Init
- bx ip
-_037FFF1C: .word CARD_Init
-
- arm_func_start CARD_GetRomHeader
-CARD_GetRomHeader: ; 0x037FFF20
- ldr r0, _037FFF28 ; =0x027FFA80
- bx lr
-_037FFF28: .word 0x027FFA80
-
- arm_func_start CARD_SetThreadPriority
-CARD_SetThreadPriority: ; 0x037FFF2C
- stmdb sp!, {r4, r5, r6, r7, lr}
- sub sp, sp, #4
- mov r7, r0
- ldr r6, _037FFF70 ; =cardi_common
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r5, [r6, #240] ; 0xf0
- str r7, [r6, #240] ; 0xf0
- add r0, r6, #72 ; 0x48
- ldr r1, [r6, #240] ; 0xf0
- bl OS_SetThreadPriority
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r5
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, lr}
- bx lr
-_037FFF70: .word cardi_common
-
- arm_func_start CARD_Enable
-CARD_Enable: ; 0x037FFF74
- ldr r1, _037FFF80 ; =_0380912C
- str r0, [r1]
- bx lr
-_037FFF80: .word _0380912C
-
- arm_func_start CARDi_InitCommon
-CARDi_InitCommon: ; 0x037FFF84
- stmfd sp!, {lr}
- sub sp, sp, #12
- mvn r1, #2
- ldr r0, _0380001C ; =cardi_common
- str r1, [r0, #12]
- mov r2, #0
- str r2, [r0, #16]
- str r2, [r0, #28]
- str r2, [r0]
- str r2, [r0, #8]
- str r2, [r0, #24]
- str r2, [r0, #20]
- str r2, [r0, #248] ; 0xf8
- str r2, [r0, #244] ; 0xf4
- mov r1, #4
- str r1, [r0, #240] ; 0xf0
- mov r1, #1024 ; 0x400
- str r1, [sp]
- ldr r0, [r0, #240] ; 0xf0
- str r0, [sp, #4]
- ldr r0, _03800020 ; =_03809188
- ldr r1, _03800024 ; =CARDi_TaskThread
- ldr r3, _03800028 ; =_03809760
- bl OS_CreateThread
- ldr r0, _03800020 ; =_03809188
- bl OS_WakeupThreadDirect
- mov r0, #11
- ldr r1, _0380002C ; =CARDi_OnFifoRecv
- bl PXI_SetFifoRecvCallback
- ldr r0, _03800030 ; =0x027FFC40
- ldrh r0, [r0]
-_03800000:
- cmp r0, #2
- beq _03800010
- mov r0, #1
- bl CARD_Enable
-_03800010:
- add sp, sp, #12
- ldmia sp!, {lr}
- bx lr
-_0380001C: .word cardi_common
-_03800020: .word _03809188
-_03800024: .word CARDi_TaskThread
-_03800028: .word _03809760
-_0380002C: .word CARDi_OnFifoRecv
-_03800030: .word 0x027FFC40
-
- arm_func_start CARDi_SetWriteProtectCore
-CARDi_SetWriteProtectCore: ; 0x03800034
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- sub sp, sp, #8
- mov r4, r0
- bl FUN_03800780
- cmp r0, #0
- beq _038000BC
- ldr r0, _038000C8 ; =cardi_common
- ldr sl, [r0]
- mov r9, #10
- mov r0, #1
- strb r0, [sp]
- strb r4, [sp, #1]
- mov r8, #2
- add r7, sp, #0
- mov r6, #0
- ldr r5, _038000CC ; =_03800660
- mov r4, #5
-_03800078:
- bl FUN_038005B4
- mov r0, r8
- bl FUN_038008B4
- mov r0, r7
- mov r1, r6
- mov r2, r8
- mov r3, r5
- bl FUN_038006F0
- mov r0, r4
- mov r1, r6
- bl FUN_03800830
- ldr r0, [sl]
- cmp r0, #4
- bne _038000BC
- sub r9, r9, #1
- cmp r9, #0
- bgt _03800078
-_038000BC:
- add sp, sp, #8
- ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
- bx lr
-_038000C8: .word cardi_common
-_038000CC: .word _03800660
-
- arm_func_start CARDi_EraseChipCore
-CARDi_EraseChipCore: ; 0x038000D0
- stmdb sp!, {r4, lr}
- bl FUN_03800780
- cmp r0, #0
- beq _03800114
- ldr r0, _0380011C ; =cardi_common
- ldr r4, [r0]
- bl FUN_038005B4
- mov r0, #1
- bl FUN_038008B4
- ldr r0, _03800120 ; =_038072BC
- mov r1, #0
- mov r2, #1
- ldr r3, _03800124 ; =_03800660
- bl FUN_038006F0
- ldr r0, [r4, #52] ; 0x34
- ldr r1, [r4, #56] ; 0x38
- bl FUN_03800830
-_03800114:
- ldmia sp!, {r4, lr}
- bx lr
-_0380011C: .word cardi_common
-_03800120: .word _038072BC
-_03800124: .word _03800660
-
- arm_func_start CARDi_EraseBackupSectorCore
-CARDi_EraseBackupSectorCore: ; 0x03800128
- stmdb sp!, {r4, r5, r6, r7, r8, lr}
- mov r7, r0
- mov r6, r1
- ldr r0, _038001B8 ; =cardi_common
- ldr r5, [r0]
- ldr r4, [r5, #28]
- sub r1, r4, #1
- orr r0, r7, r6
- ands r0, r1, r0
- movne r0, #2
- strne r0, [r5]
- bne _038001B0
- bl FUN_03800780
- cmp r0, #0
- beq _038001B0
- mov r8, #216 ; 0xd8
- b _038001A8
-_0380016C:
- bl FUN_038005B4
- ldr r0, [r5, #36] ; 0x24
- add r0, r0, #1
- bl FUN_038008B4
- mov r0, r7
- mov r1, r8
- bl FUN_03800508
- ldr r0, [r5, #60] ; 0x3c
- ldr r1, [r5, #64] ; 0x40
- bl FUN_03800830
- ldr r0, [r5]
- cmp r0, #0
- bne _038001B0
- add r7, r7, r4
- sub r6, r6, r4
-_038001A8:
- cmp r6, #0
- bne _0380016C
-_038001B0:
- ldmia sp!, {r4, r5, r6, r7, r8, lr}
- bx lr
-_038001B8: .word cardi_common
-
- arm_func_start CARDi_VerifyBackupCore
-CARDi_VerifyBackupCore: ; 0x038001BC
- stmdb sp!, {r4, r5, r6, r7, lr}
- sub sp, sp, #4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_03800780
- cmp r0, #0
- beq _0380024C
- ldr r0, _03800258 ; =cardi_common
- ldr r4, [r0]
- mov r1, #1
- ldr r0, _0380025C ; =_03809764
- str r1, [r0, #12]
- ldr r0, [r4, #36] ; 0x24
- add r0, r0, #1
- add r0, r0, r5
- bl FUN_038008B4
- mov r0, r7
- mov r1, #3
- bl FUN_03800508
- mov r0, r6
- mov r1, #0
- mov r2, r5
- ldr r3, _03800260 ; =_038005F8
- bl FUN_038006F0
- mov r0, #0
- mov r1, r0
- bl FUN_03800830
- ldr r0, [r4]
- cmp r0, #0
- bne _0380024C
- ldr r0, _0380025C ; =_03809764
- ldr r0, [r0, #12]
- cmp r0, #0
- moveq r0, #1
- streq r0, [r4]
-_0380024C:
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, lr}
- bx lr
-_03800258: .word cardi_common
-_0380025C: .word _03809764
-_03800260: .word _038005F8
-
- arm_func_start CARDi_WriteBackupCore
-CARDi_WriteBackupCore: ; 0x03800264
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- sub sp, sp, #4
- mov sl, r0
- mov r9, r1
- mov r8, r2
- bl FUN_03800780
- cmp r0, #0
- beq _03800314
- ldr r0, _03800320 ; =cardi_common
- ldr r7, [r0]
- ldr r6, [r7, #32]
- sub r4, r6, #1
- mov fp, #10
- mov r0, #0
- str r0, [sp]
- b _0380030C
-_038002A4:
- and r0, sl, r4
- sub r5, r6, r0
- cmp r5, r8
- movhi r5, r8
- bl FUN_038005B4
- ldr r0, [r7, #36] ; 0x24
- add r0, r0, #1
- add r0, r0, r5
- bl FUN_038008B4
- mov r0, sl
- mov r1, fp
- bl FUN_03800508
- mov r0, r9
- ldr r1, [sp]
- mov r2, r5
- ldr r3, _03800324 ; =_03800660
- bl FUN_038006F0
- ldr r0, [r7, #44] ; 0x2c
- ldr r1, [r7, #48] ; 0x30
- bl FUN_03800830
- ldr r0, [r7]
- cmp r0, #0
- bne _03800314
- add r9, r9, r5
- add sl, sl, r5
- sub r8, r8, r5
-_0380030C:
- cmp r8, #0
- bne _038002A4
-_03800314:
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- bx lr
-_03800320: .word cardi_common
-_03800324: .word _03800660
-
- arm_func_start CARDi_ProgramBackupCore
-CARDi_ProgramBackupCore: ; 0x03800328
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- sub sp, sp, #4
- mov sl, r0
- mov r9, r1
- mov r8, r2
- bl FUN_03800780
- cmp r0, #0
- beq _038003D8
- ldr r0, _038003E4 ; =cardi_common
- ldr r7, [r0]
- ldr r6, [r7, #32]
- sub r4, r6, #1
- mov r0, #2
- str r0, [sp]
- mov fp, #0
- b _038003D0
-_03800368:
- and r0, sl, r4
- sub r5, r6, r0
- cmp r5, r8
- movhi r5, r8
- bl FUN_038005B4
- ldr r0, [r7, #36] ; 0x24
- add r0, r0, #1
- add r0, r0, r5
- bl FUN_038008B4
- mov r0, sl
- ldr r1, [sp]
- bl FUN_03800508
- mov r0, r9
- mov r1, fp
- mov r2, r5
- ldr r3, _038003E8 ; =_03800660
- bl FUN_038006F0
- ldr r0, [r7, #40] ; 0x28
- mov r1, fp
- bl FUN_03800830
- ldr r0, [r7]
- cmp r0, #0
- bne _038003D8
- add r9, r9, r5
- add sl, sl, r5
- sub r8, r8, r5
-_038003D0:
- cmp r8, #0
- bne _03800368
-_038003D8:
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- bx lr
-_038003E4: .word cardi_common
-_038003E8: .word _03800660
-
- arm_func_start CARDi_ReadBackupCore
-CARDi_ReadBackupCore: ; 0x038003EC
- stmdb sp!, {r4, r5, r6, lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_03800780
- cmp r0, #0
- beq _0380044C
- ldr r0, _03800454 ; =cardi_common
- ldr r0, [r0]
- ldr r0, [r0, #36] ; 0x24
- add r0, r0, #1
- add r0, r0, r4
- bl FUN_038008B4
- mov r0, r6
- mov r1, #3
- bl FUN_03800508
- mov r0, #0
- mov r1, r5
- mov r2, r4
- ldr r3, _03800458 ; =_038006AC
- bl FUN_038006F0
- mov r0, #0
- mov r1, r0
- bl FUN_03800830
-_0380044C:
- ldmia sp!, {r4, r5, r6, lr}
- bx lr
-_03800454: .word cardi_common
-_03800458: .word _038006AC
-
- arm_func_start CARDi_InitStatusRegister
-CARDi_InitStatusRegister: ; 0x0380045C
- stmdb sp!, {r4, lr}
- sub sp, sp, #8
- ldr r0, _038004F8 ; =cardi_common
- ldr r0, [r0]
- ldrb r4, [r0, #72] ; 0x48
- cmp r4, #255 ; 0xff
- beq _038004EC
- ldr r0, _038004FC ; =_03809760
- ldr r0, [r0]
- cmp r0, #0
- bne _038004EC
- mov r0, #5
- strb r0, [sp]
- mov r0, #2
- bl FUN_038008B4
- add r0, sp, #0
- mov r1, #0
- mov r2, #1
- ldr r3, _03800500 ; =_03800660
- bl FUN_038006F0
- mov r0, #0
- add r1, sp, #1
- mov r2, #1
- ldr r3, _03800504 ; =_038006AC
- bl FUN_038006F0
- mov r0, #0
- mov r1, r0
- bl FUN_03800830
- ldrb r0, [sp, #1]
- cmp r0, r4
- beq _038004E0
- mov r0, r4
- bl CARDi_SetWriteProtectCore
-_038004E0:
- mov r1, #1
- ldr r0, _038004FC ; =_03809760
- str r1, [r0]
-_038004EC:
- add sp, sp, #8
- ldmia sp!, {r4, lr}
- bx lr
-_038004F8: .word cardi_common
-_038004FC: .word _03809760
-_03800500: .word _03800660
-_03800504: .word _038006AC
-
- arm_func_start FUN_03800508
-FUN_03800508: ; 0x03800508
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r2, _038005AC ; =cardi_common
- ldr r2, [r2]
- ldr r2, [r2, #36] ; 0x24
- cmp r2, #1
- beq _03800538
- cmp r2, #2
- beq _03800554
- cmp r2, #3
- beq _0380056C
- b _0380058C
-_03800538:
- and r3, r0, #255 ; 0xff
- mov r0, r0, lsr #5
- and r0, r0, #8
- orr r0, r1, r0
- orr r0, r0, r3, lsl #8
- str r0, [sp]
- b _0380058C
-_03800554:
- and r3, r0, #255 ; 0xff
- and r0, r0, #65280 ; 0xff00
- orr r0, r1, r0
- orr r0, r0, r3, lsl #16
- str r0, [sp]
- b _0380058C
-_0380056C:
- and ip, r0, #255 ; 0xff
- and r3, r0, #65280 ; 0xff00
- mov r0, r0, lsr #8
- and r0, r0, #65280 ; 0xff00
- orr r0, r1, r0
- orr r0, r0, r3, lsl #8
- orr r0, r0, ip, lsl #24
- str r0, [sp]
-_0380058C:
- add r0, sp, #0
- mov r1, #0
- add r2, r2, #1
- ldr r3, _038005B0 ; =_03800660
- bl FUN_038006F0
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_038005AC: .word cardi_common
-_038005B0: .word _03800660
-
- arm_func_start FUN_038005B4
-FUN_038005B4: ; 0x038005B4
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r0, #1
- bl FUN_038008B4
- ldr r0, _038005F0 ; =_038072C0
- mov r1, #0
- mov r2, #1
- ldr r3, _038005F4 ; =_03800660
- bl FUN_038006F0
- mov r0, #0
- mov r1, r0
- bl FUN_03800830
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_038005F0: .word _038072C0
-_038005F4: .word _03800660
-_038005F8:
- mov r2, #0
- ldr r1, _03800658 ; =0x040001A2
- strh r2, [r1]
- ldr r2, _0380065C ; =0x040001A0
-_03800608:
- ldrh r1, [r2]
- ands r1, r1, #128 ; 0x80
- bne _03800608
- ldr r1, _03800658 ; =0x040001A2
- ldrh r1, [r1]
- and r2, r1, #255 ; 0xff
- ldr r1, [r0, #4]
- ldrb r1, [r1]
- cmp r2, r1
- beq _03800648
- mov r1, #0
- str r1, [r0, #12]
- ldr r1, [r0]
- cmp r1, #1
- movhi r1, #1
- strhi r1, [r0]
-_03800648:
- ldr r1, [r0, #4]
- add r1, r1, #1
- str r1, [r0, #4]
- bx lr
-_03800658: .word 0x040001A2
-_0380065C: .word 0x040001A0
-_03800660:
- sub sp, sp, #8
- ldr r1, [r0, #4]
- ldrb r2, [r1]
- ldr r1, _038006A4 ; =0x040001A2
- strh r2, [r1]
- ldr r1, [r0, #4]
- add r1, r1, #1
- str r1, [r0, #4]
- ldr r1, _038006A8 ; =0x040001A0
-_03800684:
- ldrh r0, [r1]
- ands r0, r0, #128 ; 0x80
- bne _03800684
- ldr r0, _038006A4 ; =0x040001A2
- ldrh r0, [r0]
- strh r0, [sp]
- add sp, sp, #8
- bx lr
-_038006A4: .word 0x040001A2
-_038006A8: .word 0x040001A0
-_038006AC:
- mov r2, #0
- ldr r1, _038006E8 ; =0x040001A2
- strh r2, [r1]
- ldr r2, _038006EC ; =0x040001A0
-_038006BC:
- ldrh r1, [r2]
- ands r1, r1, #128 ; 0x80
- bne _038006BC
- ldr r1, _038006E8 ; =0x040001A2
- ldrh r2, [r1]
- ldr r1, [r0, #8]
- strb r2, [r1]
- ldr r1, [r0, #8]
- add r1, r1, #1
- str r1, [r0, #8]
- bx lr
-_038006E8: .word 0x040001A2
-_038006EC: .word 0x040001A0
-
- arm_func_start FUN_038006F0
-FUN_038006F0: ; 0x038006F0
- stmdb sp!, {r4, r5, r6, r7, r8, lr}
- mov r7, r2
- mov r6, r3
- ldr r5, _03800774 ; =_03809764
- str r0, [r5, #4]
- str r1, [r5, #8]
- ldr r0, _03800778 ; =0x0000A040
- ldr r4, _0380077C ; =0x040001A0
- strh r0, [r4]
- mov r8, #40960 ; 0xa000
- b _03800750
-_0380071C:
- ldr r0, [r5]
- sub r0, r0, #1
- str r0, [r5]
- ldr r0, [r5]
- cmp r0, #0
- streqh r8, [r4]
-_03800734:
- ldrh r0, [r4]
- ands r0, r0, #128 ; 0x80
- bne _03800734
- mov r0, r5
- mov lr, pc
- bx r6
- sub r7, r7, #1
-_03800750:
- cmp r7, #0
- bne _0380071C
- ldr r0, [r5]
- cmp r0, #0
- moveq r1, #0
- ldreq r0, _0380077C ; =0x040001A0
- streqh r1, [r0]
- ldmia sp!, {r4, r5, r6, r7, r8, lr}
- bx lr
-_03800774: .word _03809764
-_03800778: .word 0x0000A040
-_0380077C: .word 0x040001A0
-
- arm_func_start FUN_03800780
-FUN_03800780: ; 0x03800780
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r0, #0
- mov r1, #50 ; 0x32
- bl FUN_03800830
- ldr r0, _038007C0 ; =cardi_common
- ldr r1, [r0]
- ldr r0, [r1]
- cmp r0, #4
- moveq r0, #6
- streq r0, [r1]
- moveq r0, #0
- movne r0, #1
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_038007C0: .word cardi_common
-
- arm_func_start FUN_038007C4
-FUN_038007C4: ; 0x038007C4
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r0, #2
- bl FUN_038008B4
- ldr r0, _03800824 ; =_038072C4
- mov r1, #0
- mov r2, #1
- ldr r3, _03800828 ; =_03800660
- bl FUN_038006F0
- mov r0, #0
- add r1, sp, #0
- mov r2, #1
- ldr r3, _0380082C ; =_038006AC
- bl FUN_038006F0
- mov r0, #0
- mov r1, r0
- bl FUN_03800830
- ldrb r0, [sp]
- ands r0, r0, #1
- moveq r0, #1
- movne r0, #0
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800824: .word _038072C4
-_03800828: .word _03800660
-_0380082C: .word _038006AC
-
- arm_func_start FUN_03800830
-FUN_03800830: ; 0x03800830
- stmdb sp!, {r4, r5, r6, lr}
- mov r5, r0
- mov r4, r1
- adds r1, r5, r4
- beq _038008A8
- cmp r5, #0
- beq _03800850
- bl OS_Sleep
-_03800850:
- cmp r4, #0
- beq _03800890
- sub r6, r4, r5
- mov r4, #5
- b _0380087C
-_03800864:
- cmp r6, #5
- movlt r5, r6
- movge r5, r4
- mov r0, r5
- bl OS_Sleep
- sub r6, r6, r5
-_0380087C:
- bl FUN_038007C4
- cmp r0, #0
- bne _03800890
- cmp r6, #0
- bgt _03800864
-_03800890:
- bl FUN_038007C4
- cmp r0, #0
- moveq r1, #4
- ldreq r0, _038008B0 ; =cardi_common
- ldreq r0, [r0]
- streq r1, [r0]
-_038008A8:
- ldmia sp!, {r4, r5, r6, lr}
- bx lr
-_038008B0: .word cardi_common
-
- arm_func_start FUN_038008B4
-FUN_038008B4: ; 0x038008B4
- ldr r1, _038008C0 ; =_03809764
- str r0, [r1]
- bx lr
-_038008C0: .word _03809764
-
- arm_func_start CARDi_GetRomAccessor
-CARDi_GetRomAccessor: ; 0x038008C4
- ldr r0, _038008CC ; =_03800A7C
- bx lr
-_038008CC: .word _03800A7C
-
- arm_func_start CARD_Init
-CARD_Init: ; 0x038008D0
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r2, _03800940 ; =cardi_common
- ldr r0, [r2, #252] ; 0xfc
- cmp r0, #0
- bne _03800934
- mov r0, #1
- str r0, [r2, #252] ; 0xfc
- mov r1, #0
- str r1, [r2, #40] ; 0x28
- ldr r0, [r2, #40] ; 0x28
- str r0, [r2, #36] ; 0x24
- ldr r0, [r2, #36] ; 0x24
- str r0, [r2, #32]
- mvn r0, #0
- str r0, [r2, #44] ; 0x2c
- str r1, [r2, #60] ; 0x3c
- str r1, [r2, #64] ; 0x40
- ldr r0, _03800944 ; =cardi_rom_base
- str r1, [r0]
- bl CARDi_InitCommon
- bl CARDi_GetRomAccessor
- ldr r1, _03800948 ; =rom_stat
- str r0, [r1]
- bl CARD_InitPulledOutCallback
-_03800934:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800940: .word cardi_common
-_03800944: .word cardi_rom_base
-_03800948: .word rom_stat
-
- arm_func_start CARDi_ReadRomID
-CARDi_ReadRomID: ; 0x0380094C
- stmdb sp!, {r4, r5, r6, r7, r8, lr}
- ldr r5, _03800A10 ; =cardi_common
- bl OS_DisableInterrupts
- mov r4, r0
- add r6, r5, #244 ; 0xf4
- b _0380096C
-_03800964:
- mov r0, r6
- bl OS_SleepThread
-_0380096C:
- ldr r0, [r5, #252] ; 0xfc
- ands r0, r0, #4
- bne _03800964
- ldr r0, [r5, #252] ; 0xfc
- orr r0, r0, #4
- str r0, [r5, #252] ; 0xfc
- mov r0, #0
- str r0, [r5, #60] ; 0x3c
- str r0, [r5, #64] ; 0x40
- mov r0, r4
- bl OS_RestoreInterrupts
- bl CARDi_ReadRomIDCore
- mov r8, r0
- ldr r7, _03800A10 ; =cardi_common
- mov r1, #0
- ldr r0, [r7]
- str r1, [r0]
- ldr r6, [r7, #60] ; 0x3c
- ldr r5, [r7, #64] ; 0x40
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, [r7, #252] ; 0xfc
- bic r0, r0, #76 ; 0x4c
- str r0, [r7, #252] ; 0xfc
- add r0, r7, #244 ; 0xf4
- bl OS_WakeupThread
- ldr r0, [r7, #252] ; 0xfc
- ands r0, r0, #16
- beq _038009E8
- add r0, r7, #72 ; 0x48
- bl OS_WakeupThreadDirect
-_038009E8:
- mov r0, r4
- bl OS_RestoreInterrupts
- cmp r6, #0
- beq _03800A04
- mov r0, r5
- mov lr, pc
- bx r6
-_03800A04:
- mov r0, r8
- ldmia sp!, {r4, r5, r6, r7, r8, lr}
- bx lr
-_03800A10: .word cardi_common
-
- arm_func_start CARDi_ReadRomIDCore
-CARDi_ReadRomIDCore: ; 0x03800A14
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r0, #-1207959552 ; 0xb8000000
- mov r1, #0
- bl FUN_03800A80
- ldr r0, _03800A70 ; =cardi_rom_header_addr
- ldr r0, [r0]
- ldr r0, [r0, #96] ; 0x60
- bic r0, r0, #117440512 ; 0x7000000
- orr r1, r0, #-1493172224 ; 0xa7000000
- mov r0, #8192 ; 0x2000
- rsb r0, r0, #0
- and r0, r1, r0
- ldr r1, _03800A74 ; =0x040001A4
- str r0, [r1]
-_03800A50:
- ldr r0, [r1]
- ands r0, r0, #8388608 ; 0x800000
- beq _03800A50
- ldr r0, _03800A78 ; =0x04100010
- ldr r0, [r0]
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800A70: .word cardi_rom_header_addr
-_03800A74: .word 0x040001A4
-_03800A78: .word 0x04100010
-_03800A7C:
- bx lr
-
- arm_func_start FUN_03800A80
-FUN_03800A80: ; 0x03800A80
- ldr r3, _03800AF8 ; =0x040001A4
-_03800A84:
- ldr r2, [r3]
- ands r2, r2, #-2147483648 ; 0x80000000
- bne _03800A84
- mov r3, #192 ; 0xc0
- ldr r2, _03800AFC ; =0x040001A1
- strb r3, [r2]
- mov r3, r0, lsr #24
- ldr r2, _03800B00 ; =0x040001A8
- strb r3, [r2]
- mov r3, r0, lsr #16
- ldr r2, _03800B04 ; =0x040001A9
- strb r3, [r2]
- mov r3, r0, lsr #8
- ldr r2, _03800B08 ; =0x040001AA
- strb r3, [r2]
- ldr r2, _03800B0C ; =0x040001AB
- strb r0, [r2]
- mov r2, r1, lsr #24
- ldr r0, _03800B10 ; =0x040001AC
- strb r2, [r0]
- mov r2, r1, lsr #16
- ldr r0, _03800B14 ; =0x040001AD
- strb r2, [r0]
- mov r2, r1, lsr #8
- ldr r0, _03800B18 ; =0x040001AE
- strb r2, [r0]
- ldr r0, _03800B1C ; =0x040001AF
- strb r1, [r0]
- bx lr
-_03800AF8: .word 0x040001A4
-_03800AFC: .word 0x040001A1
-_03800B00: .word 0x040001A8
-_03800B04: .word 0x040001A9
-_03800B08: .word 0x040001AA
-_03800B0C: .word 0x040001AB
-_03800B10: .word 0x040001AC
-_03800B14: .word 0x040001AD
-_03800B18: .word 0x040001AE
-_03800B1C: .word 0x040001AF
-
- arm_func_start CARDi_TaskThread
-CARDi_TaskThread: ; 0x03800B20
- stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- sub sp, sp, #4
- ldr r9, _03800D28 ; =cardi_common
- add r5, r9, #72 ; 0x48
- mov r8, #0
- add r7, r9, #252 ; 0xfc
- mov r6, #1
- mov r4, #3
- mov fp, #11
-_03800B44:
- mov sl, r8
- bl OS_DisableInterrupts
- str r0, [sp]
-_03800B50:
- ldr r0, [r9, #252] ; 0xfc
- ands r0, r0, #4
- bne _03800B88
- ldr r0, [r9, #252] ; 0xfc
- ands r0, r0, #16
- beq _03800B94
- ldr r0, [r7]
- orr r0, r0, #4
- str r0, [r7]
- ldr r0, [r7]
- bic r0, r0, #16
- str r0, [r7]
- mov sl, r6
- b _03800BA4
-_03800B88:
- ldr r0, [r9, #252] ; 0xfc
- ands r0, r0, #8
- bne _03800BA4
-_03800B94:
- str r5, [r9, #236] ; 0xec
- mov r0, r8
- bl OS_SleepThread
- b _03800B50
-_03800BA4:
- ldr r0, [sp]
- bl OS_RestoreInterrupts
- cmp sl, #0
- beq _03800D14
- ldr r0, [r9]
- str r8, [r0]
- ldr r2, [r9]
- ldr r1, [r2, #76] ; 0x4c
- ldr r0, [r9, #4]
- mov r0, r6, lsl r0
- ands r0, r1, r0
- streq r4, [r2]
- ldr r0, [r9, #4]
- cmp r0, #12
- addls pc, pc, r0, lsl #2
- b _03800CB8
- b _03800CC0
- b _03800CC0
- b _03800C18
- b _03800C20
- b _03800C30
- b _03800CB8
- b _03800C3C
- b _03800C54
- b _03800C6C
- b _03800C84
- b _03800CB8
- b _03800C9C
- b _03800CB0
-_03800C18:
- bl CARDi_InitStatusRegister
- b _03800CC0
-_03800C20:
- bl CARDi_ReadRomIDCore
- ldr r1, [r9]
- str r0, [r1, #8]
- b _03800CC0
-_03800C30:
- ldr r0, [r9]
- str r4, [r0]
- b _03800CC0
-_03800C3C:
- ldr r2, [r9]
- ldr r0, [r2, #12]
- ldr r1, [r2, #16]
- ldr r2, [r2, #20]
- bl CARDi_ReadBackupCore
- b _03800CC0
-_03800C54:
- ldr r2, [r9]
- ldr r0, [r2, #16]
- ldr r1, [r2, #12]
- ldr r2, [r2, #20]
- bl CARDi_WriteBackupCore
- b _03800CC0
-_03800C6C:
- ldr r2, [r9]
- ldr r0, [r2, #16]
- ldr r1, [r2, #12]
- ldr r2, [r2, #20]
- bl CARDi_ProgramBackupCore
- b _03800CC0
-_03800C84:
- ldr r2, [r9]
- ldr r0, [r2, #16]
- ldr r1, [r2, #12]
- ldr r2, [r2, #20]
- bl CARDi_VerifyBackupCore
- b _03800CC0
-_03800C9C:
- ldr r1, [r9]
- ldr r0, [r1, #16]
- ldr r1, [r1, #20]
- bl CARDi_EraseBackupSectorCore
- b _03800CC0
-_03800CB0:
- bl CARDi_EraseChipCore
- b _03800CC0
-_03800CB8:
- ldr r0, [r9]
- str r4, [r0]
-_03800CC0:
- mov r0, fp
- mov r1, r6
- mov r2, r6
- bl PXI_SendWordByFifo
- cmp r0, #0
- blt _03800CC0
- bl OS_DisableInterrupts
- mov sl, r0
- ldr r0, [r9, #252] ; 0xfc
- bic r0, r0, #76 ; 0x4c
- str r0, [r9, #252] ; 0xfc
- add r0, r9, #244 ; 0xf4
- bl OS_WakeupThread
- ldr r0, [r9, #252] ; 0xfc
- ands r0, r0, #16
- beq _03800D08
- mov r0, r5
- bl OS_WakeupThreadDirect
-_03800D08:
- mov r0, sl
- bl OS_RestoreInterrupts
- b _03800B44
-_03800D14:
- mov r0, r9
- ldr r1, [r9, #68] ; 0x44
- mov lr, pc
- bx r1
- b _03800B44
-_03800D28: .word cardi_common
-
- arm_func_start CARDi_OnFifoRecv
-CARDi_OnFifoRecv: ; 0x03800D2C
- stmfd sp!, {lr}
- sub sp, sp, #4
- cmp r0, #11
- bne _03800DFC
- cmp r2, #0
- beq _03800DFC
- ldr r0, _03800E08 ; =cardi_common
- ldr r2, [r0, #8]
- cmp r2, #0
- streq r1, [r0, #4]
- ldr r2, [r0, #4]
- cmp r2, #12
- addls pc, pc, r2, lsl #2
- b _03800DC8
- b _03800D98
- b _03800DC8
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
- b _03800DBC
-_03800D98:
- ldr r2, [r0, #8]
- cmp r2, #0
- beq _03800DC8
- cmp r2, #1
- streq r1, [r0]
- ldreq r1, [r0, #252] ; 0xfc
- orreq r1, r1, #16
- streq r1, [r0, #252] ; 0xfc
- b _03800DC8
-_03800DBC:
- ldr r1, [r0, #252] ; 0xfc
- orr r1, r1, #16
- str r1, [r0, #252] ; 0xfc
-_03800DC8:
- ldr r1, [r0, #252] ; 0xfc
- ands r1, r1, #16
- ldreq r1, [r0, #8]
- addeq r1, r1, #1
- streq r1, [r0, #8]
- beq _03800DFC
- mov r1, #0
- str r1, [r0, #8]
- ldr r1, [r0, #252] ; 0xfc
- ands r1, r1, #4
- ldrne r0, [r0, #236] ; 0xec
- addeq r0, r0, #72 ; 0x48
- bl OS_WakeupThreadDirect
-_03800DFC:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800E08: .word cardi_common
-
- arm_func_start FUN_03800E0C
-FUN_03800E0C: ; 0x03800E0C
- stmdb sp!, {r4, r5, r6, r7, lr}
- sub sp, sp, #4
- mov r7, r0
- mov r6, r1
- mov r5, #14
- mov r4, #0
- b _03800E30
-_03800E28:
- mov r0, r6
- bl FUN_037F8CB4
-_03800E30:
- mov r0, r5
- mov r1, r7
- mov r2, r4
- bl PXI_SendWordByFifo
- cmp r0, #0
- bne _03800E28
- add sp, sp, #4
- ldmia sp!, {r4, r5, r6, r7, lr}
- bx lr
-
- arm_func_start FUN_03800E54
-FUN_03800E54: ; 0x03800E54
- stmfd sp!, {lr}
- sub sp, sp, #4
- mov r0, #0
- bl CTRDG_VibPulseEdgeUpdate
- bl SND_BeginSleep
- bl WVR_Shutdown
- bl OS_Terminate
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CARD_CheckPullOut_Polling
-CARD_CheckPullOut_Polling: ; 0x03800E7C
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r0, _03800F50 ; =_038099A0
- ldr r0, [r0]
- cmp r0, #0
- bne _03800F44
- ldr r0, _03800F54 ; =0x027FFC40
- ldrh r0, [r0]
- cmp r0, #2
- beq _03800F44
- ldr r1, _03800F58 ; =_03807668
- ldr r3, [r1]
- mvn r0, #0
- cmp r3, r0
- ldreq r0, _03800F5C ; =0x027FFC3C
- ldreq r0, [r0]
- addeq r0, r0, #10
- streq r0, [r1]
- beq _03800F44
- ldr r2, _03800F5C ; =0x027FFC3C
- ldr r0, [r2]
- cmp r0, r3
- bcc _03800F44
- ldr r0, [r2]
- add r0, r0, #10
- str r0, [r1]
- bl CARD_IsPulledOut
- cmp r0, #0
- beq _03800F1C
- mov r1, #1
- ldr r0, _03800F50 ; =_038099A0
- str r1, [r0]
- bl CARD_GetRomHeader
- ldr r0, [r0, #12]
- cmp r0, #0
- bne _03800F1C
- ldr r0, _03800F60 ; =_0380766C
- ldr r0, [r0]
- cmp r0, #0
- bne _03800F44
-_03800F1C:
- mov r1, #0
- ldr r0, _03800F60 ; =_0380766C
- str r1, [r0]
- ldr r0, _03800F50 ; =_038099A0
- ldr r0, [r0]
- cmp r0, #0
- beq _03800F44
- mov r0, #17
- mov r1, #100 ; 0x64
- bl FUN_03800E0C
-_03800F44:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800F50: .word _038099A0
-_03800F54: .word 0x027FFC40
-_03800F58: .word _03807668
-_03800F5C: .word 0x027FFC3C
-_03800F60: .word _0380766C
-
- arm_func_start CARD_IsCardIreqLo
-CARD_IsCardIreqLo: ; 0x03800F64
- mov r2, #1
- mov r0, r2
- ldr r1, _03800F88 ; =0x04000214
- ldr r1, [r1]
- ands r1, r1, #1048576 ; 0x100000
- movne r0, #0
- ldrne r1, _03800F8C ; =_038099A8
- strne r2, [r1]
- bx lr
-_03800F88: .word 0x04000214
-_03800F8C: .word _038099A8
-
- arm_func_start CARD_CompareCardID
-CARD_CompareCardID: ; 0x03800F90
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r0, _03800FE8 ; =0x027FFC10
- ldrh r0, [r0]
- cmp r0, #0
- ldreq r0, _03800FEC ; =0x027FF800
- ldrne r0, _03800FF0 ; =0x027FFC00
- ldr r0, [r0]
- str r0, [sp]
- bl CARDi_ReadRomID
- ldr r1, [sp]
- cmp r0, r1
- moveq r0, #1
- movne r0, #0
- cmp r0, #0
- moveq r2, #1
- movne r2, #0
- ldr r1, _03800FF4 ; =_038099A8
- str r2, [r1]
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03800FE8: .word 0x027FFC10
-_03800FEC: .word 0x027FF800
-_03800FF0: .word 0x027FFC00
-_03800FF4: .word _038099A8
-
- arm_func_start CARD_IsPulledOut
-CARD_IsPulledOut: ; 0x03800FF8
- stmfd sp!, {lr}
- sub sp, sp, #4
- ldr r0, _03801040 ; =_038099A8
- ldr r0, [r0]
- cmp r0, #0
- bne _0380102C
- ldr r0, _03801044 ; =0x027FFC1F
- ldrb r0, [r0]
- ands r0, r0, #1
- beq _03801028
- bl CARD_CompareCardID
- b _0380102C
-_03801028:
- bl CARD_IsCardIreqLo
-_0380102C:
- ldr r0, _03801040 ; =_038099A8
- ldr r0, [r0]
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-_03801040: .word _038099A8
-_03801044: .word 0x027FFC1F
-
- arm_func_start FUN_03801048
-FUN_03801048: ; 0x03801048
- stmfd sp!, {lr}
- sub sp, sp, #4
- and r0, r1, #63 ; 0x3f
- cmp r0, #1
- bne _03801064
- bl FUN_03800E54
- b _03801068
-_03801064:
- bl OS_Terminate
-_03801068:
- add sp, sp, #4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start CARD_InitPulledOutCallback
-CARD_InitPulledOutCallback: ; 0x03801074
- stmdb sp!, {r4, r5, lr}
- sub sp, sp, #4
- ldr r0, _038010CC ; =_038099A4
- ldr r1, [r0]
- cmp r1, #0
- bne _038010C0
- mov r1, #1
- str r1, [r0]
- bl PXI_Init
- mov r5, #14
- mov r4, #0
-_038010A0:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
- cmp r0, #0
- beq _038010A0
- mov r0, #14
- ldr r1, _038010D0 ; =FUN_03801048
- bl PXI_SetFifoRecvCallback
-_038010C0:
- add sp, sp, #4
- ldmia sp!, {r4, r5, lr}
- bx lr
-_038010CC: .word _038099A4
-_038010D0: .word FUN_03801048
- .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/asm/dtcm2.s b/arm7/asm/wram2.s
index 57fd39e1..57fd39e1 100644
--- a/arm7/asm/dtcm2.s
+++ b/arm7/asm/wram2.s
diff --git a/arm7/asm/dtcm_bss.s b/arm7/asm/wram_bss.s
index e485943f..e342bf0c 100644
--- a/arm7/asm/dtcm_bss.s
+++ b/arm7/asm/wram_bss.s
@@ -2,46 +2,6 @@
.include "global.inc"
.section .bss
- .global _0380912C
-_0380912C: ;0x0380912C
- .space 0x03809140 - 0x0380912C
-
- .global cardi_common
-cardi_common: ;0x03809140
- .space 0x03809188 - 0x03809140
-
- .global _03809188
-_03809188: ;0x03809188
- .space 0x03809760 - 0x03809188
-
- .global _03809760
-_03809760: ;0x03809760
- .space 0x03809764 - 0x03809760
-
- .global _03809764
-_03809764: ;0x03809764
- .space 0x03809774 - 0x03809764
-
- .global cardi_rom_base
-cardi_rom_base: ;0x03809774
- .space 0x03809780 - 0x03809774
-
- .global rom_stat
-rom_stat: ;0x03809780
- .space 0x038099A0 - 0x03809780
-
- .global _038099A0
-_038099A0: ;0x038099A0
- .space 0x038099A4 - 0x038099A0
-
- .global _038099A4
-_038099A4: ;0x038099A4
- .space 0x038099A8 - 0x038099A4
-
- .global _038099A8
-_038099A8: ;0x038099A8
- .space 0x038099AC - 0x038099A8
-
.global _038099AC
_038099AC: ;0x038099AC
.space 0x038099B0 - 0x038099AC
diff --git a/arm7/asm/dtcm_data.s b/arm7/asm/wram_data.s
index 3802f4c8..05fd5b66 100644
--- a/arm7/asm/dtcm_data.s
+++ b/arm7/asm/wram_data.s
@@ -3,62 +3,6 @@
.section .data
- .global _038075E4
-_038075E4:
- .word 0x00090008
- .word 0x000B000A
- .word 0x00040003
- .word 0x00060005
- .word 0x00000000
-
- .global OS_IRQTable
-OS_IRQTable:
- .word OSi_IrqVBlank
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OSi_IrqTimer0
- .word OSi_IrqTimer1
- .word OSi_IrqTimer2
- .word OSi_IrqTimer3
- .word OS_IrqDummy
- .word OSi_IrqDma0
- .word OSi_IrqDma1
- .word OSi_IrqDma2
- .word OSi_IrqDma3
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
- .word OS_IrqDummy
-
- .global sMasterPan
-sMasterPan:
- .word 0xFFFFFFFF
-
- .global _03807660
-_03807660:
- .word 0x12345678
-
- .global cardi_rom_header_addr
-cardi_rom_header_addr:
- .word 0x027FFE00
-
- .global _03807668
-_03807668:
- .word 0xFFFFFFFF
-
- .global _0380766C
-_0380766C:
- .word 0x00000001
-
.global PMi_LEDStatus
PMi_LEDStatus:
.word 0x00000001
diff --git a/arm7/global.inc b/arm7/global.inc
index c3bad2c7..a732f7df 100644
--- a/arm7/global.inc
+++ b/arm7/global.inc
@@ -13,7 +13,23 @@
; .itcm
.extern WVR_ShelterExtWram
-; .dtcm
+; .wram
+.extern CARDi_EraseBackupSectorCore
+.extern CARDi_EraseChipCore
+.extern CARDi_InitCommon
+.extern CARDi_InitStatusRegister
+.extern CARDi_OnFifoRecv
+.extern CARDi_ProgramBackupCore
+.extern CARDi_ReadBackupCore
+.extern CARDi_ReadRomID
+.extern CARDi_ReadRomIDCore
+.extern CARDi_TaskThread
+.extern CARDi_VerifyBackupCore
+.extern CARDi_WriteBackupCore
+.extern CARD_GetRomHeader
+.extern CARD_Init
+.extern CARD_InitPulledOutCallback
+.extern FUN_03800E0C
.extern OS_IrqHandler_ThreadSwitch
.extern OSi_EnterTimerCallback
.extern OSi_IrqVBlank