diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-24 13:08:18 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-24 13:08:18 -0500 |
commit | 5a262eec73614998a87f3466a0c0924c7317be36 (patch) | |
tree | 5a83535cc8d1ff77fbb9c062cf2a8689a59dcbaa | |
parent | 351ee943db92ac091197512921a0e58b286b7bb4 (diff) |
sub_812C3F8
-rw-r--r-- | asm/fame_checker.s | 241 | ||||
-rw-r--r-- | include/bg.h | 6 | ||||
-rw-r--r-- | src/bg.c | 18 | ||||
-rw-r--r-- | src/fame_checker.c | 118 | ||||
-rw-r--r-- | sym_ewram.txt | 18 |
5 files changed, 130 insertions, 271 deletions
diff --git a/asm/fame_checker.s b/asm/fame_checker.s index d0236d696..949de51f9 100644 --- a/asm/fame_checker.s +++ b/asm/fame_checker.s @@ -5,247 +5,6 @@ .text - thumb_func_start sub_812C3F8 -sub_812C3F8: @ 812C3F8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - ldr r0, _0812C41C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x7 - bls _0812C410 - b _0812C626 -_0812C410: - lsls r0, 2 - ldr r1, _0812C420 @ =_0812C424 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812C41C: .4byte gMain -_0812C420: .4byte _0812C424 - .align 2, 0 -_0812C424: - .4byte _0812C444 - .4byte _0812C450 - .4byte _0812C456 - .4byte _0812C4C0 - .4byte _0812C540 - .4byte _0812C578 - .4byte _0812C5A0 - .4byte _0812C5D4 -_0812C444: - movs r0, 0 - bl SetVBlankCallback - bl sub_812D420 - b _0812C5BE -_0812C450: - bl sub_812D558 - b _0812C5BE -_0812C456: - ldr r6, _0812C4B0 @ =gUnknown_203B0F0 - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - bl AllocZeroed - str r0, [r6] - ldr r1, _0812C4B4 @ =gUnknown_203B0F4 - mov r8, r1 - movs r0, 0x80 - lsls r0, 5 - bl AllocZeroed - mov r1, r8 - str r0, [r1] - ldr r5, _0812C4B8 @ =gUnknown_203B0F8 - adds r0, r4, 0 - bl AllocZeroed - str r0, [r5] - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0812C4BC @ =gUnknown_845FBF4 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r1, [r6] - movs r0, 0x3 - bl SetBgTilemapBuffer - ldr r1, [r5] - movs r0, 0x2 - bl SetBgTilemapBuffer - mov r0, r8 - ldr r1, [r0] - movs r0, 0x1 - bl SetBgTilemapBuffer - bl sub_812D594 - b _0812C5BE - .align 2, 0 -_0812C4B0: .4byte gUnknown_203B0F0 -_0812C4B4: .4byte gUnknown_203B0F4 -_0812C4B8: .4byte gUnknown_203B0F8 -_0812C4BC: .4byte gUnknown_845FBF4 -_0812C4C0: - ldr r1, _0812C52C @ =gUnknown_8E9F260 - movs r2, 0xA5 - lsls r2, 5 - movs r0, 0x3 - movs r3, 0 - bl LoadBgTiles - ldr r1, _0812C530 @ =gUnknown_8EA0700 - movs r5, 0x20 - str r5, [sp] - str r5, [sp, 0x4] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - ldr r4, _0812C534 @ =gUnknown_8E9F220 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x40 - bl LoadPalette - adds r4, 0x20 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812C538 @ =gUnknown_8EA0F00 - str r5, [sp] - str r5, [sp, 0x4] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect - ldr r1, _0812C53C @ =gUnknown_845C600 - str r5, [sp] - str r5, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r2, 0x1E - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x2 - bl stdpal_get - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - b _0812C5BE - .align 2, 0 -_0812C52C: .4byte gUnknown_8E9F260 -_0812C530: .4byte gUnknown_8EA0700 -_0812C534: .4byte gUnknown_8E9F220 -_0812C538: .4byte gUnknown_8EA0F00 -_0812C53C: .4byte gUnknown_845C600 -_0812C540: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0812C626 - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - b _0812C5BE -_0812C578: - ldr r0, _0812C598 @ =gUnknown_845FC04 - bl InitWindows - bl DeactivateAllTextPrinters - bl sub_812CEC0 - ldr r4, _0812C59C @ =gUnknown_203B100 - movs r0, 0x88 - bl AllocZeroed - str r0, [r4] - bl sub_812DB28 - b _0812C5BE - .align 2, 0 -_0812C598: .4byte gUnknown_845FC04 -_0812C59C: .4byte gUnknown_203B100 -_0812C5A0: - bl sub_812C648 - movs r0, 0 - bl sub_812D1A8 - bl sub_812CE9C - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_0812C5BE: - ldr r1, _0812C5D0 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0812C626 - .align 2, 0 -_0812C5D0: .4byte gMain -_0812C5D4: - bl sub_812D584 - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x7 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x8 - bl SetGpuReg - ldr r0, _0812C634 @ =sub_812C380 - bl SetVBlankCallback - ldr r0, _0812C638 @ =gUnknown_203B0FC - ldr r1, [r0] - movs r4, 0 - movs r0, 0 - strh r0, [r1, 0x4] - bl sub_812E000 - movs r0, 0x1 - movs r1, 0x4 - bl sub_812E178 - ldr r0, _0812C63C @ =sub_812C664 - movs r1, 0x8 - bl CreateTask - ldr r0, _0812C640 @ =sub_812C394 - bl SetMainCallback2 - ldr r0, _0812C644 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - strb r4, [r0] -_0812C626: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812C634: .4byte sub_812C380 -_0812C638: .4byte gUnknown_203B0FC -_0812C63C: .4byte sub_812C664 -_0812C640: .4byte sub_812C394 -_0812C644: .4byte gMain - thumb_func_end sub_812C3F8 - thumb_func_start sub_812C648 sub_812C648: @ 812C648 push {lr} diff --git a/include/bg.h b/include/bg.h index 55927a5a4..003ffc916 100644 --- a/include/bg.h +++ b/include/bg.h @@ -77,9 +77,9 @@ void UnsetBgTilemapBuffer(u8 bg); void* GetBgTilemapBuffer(u8 bg); void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset); void CopyBgTilemapBufferToVram(u8 bg); -void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height); -void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette); -void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2); +void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height); +void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette); +void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2); void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height); void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette); void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta); @@ -391,7 +391,7 @@ void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numT } } #else -__attribute__((naked)) +NAKED void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) { asm(".syntax unified\n\ @@ -634,7 +634,7 @@ bool8 IsDma3ManagerBusyWithBgCopy(void) return FALSE; } #else -__attribute__((naked)) +NAKED bool8 IsDma3ManagerBusyWithBgCopy(void) { asm("push {r4-r7,lr}\n\ @@ -1065,7 +1065,7 @@ void CopyBgTilemapBufferToVram(u8 bg) } } -void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height) +void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) { u16 destX16; u16 destY16; @@ -1077,7 +1077,7 @@ void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u { case 0: { - u16 * srcCopy = src; + const u16 * srcCopy = src; for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) @@ -1089,7 +1089,7 @@ void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u } case 1: { - u8 * srcCopy = src; + const u8 * srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); for (destY16 = destY; destY16 < (destY + height); destY16++) { @@ -1104,7 +1104,7 @@ void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u } } -void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) +void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) { CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); } @@ -1151,8 +1151,8 @@ void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWid } } }*/ -__attribute__((naked)) -void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) +NAKED +void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) { asm("push {r4-r7,lr}\n\ mov r7, r10\n\ @@ -1598,7 +1598,7 @@ void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 pal *dest = test; } #else -__attribute__((naked)) +NAKED void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2) { asm("push {r4-r6,lr}\n\ diff --git a/src/fame_checker.c b/src/fame_checker.c index 889b96214..d311ecb94 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1,15 +1,21 @@ #include "global.h" #include "constants/songs.h" +#include "bg.h" +#include "gpu_regs.h" #include "palette.h" #include "task.h" #include "malloc.h" #include "main.h" #include "sound.h" +#include "text.h" +#include "window.h" +#include "text_window.h" struct FameCheckerData { u32 unk_00; - u8 filler_04[5]; + u16 unk_04; + u8 filler_06[3]; u8 unk_09; u8 unk_0A; u8 unk_0B; @@ -18,9 +24,40 @@ struct FameCheckerData u8 unk_23_1:7; }; +struct FameCheckerData2 +{ + u8 filler_00[0x88]; +}; + +EWRAM_DATA u16 * gUnknown_203B0F0 = NULL; +EWRAM_DATA u16 * gUnknown_203B0F4 = NULL; +EWRAM_DATA u16 * gUnknown_203B0F8 = NULL; EWRAM_DATA struct FameCheckerData * gUnknown_203B0FC = NULL; +EWRAM_DATA struct FameCheckerData2 * gUnknown_203B100 = NULL; +EWRAM_DATA u32 gUnknown_203B104 = 0; void sub_812C3F8(void); +void sub_812C648(void); +void sub_812C664(u8 taskId); +void sub_812CE9C(void); +void sub_812CEC0(void); +void sub_812D1A8(u8 a0); +void sub_812D420(void); +void sub_812D558(void); +void sub_812D584(void); +void sub_812D594(void); +void sub_812DB28(void); +void sub_812E000(void); +void sub_812E178(u8 a0, s16 a1); + +extern const struct BgTemplate gUnknown_845FBF4[4]; +extern const struct WindowTemplate gUnknown_845FC04[]; +extern const u16 gUnknown_845C600[0x40]; + +extern const u16 gUnknown_8E9F220[0x30]; +extern const u16 gUnknown_8E9F260[0xa50]; +extern const u16 gUnknown_8EA0700[0x400]; +extern const u16 gUnknown_8EA0F00[0x400]; void sub_812C380(void) { @@ -49,3 +86,82 @@ void sub_812C3AC(u32 a0) PlaySE(SE_W202); SetMainCallback2(sub_812C3F8); } + +void sub_812C3F8(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + sub_812D420(); + gMain.state++; + break; + case 1: + sub_812D558(); + gMain.state++; + break; + case 2: + gUnknown_203B0F0 = AllocZeroed(0x800); + gUnknown_203B0F4 = AllocZeroed(0x1000); + gUnknown_203B0F8 = AllocZeroed(0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_845FBF4, ARRAY_COUNT(gUnknown_845FBF4)); + SetBgTilemapBuffer(3, gUnknown_203B0F0); + SetBgTilemapBuffer(2, gUnknown_203B0F8); + SetBgTilemapBuffer(1, gUnknown_203B0F4); + sub_812D594(); + gMain.state++; + break; + case 3: + LoadBgTiles(3, gUnknown_8E9F260, sizeof(gUnknown_8E9F260), 0); + CopyToBgTilemapBufferRect(3, gUnknown_8EA0700, 0, 0, 32, 32); + LoadPalette(gUnknown_8E9F220 + 0x00, 0x00, 0x40); + LoadPalette(gUnknown_8E9F220 + 0x10, 0x10, 0x20); + CopyToBgTilemapBufferRect(2, gUnknown_8EA0F00, 0, 0, 32, 32); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_845C600, 30, 0, 32, 32, 0x11); + LoadPalette(stdpal_get(2), 0xF0, 0x20); + gMain.state++; + break; + case 4: + if (IsDma3ManagerBusyWithBgCopy() != TRUE) + { + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + gMain.state++; + } + break; + case 5: + InitWindows(gUnknown_845FC04); + DeactivateAllTextPrinters(); + sub_812CEC0(); + gUnknown_203B100 = AllocZeroed(sizeof(struct FameCheckerData2)); + sub_812DB28(); + gMain.state++; + break; + case 6: + sub_812C648(); + sub_812D1A8(0); + sub_812CE9C(); + BeginNormalPaletteFade(0xFFFFFFFF,0, 16, 0, 0); + gMain.state++; + break; + case 7: + sub_812D584(); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD); + SetGpuReg(REG_OFFSET_BLDALPHA, 0x07); + SetGpuReg(REG_OFFSET_BLDY, 0x08); + SetVBlankCallback(sub_812C380); + gUnknown_203B0FC->unk_04 = 0; + sub_812E000(); + sub_812E178(1, 4); + CreateTask(sub_812C664, 0x08); + SetMainCallback2(sub_812C394); + gMain.state = 0; + break; + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 16a1e7ddd..83fdcf763 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1556,23 +1556,7 @@ gUnknown_203B0EC: @ 203B0EC gUnknown_203B0EE: @ 203B0EE .space 0x2 -gUnknown_203B0F0: @ 203B0F0 - .space 0x4 - -gUnknown_203B0F4: @ 203B0F4 - .space 0x4 - -gUnknown_203B0F8: @ 203B0F8 - .space 0x4 - -gUnknown_203B0FC: @ 203B0FC - .space 0x4 - -gUnknown_203B100: @ 203B100 - .space 0x4 - -gUnknown_203B104: @ 203B104 - .space 0x4 + .include "src/fame_checker.o" gUnknown_203B108: @ 203B108 .space 0x4 |