summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/fame_checker.s241
-rw-r--r--include/bg.h6
-rw-r--r--src/bg.c18
-rw-r--r--src/fame_checker.c118
-rw-r--r--sym_ewram.txt18
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);
diff --git a/src/bg.c b/src/bg.c
index df91e9d4a..5cbd7658e 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -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