summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/unk_02009EAC.c170
-rw-r--r--arm9/src/unk_0200A104.c178
2 files changed, 348 insertions, 0 deletions
diff --git a/arm9/src/unk_02009EAC.c b/arm9/src/unk_02009EAC.c
new file mode 100644
index 00000000..df21ed80
--- /dev/null
+++ b/arm9/src/unk_02009EAC.c
@@ -0,0 +1,170 @@
+#include "global.h"
+#include "unk_02009EAC.h"
+#include "GX_g2.h"
+#include "MI_memory.h"
+#include "heap.h"
+
+
+extern void FUN_020213A0(void);
+extern void FUN_0202135C(void *param0,
+ u32 *param1,
+ u32 (*param2)(u32, u32),
+ u32 (*param3)(u32),
+ void (*param4)(void),
+ u32 param5,
+ u32 param6);
+extern void FUN_020203CC(u32 heap_id);
+extern void FUN_02020404(u32 heap_id);
+
+struct UnkStruct_02009EAC *UNK_021C4670;
+
+THUMB_FUNC void FUN_02009EAC(s32 param0,
+ s32 param1,
+ s32 param2,
+ s32 param3,
+ u32 param4,
+ u32 param5,
+ u32 param6,
+ u32 param7,
+ u32 param8)
+{
+ s32 r0;
+ if (param0 < 4)
+ {
+ r0 = 4;
+ if (param1 > 0x7c)
+ {
+ param1 = param1 - (4 - param0);
+ }
+ }
+ else
+ {
+ r0 = param0;
+ }
+
+ s32 r2;
+ if (param2 < 1)
+ {
+ r2 = 1;
+ if (param3 > 0x1e)
+ {
+ param3 = param3 - (1 - param2);
+ }
+ }
+ else
+ {
+ r2 = param2;
+ }
+
+ FUN_02009EF0(r0, param1, r2, param3, param4, param5, param6, param7, param8);
+}
+
+THUMB_FUNC void FUN_02009EF0(u32 param0,
+ u32 param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ u32 param6,
+ u32 param7,
+ u32 param8)
+{
+ GF_ASSERT(UNK_021C4670 == NULL);
+ UNK_021C4670 = AllocFromHeap(param8, sizeof(struct UnkStruct_02009EAC));
+ GF_ASSERT(UNK_021C4670);
+
+ UNK_021C4670->heap_id = param8;
+
+ GF_ASSERT(NNS_G2dGetNewOamManagerInstance(
+ &UNK_021C4670->oamManagers[0], param0, param1, param2, param3, 0));
+ GF_ASSERT(NNS_G2dGetNewOamManagerInstance(
+ &UNK_021C4670->oamManagers[1], param4, param5, param6, param7, 1));
+}
+
+THUMB_FUNC void FUN_02009F80(void)
+{
+ if (UNK_021C4670 != NULL)
+ {
+ NNS_G2dApplyAndResetOamManagerBuffer(&UNK_021C4670->oamManagers[0]);
+ NNS_G2dApplyAndResetOamManagerBuffer(&UNK_021C4670->oamManagers[1]);
+ }
+}
+
+THUMB_FUNC void FUN_02009FA0(void)
+{
+ GF_ASSERT(UNK_021C4670);
+
+ FUN_0200A064(UNK_021C4670->heap_id);
+ FUN_0200A06C(UNK_021C4670->heap_id);
+
+ FreeToHeap(UNK_021C4670);
+ UNK_021C4670 = NULL;
+}
+
+THUMB_FUNC void FUN_02009FD8(void *param0, u32 *param1, u32 param2, u32 param3)
+{
+ GF_ASSERT(UNK_021C4670);
+
+ if (param2 == 1)
+ {
+ FUN_0202135C(param0, param1, FUN_0200A074, FUN_0200A0B8, FUN_020213A0, param2, param3);
+ return;
+ }
+
+ FUN_0202135C(param0, param1, FUN_0200A094, FUN_0200A0DC, FUN_020213A0, param2, param3);
+}
+
+THUMB_FUNC NNSG2dOamManager *FUN_0200A03C(u32 param0)
+{
+ GF_ASSERT(UNK_021C4670);
+ if (param0 == 0)
+ {
+ return &UNK_021C4670->oamManagers[0];
+ }
+ else
+ {
+ return &UNK_021C4670->oamManagers[1];
+ }
+}
+
+THUMB_FUNC void FUN_0200A064(u32 heap_id)
+{
+ FUN_020203CC(heap_id);
+}
+
+THUMB_FUNC void FUN_0200A06C(u32 heap_id)
+{
+ FUN_02020404(heap_id);
+}
+
+THUMB_FUNC u32 FUN_0200A074(u32 param0, u32 param1)
+{
+ u32 res = NNS_G2dEntryOamManagerOamWithAffineIdx(&UNK_021C4670->oamManagers[0], param0, param1);
+ GF_ASSERT(res);
+
+ return res;
+}
+
+THUMB_FUNC u32 FUN_0200A094(u32 param0, u32 param1)
+{
+ u32 res = NNS_G2dEntryOamManagerOamWithAffineIdx(&UNK_021C4670->oamManagers[1], param0, param1);
+ GF_ASSERT(res);
+
+ return res;
+}
+
+THUMB_FUNC u32 FUN_0200A0B8(u32 param0)
+{
+ u32 res = NNS_G2dEntryOamManagerAffine(&UNK_021C4670->oamManagers[0], param0);
+ GF_ASSERT(res != 0xFFFE);
+
+ return res;
+}
+
+THUMB_FUNC u32 FUN_0200A0DC(u32 param0)
+{
+ u32 res = NNS_G2dEntryOamManagerAffine(&UNK_021C4670->oamManagers[1], param0);
+ GF_ASSERT(res != 0xFFFE);
+
+ return res;
+}
diff --git a/arm9/src/unk_0200A104.c b/arm9/src/unk_0200A104.c
new file mode 100644
index 00000000..a0190301
--- /dev/null
+++ b/arm9/src/unk_0200A104.c
@@ -0,0 +1,178 @@
+#include "global.h"
+#include "unk_0200A104.h"
+#include "GX_g2.h"
+#include "MI_memory.h"
+
+struct UnkStruct_0200A104 UNK_021C4694;
+
+struct UnkStruct_0200A104 UNK_021C4674;
+
+THUMB_FUNC void FUN_0200A104(struct UnkStruct_0200A104 *param0)
+{
+ u32 r4 = 0;
+
+ if (param0->unk0a != param0->unk1a + param0->unk10 * param0->unk14 &&
+ param0->unk1a != param0->unk0a)
+ {
+ param0->unk1a += param0->unk10 * param0->unk14;
+ param0->unk18 += param0->unk16;
+
+ if (param0->unk18 >= param0->unk08)
+ {
+ param0->unk1a += param0->unk10;
+ if (param0->unk1a != param0->unk0a)
+ {
+ param0->unk18 -= param0->unk08;
+ }
+ else
+ {
+ r4 = 1;
+ }
+ }
+ }
+ else
+ {
+ param0->unk1a = param0->unk0a;
+ r4 = 1;
+ }
+
+ if ((param0->unk04 & 1) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04000050, param0->unk00, param0->unk1a);
+ }
+ else if ((param0->unk04 & 2) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04001050, param0->unk00, param0->unk1a);
+ }
+
+ if (r4 == 1)
+ {
+ param0->unk1c = 0;
+ }
+}
+
+THUMB_FUNC void FUN_0200A1A0(
+ struct UnkStruct_0200A104 *param0, u16 param1, s16 param2, s16 param3, u32 param4, u32 param5)
+{
+ GF_ASSERT(param0->unk1c == 0);
+
+ param0->unk1c = 1;
+ param0->unk00 = (u8)param4;
+ param0->unk04 = (u8)param5;
+ param0->unk08 = param1;
+ param0->unk0a = param2;
+ param0->unk1a = param3;
+ param0->unk12 = param3 - param2;
+
+ if (param0->unk12 > 0)
+ {
+ param0->unk10 = -1;
+ }
+ else
+ {
+ param0->unk10 = 1;
+ param0->unk12 *= -1;
+ }
+
+ param0->unk14 = param0->unk12 / param1;
+ param0->unk16 = param0->unk12 % param1;
+ param0->unk18 = 0;
+}
+
+THUMB_FUNC void FUN_0200A208(u16 param0, s16 param1, s16 param2, u32 param3, u32 param4)
+{
+ if (param0 != 0)
+ {
+ if ((param4 & 1) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04000050, param3, param2);
+ FUN_0200A1A0(&UNK_021C4694, param0, param1, param2, param3, 1);
+ }
+
+ if ((param4 & 2) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04001050, param3, param2);
+ FUN_0200A1A0(&UNK_021C4674, param0, param1, param2, param3, 2);
+ }
+ }
+}
+
+THUMB_FUNC void FUN_0200A274(fx32 brightness, fx32 param1, u32 param2)
+{
+
+ if ((param2 & 1) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04000050, param1, brightness);
+ }
+
+ if ((param2 & 2) != 0)
+ {
+ G2x_SetBlendBrightness_(0x04001050, param1, brightness);
+ }
+
+ FUN_0200A2D8(param2);
+}
+
+THUMB_FUNC void FUN_0200A2AC(void)
+{
+ MI_CpuFill8(&UNK_021C4694, 0, sizeof(struct UnkStruct_0200A104));
+ MI_CpuFill8(&UNK_021C4674, 0, sizeof(struct UnkStruct_0200A104));
+
+ UNK_021C4694.unk1c = 0;
+ UNK_021C4674.unk1c = 0;
+}
+
+THUMB_FUNC void FUN_0200A2D8(u32 param0)
+{
+ if (param0 & 1)
+ {
+ MI_CpuFill8(&UNK_021C4694, 0, sizeof(struct UnkStruct_0200A104));
+ UNK_021C4694.unk1c = 0;
+ }
+
+ if (param0 & 2)
+ {
+ MI_CpuFill8(&UNK_021C4674, 0, sizeof(struct UnkStruct_0200A104));
+ UNK_021C4674.unk1c = 0;
+ }
+}
+
+THUMB_FUNC void FUN_0200A318(void)
+{
+ if (UNK_021C4694.unk1c)
+ {
+ FUN_0200A104(&UNK_021C4694);
+ }
+
+ if (UNK_021C4674.unk1c)
+ {
+ FUN_0200A104(&UNK_021C4674);
+ }
+}
+
+THUMB_FUNC u32 FUN_0200A344(u32 param0)
+{
+ if (param0 == 3)
+ {
+ if (UNK_021C4694.unk1c == 0 && UNK_021C4674.unk1c == 0)
+ {
+ return 1;
+ }
+ }
+ else if (param0 == 1)
+ {
+ if (UNK_021C4694.unk1c == 0)
+ {
+ return 1;
+ }
+ }
+ else if (param0 == 2)
+ {
+ if (UNK_021C4674.unk1c == 0)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}