From 40469d42a03c02f492305556bfdd8c78a72a5c42 Mon Sep 17 00:00:00 2001 From: jdflyer Date: Sat, 31 Dec 2022 19:18:40 -0700 Subject: [PATCH] JASWaveArcLoader --- Makefile | 6 +- include/JSystem/JAudio2/JASTaskThread.h | 2 +- include/JSystem/JAudio2/JASWaveArcLoader.h | 103 ++++++ include/dolphin/dvd/dvd.h | 2 +- libs/JSystem/JAudio2/JASTaskThread.cpp | 2 +- libs/JSystem/JAudio2/JASWaveArcLoader.cpp | 344 ++++++++++----------- src/f_op/f_op_scene.cpp | 17 +- 7 files changed, 276 insertions(+), 200 deletions(-) diff --git a/Makefile b/Makefile index 7ddf95c491d..12d2e013714 100644 --- a/Makefile +++ b/Makefile @@ -54,6 +54,10 @@ else endif endif +ifeq ($(WINE_LD),) +WINE_LD := $(WINE) +endif + # Hack for OSX ifeq ($(UNAME_S),Darwin) CPP := cpp-10 -P @@ -67,7 +71,7 @@ AS := $(DEVKITPPC)/bin/powerpc-eabi-as OBJCOPY := $(DEVKITPPC)/bin/powerpc-eabi-objcopy STRIP := $(DEVKITPPC)/bin/powerpc-eabi-strip CC := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwcceppc_patched.exe -LD := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwldeppc.exe +LD := $(WINE_LD) tools/mwcc_compiler/$(MWCC_VERSION)/mwldeppc.exe ELF2DOL := $(BUILD_PATH)/elf2dol PYTHON := python3 ICONV := iconv diff --git a/include/JSystem/JAudio2/JASTaskThread.h b/include/JSystem/JAudio2/JASTaskThread.h index d98f9bb4503..e24d03bb6d6 100644 --- a/include/JSystem/JAudio2/JASTaskThread.h +++ b/include/JSystem/JAudio2/JASTaskThread.h @@ -10,7 +10,7 @@ public: /* 8028F9EC */ void allocCallStack(void (*)(void*), void*); /* 8028F850 */ void allocCallStack(void (*)(void*), void const*, u32); /* 8028FC54 */ void sendCmdMsg(void (*)(void*), void*); - /* 8028FB5C */ void sendCmdMsg(void (*)(void*), void const*, u32); + /* 8028FB5C */ int sendCmdMsg(void (*)(void*), void const*, u32); /* 8028FE88 */ void pause(bool); /* 8028F724 */ virtual ~JASTaskThread(); diff --git a/include/JSystem/JAudio2/JASWaveArcLoader.h b/include/JSystem/JAudio2/JASWaveArcLoader.h index 355e5ad8015..b9f8ba68b35 100644 --- a/include/JSystem/JAudio2/JASWaveArcLoader.h +++ b/include/JSystem/JAudio2/JASWaveArcLoader.h @@ -2,5 +2,108 @@ #define JASWAVEARCLOADER_H #include "dolphin/types.h" +#include "global.h" +#include "dol2asm.h" + +#include "MSL_C/MSL_Common/Src/string.h" +#include "dolphin/os/OSMutex.h" + +#include "JSystem/JAudio2/JASDvdThread.h" +#include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JAudio2/JASHeapCtrl.h" +#include "JSystem/JKernel/JKRSolidHeap.h" + +struct JASDisposer { + JASDisposer(){}; + /* 8029A7B8 */ virtual ~JASDisposer(){}; + /* 80290BCC */ virtual void onDispose(); +}; + +struct JASHeap : JSUTree { + /* 80290140 */ JASHeap(JASDisposer*); + /* 802901AC */ void initRootHeap(void*, u32); + /* 8029021C */ bool alloc(JASHeap*, u32); + /* 802903F4 */ bool allocTail(JASHeap*, u32); + /* 802904E4 */ void free(); + /* 80290608 */ void insertChild(JASHeap*, JASHeap*, void*, u32, bool); + /* 802906F0 */ void getTailHeap(); + /* 8029077C */ void getTailOffset(); + /* 802907E0 */ void getCurOffset(); + /* 80290B54 */ ~JASHeap() {}; + void* getBase() { return mBase; } + + /*0x1c*/ OSMutex mMutex; + /*0x38*/ JASDisposer* mDisposer; + /*0x3c*/ void* mBase; + /*0x40*/ u32 _3c; + /*0x44*/ u32 _40; +}; + +struct JASKernel { + /* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32); + /* 80290AC0 */ static JKRHeap* getSystemHeap(); + /* 80290AC8 */ u32 getCommandHeap(); + /* 80290AD0 */ void setupAramHeap(u32, u32); + /* 80290B08 */ static JASHeap* getAramHeap(); + + static u8 audioAramHeap[68]; + static u8 sAramBase[4]; + static JKRHeap* sSystemHeap; + static u8 sCommandHeap[4]; +}; + +#define DIR_MAX 64 +struct JASWaveArcLoader { + /* 8029A0A0 */ static JASHeap* getRootHeap(); + /* 8029A0D0 */ static void setCurrentDir(char const*); + /* 8029A130 */ static char* getCurrentDir(); + + static char sCurrentDir[DIR_MAX]; + static JASHeap* sAramHeap; +}; + +struct JASWaveArc : JASDisposer { + /* 8029A13C */ JASWaveArc(); + /* 8029A258 */ bool loadSetup(u32); + /* 8029A2EC */ bool eraseSetup(); + /* 8029A378 */ static void loadToAramCallback(void*); + /* 8029A404 */ bool sendLoadCmd(); + /* 8029A4C0 */ bool load(JASHeap*); + /* 8029A580 */ bool loadTail(JASHeap*); + /* 8029A640 */ void erase(); + /* 8029A6AC */ void setEntryNum(s32); + /* 8029A70C */ void setFileName(char const*); + + /* 8029A1B4 */ virtual ~JASWaveArc(); + /* 8029A664 */ virtual void onDispose(); + /* 80298FA0 */ virtual void onLoadDone(); + /* 80298FA4 */ virtual void onEraseDone(); + + struct loadToAramCallbackParams { + // not official struct name + JASWaveArc* mWavArc; + long mEntryNum; + u32 mBase; + u32 _c; + }; + + /*0x04*/ JASHeap mHeap; + /*0x48*/ u32 _48; + /*0x4c*/ volatile s32 _4c; + /*0x50*/ int mEntryNum; + /*0x54*/ u32 mFileLength; + /*0x58*/ u16 _58; + /*0x5a*/ u16 _5a; + /*0x5c*/ OSMutex mMutex; +}; + +struct JASMutexLock { + JASMutexLock(OSMutex* mutex) { + mMutex = mutex; + OSLockMutex(mMutex); + } + ~JASMutexLock() { OSUnlockMutex(mMutex); } + OSMutex* mMutex; +}; #endif /* JASWAVEARCLOADER_H */ diff --git a/include/dolphin/dvd/dvd.h b/include/dolphin/dvd/dvd.h index bdf0da3b33f..2613077ef46 100644 --- a/include/dolphin/dvd/dvd.h +++ b/include/dolphin/dvd/dvd.h @@ -91,7 +91,7 @@ DVDDiskID* DVDGetCurrentDiskID(void); BOOL DVDFastOpen(long, DVDFileInfo* fileinfo); BOOL DVDGetCommandBlockStatus(DVDCommandBlock*); BOOL DVDReadAsyncPrio(DVDFileInfo* fileinfo, void*, long, long, DVDCallback, long); -BOOL DVDConvertPathToEntrynum(const char*); +int DVDConvertPathToEntrynum(const char*); DVDState DVDGetDriveStatus(void); BOOL DVDCheckDisk(void); diff --git a/libs/JSystem/JAudio2/JASTaskThread.cpp b/libs/JSystem/JAudio2/JASTaskThread.cpp index 7c8438e661f..87fc196a3b2 100644 --- a/libs/JSystem/JAudio2/JASTaskThread.cpp +++ b/libs/JSystem/JAudio2/JASTaskThread.cpp @@ -107,7 +107,7 @@ asm void JASTaskThread::allocCallStack(void (*param_0)(void*), void* param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { +asm int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { nofralloc #include "asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s" } diff --git a/libs/JSystem/JAudio2/JASWaveArcLoader.cpp b/libs/JSystem/JAudio2/JASWaveArcLoader.cpp index 135315119ea..af19d207c4b 100644 --- a/libs/JSystem/JAudio2/JASWaveArcLoader.cpp +++ b/libs/JSystem/JAudio2/JASWaveArcLoader.cpp @@ -4,74 +4,6 @@ // #include "JSystem/JAudio2/JASWaveArcLoader.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Types: -// - -struct JSUPtrList { - /* 802DBEAC */ ~JSUPtrList(); -}; - -struct JSUPtrLink { - /* 802DBE14 */ ~JSUPtrLink(); -}; - -struct JKRHeap {}; - -struct JKRExpandSwitch {}; - -struct JKRDvdAramRipper { - /* 802DA874 */ void loadToAram(s32, u32, JKRExpandSwitch, u32, u32, u32*); -}; - -struct JASWaveArcLoader { - /* 8029A0A0 */ void getRootHeap(); - /* 8029A0D0 */ void setCurrentDir(char const*); - /* 8029A130 */ void getCurrentDir(); - - static u8 sCurrentDir[64]; - static u8 sAramHeap[4 + 4 /* padding */]; -}; - -struct JASDisposer { - /* 80290BCC */ void onDispose(); - /* 8029A7B8 */ ~JASDisposer(); -}; - -struct JASHeap { - /* 80290140 */ JASHeap(JASDisposer*); - /* 8029021C */ void alloc(JASHeap*, u32); - /* 802903F4 */ void allocTail(JASHeap*, u32); - /* 802904E4 */ void free(); -}; - -struct JASWaveArc { - /* 80298FA0 */ void onLoadDone(); - /* 80298FA4 */ void onEraseDone(); - /* 8029A13C */ JASWaveArc(); - /* 8029A1B4 */ ~JASWaveArc(); - /* 8029A258 */ void loadSetup(u32); - /* 8029A2EC */ void eraseSetup(); - /* 8029A378 */ void loadToAramCallback(void*); - /* 8029A404 */ void sendLoadCmd(); - /* 8029A4C0 */ void load(JASHeap*); - /* 8029A580 */ void loadTail(JASHeap*); - /* 8029A640 */ void erase(); - /* 8029A664 */ void onDispose(); - /* 8029A6AC */ void setEntryNum(s32); - /* 8029A70C */ void setFileName(char const*); -}; - -struct JASTaskThread { - /* 8028FB5C */ void sendCmdMsg(void (*)(void*), void const*, u32); -}; - -struct JASKernel { - /* 80290B08 */ void getAramHeap(); -}; // // Forward References: @@ -117,17 +49,8 @@ extern "C" void __dla__FPv(); extern "C" void loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl(); extern "C" void __dt__10JSUPtrLinkFv(); extern "C" void __dt__10JSUPtrListFv(); -extern "C" void OSInitMutex(); -extern "C" void OSLockMutex(); -extern "C" void OSUnlockMutex(); -extern "C" void DVDConvertPathToEntrynum(); -extern "C" void DVDFastOpen(); -extern "C" void DVDClose(); extern "C" void _savegpr_27(); extern "C" void _restgpr_27(); -extern "C" void strcat(); -extern "C" void strcpy(); -extern "C" void strlen(); // // Declarations: @@ -135,48 +58,39 @@ extern "C" void strlen(); /* ############################################################################################## */ /* 80451290-80451298 000790 0004+04 1/1 0/0 0/0 .sbss sAramHeap__16JASWaveArcLoader */ -u8 JASWaveArcLoader::sAramHeap[4 + 4 /* padding */]; +JASHeap* JASWaveArcLoader::sAramHeap; /* 8029A0A0-8029A0D0 2949E0 0030+00 2/2 0/0 0/0 .text getRootHeap__16JASWaveArcLoaderFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArcLoader::getRootHeap() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/getRootHeap__16JASWaveArcLoaderFv.s" +JASHeap* JASWaveArcLoader::getRootHeap() { + if (JASWaveArcLoader::sAramHeap) { + return JASWaveArcLoader::sAramHeap; + } + return JASKernel::getAramHeap(); } -#pragma pop /* ############################################################################################## */ /* 803C77E0-803C7820 024900 0040+00 2/2 0/0 0/0 .data sCurrentDir__16JASWaveArcLoader */ -SECTION_DATA u8 JASWaveArcLoader::sCurrentDir[64] = { - 0x2F, 0x41, 0x75, 0x64, 0x69, 0x6F, 0x52, 0x65, 0x73, 0x2F, 0x57, 0x61, 0x76, 0x65, 0x73, 0x2F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +char JASWaveArcLoader::sCurrentDir[DIR_MAX] = "/AudioRes/Waves/"; /* 8029A0D0-8029A130 294A10 0060+00 0/0 1/1 0/0 .text setCurrentDir__16JASWaveArcLoaderFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArcLoader::setCurrentDir(char const* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/setCurrentDir__16JASWaveArcLoaderFPCc.s" +void JASWaveArcLoader::setCurrentDir(char const* dir) { + ASSERT(std::strlen(dir) < DIR_MAX - 1); + strcpy(sCurrentDir, dir); + u32 len = strlen(sCurrentDir); + if (sCurrentDir[len - 1] != '/') { + ASSERT(len + 1 < DIR_MAX); + sCurrentDir[len] = '/'; + sCurrentDir[len + 1] = '\0'; + } } -#pragma pop /* 8029A130-8029A13C 294A70 000C+00 1/1 0/0 0/0 .text getCurrentDir__16JASWaveArcLoaderFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArcLoader::getCurrentDir() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/getCurrentDir__16JASWaveArcLoaderFv.s" + +char* JASWaveArcLoader::getCurrentDir() { + return sCurrentDir; } -#pragma pop /* ############################################################################################## */ /* 803C7820-803C7838 024940 0018+00 2/2 0/0 0/0 .data __vt__10JASWaveArc */ @@ -198,131 +112,185 @@ SECTION_DATA extern void* __vt__11JASDisposer[4] = { }; /* 8029A13C-8029A1B4 294A7C 0078+00 0/0 2/2 0/0 .text __ct__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASWaveArc::JASWaveArc() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/__ct__10JASWaveArcFv.s" + +JASWaveArc::JASWaveArc() : mHeap(this) { + _48 = 0; + _4c = 0; + mEntryNum = -1; + mFileLength = 0; + _58 = 0; + _5a = 0; + OSInitMutex(&mMutex); } -#pragma pop /* 8029A1B4-8029A258 294AF4 00A4+00 1/0 2/2 0/0 .text __dt__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASWaveArc::~JASWaveArc() { +#ifdef NONMATCHING +JASWaveArc::~JASWaveArc() {} +#else +asm void __dt__10JASWaveArcFv() { nofralloc #include "asm/JSystem/JAudio2/JASWaveArcLoader/__dt__10JASWaveArcFv.s" } -#pragma pop +#endif /* 8029A258-8029A2EC 294B98 0094+00 1/1 0/0 0/0 .text loadSetup__10JASWaveArcFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::loadSetup(u32 param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/loadSetup__10JASWaveArcFUl.s" +bool JASWaveArc::loadSetup(u32 param_0) { + JASMutexLock mutexLock(&mMutex); + if (_58 != param_0) { + return false; + } + if (_4c != 1) { + return false; + } + _48 = 1; + _4c = 2; + return true; } -#pragma pop /* 8029A2EC-8029A378 294C2C 008C+00 1/1 0/0 0/0 .text eraseSetup__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::eraseSetup() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/eraseSetup__10JASWaveArcFv.s" +bool JASWaveArc::eraseSetup() { + JASMutexLock mutexLock(&mMutex); + if (_4c == 0) { + return false; + } + if (_4c == 1) { + _4c = 0; + return false; + } + _48 = 0; + _4c = 0; + return true; } -#pragma pop /* 8029A378-8029A404 294CB8 008C+00 1/1 0/0 0/0 .text loadToAramCallback__10JASWaveArcFPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::loadToAramCallback(void* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/loadToAramCallback__10JASWaveArcFPv.s" +void JASWaveArc::loadToAramCallback(void* this_) { + loadToAramCallbackParams* tmp = (loadToAramCallbackParams*)this_; + JASWaveArc* wavArc = tmp->mWavArc; + JKRAramBlock* block = JKRDvdAramRipper::loadToAram(tmp->mEntryNum, tmp->mBase, + EXPAND_SWITCH_UNKNOWN0, 0, 0, NULL); + if (block == NULL) { + // "loadToAram Failed" + return; + } + wavArc->_5a--; + if (wavArc->loadSetup(tmp->_c)) { + wavArc->onLoadDone(); + } } -#pragma pop /* 8029A404-8029A4C0 294D44 00BC+00 2/2 0/0 0/0 .text sendLoadCmd__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::sendLoadCmd() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/sendLoadCmd__10JASWaveArcFv.s" +bool JASWaveArc::sendLoadCmd() { + JASMutexLock mutexLock(&mMutex); + _48 = 0; + _4c = 1; + void* base = mHeap.getBase(); + loadToAramCallbackParams commandInfo; + commandInfo.mWavArc = this; + commandInfo.mEntryNum = mEntryNum; + commandInfo.mBase = (u32)mHeap.mBase; + commandInfo._c = ++_58; + + _5a++; + + JASTaskThread* thread = JASDvd::getThreadPointer(); + int status = thread->sendCmdMsg(loadToAramCallback, &commandInfo, 0x10); + if (status == 0) { + // "sendCmdMsg loadToAramCallback Failed" + mHeap.free(); + return false; + } + return true; } -#pragma pop /* 8029A4C0-8029A580 294E00 00C0+00 0/0 2/2 0/0 .text load__10JASWaveArcFP7JASHeap */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::load(JASHeap* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/load__10JASWaveArcFP7JASHeap.s" +bool JASWaveArc::load(JASHeap* heap) { + if (mEntryNum < 0) { + return false; + } + JASMutexLock mutexLock(&mMutex); + if (_4c != 0) { + return false; + } + if (heap == NULL) { + heap = JASWaveArcLoader::getRootHeap(); + } + bool result = mHeap.alloc(heap, mFileLength); + if (result == false) { + return false; + } + return sendLoadCmd(); } -#pragma pop /* 8029A580-8029A640 294EC0 00C0+00 0/0 1/1 0/0 .text loadTail__10JASWaveArcFP7JASHeap */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::loadTail(JASHeap* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/loadTail__10JASWaveArcFP7JASHeap.s" +bool JASWaveArc::loadTail(JASHeap* heap) { + if (mEntryNum < 0) { + return false; + } + JASMutexLock mutexLock(&mMutex); + if (_4c != 0) { + return false; + } + if (heap == NULL) { + heap = JASWaveArcLoader::getRootHeap(); + } + bool result = mHeap.allocTail(heap, mFileLength); + if (result == false) { + return false; + } + return sendLoadCmd(); } -#pragma pop /* 8029A640-8029A664 294F80 0024+00 0/0 2/2 0/0 .text erase__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::erase() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/erase__10JASWaveArcFv.s" +void JASWaveArc::erase() { + mHeap.free(); } -#pragma pop /* 8029A664-8029A6AC 294FA4 0048+00 1/0 2/0 0/0 .text onDispose__10JASWaveArcFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::onDispose() { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/onDispose__10JASWaveArcFv.s" +void JASWaveArc::onDispose() { + if (eraseSetup()) { + onEraseDone(); + } } -#pragma pop /* 8029A6AC-8029A70C 294FEC 0060+00 1/1 0/0 0/0 .text setEntryNum__10JASWaveArcFl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::setEntryNum(s32 param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/setEntryNum__10JASWaveArcFl.s" +void JASWaveArc::setEntryNum(s32 entryNum) { + DVDFileInfo fileInfo; + if (entryNum < 0) { + return; + } + BOOL openStatus = DVDFastOpen(entryNum, &fileInfo); + if (openStatus == FALSE) { + return; + } + mFileLength = fileInfo.length; + DVDClose(&fileInfo); + mEntryNum = entryNum; } -#pragma pop /* 8029A70C-8029A7B8 29504C 00AC+00 0/0 2/2 0/0 .text setFileName__10JASWaveArcFPCc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASWaveArc::setFileName(char const* param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASWaveArcLoader/setFileName__10JASWaveArcFPCc.s" +void JASWaveArc::setFileName(char const* fileName) { + char* currentDir = JASWaveArcLoader::getCurrentDir(); + size_t length = strlen(currentDir); + length = length + strlen(fileName); + JKRHeap* systemHeap = JASKernel::getSystemHeap(); + char* fileString = new (systemHeap, -4) char[length + 1]; + strcpy(fileString, currentDir); + strcat(fileString, fileName); + fileString[length] = '\0'; + int entryNum = DVDConvertPathToEntrynum(fileString); + delete[] fileString; + if (entryNum < 0) { + return; + } + setEntryNum(entryNum); } -#pragma pop /* 8029A7B8-8029A800 2950F8 0048+00 1/0 0/0 0/0 .text __dt__11JASDisposerFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JASDisposer::~JASDisposer() { +asm void __dt__11JASDisposerFv() { nofralloc #include "asm/JSystem/JAudio2/JASWaveArcLoader/__dt__11JASDisposerFv.s" } diff --git a/src/f_op/f_op_scene.cpp b/src/f_op/f_op_scene.cpp index 8815ca8ff93..1a635233b9f 100644 --- a/src/f_op/f_op_scene.cpp +++ b/src/f_op/f_op_scene.cpp @@ -20,8 +20,8 @@ static void fopScn_Execute(scene_class* pScene) { } /* 8001EB84-8001EBAC 0194C4 0028+00 1/0 0/0 0/0 .text fopScn_IsDelete__FPv */ -static s32 fopScn_IsDelete(scene_class* pScene) { - return fpcMtd_IsDelete(pScene->mpMtd, pScene); +static s32 fopScn_IsDelete(void* pScene) { + return fpcMtd_IsDelete(((scene_class*)pScene)->mpMtd, pScene); } /* 8001EBAC-8001EC00 0194EC 0054+00 1/0 0/0 0/0 .text fopScn_Delete__FPv */ @@ -35,20 +35,21 @@ static s32 fopScn_Delete(void* param_1) { } /* 8001EC00-8001EC74 019540 0074+00 1/0 0/0 0/0 .text fopScn_Create__FPv */ -static s32 fopScn_Create(scene_class * pScene) { +static s32 fopScn_Create(void * pScene) { + scene_class* scene = (scene_class*)pScene; if (fpcM_IsFirstCreating(pScene)) { scene_process_profile_definition* profile = (scene_process_profile_definition*) fpcM_GetProfile(pScene); - pScene->mpMtd = profile->mpMtd; - fopScnTg_Init(&pScene->mScnTg, pScene); - fopScnTg_ToQueue(&pScene->mScnTg); + scene->mpMtd = profile->mpMtd; + fopScnTg_Init(&scene->mScnTg, pScene); + fopScnTg_ToQueue(&scene->mScnTg); u32 * append = (u32*)fpcM_GetAppend(pScene); if (append != NULL) { - pScene->mBase.mBase.mParameters = *append; + scene->mBase.mBase.mParameters = *append; } } - return fpcMtd_Create(pScene->mpMtd, pScene); + return fpcMtd_Create(scene->mpMtd, pScene); } /* ############################################################################################## */