diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/communication_error.c | 2 | ||||
-rw-r--r-- | arm9/src/error_message_reset.c | 2 | ||||
-rw-r--r-- | arm9/src/main.c | 3 | ||||
-rw-r--r-- | arm9/src/unk_02008AA4.c | 2 | ||||
-rw-r--r-- | arm9/src/unk_02009EAC.c | 169 | ||||
-rw-r--r-- | arm9/src/unk_0200A104.c | 178 | ||||
-rw-r--r-- | arm9/src/unk_0200BB14.c | 12 | ||||
-rw-r--r-- | arm9/src/wfc_user_info_warning.c | 2 |
8 files changed, 353 insertions, 17 deletions
diff --git a/arm9/src/communication_error.c b/arm9/src/communication_error.c index 73345af1..9a34fc75 100644 --- a/arm9/src/communication_error.c +++ b/arm9/src/communication_error.c @@ -6,8 +6,8 @@ #include "msgdata.h" #include "msgdata/msg.naix" #include "text.h" +#include "unk_0200A104.h" -extern void FUN_0200A274(fx32 brightness, fx32, u32); extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c index d49e8e51..bf8ad0f1 100644 --- a/arm9/src/error_message_reset.c +++ b/arm9/src/error_message_reset.c @@ -6,6 +6,7 @@ #include "bg_window.h" #include "PAD_pad.h" #include "font.h" +#include "unk_0200A104.h" const struct WindowTemplate UNK_020FF49C = { @@ -46,7 +47,6 @@ extern void FUN_0200E3A0(PMLCDTarget, int); extern void FUN_0200CB00(struct BgConfig *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); extern void FUN_0200CCA4(struct Window *param0, u32 param1, u32 param2, u32 param3); extern void FUN_0200E394(u32 param0); -extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); THUMB_FUNC void VBlankHandler() { diff --git a/arm9/src/main.c b/arm9/src/main.c index fb4f8707..aa4da4bb 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -18,6 +18,7 @@ #include "wfc_user_info_warning.h" #include "module_52.h" #include "font.h" +#include "unk_0200A104.h" FS_EXTERN_OVERLAY(MODULE_52); FS_EXTERN_OVERLAY(MODULE_63); @@ -32,13 +33,11 @@ extern void FUN_02022294(void); extern void GF_InitRTCWork(void); extern int FUN_020337E8(int); extern void FUN_02089D90(int); -extern void FUN_0200A2AC(void); extern void FUN_02015E30(void); extern void FUN_0201B5CC(void *); extern void GF_RTC_UpdateOnFrame(void); extern void FUN_02015E60(void); extern void FUN_020222C4(void); -extern void FUN_0200A318(void); extern void FUN_0200E2D8(void); extern struct Unk21DBE18 MOD63_021DBE18; diff --git a/arm9/src/unk_02008AA4.c b/arm9/src/unk_02008AA4.c index 1cabb887..9a7dfc75 100644 --- a/arm9/src/unk_02008AA4.c +++ b/arm9/src/unk_02008AA4.c @@ -4,9 +4,9 @@ #include "heap.h" #include "unk_0200BB14.h" #include "unk_02008DEC.h" +#include "unk_02009EAC.h" extern void FUN_0202134C(void *, u32); -extern void FUN_02009FD8(void *param0, u32 *param1, u32 param2, u32 param3); extern u32 FUN_0201FCB0(u32 *); extern void FUN_02021390(u32, u32 *); extern void FUN_0201D194(u32, u32, u32); diff --git a/arm9/src/unk_02009EAC.c b/arm9/src/unk_02009EAC.c new file mode 100644 index 00000000..b673eb1b --- /dev/null +++ b/arm9/src/unk_02009EAC.c @@ -0,0 +1,169 @@ +#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(s32 param0, + s32 param1, + s32 param2, + s32 param3, + u32 param4, + u32 param5, + u32 param6, + u32 param7, + u32 heap_id) +{ + GF_ASSERT(UNK_021C4670 == NULL); + UNK_021C4670 = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02009EAC)); + GF_ASSERT(UNK_021C4670); + + UNK_021C4670->heap_id = heap_id; + + GF_ASSERT(NNS_G2dGetNewOamManagerInstance( + &UNK_021C4670->oamManagers[0], (u16)param0, (u16)param1, (u16)param2, (u16)param3, 0)); + GF_ASSERT(NNS_G2dGetNewOamManagerInstance( + &UNK_021C4670->oamManagers[1], (u16)param4, (u16)param5, (u16)param6, (u16)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..407ac34d --- /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_(reg_addr_G2_BLDCNT, param0->unk00, param0->unk1a); + } + else if ((param0->unk04 & 2) != 0) + { + G2x_SetBlendBrightness_(reg_addr_G2S_DB_BLDCNT, 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, fx32 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 = (s16)(param3 - param2); + + if (param0->unk12 > 0) + { + param0->unk10 = -1; + } + else + { + param0->unk10 = 1; + param0->unk12 *= -1; + } + + param0->unk14 = (s16)(param0->unk12 / param1); + param0->unk16 = (u16)(param0->unk12 % param1); + param0->unk18 = 0; +} + +THUMB_FUNC void FUN_0200A208(u16 param0, s16 param1, s16 param2, fx32 param3, u32 param4) +{ + if (param0 != 0) + { + if ((param4 & 1) != 0) + { + G2x_SetBlendBrightness_(reg_addr_G2_BLDCNT, param3, param2); + FUN_0200A1A0(&UNK_021C4694, param0, param1, param2, param3, 1); + } + + if ((param4 & 2) != 0) + { + G2x_SetBlendBrightness_(reg_addr_G2S_DB_BLDCNT, 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_(reg_addr_G2_BLDCNT, param1, brightness); + } + + if ((param2 & 2) != 0) + { + G2x_SetBlendBrightness_(reg_addr_G2S_DB_BLDCNT, 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; +} diff --git a/arm9/src/unk_0200BB14.c b/arm9/src/unk_0200BB14.c index 95a854d7..d862ad2d 100644 --- a/arm9/src/unk_0200BB14.c +++ b/arm9/src/unk_0200BB14.c @@ -4,31 +4,21 @@ #include "heap.h" #include "unk_02008AA4.h" #include "unk_02008DEC.h" +#include "unk_02009EAC.h" extern void FUN_0201D060(u32 *param0, u32 param1, u32 param2); extern void FUN_0201E00C(u32 param0, u32 param1); extern void NNS_G2dInitOamManagerModule(); -extern void FUN_02009EAC(u32 param0, - u32 param1, - u32 param2, - u32 param3, - u32 param4, - u32 param5, - u32 param6, - u32 param7, - u32 param8); extern u32 FUN_0201C328(u32 param0, u32 param1); extern void FUN_0201D168(); extern void FUN_0201E0BC(); extern void FUN_0201FFC8(u32 param0); extern void FUN_0201FDEC(u32 param0); -extern void FUN_02009F80(); extern void FUN_0201C348(); extern void FUN_0201FD58(u32 param0); extern void FUN_0201C350(u32 param0); extern void FUN_0201D12C(); extern void FUN_0201E08C(); -extern void FUN_02009FA0(); extern u32 FUN_0201FE94(struct UnkStruct_0200BB14_4 *param0); extern void FUN_02020130(u32 param0, u32 param1); extern void FUN_02020248(u32 param0, u32 param1); diff --git a/arm9/src/wfc_user_info_warning.c b/arm9/src/wfc_user_info_warning.c index d9edd94c..4ba4166c 100644 --- a/arm9/src/wfc_user_info_warning.c +++ b/arm9/src/wfc_user_info_warning.c @@ -10,9 +10,9 @@ #include "string16.h" #include "text.h" #include "wfc_user_info_warning.h" +#include "unk_0200A104.h" extern void FUN_02002ED0(enum GFBgLayer layer, u32 base_addr, u32 heap_id); -extern void FUN_0200A274(fx32 brightness, fx32, u32); extern void FUN_0200CB00(struct BgConfig* bg_config, enum GFBgLayer layer, u32 num_tiles, u32, u8, u32 heap_id); extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_value, u32 palette_num); extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); |