summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf28
-rw-r--r--arm9/modules/50/asm/module_50.s409
2 files changed, 433 insertions, 4 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 8ba3f7a7..2755047d 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -1983,10 +1983,21 @@ SECTIONS {
SDK_OVERLAY.MODULE_49.BSS_SIZE = SDK_OVERLAY.MODULE_49.BSS_END - SDK_OVERLAY.MODULE_49.BSS_START;
} >> MODULE_49
- .MODULE.50: {
+ .MODULE.50 :
+ {
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_50.START = .;
- FILE_298600.o (.text) /* 0x294600 */
+ module_50.o (.text)
+ module_50.o (.rodata)
+ module_50.o (.init)
+ SDK_OVERLAY.MODULE_50.SINIT_START = .;
+ module_50.o (.ctor)
+ module_50.o (.sinit)
+ WRITEW 0;
+ SDK_OVERLAY.MODULE_50.SINIT_END = .;
+ . = ALIGN(32);
+ module_50.o (.sdata)
+ module_50.o (.data)
. = ALIGN(32);
SDK_OVERLAY.MODULE_50.END = .;
SDK_OVERLAY.MODULE_50.SIZE = SDK_OVERLAY.MODULE_50.END - SDK_OVERLAY.MODULE_50.START;
@@ -1996,7 +2007,8 @@ SECTIONS {
{
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_50.BSS_START = .;
- FILE_298600.o (.bss)
+ module_50.o (.sbss)
+ module_50.o (.bss)
. = ALIGN(32);
SDK_OVERLAY.MODULE_50.BSS_END = .;
SDK_OVERLAY.MODULE_50.BSS_SIZE = SDK_OVERLAY.MODULE_50.BSS_END - SDK_OVERLAY.MODULE_50.BSS_START;
@@ -3259,7 +3271,15 @@ SECTIONS {
WRITEW SDK_OVERLAY_MODULE_49_ID;
WRITEW 0;
- OVERLAY_TABLE(MODULE_50, 50)
+ WRITEW SDK_OVERLAY_MODULE_50_ID;
+ WRITEW SDK_OVERLAY.MODULE_50.START;
+ WRITEW SDK_OVERLAY.MODULE_50.SIZE;
+ WRITEW SDK_OVERLAY.MODULE_50.BSS_SIZE;
+ WRITEW SDK_OVERLAY.MODULE_50.SINIT_START;
+ WRITEW SDK_OVERLAY.MODULE_50.SINIT_END;
+ WRITEW SDK_OVERLAY_MODULE_50_ID;
+ WRITEW 0;
+
OVERLAY_TABLE(MODULE_51, 51)
OVERLAY_TABLE(MODULE_52, 52)
OVERLAY_TABLE(MODULE_53, 53)
diff --git a/arm9/modules/50/asm/module_50.s b/arm9/modules/50/asm/module_50.s
new file mode 100644
index 00000000..734eadea
--- /dev/null
+++ b/arm9/modules/50/asm/module_50.s
@@ -0,0 +1,409 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD50_02254840
+MOD50_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD50_02254854
+ ldr r1, _02254850 ; =MOD50_02254908
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD50_02254854
+_02254850: .word MOD50_02254908
+ thumb_func_end MOD50_02254840
+
+ thumb_func_start MOD50_02254854
+MOD50_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r7, r1, #0
+ mov r0, #8
+ mov r1, #0x10
+ str r2, [sp]
+ add r5, r3, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254894
+ ldr r2, [sp]
+ add r1, r7, #0
+ add r3, r5, #0
+ bl MOD50_0225489C
+ cmp r0, #0
+ beq _0225488E
+ ldr r0, _02254898 ; =MOD50_022548D4
+ add r1, r4, #0
+ mov r2, #1
+ bl FUN_0200CA44
+ cmp r0, #0
+ beq _0225488E
+ str r4, [r6]
+ str r5, [r4, #4]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_0225488E:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254894:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254898: .word MOD50_022548D4
+ thumb_func_end MOD50_02254854
+
+ thumb_func_start MOD50_0225489C
+MOD50_0225489C: ; 0x0225489C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r0, #8
+ add r1, r5, #4
+ bl MOD50_022549AC
+ cmp r0, #0
+ beq _022548BC
+ mov r0, #0
+ strb r0, [r5]
+ strb r0, [r5, #1]
+ strb r0, [r5, #2]
+ str r4, [r5, #0xc]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_022548BC:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD50_0225489C
+
+ thumb_func_start MOD50_022548C0
+MOD50_022548C0: ; 0x022548C0
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ bl MOD50_022549E0
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD50_022548C0
+
+ thumb_func_start MOD50_022548D4
+MOD50_022548D4: ; 0x022548D4
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ ldrb r1, [r4]
+ add r5, r0, #0
+ cmp r1, #3
+ bhs _02254900
+ lsl r2, r1, #2
+ ldr r1, _02254904 ; =0x02254B04
+ add r0, r4, #0
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _02254900
+ add r0, r4, #0
+ bl MOD50_022548C0
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0xc]
+ bl MOD20_022529A0
+_02254900:
+ pop {r3, r4, r5, pc}
+ nop
+_02254904: .word 0x02254B04
+ thumb_func_end MOD50_022548D4
+
+ thumb_func_start MOD50_02254908
+MOD50_02254908: ; 0x02254908
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD50_02254908
+
+ thumb_func_start MOD50_02254910
+MOD50_02254910: ; 0x02254910
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _02254918
+ b _0225491A
+_02254918:
+ mov r1, #2
+_0225491A:
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD50_02254910
+
+ thumb_func_start MOD50_02254924
+MOD50_02254924: ; 0x02254924
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254934
+ cmp r0, #1
+ beq _02254944
+ b _0225495E
+_02254934:
+ ldr r0, [r4, #8]
+ mov r1, #0
+ bl MOD50_022549F8
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _0225495E
+_02254944:
+ ldr r0, [r4, #8]
+ mov r1, #0
+ bl MOD50_02254A1C
+ cmp r0, #0
+ beq _0225495E
+ ldr r0, [r4, #0xc]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD50_02254910
+_0225495E:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD50_02254924
+
+ thumb_func_start MOD50_02254964
+MOD50_02254964: ; 0x02254964
+ push {r3, lr}
+ ldrb r1, [r0, #2]
+ cmp r1, #0
+ beq _02254972
+ mov r1, #2
+ bl MOD50_02254910
+_02254972:
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD50_02254964
+
+ thumb_func_start MOD50_02254978
+MOD50_02254978: ; 0x02254978
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254988
+ cmp r0, #1
+ beq _02254998
+ b _022549A6
+_02254988:
+ ldr r0, [r4, #8]
+ mov r1, #1
+ bl MOD50_022549F8
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _022549A6
+_02254998:
+ ldr r0, [r4, #8]
+ bl MOD50_02254A28
+ cmp r0, #0
+ beq _022549A6
+ mov r0, #1
+ pop {r4, pc}
+_022549A6:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD50_02254978
+
+ thumb_func_start MOD50_022549AC
+MOD50_022549AC: ; 0x022549AC
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x30
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _022549DA
+ add r0, #8
+ mov r1, #8
+ bl MOD20_022536F4
+ mov r0, #8
+ str r6, [r4]
+ bl FUN_02016B94
+ str r0, [r4, #4]
+ cmp r0, #0
+ beq _022549DA
+ str r4, [r5]
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+_022549DA:
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD50_022549AC
+
+ thumb_func_start MOD50_022549E0
+MOD50_022549E0: ; 0x022549E0
+ push {r4, lr}
+ add r4, r0, #0
+ beq _022549F6
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ beq _022549F0
+ bl FUN_02016A18
+_022549F0:
+ add r0, r4, #0
+ bl FUN_02016A18
+_022549F6:
+ pop {r4, pc}
+ thumb_func_end MOD50_022549E0
+
+ thumb_func_start MOD50_022549F8
+MOD50_022549F8: ; 0x022549F8
+ push {lr}
+ sub sp, #0xc
+ add r2, r0, #0
+ add r0, #8
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ ldr r0, _02254A18 ; =0x02254B2C
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02254A18: .word 0x02254B2C
+ thumb_func_end MOD50_022549F8
+
+ thumb_func_start MOD50_02254A1C
+MOD50_02254A1C: ; 0x02254A1C
+ ldr r3, _02254A24 ; =MOD20_02253794
+ add r0, #8
+ bx r3
+ nop
+_02254A24: .word MOD20_02253794
+ thumb_func_end MOD50_02254A1C
+
+ thumb_func_start MOD50_02254A28
+MOD50_02254A28: ; 0x02254A28
+ ldr r3, _02254A30 ; =MOD20_022537B8
+ add r0, #8
+ bx r3
+ nop
+_02254A30: .word MOD20_022537B8
+ thumb_func_end MOD50_02254A28
+
+ thumb_func_start MOD50_02254A34
+MOD50_02254A34: ; 0x02254A34
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD20_022538A0
+ add r0, #8
+ add r1, r4, #0
+ bl MOD20_02253888
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD50_02254A34
+
+ thumb_func_start MOD50_02254A48
+MOD50_02254A48: ; 0x02254A48
+ push {r4, r5, lr}
+ sub sp, #0x14
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [r5, #4]
+ ldr r2, _02254ADC ; =0x02254B10
+ mov r1, #6
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ mov r1, #8
+ str r1, [sp, #0xc]
+ ldr r2, [r5, #4]
+ mov r0, #0xc
+ mov r3, #6
+ bl FUN_0200687C
+ mov r2, #0
+ str r2, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r0, #0x18
+ str r0, [sp, #8]
+ str r2, [sp, #0xc]
+ ldr r0, [r5, #4]
+ mov r1, #6
+ add r3, r2, #0
+ bl FUN_02018540
+ mov r0, #0x20
+ str r0, [sp]
+ mov r0, #8
+ str r0, [sp, #4]
+ mov r0, #0xc
+ mov r1, #9
+ mov r2, #4
+ mov r3, #0
+ bl FUN_02006930
+ ldr r1, [r5]
+ ldr r0, [r5, #4]
+ ldr r1, [r1]
+ mov r2, #6
+ bl MOD20_02253AA4
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r1, _02254AE0 ; =0x04001000
+ ldr r0, _02254AE4 ; =0xFFFFE0FF
+ ldr r3, [r1]
+ ldr r2, [r1]
+ str r3, [sp, #0x10]
+ and r0, r2
+ lsl r2, r3, #0x13
+ lsr r3, r2, #0x1b
+ mov r2, #4
+ orr r2, r3
+ lsl r2, r2, #8
+ orr r0, r2
+ str r0, [r1]
+ add r0, r4, #0
+ bl MOD50_02254A34
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_02254ADC: .word 0x02254B10
+_02254AE0: .word 0x04001000
+_02254AE4: .word 0xFFFFE0FF
+ thumb_func_end MOD50_02254A48
+
+ thumb_func_start MOD50_02254AE8
+MOD50_02254AE8: ; 0x02254AE8
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0, #4]
+ mov r1, #6
+ bl FUN_020178A0
+ add r0, r4, #0
+ bl MOD50_02254A34
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD50_02254AE8
+
+ .section .rodata
+ ; 0x02254B04
+ .incbin "baserom.nds", 0x2988c4, 0x4C
+
+ .section .sinit
+ .word MOD50_02254840