From dee0ba15d496738f9d56b02be81dc1f5a9d58fbf Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sun, 6 Apr 2025 18:28:42 +0200 Subject: [PATCH] Byteswap in nintendodecode --- CMakeLists.txt | 2 +- dol.def | 2 + include/port/byteswap.h | 2 + src/REL/bootDll/main.c | 128 +++++++++++++++++++++------------------- src/port/byteswap.cpp | 12 ++++ 5 files changed, 85 insertions(+), 61 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 795fcb2e..cc797b7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,7 +113,7 @@ endif () target_link_libraries(marioparty4 PRIVATE aurora::aurora aurora::main musyx) add_library(bootDll SHARED src/REL/bootDll/main.c src/REL/bootDll/language.c) -target_compile_definitions(marioparty4 PRIVATE TARGET_PC VERSION=0 TARGET_REL) +target_compile_definitions(bootDll PRIVATE TARGET_PC VERSION=0 TARGET_REL) target_include_directories(bootDll PRIVATE include build/GMPE01_00/include) set_target_properties(bootDll PROPERTIES LINK_FLAGS "/EXPORT:ObjectSetup") target_link_libraries(bootDll PRIVATE musyx marioparty4) diff --git a/dol.def b/dol.def index 578710d3..65325067 100644 --- a/dol.def +++ b/dol.def @@ -1,4 +1,6 @@ EXPORTS + byteswap_u32 + byteswap_s32 OSReport OSGetTick HuAudFXPlay diff --git a/include/port/byteswap.h b/include/port/byteswap.h index 59df1f70..b1296121 100644 --- a/include/port/byteswap.h +++ b/include/port/byteswap.h @@ -8,6 +8,8 @@ extern "C" #include "game/animdata.h" +void byteswap_u32(u32 *src); +void byteswap_s32(s32 *src); void byteswap_animdata(void *src, AnimData* dest); void byteswap_animbankdata(void *src, AnimBankData *dest); void byteswap_animpatdata(void *src, AnimPatData *dest); diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 24793ced..ba27c5ca 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -98,7 +98,7 @@ void ObjectSetup(void) Process *curr = HuPrcCurrentGet(); #if VERSION_NTSC if (omovlevtno == 0) { - BootProgExec(); + //BootProgExec(); } #else if(SystemInitF == FALSE) { @@ -120,11 +120,11 @@ void ObjectSetup(void) HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); if (omovlevtno != 0) { HuAudSndGrpSetSet(0); - data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - sprite_hudson = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite_hudson); - HuSprPosSet(group, 1, 288, 240); - HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + // data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + // sprite_hudson = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 1, sprite_hudson); + // HuSprPosSet(group, 1, 288, 240); + // HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuWinInit(1); BootTitleCreate(); SystemInitF = 1; @@ -169,9 +169,9 @@ void ObjectSetup(void) #endif HuWinInit(1); BootTitleCreate(); - data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - sprite_hudson = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite_hudson); + // data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + // sprite_hudson = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 1, sprite_hudson); HuSprPosSet(group, 1, 288, 240); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { @@ -365,19 +365,19 @@ void ObjectSetup(void) } #endif group = HuSprGrpCreate(3); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 0, sprite); - HuSprPosSet(group, 0, 288, 240); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 1, sprite); - HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 2, sprite); - HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); + // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); + // sprite = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 0, sprite); + // HuSprPosSet(group, 0, 288, 240); + // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); + // sprite = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 1, sprite); + // HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); + // sprite = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 2, sprite); + // HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + // HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); @@ -414,15 +414,15 @@ void ObjectSetup(void) #endif HuSprGrpKill(group); group = HuSprGrpCreate(1); - if (!option) { - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); - } - else { - data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); - } - sprite = HuSprCreate(data, 0, 0); - HuSprGrpMemberSet(group, 0, sprite); - HuSprPosSet(group, 0, 288, 240); + // if (!option) { + // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); + // } + // else { + // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); + // } + // sprite = HuSprCreate(data, 0, 0); + // HuSprGrpMemberSet(group, 0, sprite); + // HuSprPosSet(group, 0, 288, 240); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); while (WipeStatGet()) { HuPrcVSleep(); @@ -557,28 +557,28 @@ void ObjectSetup(void) #else bootGrpId = HuSprGrpCreate(13); #endif - sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); - sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(bootGrpId, 0, sprite); - HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - HuSprDrawNoSet(bootGrpId, 0, 127); - HuSprPosSet(bootGrpId, 0, 288, 240); - sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); - sprite = HuSprCreate(sprite_data, 1, 0); - HuSprGrpMemberSet(bootGrpId, 1, sprite); - HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - HuSprPosSet(bootGrpId, 1, 288, 420); - #if VERSION_NTSC - sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); - sprite = HuSprCreate(sprite_data, 2, 0); - HuSprGrpMemberSet(bootGrpId, 2, sprite); - HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 2, 288, 380); - sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); - sprite = HuSprCreate(sprite_data, 0, 0); - HuSprGrpMemberSet(bootGrpId, 3, sprite); - HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 3, 288, 200); + // sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); + // sprite = HuSprCreate(sprite_data, 0, 0); + // HuSprGrpMemberSet(bootGrpId, 0, sprite); + // HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + // HuSprDrawNoSet(bootGrpId, 0, 127); + // HuSprPosSet(bootGrpId, 0, 288, 240); + // sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); + // sprite = HuSprCreate(sprite_data, 1, 0); + // HuSprGrpMemberSet(bootGrpId, 1, sprite); + // HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + // HuSprPosSet(bootGrpId, 1, 288, 420); + #if VERSION_NTSC + // sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); + // sprite = HuSprCreate(sprite_data, 2, 0); + // HuSprGrpMemberSet(bootGrpId, 2, sprite); + // HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + // HuSprPosSet(bootGrpId, 2, 288, 380); + // sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + // sprite = HuSprCreate(sprite_data, 0, 0); + // HuSprGrpMemberSet(bootGrpId, 3, sprite); + // HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + // HuSprPosSet(bootGrpId, 3, 288, 200); #else sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); sprite = HuSprCreate(sprite_data, 0, 0); @@ -586,11 +586,11 @@ void ObjectSetup(void) HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); HuSprPosSet(bootGrpId, 2, 288, 200); for(i=0; i<5; i++) { - sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); - sprite = HuSprCreate(sprite_data, 3+i, 0); - HuSprGrpMemberSet(bootGrpId, 3+i, sprite); - HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - HuSprPosSet(bootGrpId, 3+i, 288, 340); + // sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); + // sprite = HuSprCreate(sprite_data, 3+i, 0); + // HuSprGrpMemberSet(bootGrpId, 3+i, sprite); + // HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + // HuSprPosSet(bootGrpId, 3+i, 288, 340); } for(i=0; i<5; i++) { sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); @@ -794,8 +794,16 @@ void ObjectSetup(void) { u32 *src = (u32 *)nintendoData; u32 size = *src++; - void *dst = HuMemDirectMalloc(HEAP_DATA, size); - int decode_type = *src++; + void *dst; + s32 decode_type; +#ifdef TARGET_PC + byteswap_u32(&size); +#endif + dst = HuMemDirectMalloc(HEAP_DATA, size); + decode_type = *src++; +#ifdef TARGET_PC + byteswap_s32(&decode_type); +#endif if(dst) { HuDecodeData(src, dst, size, decode_type); } diff --git a/src/port/byteswap.cpp b/src/port/byteswap.cpp index 547dedcb..2358f02e 100644 --- a/src/port/byteswap.cpp +++ b/src/port/byteswap.cpp @@ -311,6 +311,18 @@ template void bswap(B &base, AnimLayerData &obj) bswap_flat(base, obj.vtx, sizeof(obj.vtx) / sizeof(s16)); } +void byteswap_u32(u32 *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + +void byteswap_s32(s32 *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +} + void byteswap_animdata(void *src, AnimData *dest) { auto *anim = reinterpret_cast(src);