From ad0e2a79e357dad09f7abab8ee28cc68562a1be0 Mon Sep 17 00:00:00 2001 From: Luciano Ciccariello Date: Thu, 6 Jun 2024 01:15:03 +0100 Subject: [PATCH] Fix a few minor data overflows (#1266) They were causing overflows at runtime --- include/unkstruct.h | 2 ++ src/dra/4A538.c | 8 +++--- src/dra/63ED4.c | 8 +++--- src/dra/d_2F324.c | 65 ++++++++++++++++++++------------------------- src/dra/d_3B0D4.c | 4 +-- src/pc/sim_pc.c | 1 + src/st/wrp/header.c | 10 +++---- 7 files changed, 44 insertions(+), 54 deletions(-) diff --git a/include/unkstruct.h b/include/unkstruct.h index 99ba55e36..71fc19865 100644 --- a/include/unkstruct.h +++ b/include/unkstruct.h @@ -30,6 +30,7 @@ typedef struct { #define PAL_COPY 1 #define PAL_COPY_INFO() MAKE_PAL_OP(PAL_COPY, 0) #define PAL_COPY_DATA(dst, data) (dst), (u_long*)LEN(data), (u_long*)(data) +#define PAL_COPY_DATA_(dst, data, len) (dst), (u_long*)(len), (u_long*)(data) #define PAL_UNK_OP2 2 #define PAL_UNK_OP2_INFO(dst, n) (u_long*)(dst), (u_long*)(n) @@ -44,6 +45,7 @@ typedef struct { #define PAL_GLOW_DATA(data) (u_long*)(data) #define PAL_BULK_COPY 5 +#define PAL_BULK_COPY_INFO(dst, n) (u_long*)(dst), (u_long*)(n) #define PAL_BULK(dst, data) (u_long*)(dst), (u_long*)LEN(data), (u_long*)(data) #define PAL_TERMINATE() ((u_long*)-1) diff --git a/src/dra/4A538.c b/src/dra/4A538.c index 9def80059..97eda2d3e 100644 --- a/src/dra/4A538.c +++ b/src/dra/4A538.c @@ -164,7 +164,7 @@ void func_800EA7CC(void) { new_var = temp_s0[1]; count = temp_s0[2]; - clut = &g_Clut; + clut = g_Clut; clut += new_var; switch (ptr->unk8 & 0xFF) { @@ -273,7 +273,7 @@ void func_800EA7CC(void) { offset = 0; temp_s0 = g_Clut; clutX = 0x200; - for (i = 0xF0; i < 0x100; i++, temp_s0 += 0x80, offset++) { + for (i = 0xF0; i < 0x100; i++, temp_s0 = (s16*)temp_s0 + 0x100, offset++) { if (palettes[offset] != 0) { LoadClut2(temp_s0, clutX, i); } @@ -281,7 +281,7 @@ void func_800EA7CC(void) { // re-upload updated shared entity palette clutX = 0; - for (i = 0xF0; i < 0x100; i++, temp_s0 += 0x80, offset++) { + for (i = 0xF0; i < 0x100; i++, temp_s0 = (s16*)temp_s0 + 0x100, offset++) { if (palettes[offset] != 0) { LoadClut2(temp_s0, clutX, i); } @@ -289,7 +289,7 @@ void func_800EA7CC(void) { // re-upload updated stage-specific entities palette clutX = 0x100; - for (i = 0xF0; i < 0x100; i++, temp_s0 += 0x80, offset++) { + for (i = 0xF0; i < 0x100; i++, temp_s0 = (s16*)temp_s0 + 0x100, offset++) { if (palettes[offset]) { LoadClut2(temp_s0, clutX, i); } diff --git a/src/dra/63ED4.c b/src/dra/63ED4.c index acc58c6ef..7831d55da 100644 --- a/src/dra/63ED4.c +++ b/src/dra/63ED4.c @@ -198,8 +198,6 @@ extern u16 D_800D6A14[0x10]; extern u16 D_800D6A34[0x10]; extern u16 D_800D6A54[0x40]; // UNUSED extern u16 D_800D6AD4[0x100]; -extern u16 D_800D6B54[0x10]; // overlaps with D_800D6AD4? -extern u16 D_800D6C14[0x60]; // overlaps with D_800D6AD4? extern u16 D_800D6CD4[0x100]; extern u16 D_800D6ED4[0x100]; extern u16 D_800D70D4[0x100]; @@ -367,15 +365,15 @@ u_long* D_800A3A74[] = { u_long* D_800A3A88[] = { PAL_COPY_INFO(), - PAL_COPY_DATA(0x1F20, D_800D6B54), + PAL_COPY_DATA_(0x1F20, D_800D6AD4 + 64, 16), PAL_TERMINATE(), }; u_long* D_800A3A9C[] = { MAKE_PAL_OP(PAL_GLOW_ANIM, 1), PAL_GLOW_INFO(0x1F20, 16), - PAL_GLOW_DATA(D_800D6C14), - PAL_GLOW_DATA(D_800D6B54), + PAL_GLOW_DATA(D_800D6AD4 + 160), + PAL_GLOW_DATA(D_800D6AD4 + 64), PAL_TERMINATE(), }; diff --git a/src/dra/d_2F324.c b/src/dra/d_2F324.c index f54f0594d..59fc417b0 100644 --- a/src/dra/d_2F324.c +++ b/src/dra/d_2F324.c @@ -4573,42 +4573,35 @@ u16 D_800D6A34[] = { }; u16 D_800D6AD4[] = { - 0x0000, 0x819D, 0x921D, 0x969E, 0xAF5F, 0xD7DF, 0x819D, 0x921D, - 0x969E, 0xAF5F, 0xD7DF, 0x819D, 0x921D, 0x969E, 0xAF5F, 0xD7DF, - 0x0000, 0xA108, 0xAD6B, 0xBDEF, 0xD294, 0xE739, 0xA108, 0xAD6B, - 0xBDEF, 0xD294, 0xE739, 0xA108, 0xAD6B, 0xBDEF, 0xD294, 0xE739, - 0x0000, 0xDC80, 0xE540, 0xEE00, 0xF6C0, 0xFF80, 0xDC80, 0xE540, - 0xEE00, 0xF6C0, 0xFF80, 0xDC80, 0xE540, 0xEE00, 0xF6C0, 0xFF80, - 0x0000, 0xE419, 0x823F, 0x8339, 0xCBE0, 0xE720, 0xE419, 0x823F, - 0x8339, 0xCBE0, 0xE720, 0xE419, 0x823F, 0x8339, 0xCBE0, 0xE720, -}; - -u16 D_800D6B54[] = { - 0x0000, 0x8421, 0x8842, 0x8C63, 0x94A5, 0x9CE7, 0x8421, 0x8842, 0x8C63, - 0x94A5, 0x9CE7, 0x8421, 0x8842, 0x8C63, 0x94A5, 0x9CE7, 0x0000, 0x984C, - 0x98CC, 0x994C, 0x99CC, 0x9A4C, 0x984C, 0x98CC, 0x994C, 0x99CC, 0x9A4C, - 0x984C, 0x98CC, 0x994C, 0x99CC, 0x9A4C, 0x0000, 0x8048, 0x804C, 0x8050, - 0x8054, 0x8058, 0x8048, 0x804C, 0x8050, 0x8054, 0x8058, 0x8048, 0x804C, - 0x8050, 0x8054, 0x8058, 0x0000, 0x80E7, 0x81AD, 0x8273, 0x8339, 0x83FF, - 0x80E7, 0x81AD, 0x8273, 0x8339, 0x83FF, 0x80E7, 0x81AD, 0x8273, 0x8339, - 0x83FF, 0x0000, 0x80E0, 0x81A0, 0x8260, 0x8320, 0x83E0, 0x80E0, 0x81A0, - 0x8260, 0x8320, 0x83E0, 0x80E0, 0x81A0, 0x8260, 0x8320, 0x83E0, 0x0000, - 0x9C00, 0xB400, 0xCC00, 0xE400, 0xFC00, 0x9C00, 0xB400, 0xCC00, 0xE400, - 0xFC00, 0x9C00, 0xB400, 0xCC00, 0xE400, 0xFC00, -}; - -u16 D_800D6C14[] = { - 0x0000, 0x9C07, 0xB40D, 0xCC13, 0xE419, 0xFC1F, 0x9C07, 0xB40D, 0xCC13, - 0xE419, 0xFC1F, 0x9C07, 0xB40D, 0xCC13, 0xE419, 0xFC1F, 0x0000, 0xB908, - 0xB988, 0xBA08, 0xBA88, 0xBB08, 0xB908, 0xB988, 0xBA08, 0xBA88, 0xBB08, - 0xB908, 0xB988, 0xBA08, 0xBA88, 0xBB08, 0x0000, 0xE81A, 0xCC13, 0xDC17, - 0xEC1B, 0xFC1F, 0xE81A, 0xCC13, 0xDC17, 0xEC1B, 0xFC1F, 0xE81A, 0xCC13, - 0xDC17, 0xEC1B, 0xFC1F, 0x0000, 0x801A, 0x8013, 0x8017, 0x801B, 0x801F, - 0x801A, 0x8013, 0x8017, 0x801B, 0x801F, 0x801A, 0x8013, 0x8017, 0x801B, - 0x801F, 0x0000, 0x8340, 0x8260, 0x82E0, 0x8360, 0x83E0, 0x8340, 0x8260, - 0x82E0, 0x8360, 0x83E0, 0x8340, 0x8260, 0x82E0, 0x8360, 0x83E0, 0x0000, - 0xE800, 0xCC00, 0xDC00, 0xEC00, 0xFC00, 0xE800, 0xCC00, 0xDC00, 0xEC00, - 0xFC00, 0xE800, 0xCC00, 0xDC00, 0xEC00, 0xFC00, + 0x0000, 0x819D, 0x921D, 0x969E, 0xAF5F, 0xD7DF, 0x819D, 0x921D, 0x969E, + 0xAF5F, 0xD7DF, 0x819D, 0x921D, 0x969E, 0xAF5F, 0xD7DF, 0x0000, 0xA108, + 0xAD6B, 0xBDEF, 0xD294, 0xE739, 0xA108, 0xAD6B, 0xBDEF, 0xD294, 0xE739, + 0xA108, 0xAD6B, 0xBDEF, 0xD294, 0xE739, 0x0000, 0xDC80, 0xE540, 0xEE00, + 0xF6C0, 0xFF80, 0xDC80, 0xE540, 0xEE00, 0xF6C0, 0xFF80, 0xDC80, 0xE540, + 0xEE00, 0xF6C0, 0xFF80, 0x0000, 0xE419, 0x823F, 0x8339, 0xCBE0, 0xE720, + 0xE419, 0x823F, 0x8339, 0xCBE0, 0xE720, 0xE419, 0x823F, 0x8339, 0xCBE0, + 0xE720, 0x0000, 0x8421, 0x8842, 0x8C63, 0x94A5, 0x9CE7, 0x8421, 0x8842, + 0x8C63, 0x94A5, 0x9CE7, 0x8421, 0x8842, 0x8C63, 0x94A5, 0x9CE7, 0x0000, + 0x984C, 0x98CC, 0x994C, 0x99CC, 0x9A4C, 0x984C, 0x98CC, 0x994C, 0x99CC, + 0x9A4C, 0x984C, 0x98CC, 0x994C, 0x99CC, 0x9A4C, 0x0000, 0x8048, 0x804C, + 0x8050, 0x8054, 0x8058, 0x8048, 0x804C, 0x8050, 0x8054, 0x8058, 0x8048, + 0x804C, 0x8050, 0x8054, 0x8058, 0x0000, 0x80E7, 0x81AD, 0x8273, 0x8339, + 0x83FF, 0x80E7, 0x81AD, 0x8273, 0x8339, 0x83FF, 0x80E7, 0x81AD, 0x8273, + 0x8339, 0x83FF, 0x0000, 0x80E0, 0x81A0, 0x8260, 0x8320, 0x83E0, 0x80E0, + 0x81A0, 0x8260, 0x8320, 0x83E0, 0x80E0, 0x81A0, 0x8260, 0x8320, 0x83E0, + 0x0000, 0x9C00, 0xB400, 0xCC00, 0xE400, 0xFC00, 0x9C00, 0xB400, 0xCC00, + 0xE400, 0xFC00, 0x9C00, 0xB400, 0xCC00, 0xE400, 0xFC00, 0x0000, 0x9C07, + 0xB40D, 0xCC13, 0xE419, 0xFC1F, 0x9C07, 0xB40D, 0xCC13, 0xE419, 0xFC1F, + 0x9C07, 0xB40D, 0xCC13, 0xE419, 0xFC1F, 0x0000, 0xB908, 0xB988, 0xBA08, + 0xBA88, 0xBB08, 0xB908, 0xB988, 0xBA08, 0xBA88, 0xBB08, 0xB908, 0xB988, + 0xBA08, 0xBA88, 0xBB08, 0x0000, 0xE81A, 0xCC13, 0xDC17, 0xEC1B, 0xFC1F, + 0xE81A, 0xCC13, 0xDC17, 0xEC1B, 0xFC1F, 0xE81A, 0xCC13, 0xDC17, 0xEC1B, + 0xFC1F, 0x0000, 0x801A, 0x8013, 0x8017, 0x801B, 0x801F, 0x801A, 0x8013, + 0x8017, 0x801B, 0x801F, 0x801A, 0x8013, 0x8017, 0x801B, 0x801F, 0x0000, + 0x8340, 0x8260, 0x82E0, 0x8360, 0x83E0, 0x8340, 0x8260, 0x82E0, 0x8360, + 0x83E0, 0x8340, 0x8260, 0x82E0, 0x8360, 0x83E0, 0x0000, 0xE800, 0xCC00, + 0xDC00, 0xEC00, 0xFC00, 0xE800, 0xCC00, 0xDC00, 0xEC00, 0xFC00, 0xE800, + 0xCC00, 0xDC00, 0xEC00, 0xFC00, }; u16 D_800D6CD4[] = { diff --git a/src/dra/d_3B0D4.c b/src/dra/d_3B0D4.c index dd8e42b18..4db28c4ce 100644 --- a/src/dra/d_3B0D4.c +++ b/src/dra/d_3B0D4.c @@ -51,7 +51,5 @@ u16 D_800DB1F4[] = { 0x8108, 0x80e7, 0x80c6, 0xa529, 0xa94a, 0xad6b, 0xb18c, 0xb5ad, 0xb9ce, 0xbdef, 0xb9ce, 0xb5ad, 0xb18c, 0xad6b, 0xa94a, 0xa529, 0xa108, 0x9ce7, 0x98c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, }; - -s32 D_800DB3B0 = 0; diff --git a/src/pc/sim_pc.c b/src/pc/sim_pc.c index b7f45a623..f5760570d 100644 --- a/src/pc/sim_pc.c +++ b/src/pc/sim_pc.c @@ -252,6 +252,7 @@ bool LoadFilePc(FileLoad* file, SimFile* sim) { break; case SIM_STAGE_CHR: LoadStageTileset(sim->addr, file->length, 0); + StoreImage(&g_Vram.D_800ACDB8, g_Clut); break; case SIM_12: LoadStageTileset(sim->addr, file->length, 0x100); diff --git a/src/st/wrp/header.c b/src/st/wrp/header.c index 4f1808175..ba1ebe5f8 100644 --- a/src/st/wrp/header.c +++ b/src/st/wrp/header.c @@ -64,13 +64,11 @@ s16** g_SpriteBanks[] = { /* 0x09C */ 0x00000000, }; -u32 D_80181D08[]; +extern u16 D_80181D08[16]; void* D_801800A0[] = { - /* 0x0A0 */ (void*)0x00000005, - /* 0x0A4 */ (void*)0x00002000, - /* 0x0A8 */ (void*)0x00000010, - /* 0x0AC */ (void*)D_80181D08, - /* 0x0B0 */ (void*)0xFFFFFFFF, + MAKE_PAL_OP(PAL_BULK_COPY, 0), + PAL_BULK(0x2000, D_80181D08), + PAL_TERMINATE(), }; void* g_Cluts[] = { /* 0x0B4 */ D_801800A0,