summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Akashi <rubenru09@aol.com>2021-06-23 19:11:36 +0100
committerGitHub <noreply@github.com>2021-06-23 19:11:36 +0100
commitac7337cc6410f96eb743c46f30c195b0da805ae5 (patch)
tree49b37975265caa4380b170c59c069ffea1710479
parent66d408a02664eabd153377fe3f4842da0da2d627 (diff)
parentc5a2721fff4710a92cd68cb801f593f7e44357f1 (diff)
Merge pull request #413 from remicalixte/unk_02002F08
decompile unk_02002F08.s
-rw-r--r--arm9/asm/unk_02002F08.s287
-rw-r--r--arm9/src/font.c10
-rw-r--r--arm9/src/unk_02002F08.c139
-rw-r--r--arm9/src/unk_02021934.c8
-rw-r--r--include/font.h4
-rw-r--r--include/string16.h4
-rw-r--r--include/unk_02002F08.h38
7 files changed, 191 insertions, 299 deletions
diff --git a/arm9/asm/unk_02002F08.s b/arm9/asm/unk_02002F08.s
deleted file mode 100644
index 10ad89e0..00000000
--- a/arm9/asm/unk_02002F08.s
+++ /dev/null
@@ -1,287 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern UNK_02106FC8
-
- .text
-
- thumb_func_start FUN_02002F08
-FUN_02002F08: ; 0x02002F08
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002F3C ; =UNK_02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002F22
- bl GF_AssertFail
-_02002F22:
- add r0, r5, #0x0
- bl String_c_str
- add r1, r0, #0x0
- ldr r0, _02002F3C ; =UNK_02106FC8
- add r2, r6, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl StringGetWidth
- pop {r4-r6, pc}
- .balign 4
-_02002F3C: .word UNK_02106FC8
-
- thumb_func_start FUN_02002F40
-FUN_02002F40: ; 0x02002F40
- push {r4, lr}
- add r4, r3, #0x0
- bl FUN_02002E14
- cmp r0, r4
- bhs _02002F52
- sub r0, r4, r0
- lsr r0, r0, #0x1
- pop {r4, pc}
-_02002F52:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02002F58
-FUN_02002F58: ; 0x02002F58
- push {r3-r7, lr}
- ldrh r2, [r0, #0x0]
- ldr r1, _02002F8C ; =0x0000FFFF
- mov r5, #0x1
- cmp r2, r1
- beq _02002F88
- mov r6, #0xe
- lsl r6, r6, #0xc
- add r7, r1, #0x0
- sub r4, r1, #0x1
-_02002F6C:
- cmp r2, r4
- bne _02002F76
- bl MsgArray_SkipControlCode
- b _02002F82
-_02002F76:
- cmp r2, r6
- bne _02002F80
- add r5, r5, #0x1
- add r0, r0, #0x2
- b _02002F82
-_02002F80:
- add r0, r0, #0x2
-_02002F82:
- ldrh r2, [r0, #0x0]
- cmp r2, r7
- bne _02002F6C
-_02002F88:
- add r0, r5, #0x0
- pop {r3-r7, pc}
- .balign 4
-_02002F8C: .word 0x0000FFFF
-
- thumb_func_start FUN_02002F90
-FUN_02002F90: ; 0x02002F90
- push {r3, lr}
- bl String_c_str
- bl FUN_02002F58
- pop {r3, pc}
-
- thumb_func_start FUN_02002F9C
-FUN_02002F9C: ; 0x02002F9C
- push {r3-r5, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002FCC ; =UNK_02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002FB4
- bl GF_AssertFail
-_02002FB4:
- add r0, r5, #0x0
- bl String_c_str
- add r1, r0, #0x0
- ldr r0, _02002FCC ; =UNK_02106FC8
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl StringGetWidth_SingleLine_HandleClearToControlCode
- pop {r3-r5, pc}
- .balign 4
-_02002FCC: .word UNK_02106FC8
-
- thumb_func_start FUN_02002FD0
-FUN_02002FD0: ; 0x02002FD0
- push {r4, lr}
- mov r1, #0x12
- lsl r1, r1, #0x4
- bl AllocFromHeap
- mov r2, #0x12
- mov r1, #0x0
- lsl r2, r2, #0x4
- add r4, r0, #0x0
- bl MI_CpuFill8
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02002FEC
-FUN_02002FEC: ; 0x02002FEC
- ldr r3, _02002FF0 ; =FreeToHeap
- bx r3
- .balign 4
-_02002FF0: .word FreeToHeap
-
- thumb_func_start FUN_02002FF4
-FUN_02002FF4: ; 0x02002FF4
- push {r3-r4}
- mov r4, #0x14
- mul r4, r1
- str r2, [r0, r4]
- add r1, r0, r4
- ldr r0, [sp, #0x8]
- str r3, [r1, #0x4]
- str r0, [r1, #0x8]
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_02003008
-FUN_02003008: ; 0x02003008
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r2, #0x0
- add r5, r0, #0x0
- add r6, r1, #0x0
- str r3, [sp, #0x4]
- add r0, r3, #0x0
- add r1, r4, #0x0
- bl AllocFromHeap
- add r7, r0, #0x0
- ldr r0, [sp, #0x4]
- add r1, r4, #0x0
- bl AllocFromHeap
- add r3, r0, #0x0
- add r0, r5, #0x0
- add r1, r6, #0x0
- add r2, r7, #0x0
- str r4, [sp, #0x0]
- bl FUN_02002FF4
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003038
-FUN_02003038: ; 0x02003038
- push {r3-r5, lr}
- add r4, r0, #0x0
- mov r0, #0x14
- add r5, r1, #0x0
- mul r5, r0
- ldr r0, [r4, r5]
- bl FreeToHeap
- add r0, r4, r5
- ldr r0, [r0, #0x4]
- bl FreeToHeap
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02003054
-FUN_02003054: ; 0x02003054
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r0, sp, #0x8
- ldrh r7, [r0, #0x10]
- add r6, r2, #0x0
- mov r0, #0x14
- mul r6, r0
- str r1, [sp, #0x0]
- add r0, r1, #0x0
- ldr r1, [r5, r6]
- lsl r4, r3, #0x1
- add r1, r1, r4
- add r2, r7, #0x0
- bl MIi_CpuCopy16
- add r1, r5, r6
- ldr r1, [r1, #0x4]
- ldr r0, [sp, #0x0]
- add r1, r1, r4
- add r2, r7, #0x0
- bl MIi_CpuCopy16
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003084
-FUN_02003084: ; 0x02003084
- push {r4-r6, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- add r0, r1, #0x0
- add r1, r2, #0x0
- add r2, sp, #0x4
- ldr r4, [sp, #0x1c]
- bl GfGfxLoader_GetPlttData
- add r6, r0, #0x0
- bne _0200309E
- bl GF_AssertFail
-_0200309E:
- cmp r4, #0x0
- bne _020030A6
- ldr r0, [sp, #0x4]
- ldr r4, [r0, #0x8]
-_020030A6:
- add r0, sp, #0x8
- ldrh r0, [r0, #0x18]
- ldr r2, [sp, #0x18]
- mov r1, #0x14
- mul r1, r2
- add r1, r5, r1
- lsl r0, r0, #0x1
- ldr r1, [r1, #0x8]
- add r0, r4, r0
- cmp r0, r1
- bls _020030C0
- bl GF_AssertFail
-_020030C0:
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- add r3, sp, #0x8
- ldr r2, [r1, #0xc]
- ldrh r1, [r3, #0x1c]
- ldrh r3, [r3, #0x18]
- add r0, r5, #0x0
- lsl r1, r1, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x18]
- bl FUN_02003054
- add r0, r6, #0x0
- bl FreeToHeap
- add sp, #0x8
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_020030E8
-FUN_020030E8: ; 0x020030E8
- push {r4, lr}
- sub sp, #0x10
- ldr r4, [sp, #0x18]
- str r4, [sp, #0x0]
- ldr r4, [sp, #0x1c]
- str r4, [sp, #0x4]
- add r4, sp, #0x8
- ldrh r4, [r4, #0x18]
- str r4, [sp, #0x8]
- mov r4, #0x0
- str r4, [sp, #0xc]
- bl FUN_02003084
- add sp, #0x10
- pop {r4, pc}
- .balign 4
diff --git a/arm9/src/font.c b/arm9/src/font.c
index 98885671..e09b0341 100644
--- a/arm9/src/font.c
+++ b/arm9/src/font.c
@@ -20,11 +20,11 @@ const struct FontInfo gFontInfos[5] = {
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
};
-extern u32 FUN_02021590(u32, u16, u32, u16, u32);
-extern void FUN_020215E0(u32, u32, u32);
-extern void FUN_020215C8(u32 param0);
-extern void FUN_02021750(void *, u32);
-extern u32 FUN_020218D8(void *, u16 *str, u32);
+extern struct UnkStruct_0202199C *FUN_02021590(u32, u16, u32, u16, u32);
+extern void FUN_020215E0(struct UnkStruct_0202199C *, u32, u32);
+extern void FUN_020215C8(struct UnkStruct_0202199C *param0);
+extern void FUN_02021750(struct UnkStruct_0202199C *, u32);
+extern u32 FUN_020218D8(struct UnkStruct_0202199C *, u16 *str, u32);
THUMB_FUNC void FUN_02002C14()
{
diff --git a/arm9/src/unk_02002F08.c b/arm9/src/unk_02002F08.c
new file mode 100644
index 00000000..b81da622
--- /dev/null
+++ b/arm9/src/unk_02002F08.c
@@ -0,0 +1,139 @@
+#include "global.h"
+#include "unk_02002F08.h"
+#include "font.h"
+#include "gf_gfx_loader.h"
+#include "string16.h"
+#include "unk_0201B8B8.h"
+
+THUMB_FUNC s32 FUN_02002F08(u32 param0, struct String *str, u32 param2)
+{
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ return StringGetWidth(UNK_02106FC8->unk94[param0], String_c_str(str), param2);
+}
+
+THUMB_FUNC u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3)
+{
+ u32 r0 = FUN_02002E14(param0, str, param2);
+ if (r0 < param3)
+ {
+ return (param3 - r0) / 2;
+ }
+
+ return 0;
+}
+
+THUMB_FUNC u32 FUN_02002F58(const u16 *str)
+{
+ u32 r5 = 1;
+ while (*str != EOS)
+ {
+ if (*str == 0xFFFE)
+ {
+ str = MsgArray_SkipControlCode(str);
+ continue;
+ }
+
+ if (*str == 0xE000)
+ {
+ r5++;
+ str++;
+ continue;
+ }
+
+ str++;
+ }
+
+ return r5;
+}
+
+THUMB_FUNC u32 FUN_02002F90(struct String *str)
+{
+ return FUN_02002F58(String_c_str(str));
+}
+
+THUMB_FUNC s32 FUN_02002F9C(u32 param0, struct String *str)
+{
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ return StringGetWidth_SingleLine_HandleClearToControlCode(
+ UNK_02106FC8->unk94[param0], String_c_str(str));
+}
+
+THUMB_FUNC struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id)
+{
+ struct UnkStruct_02002F08 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02002F08));
+ MI_CpuFill8(ptr, 0, sizeof(struct UnkStruct_02002F08));
+
+ return ptr;
+}
+
+THUMB_FUNC void FUN_02002FEC(struct UnkStruct_02002F08 *ptr)
+{
+ FreeToHeap(ptr);
+}
+
+THUMB_FUNC void FUN_02002FF4(
+ struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size)
+{
+ param0->unk000[param1].unk00 = param2;
+ param0->unk000[param1].unk04 = param3;
+ param0->unk000[param1].unk08 = size;
+}
+
+THUMB_FUNC void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id)
+{
+ void *ptr = AllocFromHeap(heap_id, size);
+ void *ptr2 = AllocFromHeap(heap_id, size);
+
+ FUN_02002FF4(param0, param1, ptr, ptr2, size);
+}
+
+THUMB_FUNC void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1)
+{
+ FreeToHeap(param0->unk000[param1].unk00);
+ FreeToHeap(param0->unk000[param1].unk04);
+}
+
+THUMB_FUNC void FUN_02003054(
+ struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size)
+{
+ MIi_CpuCopy16(param1, param0->unk000[param2].unk00 + offset, size);
+ MIi_CpuCopy16(param1, param0->unk000[param2].unk04 + offset, size);
+}
+
+THUMB_FUNC void FUN_02003084(struct UnkStruct_02002F08 *param0,
+ NarcId narcId,
+ s32 memberId,
+ u32 heap_id,
+ u32 param4,
+ u32 size,
+ u16 offset,
+ u16 param7)
+{
+ NNSG2dPaletteData *pltData;
+ void *ptr = GfGfxLoader_GetPlttData(narcId, memberId, &pltData, heap_id);
+
+ GF_ASSERT(ptr != NULL);
+
+ if (size == 0)
+ {
+ size = pltData->szByte;
+ }
+
+ GF_ASSERT(size + offset * 2 <= param0->unk000[param4].unk08);
+
+ FUN_02003054(param0, pltData->pRawData + param7 * 2, param4, offset, (u16)size);
+ FreeToHeap(ptr);
+}
+
+THUMB_FUNC void FUN_020030E8(struct UnkStruct_02002F08 *param0,
+ NarcId narcId,
+ s32 memberId,
+ u32 heap_id,
+ u32 param4,
+ u32 size,
+ u16 offset)
+{
+ FUN_02003084(param0, narcId, memberId, heap_id, param4, size, offset, 0);
+}
diff --git a/arm9/src/unk_02021934.c b/arm9/src/unk_02021934.c
index ebc600fa..b12e2d8f 100644
--- a/arm9/src/unk_02021934.c
+++ b/arm9/src/unk_02021934.c
@@ -10,9 +10,9 @@
void StrAddChar(struct String * str, u16 val);
-int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6)
+s32 StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6)
{
- int ret = 0;
+ s32 ret = 0;
u32 r4 = 0;
while (*arr != 0xFFFF)
{
@@ -38,9 +38,9 @@ int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6)
return ret;
}
-int StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr)
+s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr)
{
- int ret = 0;
+ s32 ret = 0;
while (*arr != 0xFFFF)
{
if (*arr == 0xFFFE)
diff --git a/include/font.h b/include/font.h
index 3818fb7b..6617f8ef 100644
--- a/include/font.h
+++ b/include/font.h
@@ -10,9 +10,11 @@ struct UnkStruct_02002C14
u8 width;
u8 height;
void *unk84[4];
- void *unk94[4];
+ struct UnkStruct_0202199C *unk94[4];
};
+extern struct UnkStruct_02002C14 *UNK_02106FC8;
+
void FUN_02002C14();
void FUN_02002C50(u32 param0, u32 param1);
void FUN_02002C84(s32 param0, u32 param1);
diff --git a/include/string16.h b/include/string16.h
index bc276ea7..69ea4e30 100644
--- a/include/string16.h
+++ b/include/string16.h
@@ -25,8 +25,8 @@ BOOL StringCompare(struct String *, struct String *);
void CopyU16ArrayToStringN(struct String *, u16 *, u32); // copy
void StringSetEmpty(struct String *); // set empty
struct String * StringDup(struct String *, u32 heap_id);
-int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6);
-int StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr);
+s32 StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6);
+s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct UnkStruct_0202199C * r6, const u16 * arr);
void String_dtor(struct String * str);
void StringCopy(struct String * dest, struct String * src);
void String16_FormatInteger(struct String * str, int num, u32 ndigits, int strConvMode, BOOL whichCharset);
diff --git a/include/unk_02002F08.h b/include/unk_02002F08.h
new file mode 100644
index 00000000..773d9246
--- /dev/null
+++ b/include/unk_02002F08.h
@@ -0,0 +1,38 @@
+#ifndef POKEDIAMOND_UNK_02002F08_H
+#define POKEDIAMOND_UNK_02002F08_H
+
+#include "global.h"
+#include "gf_gfx_loader.h"
+#include "string16.h"
+
+
+struct UnkStruct_02002F08
+{
+ struct
+ {
+ u16 *unk00;
+ u16 *unk04;
+ u32 unk08;
+ u32 unk0c;
+ u32 unk10;
+ } unk000[14];
+
+ u32 unk118;
+ u32 unk11c;
+};
+
+s32 FUN_02002F08(u32 param0, struct String *str, u32 param2);
+u32 FUN_02002F40(u32 param0, struct String *str, u32 param2, u32 param3);
+u32 FUN_02002F58(const u16 *str);
+u32 FUN_02002F90(struct String *str);
+s32 FUN_02002F9C(u32 param0, struct String *str);
+struct UnkStruct_02002F08 *FUN_02002FD0(u32 heap_id);
+void FUN_02002FEC(struct UnkStruct_02002F08 *ptr);
+void FUN_02002FF4(struct UnkStruct_02002F08 *param0, u32 param1, void *param2, void *param3, u32 size);
+void FUN_02003008(struct UnkStruct_02002F08 *param0, u32 param1, u32 size, u32 heap_id);
+void FUN_02003038(struct UnkStruct_02002F08 *param0, u32 param1);
+void FUN_02003054(struct UnkStruct_02002F08 *param0, const void *param1, u32 param2, u32 offset, u16 size);
+void FUN_02003084(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset, u16 param7);
+void FUN_020030E8(struct UnkStruct_02002F08 *param0, NarcId narcId, s32 memberId, u32 heap_id, u32 param4, u32 size, u16 offset);
+
+#endif //POKEDIAMOND_UNK_02002F08_H