summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/nonmatchings/FUN_02016C18.s652
-rw-r--r--arm9/asm/unk_02016B94.s752
-rw-r--r--arm9/global.inc7
-rw-r--r--arm9/src/unk_02016B94_c.c360
-rw-r--r--include/unk_02016B94.h64
-rwxr-xr-xtools/asm_processor/asm_processor.py14
7 files changed, 1093 insertions, 757 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 1abf5a52..1569f4ee 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -49,6 +49,7 @@ Static arm9
Object unk_02015E30.o
Object game_init.o
Object heap.o
+ Object unk_02016B94_c.o
Object unk_02016B94.o
Object unk_0201B1A8.o
Object unk_0201B4E8.o
diff --git a/arm9/asm/nonmatchings/FUN_02016C18.s b/arm9/asm/nonmatchings/FUN_02016C18.s
new file mode 100644
index 00000000..a18c549e
--- /dev/null
+++ b/arm9/asm/nonmatchings/FUN_02016C18.s
@@ -0,0 +1,652 @@
+.section .text
+
+glabel FUN_02016C18
+
+.extern FUN_020177DC
+.extern FUN_020179E0
+.extern GX_EngineAToggleLayers
+.extern GX_EngineBToggleLayers
+.extern AllocFromHeap
+.extern MIi_CpuClear16
+
+ push {r3-r7, lr}
+ sub sp, #0x18
+ str r1, [sp, #0x4]
+ str r3, [sp, #0x8]
+ add r4, r2, #0x0
+ str r0, [sp, #0x0]
+ ldrb r0, [r4, #0x10]
+ ldr r1, [sp, #0x8]
+ bl FUN_020177DC
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x7
+ bls _02016C36
+ b _0201705A
+_02016C36:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02016C42: ; jump table (using 16-bit offset)
+ .short _02016C52 - _02016C42 - 2; case 0
+ .short _02016CAA - _02016C42 - 2; case 1
+ .short _02016D02 - _02016C42 - 2; case 2
+ .short _02016DA4 - _02016C42 - 2; case 3
+ .short _02016E46 - _02016C42 - 2; case 4
+ .short _02016E9E - _02016C42 - 2; case 5
+ .short _02016EF6 - _02016C42 - 2; case 6
+ .short _02016F98 - _02016C42 - 2; case 7
+_02016C52:
+ mov r0, #0x1
+ add r1, r0, #0x0
+ bl GX_EngineAToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0xc]
+ ldr r2, _02016FB4 ; =0x04000008
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0xc]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016CA0
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016CA0:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016CAA:
+ mov r0, #0x2
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0x10]
+ ldr r2, _02016FB8 ; =0x0400000A
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0x10]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016CF8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016CF8:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016D02:
+ mov r0, #0x4
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016D18
+ cmp r0, #0x1
+ beq _02016D3A
+ cmp r0, #0x2
+ beq _02016D5C
+_02016D18:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FBC ; =0x0400000C
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016D7C
+_02016D3A:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, _02016FBC ; =0x0400000C
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016D7C
+_02016D5C:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FBC ; =0x0400000C
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016D7C:
+ ldr r0, _02016FBC ; =0x0400000C
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016D9A
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016D9A:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016DA4:
+ mov r0, #0x8
+ mov r1, #0x1
+ bl GX_EngineAToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016DBA
+ cmp r0, #0x1
+ beq _02016DDC
+ cmp r0, #0x2
+ beq _02016DFE
+_02016DBA:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FC0 ; =0x0400000E
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016E1E
+_02016DDC:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, _02016FC0 ; =0x0400000E
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016E1E
+_02016DFE:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FC0 ; =0x0400000E
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016E1E:
+ ldr r0, _02016FC0 ; =0x0400000E
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016E3C
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016E3C:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016E46:
+ mov r0, #0x1
+ add r1, r0, #0x0
+ bl GX_EngineBToggleLayers
+ ldrb r3, [r4, #0x14]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x13]
+ lsl r6, r3, #0xd
+ lsl r0, r0, #0x7
+ lsl r3, r2, #0x2
+ str r0, [sp, #0x14]
+ ldr r2, _02016FC4 ; =0x04001008
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r1, r0
+ ldr r0, [sp, #0x14]
+ orr r0, r1
+ orr r0, r7
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016E94
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016E94:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016E9E:
+ mov r0, #0x2
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrb r3, [r4, #0x14]
+ lsl r0, r0, #0x7
+ mov r12, r0
+ ldr r2, _02016FC8 ; =0x0400100A
+ lsl r7, r1, #0x8
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x43
+ lsl r3, r3, #0xd
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ mov r1, r12
+ orr r0, r1
+ orr r0, r7
+ orr r0, r6
+ orr r0, r3
+ strh r0, [r2, #0x0]
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x3
+ bic r1, r0
+ ldrb r0, [r4, #0x15]
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _02016EEC
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ orr r0, r1
+ strh r0, [r2, #0x0]
+ b _0201705A
+_02016EEC:
+ ldrh r1, [r2, #0x0]
+ mov r0, #0x40
+ bic r1, r0
+ strh r1, [r2, #0x0]
+ b _0201705A
+_02016EF6:
+ mov r0, #0x4
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016F0C
+ cmp r0, #0x1
+ beq _02016F2E
+ cmp r0, #0x2
+ beq _02016F50
+_02016F0C:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FCC ; =0x0400100C
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016F70
+_02016F2E:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, _02016FCC ; =0x0400100C
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02016F70
+_02016F50:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FCC ; =0x0400100C
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02016F70:
+ ldr r0, _02016FCC ; =0x0400100C
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02016F8E
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02016F8E:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+ b _0201705A
+_02016F98:
+ mov r0, #0x8
+ mov r1, #0x1
+ bl GX_EngineBToggleLayers
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02016FAE
+ cmp r0, #0x1
+ beq _02016FF2
+ cmp r0, #0x2
+ beq _02017014
+_02016FAE:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _02016FD0 ; =0x0400100E
+ b _02016FD4
+ .balign 4
+_02016FB4: .word 0x04000008
+_02016FB8: .word 0x0400000A
+_02016FBC: .word 0x0400000C
+_02016FC0: .word 0x0400000E
+_02016FC4: .word 0x04001008
+_02016FC8: .word 0x0400100A
+_02016FCC: .word 0x0400100C
+_02016FD0: .word 0x0400100E
+_02016FD4:
+ ldrb r2, [r4, #0x13]
+ lsl r3, r1, #0x8
+ ldrb r0, [r4, #0x11]
+ lsl r6, r2, #0x2
+ ldrh r1, [r7, #0x0]
+ lsl r2, r0, #0x7
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02017034
+_02016FF2:
+ ldrb r2, [r4, #0x13]
+ ldrb r1, [r4, #0x12]
+ ldrb r0, [r4, #0x16]
+ lsl r3, r2, #0x2
+ ldr r7, _020170F0 ; =0x0400100E
+ lsl r2, r1, #0x8
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+ b _02017034
+_02017014:
+ ldrb r1, [r4, #0x12]
+ ldr r7, _020170F0 ; =0x0400100E
+ ldrb r0, [r4, #0x16]
+ lsl r3, r1, #0x8
+ ldrb r2, [r4, #0x13]
+ lsl r6, r0, #0xd
+ ldrh r1, [r7, #0x0]
+ mov r0, #0x43
+ lsl r2, r2, #0x2
+ and r0, r1
+ lsl r1, r5, #0xe
+ orr r0, r1
+ orr r0, r2
+ orr r0, r3
+ orr r0, r6
+ strh r0, [r7, #0x0]
+_02017034:
+ ldr r0, _020170F0 ; =0x0400100E
+ mov r1, #0x3
+ ldrh r2, [r0, #0x0]
+ bic r2, r1
+ ldrb r1, [r4, #0x15]
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _02017052
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ b _0201705A
+_02017052:
+ ldrh r2, [r0, #0x0]
+ mov r1, #0x40
+ bic r2, r1
+ strh r2, [r0, #0x0]
+_0201705A:
+ ldr r0, [sp, #0x4]
+ mov r1, #0x2c
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x0]
+ mul r5, r1
+ add r2, r0, r5
+ mov r3, #0x0
+ mov r0, #0x1
+ strh r3, [r2, #0x20]
+ lsl r0, r0, #0xc
+ str r0, [r2, #0x24]
+ str r0, [r2, #0x28]
+ str r3, [r2, #0x2c]
+ str r3, [r2, #0x30]
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020170A2
+ ldr r0, [sp, #0x0]
+ ldr r6, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ add r6, #0x8
+ bl AllocFromHeap
+ str r0, [r6, r5]
+ ldr r1, [r6, r5]
+ ldr r2, [r4, #0x8]
+ mov r0, #0x0
+ bl MIi_CpuClear16
+ ldr r0, [sp, #0x0]
+ ldr r2, [r4, #0x8]
+ add r1, r0, r5
+ str r2, [r1, #0xc]
+ ldr r0, [r4, #0xc]
+ str r0, [r1, #0x10]
+ b _020170A8
+_020170A2:
+ str r3, [r2, #0x8]
+ str r3, [r2, #0xc]
+ str r3, [r2, #0x10]
+_020170A8:
+ ldr r0, [sp, #0x0]
+ ldrb r1, [r4, #0x10]
+ add r0, r0, r5
+ strb r1, [r0, #0x1d]
+ ldr r1, [sp, #0x8]
+ strb r1, [r0, #0x1c]
+ ldrb r1, [r4, #0x11]
+ strb r1, [r0, #0x1e]
+ ldr r1, [sp, #0x8]
+ cmp r1, #0x0
+ bne _020170CA
+ ldrb r1, [r4, #0x11]
+ cmp r1, #0x0
+ bne _020170CA
+ mov r1, #0x20
+ strb r1, [r0, #0x1f]
+ b _020170D2
+_020170CA:
+ ldr r0, [sp, #0x0]
+ mov r1, #0x40
+ add r0, r0, r5
+ strb r1, [r0, #0x1f]
+_020170D2:
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ ldr r3, [r4, #0x0]
+ mov r2, #0x0
+ bl FUN_020179E0
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ ldr r3, [r4, #0x4]
+ mov r2, #0x3
+ bl FUN_020179E0
+ add sp, #0x18
+ pop {r3-r7, pc}
+ nop
+_020170F0: .word 0x0400100E
diff --git a/arm9/asm/unk_02016B94.s b/arm9/asm/unk_02016B94.s
index 3c92650d..3423d0e7 100644
--- a/arm9/asm/unk_02016B94.s
+++ b/arm9/asm/unk_02016B94.s
@@ -2,760 +2,8 @@
.include "global.inc"
.section .rodata
-
- .global UNK_020EDB30
-UNK_020EDB30: ; 0x020EDB30
- .byte 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00
-
- .global UNK_020EDB38
-UNK_020EDB38: ; 0x020EDB38
- .word FUN_020192D4
- .word FUN_02019358
- .word FUN_020192D4
-
- .global UNK_020EDB44
-UNK_020EDB44: ; 0x020EDB44
- .word FUN_020195D0
- .word FUN_0201960C
- .word FUN_020195D0
-
- .global UNK_020EDB50
-UNK_020EDB50: ; 0x020EDB50
- .word FUN_020195A8
- .word FUN_020195E4
- .word FUN_020195A8
-
- .global UNK_020EDB5C
-UNK_020EDB5C: ; 0x020EDB5C
- .word FUN_020194C8
- .word FUN_0201951C
- .word FUN_020194C8
-
- .global UNK_020EDB68
-UNK_020EDB68: ; 0x020EDB68
- .word FUN_0201949C
- .word FUN_020194E0
- .word FUN_0201949C
-
- .global UNK_020EDB74
-UNK_020EDB74: ; 0x020EDB74
- .word FUN_020193B4
- .word FUN_02019444
- .word FUN_020193B4
-
.text
- thumb_func_start FUN_02016B94
-FUN_02016B94: ; 0x02016B94
- push {r3-r5, lr}
- mov r1, #0x5a
- lsl r1, r1, #0x2
- add r5, r0, #0x0
- bl AllocFromHeap
- mov r2, #0x5a
- mov r1, #0x0
- lsl r2, r2, #0x2
- add r4, r0, #0x0
- bl memset
- str r5, [r4, #0x0]
- mov r0, #0x0
- strh r0, [r4, #0x4]
- strh r0, [r4, #0x6]
- add r0, r4, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02016BB8
-FUN_02016BB8: ; 0x02016BB8
- ldr r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02016BBC
-FUN_02016BBC: ; 0x02016BBC
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, [r4, #0x0]
- ldr r1, [r4, #0x4]
- ldr r2, [r4, #0xc]
- bl GX_SetGraphicsMode
- ldr r0, [r4, #0x8]
- bl GXS_SetGraphicsMode
- mov r2, #0x1
- lsl r2, r2, #0x1a
- ldr r1, [r2, #0x0]
- ldr r0, _02016BF0 ; =0xC7FFFFFF
- and r1, r0
- str r1, [r2, #0x0]
- ldr r1, [r2, #0x0]
- asr r0, r0, #0x3
- and r0, r1
- str r0, [r2, #0x0]
- bl GX_DisableEngineALayers
- bl GX_DisableEngineBLayers
- pop {r4, pc}
- nop
-_02016BF0: .word 0xC7FFFFFF
-
- thumb_func_start FUN_02016BF4
-FUN_02016BF4: ; 0x02016BF4
- push {r3, lr}
- add r2, r0, #0x0
- cmp r1, #0x0
- bne _02016C0C
- ldr r0, [r2, #0x0]
- ldr r1, [r2, #0x4]
- ldr r2, [r2, #0xc]
- bl GX_SetGraphicsMode
- bl GX_DisableEngineALayers
- pop {r3, pc}
-_02016C0C:
- ldr r0, [r2, #0x8]
- bl GXS_SetGraphicsMode
- bl GX_DisableEngineBLayers
- pop {r3, pc}
-
- thumb_func_start FUN_02016C18
-FUN_02016C18: ; 0x02016C18
- push {r3-r7, lr}
- sub sp, #0x18
- str r1, [sp, #0x4]
- str r3, [sp, #0x8]
- add r4, r2, #0x0
- str r0, [sp, #0x0]
- ldrb r0, [r4, #0x10]
- ldr r1, [sp, #0x8]
- bl FUN_020177DC
- add r5, r0, #0x0
- ldr r0, [sp, #0x4]
- cmp r0, #0x7
- bls _02016C36
- b _0201705A
-_02016C36:
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02016C42: ; jump table (using 16-bit offset)
- .short _02016C52 - _02016C42 - 2; case 0
- .short _02016CAA - _02016C42 - 2; case 1
- .short _02016D02 - _02016C42 - 2; case 2
- .short _02016DA4 - _02016C42 - 2; case 3
- .short _02016E46 - _02016C42 - 2; case 4
- .short _02016E9E - _02016C42 - 2; case 5
- .short _02016EF6 - _02016C42 - 2; case 6
- .short _02016F98 - _02016C42 - 2; case 7
-_02016C52:
- mov r0, #0x1
- add r1, r0, #0x0
- bl GX_EngineAToggleLayers
- ldrb r3, [r4, #0x14]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x11]
- ldrb r2, [r4, #0x13]
- lsl r6, r3, #0xd
- lsl r0, r0, #0x7
- lsl r3, r2, #0x2
- str r0, [sp, #0xc]
- ldr r2, _02016FB4 ; =0x04000008
- lsl r7, r1, #0x8
- ldrh r1, [r2, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r1, r0
- ldr r0, [sp, #0xc]
- orr r0, r1
- orr r0, r7
- orr r0, r3
- orr r0, r6
- strh r0, [r2, #0x0]
- ldrh r1, [r2, #0x0]
- mov r0, #0x3
- bic r1, r0
- ldrb r0, [r4, #0x15]
- orr r0, r1
- strh r0, [r2, #0x0]
- ldr r0, [r4, #0x18]
- cmp r0, #0x0
- beq _02016CA0
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- orr r0, r1
- strh r0, [r2, #0x0]
- b _0201705A
-_02016CA0:
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- bic r1, r0
- strh r1, [r2, #0x0]
- b _0201705A
-_02016CAA:
- mov r0, #0x2
- mov r1, #0x1
- bl GX_EngineAToggleLayers
- ldrb r3, [r4, #0x14]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x11]
- ldrb r2, [r4, #0x13]
- lsl r6, r3, #0xd
- lsl r0, r0, #0x7
- lsl r3, r2, #0x2
- str r0, [sp, #0x10]
- ldr r2, _02016FB8 ; =0x0400000A
- lsl r7, r1, #0x8
- ldrh r1, [r2, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r1, r0
- ldr r0, [sp, #0x10]
- orr r0, r1
- orr r0, r7
- orr r0, r3
- orr r0, r6
- strh r0, [r2, #0x0]
- ldrh r1, [r2, #0x0]
- mov r0, #0x3
- bic r1, r0
- ldrb r0, [r4, #0x15]
- orr r0, r1
- strh r0, [r2, #0x0]
- ldr r0, [r4, #0x18]
- cmp r0, #0x0
- beq _02016CF8
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- orr r0, r1
- strh r0, [r2, #0x0]
- b _0201705A
-_02016CF8:
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- bic r1, r0
- strh r1, [r2, #0x0]
- b _0201705A
-_02016D02:
- mov r0, #0x4
- mov r1, #0x1
- bl GX_EngineAToggleLayers
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _02016D18
- cmp r0, #0x1
- beq _02016D3A
- cmp r0, #0x2
- beq _02016D5C
-_02016D18:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FBC ; =0x0400000C
- ldrb r2, [r4, #0x13]
- lsl r3, r1, #0x8
- ldrb r0, [r4, #0x11]
- lsl r6, r2, #0x2
- ldrh r1, [r7, #0x0]
- lsl r2, r0, #0x7
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016D7C
-_02016D3A:
- ldrb r2, [r4, #0x13]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x16]
- lsl r3, r2, #0x2
- ldr r7, _02016FBC ; =0x0400000C
- lsl r2, r1, #0x8
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016D7C
-_02016D5C:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FBC ; =0x0400000C
- ldrb r0, [r4, #0x16]
- lsl r3, r1, #0x8
- ldrb r2, [r4, #0x13]
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- lsl r2, r2, #0x2
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
-_02016D7C:
- ldr r0, _02016FBC ; =0x0400000C
- mov r1, #0x3
- ldrh r2, [r0, #0x0]
- bic r2, r1
- ldrb r1, [r4, #0x15]
- orr r1, r2
- strh r1, [r0, #0x0]
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- beq _02016D9A
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- orr r1, r2
- strh r1, [r0, #0x0]
- b _0201705A
-_02016D9A:
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- bic r2, r1
- strh r2, [r0, #0x0]
- b _0201705A
-_02016DA4:
- mov r0, #0x8
- mov r1, #0x1
- bl GX_EngineAToggleLayers
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _02016DBA
- cmp r0, #0x1
- beq _02016DDC
- cmp r0, #0x2
- beq _02016DFE
-_02016DBA:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FC0 ; =0x0400000E
- ldrb r2, [r4, #0x13]
- lsl r3, r1, #0x8
- ldrb r0, [r4, #0x11]
- lsl r6, r2, #0x2
- ldrh r1, [r7, #0x0]
- lsl r2, r0, #0x7
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016E1E
-_02016DDC:
- ldrb r2, [r4, #0x13]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x16]
- lsl r3, r2, #0x2
- ldr r7, _02016FC0 ; =0x0400000E
- lsl r2, r1, #0x8
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016E1E
-_02016DFE:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FC0 ; =0x0400000E
- ldrb r0, [r4, #0x16]
- lsl r3, r1, #0x8
- ldrb r2, [r4, #0x13]
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- lsl r2, r2, #0x2
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
-_02016E1E:
- ldr r0, _02016FC0 ; =0x0400000E
- mov r1, #0x3
- ldrh r2, [r0, #0x0]
- bic r2, r1
- ldrb r1, [r4, #0x15]
- orr r1, r2
- strh r1, [r0, #0x0]
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- beq _02016E3C
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- orr r1, r2
- strh r1, [r0, #0x0]
- b _0201705A
-_02016E3C:
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- bic r2, r1
- strh r2, [r0, #0x0]
- b _0201705A
-_02016E46:
- mov r0, #0x1
- add r1, r0, #0x0
- bl GX_EngineBToggleLayers
- ldrb r3, [r4, #0x14]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x11]
- ldrb r2, [r4, #0x13]
- lsl r6, r3, #0xd
- lsl r0, r0, #0x7
- lsl r3, r2, #0x2
- str r0, [sp, #0x14]
- ldr r2, _02016FC4 ; =0x04001008
- lsl r7, r1, #0x8
- ldrh r1, [r2, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r1, r0
- ldr r0, [sp, #0x14]
- orr r0, r1
- orr r0, r7
- orr r0, r3
- orr r0, r6
- strh r0, [r2, #0x0]
- ldrh r1, [r2, #0x0]
- mov r0, #0x3
- bic r1, r0
- ldrb r0, [r4, #0x15]
- orr r0, r1
- strh r0, [r2, #0x0]
- ldr r0, [r4, #0x18]
- cmp r0, #0x0
- beq _02016E94
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- orr r0, r1
- strh r0, [r2, #0x0]
- b _0201705A
-_02016E94:
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- bic r1, r0
- strh r1, [r2, #0x0]
- b _0201705A
-_02016E9E:
- mov r0, #0x2
- mov r1, #0x1
- bl GX_EngineBToggleLayers
- ldrb r2, [r4, #0x13]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x11]
- lsl r6, r2, #0x2
- ldrb r3, [r4, #0x14]
- lsl r0, r0, #0x7
- mov r12, r0
- ldr r2, _02016FC8 ; =0x0400100A
- lsl r7, r1, #0x8
- ldrh r1, [r2, #0x0]
- mov r0, #0x43
- lsl r3, r3, #0xd
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- mov r1, r12
- orr r0, r1
- orr r0, r7
- orr r0, r6
- orr r0, r3
- strh r0, [r2, #0x0]
- ldrh r1, [r2, #0x0]
- mov r0, #0x3
- bic r1, r0
- ldrb r0, [r4, #0x15]
- orr r0, r1
- strh r0, [r2, #0x0]
- ldr r0, [r4, #0x18]
- cmp r0, #0x0
- beq _02016EEC
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- orr r0, r1
- strh r0, [r2, #0x0]
- b _0201705A
-_02016EEC:
- ldrh r1, [r2, #0x0]
- mov r0, #0x40
- bic r1, r0
- strh r1, [r2, #0x0]
- b _0201705A
-_02016EF6:
- mov r0, #0x4
- mov r1, #0x1
- bl GX_EngineBToggleLayers
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _02016F0C
- cmp r0, #0x1
- beq _02016F2E
- cmp r0, #0x2
- beq _02016F50
-_02016F0C:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FCC ; =0x0400100C
- ldrb r2, [r4, #0x13]
- lsl r3, r1, #0x8
- ldrb r0, [r4, #0x11]
- lsl r6, r2, #0x2
- ldrh r1, [r7, #0x0]
- lsl r2, r0, #0x7
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016F70
-_02016F2E:
- ldrb r2, [r4, #0x13]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x16]
- lsl r3, r2, #0x2
- ldr r7, _02016FCC ; =0x0400100C
- lsl r2, r1, #0x8
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02016F70
-_02016F50:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FCC ; =0x0400100C
- ldrb r0, [r4, #0x16]
- lsl r3, r1, #0x8
- ldrb r2, [r4, #0x13]
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- lsl r2, r2, #0x2
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
-_02016F70:
- ldr r0, _02016FCC ; =0x0400100C
- mov r1, #0x3
- ldrh r2, [r0, #0x0]
- bic r2, r1
- ldrb r1, [r4, #0x15]
- orr r1, r2
- strh r1, [r0, #0x0]
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- beq _02016F8E
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- orr r1, r2
- strh r1, [r0, #0x0]
- b _0201705A
-_02016F8E:
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- bic r2, r1
- strh r2, [r0, #0x0]
- b _0201705A
-_02016F98:
- mov r0, #0x8
- mov r1, #0x1
- bl GX_EngineBToggleLayers
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- beq _02016FAE
- cmp r0, #0x1
- beq _02016FF2
- cmp r0, #0x2
- beq _02017014
-_02016FAE:
- ldrb r1, [r4, #0x12]
- ldr r7, _02016FD0 ; =0x0400100E
- b _02016FD4
- .balign 4
-_02016FB4: .word 0x04000008
-_02016FB8: .word 0x0400000A
-_02016FBC: .word 0x0400000C
-_02016FC0: .word 0x0400000E
-_02016FC4: .word 0x04001008
-_02016FC8: .word 0x0400100A
-_02016FCC: .word 0x0400100C
-_02016FD0: .word 0x0400100E
-_02016FD4:
- ldrb r2, [r4, #0x13]
- lsl r3, r1, #0x8
- ldrb r0, [r4, #0x11]
- lsl r6, r2, #0x2
- ldrh r1, [r7, #0x0]
- lsl r2, r0, #0x7
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02017034
-_02016FF2:
- ldrb r2, [r4, #0x13]
- ldrb r1, [r4, #0x12]
- ldrb r0, [r4, #0x16]
- lsl r3, r2, #0x2
- ldr r7, _020170F0 ; =0x0400100E
- lsl r2, r1, #0x8
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
- b _02017034
-_02017014:
- ldrb r1, [r4, #0x12]
- ldr r7, _020170F0 ; =0x0400100E
- ldrb r0, [r4, #0x16]
- lsl r3, r1, #0x8
- ldrb r2, [r4, #0x13]
- lsl r6, r0, #0xd
- ldrh r1, [r7, #0x0]
- mov r0, #0x43
- lsl r2, r2, #0x2
- and r0, r1
- lsl r1, r5, #0xe
- orr r0, r1
- orr r0, r2
- orr r0, r3
- orr r0, r6
- strh r0, [r7, #0x0]
-_02017034:
- ldr r0, _020170F0 ; =0x0400100E
- mov r1, #0x3
- ldrh r2, [r0, #0x0]
- bic r2, r1
- ldrb r1, [r4, #0x15]
- orr r1, r2
- strh r1, [r0, #0x0]
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- beq _02017052
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- orr r1, r2
- strh r1, [r0, #0x0]
- b _0201705A
-_02017052:
- ldrh r2, [r0, #0x0]
- mov r1, #0x40
- bic r2, r1
- strh r2, [r0, #0x0]
-_0201705A:
- ldr r0, [sp, #0x4]
- mov r1, #0x2c
- add r5, r0, #0x0
- ldr r0, [sp, #0x0]
- mul r5, r1
- add r2, r0, r5
- mov r3, #0x0
- mov r0, #0x1
- strh r3, [r2, #0x20]
- lsl r0, r0, #0xc
- str r0, [r2, #0x24]
- str r0, [r2, #0x28]
- str r3, [r2, #0x2c]
- str r3, [r2, #0x30]
- ldr r1, [r4, #0x8]
- cmp r1, #0x0
- beq _020170A2
- ldr r0, [sp, #0x0]
- ldr r6, [sp, #0x0]
- ldr r0, [r0, #0x0]
- add r6, #0x8
- bl AllocFromHeap
- str r0, [r6, r5]
- ldr r1, [r6, r5]
- ldr r2, [r4, #0x8]
- mov r0, #0x0
- bl MIi_CpuClear16
- ldr r0, [sp, #0x0]
- ldr r2, [r4, #0x8]
- add r1, r0, r5
- str r2, [r1, #0xc]
- ldr r0, [r4, #0xc]
- str r0, [r1, #0x10]
- b _020170A8
-_020170A2:
- str r3, [r2, #0x8]
- str r3, [r2, #0xc]
- str r3, [r2, #0x10]
-_020170A8:
- ldr r0, [sp, #0x0]
- ldrb r1, [r4, #0x10]
- add r0, r0, r5
- strb r1, [r0, #0x1d]
- ldr r1, [sp, #0x8]
- strb r1, [r0, #0x1c]
- ldrb r1, [r4, #0x11]
- strb r1, [r0, #0x1e]
- ldr r1, [sp, #0x8]
- cmp r1, #0x0
- bne _020170CA
- ldrb r1, [r4, #0x11]
- cmp r1, #0x0
- bne _020170CA
- mov r1, #0x20
- strb r1, [r0, #0x1f]
- b _020170D2
-_020170CA:
- ldr r0, [sp, #0x0]
- mov r1, #0x40
- add r0, r0, r5
- strb r1, [r0, #0x1f]
-_020170D2:
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- ldr r3, [r4, #0x0]
- mov r2, #0x0
- bl FUN_020179E0
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- ldr r3, [r4, #0x4]
- mov r2, #0x3
- bl FUN_020179E0
- add sp, #0x18
- pop {r3-r7, pc}
- nop
-_020170F0: .word 0x0400100E
thumb_func_start FUN_020170F4
FUN_020170F4: ; 0x020170F4
diff --git a/arm9/global.inc b/arm9/global.inc
index 05ba01a7..b8a17cb8 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8518,3 +8518,10 @@
.extern FUN_02025490
.extern FUN_020254A0
.extern FUN_020254B4
+.extern UNK_020EDB30
+.extern UNK_020EDB38
+.extern UNK_020EDB44
+.extern UNK_020EDB50
+.extern UNK_020EDB5C
+.extern UNK_020EDB68
+.extern UNK_020EDB74
diff --git a/arm9/src/unk_02016B94_c.c b/arm9/src/unk_02016B94_c.c
new file mode 100644
index 00000000..9d2b91a4
--- /dev/null
+++ b/arm9/src/unk_02016B94_c.c
@@ -0,0 +1,360 @@
+#include "unk_02016B94.h"
+
+extern void FUN_020192D4();
+extern void FUN_02019358();
+
+extern void FUN_020195D0();
+extern void FUN_0201960C();
+
+extern void FUN_020195A8();
+extern void FUN_020195E4();
+
+extern void FUN_020194C8();
+extern void FUN_0201951C();
+
+extern void FUN_0201949C();
+extern void FUN_020194E0();
+
+extern void FUN_020193B4();
+extern void FUN_02019444();
+
+
+extern u8 FUN_020177DC(u8 param0, u32 param1);
+extern void FUN_020179E0(u32 param0, u32 param1, u32 param2, u32 val);
+
+const u8 UNK_020EDB30[8] = {
+ 0x10,
+ 0x20,
+ 0x20,
+ 0x20,
+ 0x20,
+ 0x20,
+ 0x00,
+ 0x00,
+};
+
+void (*const UNK_020EDB5C[])() = {
+ FUN_020194C8,
+ FUN_0201951C,
+ FUN_020194C8,
+};
+
+void (*const UNK_020EDB50[])() = {
+ FUN_020195A8,
+ FUN_020195E4,
+ FUN_020195A8,
+};
+
+void (*const UNK_020EDB44[])() = {
+ FUN_020195D0,
+ FUN_0201960C,
+ FUN_020195D0,
+};
+
+void (*const UNK_020EDB38[])() = {
+ FUN_020192D4,
+ FUN_02019358,
+ FUN_020192D4,
+};
+
+void (*const UNK_020EDB68[])() = {
+ FUN_0201949C,
+ FUN_020194E0,
+ FUN_0201949C,
+};
+
+void (*const UNK_020EDB74[])() = {
+ FUN_020193B4,
+ FUN_02019444,
+ FUN_020193B4,
+};
+
+THUMB_FUNC void *FUN_02016B94(u32 heap_id)
+{
+ void *ptr = AllocFromHeap(heap_id, 0x5a << 2);
+ memset(ptr, 0, 0x5a << 2);
+ *(u32 *)ptr = heap_id;
+ *(u16 *)(ptr + 4) = 0;
+ *(u16 *)(ptr + 6) = 0;
+
+ return ptr;
+}
+
+THUMB_FUNC u32 FUN_02016BB8(u32 *param0)
+{
+ return *param0;
+}
+
+THUMB_FUNC void FUN_02016BBC(u32 *param0)
+{
+ GX_SetGraphicsMode(param0[0], param0[1], param0[3]);
+ GXS_SetGraphicsMode(param0[2]);
+ reg_GX_DISPCNT &= 0xC7FFFFFF;
+ reg_GX_DISPCNT &= 0xF8FFFFFF;
+
+ GX_DisableEngineALayers();
+ GX_DisableEngineBLayers();
+}
+
+THUMB_FUNC void FUN_02016BF4(u32 *param0, u32 param1)
+{
+ if (param1 == 0)
+ {
+ GX_SetGraphicsMode(param0[0], param0[1], param0[3]);
+ GX_DisableEngineALayers();
+ }
+ else
+ {
+ GXS_SetGraphicsMode(param0[2]);
+ GX_DisableEngineBLayers();
+ }
+}
+
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02016C18(struct UnkStruct2 *param0, u8 param1, struct UnkStruct1 *param2, u8 param3)
+{
+ u8 res = FUN_020177DC(param2->unk10, param3);
+ switch (param1)
+ {
+ case 0:
+ GX_EngineAToggleLayers(1, GX_LAYER_TOGGLE_ON);
+
+ reg_G2_BG0CNT = (reg_G2_BG0CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk14 << 13) | (param2->unk13 << 2);
+ reg_G2_BG0CNT = (reg_G2_BG0CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2_BG0CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2_BG0CNT &= ~0x40;
+ }
+
+ break;
+
+ case 1:
+ GX_EngineAToggleLayers(2, GX_LAYER_TOGGLE_ON);
+ reg_G2_BG1CNT = (reg_G2_BG1CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk14 << 13) | (param2->unk13 << 2);
+ reg_G2_BG1CNT = (reg_G2_BG1CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2_BG1CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2_BG1CNT &= ~0x40;
+ }
+
+ break;
+
+ case 2:
+ GX_EngineAToggleLayers(4, GX_LAYER_TOGGLE_ON);
+ switch (param3)
+ {
+ default:
+ case 0:
+ reg_G2_BG2CNT = (reg_G2_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk13 << 2);
+ break;
+ case 1:
+ reg_G2_BG2CNT = (reg_G2_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ case 2:
+ reg_G2_BG2CNT = (reg_G2_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ }
+
+ reg_G2_BG2CNT = (reg_G2_BG2CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2_BG2CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2_BG2CNT &= ~0x40;
+ }
+
+ break;
+
+ case 3:
+ GX_EngineAToggleLayers(8, GX_LAYER_TOGGLE_ON);
+
+ switch (param3)
+ {
+ default:
+ case 0:
+ reg_G2_BG3CNT = (reg_G2_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk13 << 2);
+ break;
+ case 1:
+ reg_G2_BG3CNT = (reg_G2_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ case 2:
+ reg_G2_BG3CNT = (reg_G2_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ }
+
+ reg_G2_BG3CNT = (reg_G2_BG3CNT & ~3) | (param2->unk15);
+ if (param2->unk18 != 0)
+ {
+ reg_G2_BG3CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2_BG3CNT &= ~0x40;
+ }
+ break;
+
+ case 4:
+ GX_EngineBToggleLayers(1, GX_LAYER_TOGGLE_ON);
+
+ reg_G2S_DB_BG0CNT = (reg_G2S_DB_BG0CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk14 << 13) | (param2->unk13 << 2);
+
+ reg_G2S_DB_BG0CNT = (reg_G2S_DB_BG0CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2S_DB_BG0CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2S_DB_BG0CNT &= ~0x40;
+ }
+
+ break;
+
+ case 5:
+ GX_EngineBToggleLayers(2, GX_LAYER_TOGGLE_ON);
+
+ reg_G2S_DB_BG1CNT = (reg_G2S_DB_BG1CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk14 << 13) | (param2->unk13 << 2);
+
+ reg_G2S_DB_BG1CNT = (reg_G2S_DB_BG1CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2S_DB_BG1CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2S_DB_BG1CNT &= ~0x40;
+ }
+
+ break;
+
+ case 6:
+ GX_EngineBToggleLayers(4, GX_LAYER_TOGGLE_ON);
+
+ switch (param3)
+ {
+ default:
+ case 0:
+ reg_G2S_DB_BG2CNT = (reg_G2S_DB_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk13 << 2);
+ break;
+ case 1:
+ reg_G2S_DB_BG2CNT = (reg_G2S_DB_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ case 2:
+ reg_G2S_DB_BG2CNT = (reg_G2S_DB_BG2CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ }
+
+ reg_G2S_DB_BG2CNT = (reg_G2S_DB_BG2CNT & ~3) | (param2->unk15);
+
+ if (param2->unk18 != 0)
+ {
+ reg_G2S_DB_BG2CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2S_DB_BG2CNT &= ~0x40;
+ }
+
+ break;
+ case 7:
+ GX_EngineBToggleLayers(8, GX_LAYER_TOGGLE_ON);
+ switch (param3)
+ {
+ default:
+ case 0:
+ reg_G2S_DB_BG3CNT = (reg_G2S_DB_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk11 << 7) | (param2->unk13 << 2);
+ break;
+ case 1:
+ reg_G2S_DB_BG3CNT = (reg_G2S_DB_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ case 2:
+ reg_G2S_DB_BG3CNT = (reg_G2S_DB_BG3CNT & 0x43) |
+ (res << 14) | (param2->unk12 << 8) | (param2->unk16 << 13) | (param2->unk13 << 2);
+ break;
+ }
+
+ reg_G2S_DB_BG3CNT = (reg_G2S_DB_BG3CNT & ~3) | (param2->unk15);
+ if (param2->unk18 != 0)
+ {
+ reg_G2S_DB_BG3CNT |= 0x40;
+ }
+ else
+ {
+ reg_G2S_DB_BG3CNT &= ~0x40;
+ }
+ break;
+ }
+
+ param0->unk08[param1].unk20 = 0;
+ param0->unk08[param1].unk24 = 0x1000;
+ param0->unk08[param1].unk28 = 0x1000;
+ param0->unk08[param1].unk2c = 0;
+ param0->unk08[param1].unk30 = 0;
+
+ if (param2->unk08 != 0)
+ {
+ param0->unk08[param1].unk08 = AllocFromHeap(param0->unk00, param2->unk08);
+
+ MIi_CpuClear16(0, param0->unk08[param1].unk08, param2->unk08);
+
+ param0->unk08[param1].unk0c = param2->unk08;
+ param0->unk08[param1].unk10 = param2->unk0c;
+ }
+ else
+ {
+ param0->unk08[param1].unk08 = 0;
+ param0->unk08[param1].unk0c = 0;
+ param0->unk08[param1].unk10 = 0;
+ }
+
+ param0->unk08[param1].unk1d = param2->unk10;
+ param0->unk08[param1].unk1c = param3;
+ param0->unk08[param1].unk1e = param2->unk11;
+
+ if (param3 == 0 && param2->unk11 == 0)
+ {
+ param0->unk08[param1].unk1f = 0x20;
+ }
+ else
+ {
+ param0->unk08[param1].unk1f = 0x40;
+ }
+
+ FUN_020179E0(param0, param1, 0, param2->unk00);
+ FUN_020179E0(param0, param1, 3, param2->unk04);
+}
+#else
+GLOBAL_ASM("asm/nonmatchings/FUN_02016C18.s")
+#endif
+
diff --git a/include/unk_02016B94.h b/include/unk_02016B94.h
new file mode 100644
index 00000000..b1dbfcda
--- /dev/null
+++ b/include/unk_02016B94.h
@@ -0,0 +1,64 @@
+#ifndef POKEDIAMOND_UNK_02016B94_H
+#define POKEDIAMOND_UNK_02016B94_H
+
+
+#include "global.h"
+#include "GX_layers.h"
+#include "gx.h"
+#include "heap.h"
+
+struct UnkStruct1 {
+ u32 unk00;
+ u32 unk04;
+ u32 unk08;
+ u32 unk0c;
+
+ u8 unk10;
+ u8 unk11;
+ u8 unk12;
+ u8 unk13;
+ u8 unk14;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17; //probably paddding
+ u32 unk18;
+};
+
+
+
+struct UnkStruct2 {
+ u32 unk00;
+ u32 unk04;
+
+
+ struct InnerStruct {
+ u32 unk08;
+ u32 unk0c;
+ u32 unk10;
+
+ u32 unk14;
+ u32 unk18;
+
+ u8 unk1c;
+ u8 unk1d;
+ u8 unk1e;
+ u8 unk1f;
+ u16 unk20;
+ u16 unk22; //probably padding
+ u32 unk24;
+ u32 unk28;
+ u32 unk2c;
+ u32 unk30;
+ } unk08[8];
+};
+
+
+THUMB_FUNC void *FUN_02016B94(u32 heap_id);
+THUMB_FUNC u32 FUN_02016BB8(u32 *param0);
+THUMB_FUNC void FUN_02016BBC(u32 *param0);
+THUMB_FUNC void FUN_02016BF4(u32 *param0, u32 param1);
+THUMB_FUNC void FUN_02016C18(struct UnkStruct2 *param0, u8 param1, struct UnkStruct1 *param2, u8 param3);
+
+
+
+#endif //POKEDIAMOND_UNK_02016B94_H \ No newline at end of file
diff --git a/tools/asm_processor/asm_processor.py b/tools/asm_processor/asm_processor.py
index ec01c68e..5c909388 100755
--- a/tools/asm_processor/asm_processor.py
+++ b/tools/asm_processor/asm_processor.py
@@ -9,7 +9,7 @@ import os
from collections import namedtuple, defaultdict
from io import StringIO
-MAX_FN_SIZE = 100
+MAX_FN_SIZE = 3000
SLOW_CHECKS = False
EI_NIDENT = 16
@@ -375,14 +375,14 @@ def is_temp_name(name):
# https://stackoverflow.com/a/241506
def re_comment_replacer(match):
s = match.group(0)
- if s[0] in "/#":
+ if s[0] in "/#;":
return " "
else:
return s
re_comment_or_string = re.compile(
- r'#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"'
+ r';.*|#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"'
)
@@ -584,8 +584,12 @@ class GlobalAsmBlock:
elif line.startswith('.byte'):
self.add_sized(len(line.split(',')), real_line)
# Branches are 4 bytes long
- elif line.startswith('bl'):
+ elif line.startswith('bl') and not line.startswith('bls'):
self.add_sized(4, real_line)
+ elif line.startswith('.word'):
+ self.add_sized(4, real_line)
+ elif line.startswith('.extern'):
+ pass
else:
# Unfortunately, macros are hard to support for .rodata --
# we don't know how how space they will expand to before
@@ -820,7 +824,7 @@ def repl_float_hex(m):
def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None):
opt = "O4"
min_instr_count = 3 # idk
- skip_instr_count = 2 # idk
+ skip_instr_count = 3 # mandatory instructions: push, pop and mov r0, 0
use_jtbl_for_rodata = False
if opt in ['O2', 'g3'] and not framepointer: