Fakematch sub_80052BC, Match sub_8005304

This commit is contained in:
Kermalis 2023-08-15 06:47:56 -04:00
parent 7bcc6e0ea6
commit 088162e8bd
17 changed files with 151 additions and 126 deletions

View File

@ -5,79 +5,6 @@
.text
thumb_func_start sub_80052BC
sub_80052BC:
push {r4-r6,lr}
adds r3, r0, 0
ldr r0, [r3, 0x4]
cmp r0, 0
beq _080052F2
ldr r5, _080052F8
ldr r6, _080052FC
ldr r4, _08005300
_080052CC:
ldr r2, [r5]
cmp r2, r6
bcs _080052F2
ldr r0, [r3, 0x4]
str r0, [r2]
ldr r0, [r3]
str r0, [r2, 0x4]
ldr r1, [r4]
str r1, [r2, 0x8]
ldr r0, [r3, 0x4]
adds r1, r0
str r1, [r4]
adds r0, r2, 0
adds r0, 0xC
str r0, [r5]
adds r3, 0x8
ldr r0, [r3, 0x4]
cmp r0, 0
bne _080052CC
_080052F2:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080052F8: .4byte gUnknown_203B074
_080052FC: .4byte gCharMemCursor
_08005300: .4byte gCharMemCursor
thumb_func_end sub_80052BC
thumb_func_start sub_8005304
sub_8005304:
push {r4,lr}
ldr r4, _0800530C
b _0800532A
.align 2, 0
_0800530C: .4byte gUnknown_20266B0
_08005310:
ldr r1, [r4, 0x4]
cmp r1, 0
beq _08005320
ldr r0, [r4, 0x8]
ldr r2, [r4]
bl CpuCopy
b _08005328
_08005320:
ldr r0, [r4, 0x8]
ldr r1, [r4]
bl CpuClear
_08005328:
adds r4, 0xC
_0800532A:
ldr r0, _08005338
ldr r0, [r0]
cmp r4, r0
bcc _08005310
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08005338: .4byte gUnknown_203B074
thumb_func_end sub_8005304
thumb_func_start sub_800533C
sub_800533C:
push {r4-r7,lr}

View File

@ -1,8 +1,12 @@
#ifndef GUARD_CPU_H
#define GUARD_CPU_H
void CpuClear(void *, s32);
void CpuCopy(void *, void *, s32);
void nullsub_23(bool8);
void SetWindowTitle(char *);
void sub_800CDA8(u32);
u32 sub_800CDC8(void);
void VBlank_CB(void);
void sub_800CDA8(u32);
#endif //GUARD_CPU_H

View File

@ -31,6 +31,22 @@ struct SpriteList
u32 unk804;
};
// size: 0xC
struct unkStruct_20266B0
{
/* 0x0 */ s32 byteCount;
/* 0x4 */ void *src;
/* 0x8 */ void *dest;
};
// size: 0x8
struct UnkSpriteMem
{
/* 0x0 */ void *src;
/* 0x4 */ s32 byteCount;
};
void AddSprite(struct unkSprite *, s32, struct UnkSpriteMem *, struct unkStruct_2039DB0 *);
void BlinkSavingIcon(void);
void CopySpritesToOam(void);
void InitSprites(void);
@ -38,8 +54,6 @@ void ResetSprites(bool8);
void SetSavingIconCoords(struct Position *);
void sub_8004E8C(struct unkStruct_2039DB0 *);
void sub_8005180(void);
// sprite.s
extern void AddSprite(struct unkSprite *, s32, u32 *, struct unkStruct_2039DB0 *);
void sub_8005304(void);
#endif // GUARD_SPRITE_H

View File

@ -1,5 +1,6 @@
#include "global.h"
#include "bg_palette_buffer.h"
#include "cpu.h"
#define BG_PALETTE_BUFFER_SIZE 512
#define BG_PALETTE_BUFFER_CHUNK_SIZE 16
@ -7,8 +8,6 @@
EWRAM_DATA bool8 gBGPaletteUsed[BG_PALETTE_BUFFER_SIZE / BG_PALETTE_BUFFER_CHUNK_SIZE] = {0};
EWRAM_DATA u16 gBGPaletteBuffer[BG_PALETTE_BUFFER_SIZE] = {0};
extern void CpuCopy(void* src, void* dest, u32 size);
#ifndef NONMATCHING
NAKED
#endif

View File

@ -27,7 +27,7 @@ void xxx_dungeon_8001340(u32 r0)
NDS_LoadOverlay_GroundMain();
}
void nullsub_3(void)
void nullsub_3(s32 a0, s32 a1)
{
}

View File

@ -30,7 +30,6 @@ extern void SetWindowBGColor(void);
extern void LoadItemParameters(void);
extern void LoadMailInfo(void);
extern void sub_800CD64(u32, u32);
extern void SetWindowTitle(char *);
extern void sub_800DAAC(void);
extern void sub_800135C(void);
extern void xxx_script_related_8001334(u32);
@ -51,7 +50,6 @@ extern void nullsub_8(u32);
extern void sub_80060EC(void);
extern void sub_8011860(void);
extern void sub_800CB20(void);
extern void sub_8005304(void);
extern void TransferBGPaletteBuffer(void);
extern void xxx_call_update_bg_vram(void);
extern void sub_8009908(void);

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "cpu.h"
#include "file_system.h"
#include "text1.h"
@ -23,7 +24,6 @@ struct unkStruct_202D038
extern struct unkStruct_202D038 gUnknown_202D038[8];
extern void CpuCopy(void* dest, void *src, s32 size);
extern void SetBGPaletteBufferColorArray(s32 index, void *colorArray);
extern void sub_8009A1C(u32);
u32 sub_80063B0(void);

View File

@ -38,7 +38,6 @@ EWRAM_DATA s16 gUnknown_202DE24;
void nullsub_8(u32);
void sub_8005838(u32, u32);
extern void sub_8005304(void);
extern void TransferBGPaletteBuffer(void);
extern void xxx_call_update_bg_vram(void);
extern void sub_8009908(void);

View File

@ -8,7 +8,6 @@ extern void sub_8011860();
extern void xxx_draw_string_80144C4();
extern void nullsub_8(u8);
extern void sub_800CB20();
extern void sub_8005304();
extern void TransferBGPaletteBuffer();
extern void xxx_call_update_bg_vram();
extern void sub_8009908();

View File

@ -20,30 +20,32 @@ void SetWindowTitle(char *title)
{
}
void nullsub_23(void)
void nullsub_23(bool8 a0)
{
}
// Unused
void nullsub_182(void)
{
}
u32 sub_800CDE0(void)
// Unused
bool8 sub_800CDE0(void)
{
return 1;
return TRUE;
}
void CpuCopy(void* dest, void *src, s32 size)
void CpuCopy(void *dest, void *src, s32 size)
{
CpuCopy32(src, dest, size);
}
void CpuClear(void* dest, s32 size)
void CpuClear(void *dest, s32 size)
{
CpuFill32(NULL, dest, size);
}
void CpuFill(void* dest, void *value, s32 size)
void CpuFill(void *dest, void *value, s32 size)
{
CpuFill32(value, dest, size);
}
@ -52,12 +54,12 @@ void CpuFill(void* dest, void *value, s32 size)
void VBlank_CB(void)
{
// TODO this is so gross.. looks like a macro or something else but I don't want to deal with this rn
REG_DMA0CNT_H = (REG_DMA0CNT_H | DMA_ENABLE) & 0xcdff;
REG_DMA0CNT_H = (REG_DMA0CNT_H | DMA_ENABLE) & 0xCDFF;
asm("mov \tr8, r8");
asm("mov \tr8, r8");
asm("mov \tr8, r8");
asm("mov \tr8, r8");
REG_DMA0CNT_H &= 0x7fff;
REG_DMA0CNT_H &= 0x7FFF;
// Everything below matches
@ -65,16 +67,14 @@ void VBlank_CB(void)
REG_WINOUT = WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WIN01_BG3 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG0;
REG_BLDCNT = gBldCnt;
REG_BLDALPHA = gBldAlpha;
if(gUnknown_2026E38 != 0)
{
DmaSet(0, &gUnknown_2026E3C[2], REG_ADDR_WIN0H, 0xa2600002);
if (gUnknown_2026E38 != 0) {
DmaSet(0, &gUnknown_2026E3C[2], REG_ADDR_WIN0H, 0xA2600002);
REG_WIN0H = gUnknown_2026E3C[0];
REG_WIN1H = gUnknown_2026E3C[1];
REG_WIN0V = 160;
REG_WIN1V = 160;
REG_WIN0V = DISPLAY_HEIGHT;
REG_WIN1V = DISPLAY_HEIGHT;
}
else
{
else {
REG_WIN0H = 0;
REG_WIN1H = 0;
REG_WIN0V = 0;

View File

@ -19,6 +19,7 @@
#include "code_801EE10_1.h"
#include "code_801C620.h"
#include "code_801B3C0.h"
#include "cpu.h"
extern void SetFriendRescueMenuState(u32);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
@ -300,7 +301,6 @@ extern s32 GetMailIndex(u8 mailType, u32 param_2);
extern char * GetMonSpecies(s16 index);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void nullsub_23(u32);
extern void ResetUnusedInputStruct(void);
extern void sprintfStatic(char *buffer, const char *text, ...);
extern void xxx_call_start_bg_music(void);
@ -1175,7 +1175,7 @@ void sub_8032828(void)
break;
case 0xD:
case 0x62:
nullsub_23(0);
nullsub_23(FALSE);
sub_80141B4(&gUnknown_80E2DD0[0], 0, NULL, 0);
break;
case 0x64:

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "cpu.h"
#include "memory.h"
extern struct HeapFreeListElement gMainHeapFreeList[32];
@ -8,8 +9,6 @@ extern struct HeapDescriptor gMainHeapDescriptor;
EWRAM_DATA struct HeapDescriptor *gHeapDescriptorList[8] = {0};
EWRAM_DATA u32 gHeapCount = {0};
extern void CpuClear(u32 *dest, s32 size);
void InitHeapInternal(void);
void InitHeap(void)

View File

@ -1,4 +1,5 @@
#include "global.h"
#include "cpu.h"
#include "sprite.h"
extern u16 gUnknown_2025670;
@ -8,9 +9,14 @@ extern struct SpriteList gUnknown_20256A0;
extern struct UnkSpriteLink gUnknown_2025EA8[128];
extern struct unkSprite gUnknown_20262A8[128];
extern u32 gSpriteCount; /* 20266A8 */
extern u32 gUnknown_20266B0;
extern u32 *gCharMemCursor; /* 2026E30 */
extern u32 *gUnknown_203B074;
extern struct unkStruct_20266B0 gUnknown_20266B0[160];
extern void *gCharMemCursor; /* 2026E30 */
extern struct unkStruct_20266B0 *gUnknown_203B074;
// code.c
extern void nullsub_3(s32, s32);
void sub_80052BC(struct UnkSpriteMem *);
void InitSprites(void)
{
@ -28,8 +34,8 @@ void ResetSprites(bool8 a0)
struct UnkSpriteLink *e;
gSpriteCount = 0;
gCharMemCursor = (u32*)OBJ_VRAM0;
gUnknown_203B074 = &gUnknown_20266B0;
gCharMemCursor = OBJ_VRAM0;
gUnknown_203B074 = &gUnknown_20266B0[0];
a = &gUnknown_20256A0.sprites[0];
b = a + 1;
@ -396,9 +402,9 @@ void sub_8004EA8(s32 a0, s16 *a1, u32 *a2, u16 *a3)
// a2 and a3 are always called with NULL lol
#ifdef NONMATCHING // https://decomp.me/scratch/YCfKG
void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *a3)
void AddSprite(struct unkSprite *a0, s32 a1, struct UnkSpriteMem *a2, struct unkStruct_2039DB0 *a3)
{
u16 uVar1;
s32 uVar1;
struct unkSprite *spr;
struct UnkSpriteLink *a;
struct UnkSpriteLink *b;
@ -420,15 +426,18 @@ void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *
spr->unk6 = a0->unk6;
}
else {
spr->unk0 = (a3->unk0 & a0->unk0) | a3->unk6;
spr->unk2 = (a3->unk2 & a0->unk2) | a3->unk8;
spr->unk4 = (a3->unk4 & a0->unk4) | a3->unkA;
spr->unk0 = (a0->unk0 & a3->unk0) | a3->unk6;
spr->unk2 = (a0->unk2 & a3->unk2) | a3->unk8;
spr->unk4 = (a0->unk4 & a3->unk4) | a3->unkA;
spr->unk6 = a0->unk6;
}
uVar1 = spr->unk6 >> 4;
uVar1 = spr->unk6 / 16;
nullsub_3(uVar1, 0);
spr->unk0 = (uVar1 & 0xFF) | (spr->unk0 & 0xFF00);
// uVar1 is the Y position of the sprite, then the rest remains
uVar1 &= 0xFF;
spr->unk0 &= 0xFF00;
spr->unk0 |= uVar1;
if (a2 != NULL)
sub_80052BC(a2);
@ -444,7 +453,7 @@ void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *
}
#else
NAKED
void AddSprite(struct unkSprite *a0, s32 a1, u32 *a2, struct unkStruct_2039DB0 *a3)
void AddSprite(struct unkSprite *a0, s32 a1, struct UnkSpriteMem *a2, struct unkStruct_2039DB0 *a3)
{
asm_unified(
"push {r4-r7,lr}\n"
@ -675,4 +684,81 @@ void BlinkSavingIcon(void)
// Set affineParam to 0
*oam = 0;
}
}
#ifdef NONMATCHING // https://decomp.me/scratch/taTIU
extern u32 sub_80052BC_end[0] asm("gCharMemCursor");
void sub_80052BC(struct UnkSpriteMem *a0)
{
if (a0->byteCount) {
struct unkStruct_20266B0 **r5 = &gUnknown_203B074;
void *r6 = sub_80052BC_end;
void **r4 = &gCharMemCursor;
do {
struct unkStruct_20266B0 *r2 = *r5;
if ((uintptr_t)r2 >= (uintptr_t)r6)
return;
r2->byteCount = a0->byteCount;
r2->src = a0->src;
r2->dest = *r4;
*r4 = r2->dest + a0->byteCount;
*r5 = r2 + 1;
a0++;
} while (a0->byteCount);
}
}
#else
NAKED
void sub_80052BC(struct UnkSpriteMem *a0)
{
asm_unified(
"push {r4-r6,lr}\n"
"\tadds r3, r0, 0\n"
"\tldr r0, [r3, 0x4]\n"
"\tcmp r0, 0\n"
"\tbeq _080052F2\n"
"\tldr r5, _080052F8\n"
"\tldr r6, _080052FC\n"
"\tldr r4, _08005300\n"
"_080052CC:\n"
"\tldr r2, [r5]\n"
"\tcmp r2, r6\n"
"\tbcs _080052F2\n"
"\tldr r0, [r3, 0x4]\n"
"\tstr r0, [r2]\n"
"\tldr r0, [r3]\n"
"\tstr r0, [r2, 0x4]\n"
"\tldr r1, [r4]\n"
"\tstr r1, [r2, 0x8]\n"
"\tldr r0, [r3, 0x4]\n"
"\tadds r1, r0\n"
"\tstr r1, [r4]\n"
"\tadds r0, r2, 0\n"
"\tadds r0, 0xC\n"
"\tstr r0, [r5]\n"
"\tadds r3, 0x8\n"
"\tldr r0, [r3, 0x4]\n"
"\tcmp r0, 0\n"
"\tbne _080052CC\n"
"_080052F2:\n"
"\tpop {r4-r6}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_080052F8: .4byte gUnknown_203B074\n"
"_080052FC: .4byte gCharMemCursor\n"
"_08005300: .4byte gCharMemCursor");
}
#endif // NONMATCHING
void sub_8005304(void)
{
struct unkStruct_20266B0 *s;
for (s = &gUnknown_20266B0[0]; s < gUnknown_203B074; s++) {
if (s->src != NULL)
CpuCopy(s->dest, s->src, s->byteCount);
else
CpuClear(s->dest, s->byteCount);
}
}

View File

@ -17,6 +17,7 @@
#include "main_menu.h"
#include "code_801C620.h"
#include "code_801B3C0.h"
#include "cpu.h"
extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
@ -218,7 +219,6 @@ extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
extern void sub_803092C(void);
extern void sub_8011830(void);
extern void nullsub_23(u32);
extern s32 sub_8037B28(u32);
extern u32 sub_8030894(void);
extern u32 sub_801D008(void);
@ -1405,7 +1405,7 @@ void UpdateThankYouMailText(void)
break;
case COMMUNICATING_THANK_YOU_MAIL:
// Communicating..
nullsub_23(0);
nullsub_23(FALSE);
sub_80141B4(gUnknown_80DF544,0,0,0);
break;
case 0x17:

View File

@ -12,6 +12,7 @@
#include "menu_input.h"
#include "text1.h"
#include "text2.h"
#include "cpu.h"
EWRAM_DATA_2 struct TradeItemsMenu *gTradeItemsMenu = {0};
@ -88,7 +89,6 @@ extern void sub_8035C1C();
extern u32 sub_801D008();
extern s32 sub_8037B28(u32);
extern void sub_8011830(void);
extern void nullsub_23(u32);
extern void xxx_call_start_bg_music(void);
extern s32 sub_80381F4(u32, void *, void *);
extern s32 sub_8037D64(u32, void *, void *);
@ -633,7 +633,7 @@ void sub_8036B28(void)
sub_8014248(gUnknown_80E6268,0,5,gUnknown_80E618C,0,4,0,0,0x101);
break;
case TRADE_ITEMS_IN_COMMUNICATION:
nullsub_23(0);
nullsub_23(FALSE);
sub_80141B4(gUnknown_80E62C4,0,0,0);
break;
case 10:

View File

@ -14,6 +14,7 @@
#include "code_80130A8.h"
#include "main_menu.h"
#include "code_801EE10_1.h"
#include "cpu.h"
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
@ -56,7 +57,6 @@ extern void sub_8099690(u32);
extern void sub_8031E10(void);
extern void sub_803084C(void);
extern void sub_8030DE4();
extern void nullsub_23(u32);
extern s32 sub_8037D64(u32, void *, void *);
extern s32 sub_80381F4(u32, void *, void *);
extern void sub_80306A8(u32, u32, u32, u32);
@ -589,7 +589,7 @@ void sub_8028348(void)
sub_8014248(gUnknown_80DDFB8, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC);
break;
case FRIEND_RESCUE_COMMUNICATING_PRE:
nullsub_23(0);
nullsub_23(FALSE);
sub_80141B4(gUnknown_80DE01C, 0 , 0, 0);
break;
case FRIEND_RESCUE_COMMUNICATING:

View File

@ -11,6 +11,7 @@
#include "code_80130A8.h"
#include "code_801C620.h"
#include "code_801B3C0.h"
#include "cpu.h"
#define SELECT_WONDER_MAIL_MODE_MAIN_SCREEN 0
#define SEND_WONDER_MAIL_MAIN_SCREEN 1
@ -136,7 +137,6 @@ extern s32 sub_80381F4(u32, void *, void *);
extern void sub_8011830(void);
extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
extern void nullsub_23(u32);
extern void sub_802EF48(void);
extern void sub_802D098(struct WonderMail *);
@ -595,7 +595,7 @@ void WonderMailMainMenuCallback(void)
sub_8014248(gUnknown_80E7BEC,0,6,gUnknown_80E78F8,0,4,0,0,0x101);
break;
case 6:
nullsub_23(0);
nullsub_23(FALSE);
sub_80141B4(gUnknown_80E7C48,0,0,0);
break;
case 9: