mirror of https://github.com/zeldaret/tp.git
More JSystem borrowing (#383)
This commit is contained in:
parent
6d9f00cb46
commit
cb8bf4a489
|
@ -1,100 +0,0 @@
|
|||
lbl_802D2830:
|
||||
/* 802D2830 94 21 FF D0 */ stwu r1, -0x30(r1)
|
||||
/* 802D2834 7C 08 02 A6 */ mflr r0
|
||||
/* 802D2838 90 01 00 34 */ stw r0, 0x34(r1)
|
||||
/* 802D283C 39 61 00 30 */ addi r11, r1, 0x30
|
||||
/* 802D2840 48 08 F9 8D */ bl _savegpr_25
|
||||
/* 802D2844 7C 7A 1B 78 */ mr r26, r3
|
||||
/* 802D2848 7C 9B 23 78 */ mr r27, r4
|
||||
/* 802D284C 7C BC 2B 78 */ mr r28, r5
|
||||
/* 802D2850 7C DD 33 78 */ mr r29, r6
|
||||
/* 802D2854 7C FE 3B 78 */ mr r30, r7
|
||||
/* 802D2858 7D 1F 43 78 */ mr r31, r8
|
||||
/* 802D285C 48 06 AE 99 */ bl OSDisableInterrupts
|
||||
/* 802D2860 7C 79 1B 78 */ mr r25, r3
|
||||
/* 802D2864 88 0D 8E 7C */ lbz r0, data_804513FC(r13)
|
||||
/* 802D2868 28 00 00 00 */ cmplwi r0, 0
|
||||
/* 802D286C 40 82 00 18 */ bne lbl_802D2884
|
||||
/* 802D2870 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804342E8@ha */
|
||||
/* 802D2874 38 63 42 E8 */ addi r3, r3, decompMutex@l /* 0x804342E8@l */
|
||||
/* 802D2878 48 06 C7 91 */ bl OSInitMutex
|
||||
/* 802D287C 38 00 00 01 */ li r0, 1
|
||||
/* 802D2880 98 0D 8E 7C */ stb r0, data_804513FC(r13)
|
||||
lbl_802D2884:
|
||||
/* 802D2884 7F 23 CB 78 */ mr r3, r25
|
||||
/* 802D2888 48 06 AE 95 */ bl OSRestoreInterrupts
|
||||
/* 802D288C 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804342E8@ha */
|
||||
/* 802D2890 38 63 42 E8 */ addi r3, r3, decompMutex@l /* 0x804342E8@l */
|
||||
/* 802D2894 48 06 C7 AD */ bl OSLockMutex
|
||||
/* 802D2898 83 2D 83 38 */ lwz r25, sSZSBufferSize__7JKRAram(r13)
|
||||
/* 802D289C 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13)
|
||||
/* 802D28A0 7F 24 CB 78 */ mr r4, r25
|
||||
/* 802D28A4 38 A0 00 20 */ li r5, 0x20
|
||||
/* 802D28A8 4B FF BC 2D */ bl alloc__7JKRHeapFUli
|
||||
/* 802D28AC 90 6D 8E 4C */ stw r3, szpBuf(r13)
|
||||
/* 802D28B0 7C 03 CA 14 */ add r0, r3, r25
|
||||
/* 802D28B4 90 0D 8E 50 */ stw r0, szpEnd(r13)
|
||||
/* 802D28B8 28 1E 00 00 */ cmplwi r30, 0
|
||||
/* 802D28BC 41 82 00 28 */ beq lbl_802D28E4
|
||||
/* 802D28C0 80 6D 8D F0 */ lwz r3, sSystemHeap__7JKRHeap(r13)
|
||||
/* 802D28C4 38 80 11 20 */ li r4, 0x1120
|
||||
/* 802D28C8 38 A0 00 00 */ li r5, 0
|
||||
/* 802D28CC 4B FF BC 09 */ bl alloc__7JKRHeapFUli
|
||||
/* 802D28D0 90 6D 8E 54 */ stw r3, refBuf(r13)
|
||||
/* 802D28D4 38 03 11 20 */ addi r0, r3, 0x1120
|
||||
/* 802D28D8 90 0D 8E 58 */ stw r0, refEnd(r13)
|
||||
/* 802D28DC 90 6D 8E 5C */ stw r3, refCurrent(r13)
|
||||
/* 802D28E0 48 00 00 0C */ b lbl_802D28EC
|
||||
lbl_802D28E4:
|
||||
/* 802D28E4 38 00 00 00 */ li r0, 0
|
||||
/* 802D28E8 90 0D 8E 54 */ stw r0, refBuf(r13)
|
||||
lbl_802D28EC:
|
||||
/* 802D28EC 93 4D 8E 6C */ stw r26, srcAddress(r13)
|
||||
/* 802D28F0 38 00 00 00 */ li r0, 0
|
||||
/* 802D28F4 90 0D 8E 60 */ stw r0, srcOffset(r13)
|
||||
/* 802D28F8 28 1C 00 00 */ cmplwi r28, 0
|
||||
/* 802D28FC 38 00 FF FF */ li r0, -1
|
||||
/* 802D2900 41 82 00 08 */ beq lbl_802D2908
|
||||
/* 802D2904 7F 80 E3 78 */ mr r0, r28
|
||||
lbl_802D2908:
|
||||
/* 802D2908 90 0D 8E 64 */ stw r0, transLeft(r13)
|
||||
/* 802D290C 93 CD 8E 70 */ stw r30, fileOffset(r13)
|
||||
/* 802D2910 38 00 00 00 */ li r0, 0
|
||||
/* 802D2914 90 0D 8E 74 */ stw r0, readCount(r13)
|
||||
/* 802D2918 93 AD 8E 78 */ stw r29, maxDest(r13)
|
||||
/* 802D291C 28 1F 00 00 */ cmplwi r31, 0
|
||||
/* 802D2920 41 82 00 0C */ beq lbl_802D292C
|
||||
/* 802D2924 7F E3 FB 78 */ mr r3, r31
|
||||
/* 802D2928 48 00 00 08 */ b lbl_802D2930
|
||||
lbl_802D292C:
|
||||
/* 802D292C 38 6D 8E 84 */ la r3, tsArea(r13) /* 80451404-_SDA_BASE_ */
|
||||
lbl_802D2930:
|
||||
/* 802D2930 90 6D 8E 80 */ stw r3, tsPtr(r13)
|
||||
/* 802D2934 38 00 00 00 */ li r0, 0
|
||||
/* 802D2938 90 03 00 00 */ stw r0, 0(r3)
|
||||
/* 802D293C 48 00 03 05 */ bl firstSrcData__Fv
|
||||
/* 802D2940 7F 64 DB 78 */ mr r4, r27
|
||||
/* 802D2944 48 00 00 5D */ bl decompSZS_subroutine__FPUcPUc
|
||||
/* 802D2948 80 6D 8E 4C */ lwz r3, szpBuf(r13)
|
||||
/* 802D294C 38 80 00 00 */ li r4, 0
|
||||
/* 802D2950 4B FF BB B1 */ bl free__7JKRHeapFPvP7JKRHeap
|
||||
/* 802D2954 80 6D 8E 54 */ lwz r3, refBuf(r13)
|
||||
/* 802D2958 28 03 00 00 */ cmplwi r3, 0
|
||||
/* 802D295C 41 82 00 0C */ beq lbl_802D2968
|
||||
/* 802D2960 38 80 00 00 */ li r4, 0
|
||||
/* 802D2964 4B FF BB 9D */ bl free__7JKRHeapFPvP7JKRHeap
|
||||
lbl_802D2968:
|
||||
/* 802D2968 7F 63 DB 78 */ mr r3, r27
|
||||
/* 802D296C 80 8D 8E 80 */ lwz r4, tsPtr(r13)
|
||||
/* 802D2970 80 84 00 00 */ lwz r4, 0(r4)
|
||||
/* 802D2974 48 06 8C C5 */ bl DCStoreRangeNoSync
|
||||
/* 802D2978 3C 60 80 43 */ lis r3, decompMutex@ha /* 0x804342E8@ha */
|
||||
/* 802D297C 38 63 42 E8 */ addi r3, r3, decompMutex@l /* 0x804342E8@l */
|
||||
/* 802D2980 48 06 C7 9D */ bl OSUnlockMutex
|
||||
/* 802D2984 38 60 00 00 */ li r3, 0
|
||||
/* 802D2988 39 61 00 30 */ addi r11, r1, 0x30
|
||||
/* 802D298C 48 08 F8 8D */ bl _restgpr_25
|
||||
/* 802D2990 80 01 00 34 */ lwz r0, 0x34(r1)
|
||||
/* 802D2994 7C 08 03 A6 */ mtlr r0
|
||||
/* 802D2998 38 21 00 30 */ addi r1, r1, 0x30
|
||||
/* 802D299C 4E 80 00 20 */ blr
|
|
@ -22652,7 +22652,7 @@ SYMBOLS = [
|
|||
{'addr':0x804513F0,'size':4,'pad':0,'label':"fileOffset",'name':"fileOffset",'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[2,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x804513F4,'size':4,'pad':0,'label':"readCount",'name':"readCount",'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[2,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x804513F8,'size':4,'pad':0,'label':"maxDest",'name':"maxDest",'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[2,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x804513FC,'size':4,'pad':0,'label':"data_804513FC",'name':None,'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[1,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x804513FC,'size':4,'pad':0,'label':"s_is_decompress_mutex_initialized",'name':None,'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[1,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x80451400,'size':4,'pad':0,'label':"tsPtr",'name':"tsPtr",'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[2,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x80451404,'size':4,'pad':0,'label':"tsArea",'name':"tsArea",'lib':16,'tu':436,'section':7,'class_template':None,'static':True,'is_reachable':True,'r':[1,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
{'addr':0x80451408,'size':4,'pad':0,'label':"sAramStreamObject__13JKRAramStream",'name':"sAramStreamObject__13JKRAramStream",'lib':16,'tu':440,'section':7,'class_template':False,'static':True,'is_reachable':True,'r':[1,0,0],'sh':[0,0,0],'type':"ArbitraryData"},
|
||||
|
@ -49144,7 +49144,7 @@ SYMBOL_NAMES = {
|
|||
"fileOffset":21869,
|
||||
"readCount":21870,
|
||||
"maxDest":21871,
|
||||
"data_804513FC":21872,
|
||||
"s_is_decompress_mutex_initialized":21872,
|
||||
"tsPtr":21873,
|
||||
"tsArea":21874,
|
||||
"sAramStreamObject__13JKRAramStream":21875,
|
||||
|
|
|
@ -21,7 +21,6 @@ public:
|
|||
u32 getAudioMemSize() const { return mAudioMemorySize; }
|
||||
u32 getGraphMemory() const { return mGraphMemoryPtr; }
|
||||
u32 getGraphMemSize() const { return mGraphMemorySize; }
|
||||
|
||||
//private:
|
||||
/* 0x00 */ // vtable
|
||||
/* 0x04 */ // JKRThread
|
||||
|
@ -38,8 +37,8 @@ public:
|
|||
static JKRAram* create(u32, u32, long, long, long);
|
||||
static void checkOkAddress(u8*, u32, JKRAramBlock*, u32);
|
||||
static void changeGroupIdIfNeed(u8*, int);
|
||||
static void mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
static void aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
static JKRAramBlock* mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
static u8* aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*);
|
||||
static void dump(void);
|
||||
|
||||
static JKRAram* getManager() { return sAramObject; }
|
||||
|
@ -73,11 +72,19 @@ inline void* JKRAllocFromAram(u32 size, JKRAramHeap::EAllocMode allocMode) {
|
|||
return JKRAram::getAramHeap()->alloc(size, allocMode);
|
||||
}
|
||||
|
||||
inline void JKRFreeToAram(JKRAramBlock* block) {
|
||||
JKRAram::getAramHeap()->free(block);
|
||||
}
|
||||
|
||||
inline void JKRAramToMainRam(u32 p1, u8* p2, u32 p3, JKRExpandSwitch p4, u32 p5, JKRHeap* p6,
|
||||
int p7, u32* p8) {
|
||||
JKRAram::aramToMainRam(p1, p2, p3, p4, p5, p6, p7, p8);
|
||||
}
|
||||
|
||||
inline JKRAramBlock *JKRMainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id, u32 *pSize) {
|
||||
return JKRAram::mainRamToAram(buf, bufSize, alignedSize, expandSwitch, fileSize, heap, id, pSize);
|
||||
}
|
||||
|
||||
// void JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32, u32*);
|
||||
|
||||
#endif /* JKRARAM_H */
|
||||
|
|
|
@ -27,6 +27,9 @@ public:
|
|||
u32 getTotalFreeSize(void);
|
||||
// u32 getUsedSize(void);
|
||||
void dump(void);
|
||||
void free(JKRAramBlock *block) {
|
||||
delete block;
|
||||
}
|
||||
|
||||
u8 getCurrentGroupID() const { return mGroupId; }
|
||||
|
||||
|
|
|
@ -25,12 +25,12 @@ public:
|
|||
private:
|
||||
/* 0x00 */ // vtable
|
||||
/* 0x04 */ // JKRArchive
|
||||
/* 0x5C */ int field_0x5c;
|
||||
/* 0x5C */ int mCompression;
|
||||
/* 0x60 */ EMountDirection mMountDirection;
|
||||
/* 0x64 */ int field_0x64;
|
||||
/* 0x68 */ JKRAramBlock* field_0x68;
|
||||
/* 0x68 */ JKRAramBlock* mAramPart;
|
||||
/* 0x6C */ int field_0x6c;
|
||||
/* 0x70 */ JKRDvdFile* field_0x70;
|
||||
/* 0x70 */ JKRDvdFile* mDvdFile;
|
||||
/* 0x74 */ u32 mSizeOfMemPart;
|
||||
/* 0x78 */ u32 mSizeOfAramPart;
|
||||
/* 0x7C */ int field_0x7c;
|
||||
|
|
|
@ -85,7 +85,7 @@ public:
|
|||
/* vt[18] */ virtual s32 do_getTotalFreeSize(); /* override */
|
||||
/* vt[19] */ virtual s32 do_changeGroupID(u8 newGroupID); /* override */
|
||||
/* vt[20] */ virtual u8 do_getCurrentGroupId(); /* override */
|
||||
/* vt[21] */ virtual void state_register(JKRHeap::TState* p, u32 id) const; /* override */
|
||||
/* vt[21] */ virtual u32 state_register(JKRHeap::TState* p, u32 id) const; /* override */
|
||||
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const& r1,
|
||||
JKRHeap::TState const& r2) const; /* override */
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
/* vt[18] */ virtual s32 do_getTotalFreeSize() = 0;
|
||||
/* vt[19] */ virtual s32 do_changeGroupID(u8 newGroupID);
|
||||
/* vt[20] */ virtual u8 do_getCurrentGroupId();
|
||||
/* vt[21] */ virtual void state_register(JKRHeap::TState* p, u32 id) const;
|
||||
/* vt[21] */ virtual u32 state_register(JKRHeap::TState* p, u32 id) const;
|
||||
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const& r1, JKRHeap::TState const& r2) const;
|
||||
/* vt[23] */ virtual void state_dump(JKRHeap::TState const& p) const;
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ public:
|
|||
/* vt[17] */ virtual void* do_getMaxFreeBlock(void); /* override */
|
||||
/* vt[18] */ virtual s32 do_getTotalFreeSize(void); /* override */
|
||||
|
||||
/* vt[21] */ virtual void state_register(JKRHeap::TState*, u32) const; /* override */
|
||||
/* vt[21] */ virtual u32 state_register(JKRHeap::TState*, u32) const; /* override */
|
||||
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const&,
|
||||
JKRHeap::TState const&) const; /* override */
|
||||
|
||||
|
|
|
@ -3,4 +3,13 @@
|
|||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct JPAKeyBlock {
|
||||
/* 8027D730 */ JPAKeyBlock(u8 const*);
|
||||
/* 8027D740 */ void calc(f32);
|
||||
|
||||
const u8* mDataStart;
|
||||
const f32* field_0x4;
|
||||
};
|
||||
|
||||
|
||||
#endif /* JPAKEYBLOCK_H */
|
||||
|
|
|
@ -7,5 +7,6 @@
|
|||
void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx dst);
|
||||
void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
|
||||
JGeometry::TVec3<f32>* param_2);
|
||||
void JPACalcKeyAnmValue(f32 param_0, u16 param_1, f32 const* param_2);
|
||||
|
||||
#endif /* JPAMATH_H */
|
||||
|
|
|
@ -39,6 +39,7 @@ public:
|
|||
/* 0x04 */ u32 u32Size;
|
||||
/* 0x08 */ u32 u32Type;
|
||||
/* 0x0C */ const void* pContent;
|
||||
/* 0x10 */ const void* next;
|
||||
};
|
||||
TParse_TParagraph(const void* content) : TParseData_aligned<4>(content) {}
|
||||
|
||||
|
|
|
@ -65,10 +65,10 @@ public:
|
|||
|
||||
struct TParse_TParagraph_data : public TParseData_aligned<4> {
|
||||
struct TData {
|
||||
/* 0x00 */ u8 _0;
|
||||
/* 0x04 */ u32 _4;
|
||||
/* 0x00 */ u8 status;
|
||||
/* 0x04 */ u32 dataSize;
|
||||
/* 0x08 */ u32 _8;
|
||||
/* 0x0C */ const void* _c;
|
||||
/* 0x0C */ const void* fileCount;
|
||||
/* 0x10 */ const void* _10;
|
||||
};
|
||||
|
||||
|
|
|
@ -148,6 +148,7 @@ extern "C" JUTConsole* JUTGetWarningConsole();
|
|||
extern "C" void JUTReportConsole_f_va(const char*, va_list);
|
||||
extern "C" void JUTReportConsole_f(const char*, ...);
|
||||
extern "C" void JUTWarningConsole(const char* message);
|
||||
extern "C" void JUTWarningConsole_f(const char* message, ...);
|
||||
extern "C" void JUTReportConsole(const char* message);
|
||||
|
||||
#endif /* JUTCONSOLE_H */
|
||||
|
|
|
@ -32,4 +32,6 @@ private:
|
|||
/* 0x10 */ u8 field_0x10[0xC];
|
||||
};
|
||||
|
||||
inline void JUTCreateFifo(u32 bufSize) { new JUTGraphFifo(bufSize); }
|
||||
|
||||
#endif /* JUTGRAPHFIFO_H */
|
||||
|
|
|
@ -19,96 +19,10 @@
|
|||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void ctor_subroutine__10JFWDisplayFb();
|
||||
extern "C" void __ct__10JFWDisplayFP7JKRHeapQ26JUTXfb10EXfbNumberb();
|
||||
extern "C" void __dt__10JFWDisplayFv();
|
||||
extern "C" void createManager__10JFWDisplayFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumberb();
|
||||
extern "C" static void callDirectDraw__Fv();
|
||||
extern "C" void prepareCopyDisp__10JFWDisplayFv();
|
||||
extern "C" void drawendXfb_single__10JFWDisplayFv();
|
||||
extern "C" void exchangeXfb_double__10JFWDisplayFv();
|
||||
extern "C" void exchangeXfb_triple__10JFWDisplayFv();
|
||||
extern "C" void copyXfb_triple__10JFWDisplayFv();
|
||||
extern "C" void preGX__10JFWDisplayFv();
|
||||
extern "C" void endGX__10JFWDisplayFv();
|
||||
extern "C" void beginRender__10JFWDisplayFv();
|
||||
extern "C" void endRender__10JFWDisplayFv();
|
||||
extern "C" void endFrame__10JFWDisplayFv();
|
||||
extern "C" void waitBlanking__10JFWDisplayFi();
|
||||
extern "C" static void waitForTick__FUlUs();
|
||||
extern "C" static void JFWThreadAlarmHandler__FP7OSAlarmP9OSContext();
|
||||
extern "C" void threadSleep__10JFWDisplayFx();
|
||||
extern "C" void clearEfb_init__10JFWDisplayFv();
|
||||
extern "C" void clearEfb__10JFWDisplayFv();
|
||||
extern "C" void clearEfb__10JFWDisplayF8_GXColor();
|
||||
extern "C" void clearEfb__10JFWDisplayFiiii8_GXColor();
|
||||
extern "C" void calcCombinationRatio__10JFWDisplayFv();
|
||||
extern "C" static void JFWDrawDoneAlarm__Fv();
|
||||
extern "C" static void JFWGXAbortAlarmHandler__FP7OSAlarmP9OSContext();
|
||||
extern "C" static void diagnoseGpHang__Fv();
|
||||
extern "C" void __sinit_JFWDisplay_cpp();
|
||||
extern "C" void func_80273724(void* _this);
|
||||
extern "C" extern char const* const JFWDisplay__stringBase0;
|
||||
extern "C" u8 sList__8JFWAlarm[12];
|
||||
extern "C" u8 sManager__10JFWDisplay[4];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void* __nw__FUl();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__10JSUPtrLinkFPv();
|
||||
extern "C" void __dt__10JSUPtrLinkFv();
|
||||
extern "C" void __ct__10JSUPtrListFb();
|
||||
extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void flush__10JUTDbPrintFv();
|
||||
extern "C" void changeFrameBuffer__14JUTDirectPrintFPvUsUs();
|
||||
extern "C" void flushMessage__12JUTAssertionFv();
|
||||
extern "C" void flushMessage_dbPrint__12JUTAssertionFv();
|
||||
extern "C" void drawDoneStart__8JUTVideoFv();
|
||||
extern "C" void dummyNoDrawWait__8JUTVideoFv();
|
||||
extern "C" void setRenderMode__8JUTVideoFPC16_GXRenderModeObj();
|
||||
extern "C" void waitRetraceIfNeed__8JUTVideoFv();
|
||||
extern "C" void createManager__6JUTXfbFP7JKRHeapQ26JUTXfb10EXfbNumber();
|
||||
extern "C" void destroyManager__6JUTXfbFv();
|
||||
extern "C" void control__8JUTFaderFv();
|
||||
extern "C" void create__10JUTProcBarFv();
|
||||
extern "C" void destroy__10JUTProcBarFv();
|
||||
extern "C" void clear__10JUTProcBarFv();
|
||||
extern "C" void draw__10JUTProcBarFv();
|
||||
extern "C" void draw__17JUTConsoleManagerCFv();
|
||||
extern "C" void __ct__13J2DOrthoGraphFffffff();
|
||||
extern "C" void setPort__13J2DOrthoGraphFv();
|
||||
extern "C" void VIFlush();
|
||||
extern "C" void GXClearVtxDesc();
|
||||
extern "C" void GXInvalidateVtxCache();
|
||||
extern "C" void GXAbortFrame();
|
||||
extern "C" void GXSetDrawDone();
|
||||
extern "C" void GXDrawDone();
|
||||
extern "C" void GXPixModeSync();
|
||||
extern "C" void GXInvalidateTexAll();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_24();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_24();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" void __cvt_dbl_usll();
|
||||
extern "C" extern void* __vt__14J2DGrafContext[10];
|
||||
extern "C" extern void* __vt__13J2DOrthoGraph[10];
|
||||
extern "C" u8 sDebugPrint__10JUTDbPrint[4 + 4 /* padding */];
|
||||
extern "C" u8 sDirectPrint__14JUTDirectPrint[4 + 4 /* padding */];
|
||||
extern "C" u8 sManager__8JUTVideo[4];
|
||||
extern "C" u8 sVideoLastTick__8JUTVideo[4];
|
||||
extern "C" u8 sVideoInterval__8JUTVideo[4];
|
||||
extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */];
|
||||
extern "C" u8 sManager__10JUTProcBar[4];
|
||||
extern "C" u8 sManager__17JUTConsoleManager[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
@ -141,14 +55,14 @@ void JFWDisplay::ctor_subroutine(bool enableAlpha) {
|
|||
|
||||
/* ############################################################################################## */
|
||||
/* 803C4020-803C4060 021140 0030+10 1/1 0/0 0/0 .data e_mtx */
|
||||
SECTION_DATA static Mtx e_mtx ALIGN_DECL(32) = {
|
||||
static Mtx e_mtx ALIGN_DECL(32) = {
|
||||
{1.0f, 0.0f, 0.0f, 0.0f},
|
||||
{0.0f, 1.0f, 0.0f, 0.0f},
|
||||
{0.0f, 0.0f, 1.0f, 0.0f},
|
||||
};
|
||||
|
||||
/* 803C4060-803C40A0 021180 0040+00 1/1 0/0 0/0 .data clear_z_TX */
|
||||
SECTION_DATA static u8 clear_z_TX[64] ALIGN_DECL(32) = {
|
||||
static u8 clear_z_TX[64] ALIGN_DECL(32) = {
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
|
@ -483,7 +397,6 @@ void JFWDisplay::waitBlanking(int param_0) {
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
/* ############################################################################################## */
|
||||
/* 804511D0-804511D4 0006D0 0004+00 1/1 0/0 0/0 .sbss nextTick$2642 */
|
||||
static OSTime nextTick ALIGN_DECL(8);
|
||||
|
@ -498,64 +411,28 @@ static u32 nextCount;
|
|||
static s8 data_804511E0;
|
||||
|
||||
/* 80272CB0-80272DD0 26D5F0 0120+00 2/2 0/0 0/0 .text waitForTick__FUlUs */
|
||||
static void waitForTick(u32 param_0, u16 param_1) {
|
||||
if (param_0 != 0) {
|
||||
if (!data_804511D8) {
|
||||
nextTick = OSGetTime();
|
||||
data_804511D8 = true;
|
||||
static void waitForTick(u32 p1, u16 p2) {
|
||||
if (p1 != 0) {
|
||||
static s64 nextTick = OSGetTime();
|
||||
s64 time = OSGetTime();
|
||||
while (time < nextTick) {
|
||||
JFWDisplay::getManager()->threadSleep((nextTick - time));
|
||||
time = OSGetTime();
|
||||
}
|
||||
|
||||
while (OSGetTime() < nextTick) {
|
||||
JFWDisplay::getManager()->threadSleep(nextTick - param_0);
|
||||
nextTick = time + p1;
|
||||
}
|
||||
nextTick += param_0;
|
||||
} else {
|
||||
if (!data_804511E0) {
|
||||
nextCount = VIGetRetraceCount();
|
||||
data_804511E0 = true;
|
||||
}
|
||||
|
||||
int uvar4 = 1;
|
||||
if (param_1 != 0) {
|
||||
uvar4 = param_1;
|
||||
}
|
||||
|
||||
else {
|
||||
static u32 nextCount = VIGetRetraceCount();
|
||||
u32 uVar1 = (p2 == 0) ? 1 : p2;
|
||||
OSMessage msg;
|
||||
do {
|
||||
if (!OSReceiveMessage(JUTVideo::getManager()->getMessageQueue(), &msg,
|
||||
OS_MESSAGE_BLOCK)) {
|
||||
msg = NULL;
|
||||
if (!OSReceiveMessage(JUTVideo::getManager()->getMessageQueue(), &msg, OS_MESSAGE_BLOCK)) {
|
||||
msg = 0;
|
||||
}
|
||||
} while ((int)msg - nextCount > 0);
|
||||
nextCount = (int)msg + uvar4;
|
||||
} while (((int)msg - (int)nextCount) < 0);
|
||||
nextCount = (int)msg + uVar1;
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* ############################################################################################## */
|
||||
/* 804511D0-804511D4 0006D0 0004+00 1/1 0/0 0/0 .sbss nextTick$2642 */
|
||||
static u8 nextTick[4] ALIGN_DECL(8);
|
||||
|
||||
/* 804511D4-804511D8 0006D4 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static u8 data_804511D4[4];
|
||||
|
||||
/* 804511D8-804511DC 0006D8 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static s8 data_804511D8;
|
||||
|
||||
/* 804511DC-804511E0 0006DC 0004+00 1/1 0/0 0/0 .sbss nextCount$2650 */
|
||||
static u32 nextCount;
|
||||
|
||||
/* 804511E0-804511E8 0006E0 0008+00 1/1 0/0 0/0 .sbss None */
|
||||
static s8 data_804511E0;
|
||||
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void waitForTick(u32 param_0, u16 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JFramework/JFWDisplay/waitForTick__FUlUs.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 80430FE4-80430FF0 05DD04 000C+00 4/4 0/0 0/0 .bss sList__8JFWAlarm */
|
||||
JSUList<JFWAlarm> JFWAlarm::sList(false);
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "JSystem/JKernel/JKRAramStream.h"
|
||||
#include "JSystem/JKernel/JKRDecomp.h"
|
||||
#include "JSystem/JKernel/JKRExpHeap.h"
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "MSL_C/string.h"
|
||||
#include "dol2asm.h"
|
||||
|
@ -22,67 +23,16 @@
|
|||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void create__7JKRAramFUlUllll();
|
||||
extern "C" void __ct__7JKRAramFUlUll();
|
||||
extern "C" void __dt__7JKRAramFv();
|
||||
extern "C" void run__7JKRAramFv();
|
||||
extern "C" void checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl();
|
||||
extern "C" void changeGroupIdIfNeed__7JKRAramFPUci();
|
||||
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
|
||||
extern "C" void aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl();
|
||||
extern "C" static void JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl();
|
||||
extern "C" static void decompSZS_subroutine__FPUcPUc();
|
||||
static int decompSZS_subroutine(u8* param_0, u8* param_1);
|
||||
extern "C" static void firstSrcData__Fv();
|
||||
static u8* firstSrcData(void);
|
||||
extern "C" static void nextSrcData__FPUc();
|
||||
extern "C" void __sinit_JKRAram_cpp();
|
||||
extern "C" void func_802D2DF0(void* _this);
|
||||
extern "C" extern char const* const JKRAram__stringBase0;
|
||||
extern "C" u8 sMessageBuffer__7JKRAram[16];
|
||||
extern "C" u8 sMessageQueue__7JKRAram[32];
|
||||
extern "C" u8 sAramCommandList__7JKRAram[12];
|
||||
extern "C" u32 sSZSBufferSize__7JKRAram[1 + 1 /* padding */];
|
||||
extern "C" u8 sAramObject__7JKRAram[4];
|
||||
static u8* firstSrcData();
|
||||
static u8* nextSrcData(u8* param_0);
|
||||
static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
|
||||
u32* resourceSize);
|
||||
int decompSZS_subroutine(u8 *src, u8 *dest);
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
|
||||
extern "C" void alloc__7JKRHeapFUli();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void __ct__9JKRThreadFUlii();
|
||||
extern "C" void __dt__9JKRThreadFv();
|
||||
extern "C" void __ct__11JKRAramHeapFUlUl();
|
||||
extern "C" void alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode();
|
||||
extern "C" void orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock();
|
||||
extern "C" void startDMA__12JKRAramPieceFP12JKRAMCommand();
|
||||
extern "C" void create__13JKRAramStreamFl();
|
||||
extern "C" void create__9JKRDecompFl();
|
||||
extern "C" void orderSync__9JKRDecompFPUcPUcUlUl();
|
||||
extern "C" void checkCompressed__9JKRDecompFPUc();
|
||||
extern "C" void __dt__10JSUPtrListFv();
|
||||
extern "C" void initiate__10JSUPtrListFv();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void ARQInit();
|
||||
extern "C" void __register_global_object();
|
||||
extern "C" void _savegpr_22();
|
||||
extern "C" void _savegpr_23();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_22();
|
||||
extern "C" void _restgpr_23();
|
||||
extern "C" void _restgpr_25();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
|
@ -198,27 +148,151 @@ void JKRAram::changeGroupIdIfNeed(u8* data, int groupId) {
|
|||
|
||||
/* 802D233C-802D25B4 2CCC7C 0278+00 0/0 3/3 0/0 .text
|
||||
* mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::mainRamToAram(u8* param_0, u32 param_1, u32 param_2, JKRExpandSwitch param_3,
|
||||
u32 param_4, JKRHeap* param_5, int param_6, u32* param_7) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl.s"
|
||||
JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id, u32 *pSize) {
|
||||
JKRAramBlock *block = NULL;
|
||||
checkOkAddress(buf, bufSize, NULL, 0);
|
||||
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
|
||||
expandSwitch = (JKRCheckCompressed_noASR(buf) == COMPRESSION_NONE) ? EXPAND_SWITCH_UNKNOWN0 : EXPAND_SWITCH_UNKNOWN1;
|
||||
}
|
||||
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
|
||||
u32 expandSize = JKRDecompExpandSize(buf);
|
||||
if (fileSize == 0 || fileSize > expandSize) {
|
||||
fileSize = ALIGN_NEXT(expandSize, 32);
|
||||
}
|
||||
if (bufSize == 0) {
|
||||
JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD);
|
||||
block = (JKRAramBlock*)allocatedBlock;
|
||||
if (allocatedBlock == NULL)
|
||||
return NULL;
|
||||
|
||||
allocatedBlock->newGroupID(decideAramGroupId(id));
|
||||
bufSize = allocatedBlock->getAddress();
|
||||
}
|
||||
if (alignedSize == 0 || alignedSize > expandSize)
|
||||
alignedSize = ALIGN_NEXT(expandSize, 32);
|
||||
|
||||
if (alignedSize > fileSize)
|
||||
alignedSize = fileSize;
|
||||
|
||||
void *allocatedMem = JKRAllocFromHeap(heap, fileSize, -32);
|
||||
if (allocatedMem == NULL) {
|
||||
if (block != NULL) {
|
||||
JKRFreeToAram(block);
|
||||
}
|
||||
block = NULL;
|
||||
}
|
||||
else {
|
||||
JKRDecompress(buf, (u8 *)allocatedMem, fileSize, 0);
|
||||
JKRAramPcs(0, (u32)allocatedMem, bufSize, alignedSize, block);
|
||||
JKRFreeToHeap(heap, allocatedMem);
|
||||
block = block == NULL ? (JKRAramBlock *)-1 : block;
|
||||
if (pSize != NULL) {
|
||||
*pSize = alignedSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (fileSize != 0 && alignedSize > fileSize)
|
||||
alignedSize = fileSize;
|
||||
if (bufSize == 0) {
|
||||
|
||||
JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD);
|
||||
block = allocatedBlock;
|
||||
block->newGroupID(decideAramGroupId(id));
|
||||
if (block == NULL)
|
||||
return NULL;
|
||||
|
||||
bufSize = allocatedBlock->getAddress();
|
||||
}
|
||||
|
||||
JKRAramPcs(0, (u32)buf, bufSize, alignedSize, block);
|
||||
block = block == NULL ? (JKRAramBlock *)-1 : block;
|
||||
if (pSize != NULL)
|
||||
*pSize = alignedSize;
|
||||
}
|
||||
return block;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D25B4-802D2830 2CCEF4 027C+00 0/0 6/6 0/0 .text
|
||||
* aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRAram::aramToMainRam(u32 param_0, u8* param_1, u32 param_2, JKRExpandSwitch param_3,
|
||||
u32 param_4, JKRHeap* param_5, int param_6, u32* param_7) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl.s"
|
||||
u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5, JKRHeap *heap, int id, u32 *pSize) {
|
||||
JKRCompression compression = COMPRESSION_NONE;
|
||||
if (pSize != NULL)
|
||||
*pSize = 0;
|
||||
|
||||
checkOkAddress(buf, address, NULL, 0);
|
||||
|
||||
u32 expandSize;
|
||||
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
|
||||
u8 buffer[64];
|
||||
u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32);
|
||||
JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2, NULL); // probably change sizeof(buffer) / 2 to 32
|
||||
compression = JKRCheckCompressed_noASR(bufPtr);
|
||||
expandSize = JKRDecompExpandSize(bufPtr);
|
||||
}
|
||||
|
||||
if (compression == COMPRESSION_YAZ0) { // SZS
|
||||
if (p5 != 0 && p5 < expandSize)
|
||||
expandSize = p5;
|
||||
|
||||
if (buf == NULL)
|
||||
buf = (u8 *)JKRAllocFromHeap(heap, expandSize, 32);
|
||||
if (buf == NULL)
|
||||
return NULL;
|
||||
else {
|
||||
changeGroupIdIfNeed(buf, id);
|
||||
JKRDecompressFromAramToMainRam(address, buf, p3, expandSize, 0, pSize);
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
else if (compression == COMPRESSION_YAY0) { // SZP
|
||||
u8 *szpSpace = (u8 *)JKRAllocFromHeap(heap, p3, -32);
|
||||
if (szpSpace == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
JKRAramPcs(1, address, (u32)szpSpace, p3, NULL);
|
||||
if (p5 != 0 && p5 < expandSize)
|
||||
expandSize = p5;
|
||||
|
||||
u8* rv;
|
||||
if (buf == NULL) {
|
||||
rv = (u8 *)JKRAllocFromHeap(heap, expandSize, 32);
|
||||
} else {
|
||||
rv = buf;
|
||||
}
|
||||
|
||||
if (rv == NULL) {
|
||||
i_JKRFree(szpSpace);
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
changeGroupIdIfNeed(rv, id);
|
||||
JKRDecompress(szpSpace, rv, expandSize, 0);
|
||||
JKRFreeToHeap(heap, szpSpace);
|
||||
if (pSize != NULL) {
|
||||
*pSize = expandSize;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // Not compressed or ASR
|
||||
if (buf == NULL)
|
||||
buf = (u8 *)JKRAllocFromHeap(heap, p3, 32);
|
||||
if (buf == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
changeGroupIdIfNeed(buf, id);
|
||||
JKRAramPcs(1, address, (u32)buf, p3, NULL);
|
||||
if (pSize != NULL) {
|
||||
*pSize = p3;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 804342DC-804342E8 060FFC 000C+00 1/1 0/0 0/0 .bss sAramCommandList__7JKRAram */
|
||||
JSUList<JKRAMCommand> JKRAram::sAramCommandList;
|
||||
|
@ -266,7 +340,7 @@ static u32 readCount;
|
|||
static u32 maxDest;
|
||||
|
||||
/* 804513FC-80451400 0008FC 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static bool data_804513FC;
|
||||
static bool s_is_decompress_mutex_initialized;
|
||||
|
||||
/* 80451400-80451404 000900 0004+00 2/2 0/0 0/0 .sbss tsPtr */
|
||||
static u32* tsPtr;
|
||||
|
@ -276,92 +350,170 @@ static u32 tsArea;
|
|||
|
||||
/* 802D2830-802D29A0 2CD170 0170+00 1/1 0/0 0/0 .text
|
||||
* JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */
|
||||
#ifdef NONMATCHING
|
||||
// full match, except:
|
||||
// tsPtr = &tsArea;
|
||||
// doesn't use r13
|
||||
void JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
|
||||
static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
|
||||
u32* resourceSize) {
|
||||
#define s_is_decompress_mutex_initialized data_804513FC
|
||||
|
||||
// STATIC BEGIN
|
||||
// This code is probably generated by the compiler for a static variable
|
||||
BOOL enable = OSDisableInterrupts();
|
||||
BOOL interrupts = OSDisableInterrupts();
|
||||
if (s_is_decompress_mutex_initialized == false) {
|
||||
OSInitMutex(&decompMutex);
|
||||
s_is_decompress_mutex_initialized = true;
|
||||
}
|
||||
OSRestoreInterrupts(enable);
|
||||
// STATIC END
|
||||
|
||||
OSRestoreInterrupts(interrupts);
|
||||
OSLockMutex(&decompMutex);
|
||||
u32 szpSize = JKRAram::getSZSBufferSize();
|
||||
szpBuf = (u8*)JKRAllocFromSysHeap(szpSize, 0x20);
|
||||
ASSERT(szpBuf != 0);
|
||||
szpEnd = szpBuf + szpSize;
|
||||
|
||||
u32 szsBufferSize = JKRAram::getSZSBufferSize();
|
||||
szpBuf = (u8 *)JKRAllocFromSysHeap(szsBufferSize, 32);
|
||||
|
||||
szpEnd = szpBuf + szsBufferSize;
|
||||
if (offset != 0) {
|
||||
refBuf = (u8*)JKRAllocFromSysHeap(0x1120, 0);
|
||||
ASSERT(refBuf != 0);
|
||||
refBuf = (u8 *)JKRAllocFromSysHeap(0x1120, 0);
|
||||
refEnd = refBuf + 0x1120;
|
||||
refCurrent = refBuf;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
refBuf = NULL;
|
||||
}
|
||||
|
||||
srcAddress = src;
|
||||
srcOffset = 0;
|
||||
if (srcLength == 0) {
|
||||
transLeft = -1;
|
||||
} else {
|
||||
transLeft = srcLength;
|
||||
}
|
||||
|
||||
transLeft = (srcLength != 0) ? srcLength : -1;
|
||||
fileOffset = offset;
|
||||
readCount = 0;
|
||||
maxDest = dstLength;
|
||||
if (!resourceSize) {
|
||||
tsPtr = &tsArea;
|
||||
} else {
|
||||
tsPtr = resourceSize;
|
||||
}
|
||||
|
||||
tsPtr = (resourceSize != 0) ? resourceSize : &tsArea;
|
||||
*tsPtr = 0;
|
||||
|
||||
decompSZS_subroutine(firstSrcData(), (u8*)dst);
|
||||
JKRFreeToSysHeap(szpBuf);
|
||||
decompSZS_subroutine(firstSrcData(), (u8 *)dst);
|
||||
i_JKRFree(szpBuf);
|
||||
if (refBuf) {
|
||||
JKRFreeToSysHeap(refBuf);
|
||||
i_JKRFree(refBuf);
|
||||
}
|
||||
|
||||
DCStoreRangeNoSync(dst, *tsPtr);
|
||||
OSUnlockMutex(&decompMutex);
|
||||
#undef s_is_decompress_mutex_initialized
|
||||
#undef decompMutex
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm void JKRDecompressFromAramToMainRam(u32 param_0, void* param_1, u32 param_2, u32 param_3,
|
||||
u32 param_4, u32* param_5) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D29A0-802D2C40 2CD2E0 02A0+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcPUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm int decompSZS_subroutine(u8* param_0, u8* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/decompSZS_subroutine__FPUcPUc.s"
|
||||
int decompSZS_subroutine(u8 *src, u8 *dest) {
|
||||
u8 *endPtr;
|
||||
s32 validBitCount = 0;
|
||||
s32 currCodeByte = 0;
|
||||
u32 ts = 0;
|
||||
|
||||
if (src[0] != 'Y' || src[1] != 'a' || src[2] != 'z' || src[3] != '0') {
|
||||
return -1;
|
||||
}
|
||||
|
||||
SYaz0Header *header = (SYaz0Header *)src;
|
||||
endPtr = dest + (header->length - fileOffset);
|
||||
if (endPtr > dest + maxDest) {
|
||||
endPtr = dest + maxDest;
|
||||
}
|
||||
|
||||
src += 0x10;
|
||||
do {
|
||||
if (validBitCount == 0) {
|
||||
if ((src > srcLimit) && transLeft) {
|
||||
src = nextSrcData(src);
|
||||
}
|
||||
currCodeByte = *src;
|
||||
validBitCount = 8;
|
||||
src++;
|
||||
}
|
||||
if (currCodeByte & 0x80) {
|
||||
if (fileOffset != 0) {
|
||||
if (readCount >= fileOffset) {
|
||||
*dest = *src;
|
||||
dest++;
|
||||
ts++;
|
||||
if (dest == endPtr)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
*(refCurrent++) = *src;
|
||||
if (refCurrent == refEnd) {
|
||||
refCurrent = refBuf;
|
||||
}
|
||||
src++;
|
||||
}
|
||||
else {
|
||||
*dest = *src;
|
||||
dest++;
|
||||
src++;
|
||||
ts++;
|
||||
if (dest == endPtr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
readCount++;
|
||||
}
|
||||
else {
|
||||
u32 dist = ((src[0] & 0x0f) << 8) | src[1];
|
||||
s32 numBytes = src[0] >> 4;
|
||||
src += 2;
|
||||
u8 *copySource;
|
||||
if (fileOffset != 0) {
|
||||
copySource = refCurrent - dist - 1;
|
||||
if (copySource < refBuf) {
|
||||
copySource += refEnd - refBuf;
|
||||
}
|
||||
}
|
||||
else {
|
||||
copySource = dest - dist - 1;
|
||||
}
|
||||
if (numBytes == 0) {
|
||||
numBytes = *src + 0x12;
|
||||
src += 1;
|
||||
}
|
||||
else {
|
||||
numBytes += 2;
|
||||
}
|
||||
if (fileOffset != 0) {
|
||||
do {
|
||||
if (readCount >= fileOffset) {
|
||||
*dest = *copySource;
|
||||
dest++;
|
||||
ts++;
|
||||
if (dest == endPtr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
*(refCurrent++) = *copySource;
|
||||
if (refCurrent == refEnd) {
|
||||
refCurrent = refBuf;
|
||||
}
|
||||
copySource++;
|
||||
if (copySource == refEnd) {
|
||||
copySource = refBuf;
|
||||
}
|
||||
readCount++;
|
||||
numBytes--;
|
||||
} while (numBytes != 0);
|
||||
}
|
||||
else {
|
||||
do {
|
||||
*dest = *copySource;
|
||||
dest++;
|
||||
ts++;
|
||||
if (dest == endPtr) {
|
||||
break;
|
||||
}
|
||||
readCount++;
|
||||
numBytes--;
|
||||
copySource++;
|
||||
} while (numBytes != 0);
|
||||
}
|
||||
}
|
||||
currCodeByte <<= 1;
|
||||
validBitCount--;
|
||||
} while (dest < endPtr);
|
||||
*tsPtr = ts;
|
||||
return 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D2C40-802D2CE4 2CD580 00A4+00 1/1 0/0 0/0 .text firstSrcData__Fv */
|
||||
static u8* firstSrcData(void) {
|
||||
static u8* firstSrcData() {
|
||||
srcLimit = szpEnd - 0x19;
|
||||
u8* buffer = szpBuf;
|
||||
|
||||
|
@ -388,54 +540,32 @@ static u8* firstSrcData(void) {
|
|||
}
|
||||
|
||||
/* 802D2CE4-802D2DAC 2CD624 00C8+00 1/1 0/0 0/0 .text nextSrcData__FPUc */
|
||||
// missing one add instruction
|
||||
#ifdef NONMATCHING
|
||||
inline u32 nextSrcData_MIN(u32 A, u32 B) {
|
||||
if (A > B)
|
||||
return B;
|
||||
return A;
|
||||
}
|
||||
|
||||
static u8* nextSrcData(u8* current) {
|
||||
u8* dest;
|
||||
static u8 *nextSrcData(u8 *current) {
|
||||
u8 *dest;
|
||||
u32 left = (u32)(szpEnd - current);
|
||||
if (!IS_NOT_ALIGNED(left, 0x20)) {
|
||||
if (IS_NOT_ALIGNED(left, 0x20))
|
||||
dest = szpBuf + 0x20 - (left & (0x20 - 1));
|
||||
else
|
||||
dest = szpBuf;
|
||||
} else {
|
||||
dest = szpBuf + 0x20 - (left & 0x1f);
|
||||
}
|
||||
|
||||
memcpy(dest, current, left);
|
||||
u32 transSize = nextSrcData_MIN(transLeft, szpEnd - (dest + left));
|
||||
ASSERT(transSize > 0);
|
||||
u32 transSize = (u32)(szpEnd - (dest + left));
|
||||
if (transSize > transLeft)
|
||||
transSize = transLeft;
|
||||
|
||||
JKRAramPcs(1, (u32)(srcAddress + srcOffset), (u32)(dest + left), ALIGN_NEXT(transSize, 0x20),
|
||||
JKRAramPcs(1, (u32)(srcAddress + srcOffset), ((u32)dest + left), ALIGN_NEXT(transSize, 0x20),
|
||||
NULL);
|
||||
srcOffset += transSize;
|
||||
transLeft -= transSize;
|
||||
|
||||
if (transLeft == 0) {
|
||||
if (transLeft == 0)
|
||||
srcLimit = (dest + left) + transSize;
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
static asm u8* nextSrcData(u8* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRAram/nextSrcData__FPUc.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D0A6-8039D0B8 029706 000E+04 0/0 0/0 0/0 .rodata None */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D0A6 = "bad aramSync\n";
|
||||
static const char* stringBase_8039D0A6 = "bad aramSync\n";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D0B4 = "\0\0\0";
|
||||
#pragma pop
|
||||
static const char* pad_8039D0B4 = "\0\0\0";
|
||||
|
|
|
@ -9,80 +9,21 @@
|
|||
#include "JSystem/JKernel/JKRDvdArchive.h"
|
||||
#include "JSystem/JKernel/JKRDvdFile.h"
|
||||
#include "JSystem/JKernel/JKRMemArchive.h"
|
||||
#include "JSystem/JKernel/JKRDecomp.h"
|
||||
#include "JSystem/JKernel/JKRAramArchive.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "MSL_C/math.h"
|
||||
#include "MSL_C/string.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/os/OSCache.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__14JKRCompArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void __dt__14JKRCompArchiveFv();
|
||||
extern "C" void open__14JKRCompArchiveFl();
|
||||
extern "C" void fetchResource__14JKRCompArchiveFPQ210JKRArchive12SDIFileEntryPUl();
|
||||
extern "C" void fetchResource__14JKRCompArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl();
|
||||
extern "C" void removeResourceAll__14JKRCompArchiveFv();
|
||||
extern "C" void removeResource__14JKRCompArchiveFPv();
|
||||
extern "C" void getExpandedResSize__14JKRCompArchiveCFPCv();
|
||||
extern "C" extern char const* const JKRCompArchive__stringBase0;
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
|
||||
extern "C" void alloc__7JKRHeapFUli();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void free__7JKRHeapFPv();
|
||||
extern "C" void copyMemory__7JKRHeapFPvPvUl();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
|
||||
extern "C" void aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl();
|
||||
extern "C" void alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode();
|
||||
extern "C" void unmount__13JKRFileLoaderFv();
|
||||
extern "C" void becomeCurrent__10JKRArchiveFPCc();
|
||||
extern "C" void getResource__10JKRArchiveFPCc();
|
||||
extern "C" void getResource__10JKRArchiveFUlPCc();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlUlPCc();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlPCc();
|
||||
extern "C" void detachResource__10JKRArchiveFPv();
|
||||
extern "C" void getResSize__10JKRArchiveCFPCv();
|
||||
extern "C" void countFile__10JKRArchiveCFPCc();
|
||||
extern "C" void getFirstFile__10JKRArchiveCFPCc();
|
||||
extern "C" void __ct__10JKRArchiveFlQ210JKRArchive10EMountMode();
|
||||
extern "C" void __dt__10JKRArchiveFv();
|
||||
extern "C" void findPtrResource__10JKRArchiveCFPCv();
|
||||
extern "C" void setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl();
|
||||
extern "C" void getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry();
|
||||
extern "C" void fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli();
|
||||
extern "C" void fetchResource_subroutine__14JKRAramArchiveFUlUlPUcUli();
|
||||
extern "C" void fetchResource_subroutine__14JKRAramArchiveFUlUlP7JKRHeapiPPUc();
|
||||
extern "C" void fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii();
|
||||
extern "C" void fetchResource_subroutine__13JKRDvdArchiveFlUlUlP7JKRHeapiiPPUc();
|
||||
extern "C" void __ct__10JKRDvdFileFl();
|
||||
extern "C" void
|
||||
loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl();
|
||||
extern "C" void loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl();
|
||||
extern "C" void orderSync__9JKRDecompFPUcPUcUlUl();
|
||||
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void _savegpr_25();
|
||||
extern "C" void _savegpr_26();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_25();
|
||||
extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sAramObject__7JKRAram[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
@ -119,8 +60,8 @@ JKRCompArchive::~JKRCompArchive() {
|
|||
mArcInfoBlock = NULL;
|
||||
}
|
||||
|
||||
if (field_0x68 != NULL) {
|
||||
delete field_0x68;
|
||||
if (mAramPart != NULL) {
|
||||
delete mAramPart;
|
||||
}
|
||||
|
||||
if (mExpandedSize != NULL) {
|
||||
|
@ -128,8 +69,8 @@ JKRCompArchive::~JKRCompArchive() {
|
|||
mExpandedSize = NULL;
|
||||
}
|
||||
|
||||
if (field_0x70 != NULL) {
|
||||
delete field_0x70;
|
||||
if (mDvdFile != NULL) {
|
||||
delete mDvdFile;
|
||||
}
|
||||
|
||||
sVolumeList.remove(&mFileLoaderLink);
|
||||
|
@ -137,46 +78,254 @@ JKRCompArchive::~JKRCompArchive() {
|
|||
}
|
||||
|
||||
/* 802D89BC-802D8F40 2D32FC 0584+00 1/1 0/0 0/0 .text open__14JKRCompArchiveFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm bool JKRCompArchive::open(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRCompArchive/open__14JKRCompArchiveFl.s"
|
||||
bool JKRCompArchive::open(long entryNum) {
|
||||
mArcInfoBlock = NULL;
|
||||
field_0x64 = 0;
|
||||
mAramPart = NULL;
|
||||
field_0x6c = 0;
|
||||
mSizeOfMemPart = 0;
|
||||
mSizeOfAramPart = 0;
|
||||
field_0x7c = 0;
|
||||
mNodes = NULL;
|
||||
mFiles = NULL;
|
||||
mStringTable = NULL;
|
||||
|
||||
mDvdFile = new (JKRGetSystemHeap(), 0) JKRDvdFile(entryNum);
|
||||
if(mDvdFile == NULL) {
|
||||
mMountMode = 0;
|
||||
return 0;
|
||||
}
|
||||
SArcHeader *arcHeader = (SArcHeader *)JKRAllocFromSysHeap(sizeof(SArcHeader), -32); // NOTE: unconfirmed if this struct is used
|
||||
if(arcHeader == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else {
|
||||
int alignment;
|
||||
|
||||
JKRDvdToMainRam(entryNum, (u8 *)arcHeader, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL);
|
||||
DCInvalidateRange(arcHeader, 32);
|
||||
|
||||
mSizeOfMemPart = arcHeader->field_0x14;
|
||||
mSizeOfAramPart = arcHeader->field_0x18;
|
||||
|
||||
switch (mCompression)
|
||||
{
|
||||
case COMPRESSION_NONE:
|
||||
case COMPRESSION_YAZ0:
|
||||
alignment = mMountDirection == 1 ? 32 : -32;
|
||||
mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset + mSizeOfMemPart, alignment);
|
||||
if (mArcInfoBlock == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, (u32)arcHeader->file_data_offset + mSizeOfMemPart,
|
||||
NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0x20, NULL, NULL);
|
||||
DCInvalidateRange(mArcInfoBlock, (u32)arcHeader->file_data_offset + mSizeOfMemPart);
|
||||
field_0x64 = (u32)mArcInfoBlock + arcHeader->file_data_offset;
|
||||
|
||||
if (mSizeOfAramPart != 0) {
|
||||
mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD);
|
||||
if(mAramPart == NULL) {
|
||||
mMountMode = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
JKRDvdToAram(entryNum, mAramPart->getAddress(), EXPAND_SWITCH_UNKNOWN1, arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart, 0, NULL);
|
||||
}
|
||||
|
||||
mNodes = (SDIDirEntry*)((u32)mArcInfoBlock + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry *)((u32)mArcInfoBlock + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((u32)mArcInfoBlock + mArcInfoBlock->string_table_offset);
|
||||
field_0x6c = arcHeader->header_length + arcHeader->file_data_offset;
|
||||
}
|
||||
break;
|
||||
|
||||
case COMPRESSION_YAY0:
|
||||
u32 alignedSize = ALIGN_NEXT(mDvdFile->getFileSize(), 32);
|
||||
alignment = ((mMountDirection == 1) ? 32 : -32);
|
||||
u8 *buf = (u8 *)JKRAllocFromSysHeap(alignedSize, -alignment);
|
||||
|
||||
if(buf == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else {
|
||||
JKRDvdToMainRam(entryNum, buf, EXPAND_SWITCH_UNKNOWN2, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, NULL, NULL);
|
||||
DCInvalidateRange(buf, alignedSize);
|
||||
u32 expandSize = ALIGN_NEXT(JKRDecompExpandSize(buf), 32);
|
||||
u8 *mem = (u8 *)JKRAllocFromHeap(mHeap, expandSize, -alignment);
|
||||
|
||||
if(mem == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else {
|
||||
arcHeader = (SArcHeader *)mem;
|
||||
JKRDecompress((u8 *)buf, (u8 *)mem, expandSize, 0);
|
||||
JKRFreeToSysHeap(buf);
|
||||
|
||||
mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset + mSizeOfMemPart, alignment);
|
||||
if(mArcInfoBlock == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else {
|
||||
// arcHeader + 1 should lead to 0x20, which is the data after the header
|
||||
JKRHeap::copyMemory((u8 *)mArcInfoBlock, arcHeader + 1, (arcHeader->file_data_offset + mSizeOfMemPart));
|
||||
field_0x64 = (u32)mArcInfoBlock + arcHeader->file_data_offset;
|
||||
if (mSizeOfAramPart != 0) {
|
||||
mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD);
|
||||
if(mAramPart == NULL) {
|
||||
mMountMode = 0;
|
||||
}
|
||||
else {
|
||||
JKRMainRamToAram((u8 *)mem + arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart,
|
||||
mAramPart->getAddress(), mSizeOfAramPart, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mNodes = (SDIDirEntry *)((u32)mArcInfoBlock + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry *)((u32)mArcInfoBlock + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char *)((u32)mArcInfoBlock + mArcInfoBlock->string_table_offset);
|
||||
field_0x6c = arcHeader->header_length + arcHeader->file_data_offset;
|
||||
break;
|
||||
}
|
||||
mExpandedSize = NULL;
|
||||
u8 compressedFiles = 0;
|
||||
SDIFileEntry *fileEntry = mFiles;
|
||||
for (int i = 0; i < mArcInfoBlock->num_file_entries; i++)
|
||||
{
|
||||
u8 flag = fileEntry->type_flags_and_name_offset >> 0x18;
|
||||
if (((flag & 0x1) != 0) && (((flag)&0x10) == 0))
|
||||
{
|
||||
compressedFiles = compressedFiles | (flag & 4);
|
||||
}
|
||||
fileEntry++;
|
||||
}
|
||||
|
||||
if (compressedFiles != 0)
|
||||
{
|
||||
mExpandedSize = (s32 *)JKRAllocFromHeap(mHeap, mArcInfoBlock->num_file_entries * 4, abs(alignment));
|
||||
if (mExpandedSize == NULL)
|
||||
{
|
||||
JKRFreeToSysHeap(mArcInfoBlock);
|
||||
mMountMode = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(mExpandedSize, 0, mArcInfoBlock->num_file_entries * 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (arcHeader != NULL)
|
||||
{
|
||||
JKRFreeToSysHeap(arcHeader);
|
||||
}
|
||||
if(mMountMode == 0) {
|
||||
if(mDvdFile != NULL) {
|
||||
delete mDvdFile;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
|
||||
/* 802D8F40-802D90C0 2D3880 0180+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__14JKRCompArchiveFPQ210JKRArchive12SDIFileEntryPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* JKRCompArchive::fetchResource(JKRArchive::SDIFileEntry* param_0, u32* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRCompArchive/fetchResource__14JKRCompArchiveFPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) {
|
||||
u32 ptrSize;
|
||||
u32 size = fileEntry->data_size;
|
||||
int compression = JKRConvertAttrToCompressionType(fileEntry->type_flags_and_name_offset >> 0x18);
|
||||
|
||||
if(pSize == NULL) {
|
||||
pSize = &ptrSize; // this makes barely any sense but ok
|
||||
}
|
||||
|
||||
if (fileEntry->data == NULL) {
|
||||
u32 flag = fileEntry->type_flags_and_name_offset >> 0x18;
|
||||
if(flag & 0x10) {
|
||||
fileEntry->data = (void *)(field_0x64 + fileEntry->data_offset);
|
||||
*pSize = size;
|
||||
}
|
||||
else if (flag & 0x20) {
|
||||
u8 *data;
|
||||
*pSize = JKRAramArchive::fetchResource_subroutine(fileEntry->data_offset + mAramPart->getAddress() - mSizeOfMemPart, size, mHeap, compression, &data);
|
||||
fileEntry->data = data;
|
||||
if(compression == COMPRESSION_YAZ0) {
|
||||
setExpandSize(fileEntry, *pSize);
|
||||
}
|
||||
}
|
||||
else if (flag & 0x40) {
|
||||
u8 *data;
|
||||
u32 resSize = JKRDvdArchive::fetchResource_subroutine(mEntryNum, field_0x6c + fileEntry->data_offset, fileEntry->data_size, mHeap, compression, mCompression, &data);
|
||||
if (pSize != NULL) {
|
||||
*pSize = resSize;
|
||||
}
|
||||
fileEntry->data = data;
|
||||
if (compression == COMPRESSION_YAZ0) {
|
||||
setExpandSize(fileEntry, *pSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (pSize != NULL) {
|
||||
*pSize = fileEntry->data_size;
|
||||
}
|
||||
}
|
||||
return fileEntry->data;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D220-8039D220 029880 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D220 = "JKRCompArchive.cpp";
|
||||
SECTION_DEAD static char const* const stringBase_8039D233 = "%s";
|
||||
SECTION_DEAD static char const* const stringBase_8039D236 = "illegal archive.";
|
||||
#pragma pop
|
||||
|
||||
/* 802D90C0-802D9260 2D3A00 01A0+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__14JKRCompArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void* JKRCompArchive::fetchResource(void* param_0, u32 param_1,
|
||||
JKRArchive::SDIFileEntry* param_2, u32* param_3) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRCompArchive/fetchResource__14JKRCompArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl.s"
|
||||
void *JKRCompArchive::fetchResource(void *data, u32 compressedSize, SDIFileEntry *fileEntry, u32 *pSize)
|
||||
{
|
||||
u32 size = 0;
|
||||
u32 fileSize = fileEntry->data_size;
|
||||
u32 alignedSize = ALIGN_NEXT(fileSize, 32);
|
||||
u32 fileFlag = fileEntry->type_flags_and_name_offset >> 0x18;
|
||||
int compression = JKRConvertAttrToCompressionType(fileFlag);
|
||||
|
||||
if(fileEntry->data != NULL) {
|
||||
if (compression == COMPRESSION_YAZ0) {
|
||||
u32 expandSize = getExpandSize(fileEntry);
|
||||
if (expandSize != 0) {
|
||||
fileSize = expandSize;
|
||||
}
|
||||
}
|
||||
|
||||
if (fileSize > compressedSize) {
|
||||
fileSize = compressedSize;
|
||||
}
|
||||
|
||||
JKRHeap::copyMemory(data, fileEntry->data, fileSize);
|
||||
size = fileSize;
|
||||
}
|
||||
else {
|
||||
if (fileFlag & 0x10) {
|
||||
size = JKRMemArchive::fetchResource_subroutine((u8 *)(field_0x64 + fileEntry->data_offset), alignedSize, (u8 *)data,
|
||||
compressedSize & ~31, compression);
|
||||
}
|
||||
else if (fileFlag & 0x20) {
|
||||
size = JKRAramArchive::fetchResource_subroutine(fileEntry->data_offset + mAramPart->getAddress() - mSizeOfMemPart,
|
||||
alignedSize, (u8 *)data, compressedSize & ~31, compression);
|
||||
}
|
||||
else if (fileFlag & 0x40){
|
||||
size = JKRDvdArchive::fetchResource_subroutine(mEntryNum, field_0x6c + fileEntry->data_offset, alignedSize, (u8 *)data,
|
||||
compressedSize & ~31, compression, mCompression);
|
||||
} else {
|
||||
JUTException::panic_f(__FILE__, 0x308, "%s", "illegal archive.");
|
||||
}
|
||||
}
|
||||
|
||||
if(pSize != NULL) {
|
||||
*pSize = size;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 802D9260-802D92F4 2D3BA0 0094+00 1/0 0/0 0/0 .text removeResourceAll__14JKRCompArchiveFv */
|
||||
void JKRCompArchive::removeResourceAll() {
|
||||
|
@ -212,22 +361,46 @@ bool JKRCompArchive::removeResource(void* resource) {
|
|||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8039D220-8039D220 029880 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DEAD static char const* const stringBase_8039D247 = "illegal resource.";
|
||||
/* @stringBase0 padding */
|
||||
SECTION_DEAD static char const* const pad_8039D259 = "\0\0\0\0\0\0";
|
||||
#pragma pop
|
||||
|
||||
/* 802D9360-802D9518 2D3CA0 01B8+00 1/0 0/0 0/0 .text getExpandedResSize__14JKRCompArchiveCFPCv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm u32 JKRCompArchive::getExpandedResSize(void const* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRCompArchive/getExpandedResSize__14JKRCompArchiveCFPCv.s"
|
||||
u32 JKRCompArchive::getExpandedResSize(const void *resource) const
|
||||
{
|
||||
if (mExpandedSize == NULL) {
|
||||
return getResSize(resource);
|
||||
}
|
||||
|
||||
SDIFileEntry *fileEntry = findPtrResource(resource);
|
||||
if(!fileEntry) {
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
u8 flags = (fileEntry->type_flags_and_name_offset >> 0x18);
|
||||
if((flags & 4) == 0) { // not compressed
|
||||
return getResSize(resource);
|
||||
}
|
||||
|
||||
if ((flags & 0x10) != 0) {
|
||||
return JKRDecompExpandSize((u8 *)resource);
|
||||
}
|
||||
|
||||
u8 buf[64];
|
||||
u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buf, 32);
|
||||
if ((flags & 0x20) != 0) {
|
||||
u32 addr = mAramPart->mAddress;
|
||||
addr = fileEntry->data_offset + addr;
|
||||
JKRAramToMainRam(addr, bufPtr, sizeof(buf) / 2, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL);
|
||||
DCInvalidateRange(bufPtr, sizeof(buf) / 2);
|
||||
}
|
||||
else if ((flags & 0x40) != 0) {
|
||||
JKRDvdToMainRam(mEntryNum, bufPtr, EXPAND_SWITCH_UNKNOWN2, sizeof(buf) / 2, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, field_0x6c + fileEntry->data_offset, NULL, NULL);
|
||||
DCInvalidateRange(bufPtr, sizeof(buf) / 2);
|
||||
}
|
||||
else {
|
||||
JUTException::panic_f(__FILE__, 0x3af, "%s", "illegal resource.");
|
||||
}
|
||||
u32 expandSize = JKRDecompExpandSize(bufPtr);
|
||||
const_cast<JKRCompArchive *>(this)->setExpandSize(fileEntry, expandSize);
|
||||
return expandSize;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8039D220-8039D220 029880 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
|
|
@ -1078,7 +1078,7 @@ JKRExpHeap::CMemBlock* JKRExpHeap::CMemBlock::getHeapBlock(void* ptr) {
|
|||
|
||||
/* 802D0938-802D09E0 2CB278 00A8+00 1/0 0/0 0/0 .text
|
||||
* state_register__10JKRExpHeapCFPQ27JKRHeap6TStateUl */
|
||||
void JKRExpHeap::state_register(JKRHeap::TState* p, u32 param_1) const {
|
||||
u32 JKRExpHeap::state_register(JKRHeap::TState* p, u32 param_1) const {
|
||||
p->mId = param_1;
|
||||
if (param_1 <= 0xff) {
|
||||
p->mUsedSize = getUsedSize(param_1);
|
||||
|
@ -1099,6 +1099,7 @@ void JKRExpHeap::state_register(JKRHeap::TState* p, u32 param_1) const {
|
|||
}
|
||||
}
|
||||
p->mCheckCode = checkCode;
|
||||
return checkCode;
|
||||
}
|
||||
|
||||
/* 802D09E0-802D0A10 2CB320 0030+00 1/0 0/0 0/0 .text
|
||||
|
|
|
@ -516,7 +516,7 @@ void operator delete[](void* ptr) {
|
|||
|
||||
/* 802CED84-802CED88 2C96C4 0004+00 1/0 1/0 0/0 .text
|
||||
* state_register__7JKRHeapCFPQ27JKRHeap6TStateUl */
|
||||
void JKRHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
u32 JKRHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
JUT_ASSERT(__FILE__, 1213, p != 0);
|
||||
JUT_ASSERT(__FILE__, 1214, p->getHeap() == this);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTException.h"
|
||||
#include "MSL_C/string.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/os/OSCache.h"
|
||||
#include "global.h"
|
||||
|
||||
|
@ -17,53 +16,10 @@
|
|||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void __ct__13JKRMemArchiveFPvUl15JKRMemBreakFlag();
|
||||
extern "C" void __dt__13JKRMemArchiveFv();
|
||||
extern "C" void open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection();
|
||||
extern "C" void open__13JKRMemArchiveFPvUl15JKRMemBreakFlag();
|
||||
extern "C" void fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl();
|
||||
extern "C" void fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl();
|
||||
extern "C" void removeResourceAll__13JKRMemArchiveFv();
|
||||
extern "C" void removeResource__13JKRMemArchiveFPv();
|
||||
extern "C" void fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli();
|
||||
extern "C" void getExpandedResSize__13JKRMemArchiveCFPCv();
|
||||
extern "C" extern char const* const JKRMemArchive__stringBase0;
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void findFromRoot__7JKRHeapFPv();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void unmount__13JKRFileLoaderFv();
|
||||
extern "C" void becomeCurrent__10JKRArchiveFPCc();
|
||||
extern "C" void getResource__10JKRArchiveFPCc();
|
||||
extern "C" void getResource__10JKRArchiveFUlPCc();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlUlPCc();
|
||||
extern "C" void readResource__10JKRArchiveFPvUlPCc();
|
||||
extern "C" void detachResource__10JKRArchiveFPv();
|
||||
extern "C" void getResSize__10JKRArchiveCFPCv();
|
||||
extern "C" void countFile__10JKRArchiveCFPCc();
|
||||
extern "C" void getFirstFile__10JKRArchiveCFPCc();
|
||||
extern "C" void __ct__10JKRArchiveFlQ210JKRArchive10EMountMode();
|
||||
extern "C" void __dt__10JKRArchiveFv();
|
||||
extern "C" void findPtrResource__10JKRArchiveCFPCv();
|
||||
extern "C" void setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl();
|
||||
extern "C" void getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry();
|
||||
extern "C" void
|
||||
loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl();
|
||||
extern "C" void orderSync__9JKRDecompFPUcPUcUlUl();
|
||||
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
|
||||
extern "C" void panic_f__12JUTExceptionFPCciPCce();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 sVolumeList__13JKRFileLoader[12];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
@ -116,10 +72,6 @@ JKRMemArchive::~JKRMemArchive() {
|
|||
|
||||
/* 802D6BCC-802D6D30 2D150C 0164+00 1/1 0/0 0/0 .text
|
||||
* open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */
|
||||
// full match, except:
|
||||
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
// where the addition is swapped.
|
||||
#ifdef NONMATCHING
|
||||
bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirection) {
|
||||
mArcHeader = NULL;
|
||||
mArcInfoBlock = NULL;
|
||||
|
@ -132,17 +84,18 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti
|
|||
|
||||
if (mMountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) {
|
||||
u32 loadedSize;
|
||||
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
|
||||
mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM(
|
||||
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::ALLOC_DIRECTION_FORWARD,
|
||||
0, &mCompression, &loadedSize);
|
||||
0, (int *)&mCompression, &loadedSize);
|
||||
if (mArcHeader) {
|
||||
DCInvalidateRange(mArcHeader, loadedSize);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
u32 loadedSize;
|
||||
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
|
||||
mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM(
|
||||
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap,
|
||||
JKRDvdRipper::ALLOC_DIRECTION_BACKWARD, 0, &mCompression, &loadedSize);
|
||||
JKRDvdRipper::ALLOC_DIRECTION_BACKWARD, 0, (int *)&mCompression, &loadedSize);
|
||||
if (mArcHeader) {
|
||||
DCInvalidateRange(mArcHeader, loadedSize);
|
||||
}
|
||||
|
@ -150,62 +103,35 @@ bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirecti
|
|||
|
||||
if (!mArcHeader) {
|
||||
mMountMode = UNKNOWN_MOUNT_MODE;
|
||||
} else {
|
||||
ASSERT(mArcHeader->signature == 'RARC');
|
||||
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDIDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
}
|
||||
else {
|
||||
mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
|
||||
mArchiveData =
|
||||
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
(u8 *)((u32)mArcHeader + mArcHeader->header_length + mArcHeader->file_data_offset);
|
||||
mIsOpen = true;
|
||||
}
|
||||
|
||||
return mMountMode != UNKNOWN_MOUNT_MODE;
|
||||
return (mMountMode == UNKNOWN_MOUNT_MODE) ? false : true;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm bool JKRMemArchive::open(s32 param_0, JKRArchive::EMountDirection param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D6D30-802D6DDC 2D1670 00AC+00 1/1 0/0 0/0 .text open__13JKRMemArchiveFPvUl15JKRMemBreakFlag
|
||||
*/
|
||||
// full match, except:
|
||||
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
// where the addition is swapped.
|
||||
#ifdef NONMATCHING
|
||||
bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) {
|
||||
mArcHeader = (SArcHeader*)buffer;
|
||||
|
||||
ASSERT(mArcHeader->signature == 'RARC');
|
||||
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDIDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
mArchiveData =
|
||||
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
|
||||
mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1);
|
||||
mArcHeader = (SArcHeader *)buffer;
|
||||
mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length);
|
||||
mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
|
||||
mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
|
||||
mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
|
||||
mArchiveData = (u8 *)(((u32)mArcHeader + mArcHeader->header_length) + mArcHeader->file_data_offset);
|
||||
mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1) ? true : false; // mIsOpen might be u8
|
||||
mHeap = JKRHeap::findFromRoot(buffer);
|
||||
mCompression = COMPRESSION_NONE;
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm bool JKRMemArchive::open(void* param_0, u32 param_1, JKRMemBreakFlag param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRMemArchive/open__13JKRMemArchiveFPvUl15JKRMemBreakFlag.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D6DDC-802D6E10 2D171C 0034+00 1/0 0/0 0/0 .text
|
||||
* fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl */
|
||||
|
|
|
@ -5,67 +5,18 @@
|
|||
|
||||
#include "JSystem/JKernel/JKRSolidHeap.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "JSystem/JUtility/JUTConsole.h"
|
||||
#include "MSL_C/math.h"
|
||||
#include "dol2asm.h"
|
||||
#include "global.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void create__12JKRSolidHeapFUlP7JKRHeapb();
|
||||
extern "C" void do_destroy__12JKRSolidHeapFv();
|
||||
extern "C" void __ct__12JKRSolidHeapFPvUlP7JKRHeapb();
|
||||
extern "C" void __dt__12JKRSolidHeapFv();
|
||||
extern "C" void adjustSize__12JKRSolidHeapFv();
|
||||
extern "C" void do_alloc__12JKRSolidHeapFUli();
|
||||
extern "C" void allocFromHead__12JKRSolidHeapFUli();
|
||||
extern "C" void allocFromTail__12JKRSolidHeapFUli();
|
||||
extern "C" void do_free__12JKRSolidHeapFPv();
|
||||
extern "C" void do_freeAll__12JKRSolidHeapFv();
|
||||
extern "C" void do_freeTail__12JKRSolidHeapFv();
|
||||
extern "C" void do_fillFreeArea__12JKRSolidHeapFv();
|
||||
extern "C" void do_resize__12JKRSolidHeapFPvUl();
|
||||
extern "C" void do_getSize__12JKRSolidHeapFPv();
|
||||
extern "C" void check__12JKRSolidHeapFv();
|
||||
extern "C" void dump__12JKRSolidHeapFv();
|
||||
extern "C" void state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl();
|
||||
extern "C" void state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState();
|
||||
extern "C" void getHeapType__12JKRSolidHeapFv();
|
||||
extern "C" void do_getFreeSize__12JKRSolidHeapFv();
|
||||
extern "C" void do_getMaxFreeBlock__12JKRSolidHeapFv();
|
||||
extern "C" void do_getTotalFreeSize__12JKRSolidHeapFv();
|
||||
extern "C" extern char const* const JKRSolidHeap__stringBase0;
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" bool dump_sort__7JKRHeapFv();
|
||||
extern "C" void __ct__7JKRHeapFPvUlP7JKRHeapb();
|
||||
extern "C" void __dt__7JKRHeapFv();
|
||||
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
|
||||
extern "C" void free__7JKRHeapFPvP7JKRHeap();
|
||||
extern "C" void callAllDisposer__7JKRHeapFv();
|
||||
extern "C" void resize__7JKRHeapFPvUl();
|
||||
extern "C" void getFreeSize__7JKRHeapFv();
|
||||
extern "C" void getTotalFreeSize__7JKRHeapFv();
|
||||
extern "C" void getMaxAllocatableSize__7JKRHeapFi();
|
||||
extern "C" void dispose__7JKRHeapFPvPv();
|
||||
extern "C" void dispose__7JKRHeapFv();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void state_dump__7JKRHeapCFRCQ27JKRHeap6TState();
|
||||
extern "C" bool do_changeGroupID__7JKRHeapFUc();
|
||||
extern "C" bool do_getCurrentGroupId__7JKRHeapFv();
|
||||
extern "C" void JUTReportConsole_f(const char*, ...);
|
||||
extern "C" void JUTWarningConsole_f(const char*, ...);
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" u8 sRootHeap__7JKRHeap[4];
|
||||
extern "C" u8 mErrorHandler__7JKRHeap[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
@ -315,9 +266,7 @@ bool JKRSolidHeap::dump(void) {
|
|||
}
|
||||
/* 802D11FC-802D1258 2CBB3C 005C+00 1/0 0/0 0/0 .text
|
||||
* state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl */
|
||||
// full match expect using the wrong register
|
||||
#ifdef NONMATCHING
|
||||
void JKRSolidHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
u32 JKRSolidHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
||||
JUT_ASSERT(__FILE__, 0x25c, p != 0);
|
||||
JUT_ASSERT(__FILE__, 0x25d, p->getHeap() == this);
|
||||
|
||||
|
@ -325,17 +274,8 @@ void JKRSolidHeap::state_register(JKRHeap::TState* p, u32 id) const {
|
|||
setState_u32ID_(p, id);
|
||||
setState_uUsedSize_(p, getUsedSize((JKRSolidHeap*)this));
|
||||
setState_u32CheckCode_(p, (u32)mSolidHead + (u32)mSolidTail * 3);
|
||||
return (u32)mSolidHead + (u32)mSolidTail * 3;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JKRSolidHeap::state_register(JKRHeap::TState* param_0, u32 param_1) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JKernel/JKRSolidHeap/state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 802D1258-802D1288 2CBB98 0030+00 1/0 0/0 0/0 .text
|
||||
* state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */
|
||||
|
|
|
@ -4,55 +4,41 @@
|
|||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAKeyBlock.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JParticle/JPAMath.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JPAKeyBlock {
|
||||
/* 8027D730 */ JPAKeyBlock(u8 const*);
|
||||
/* 8027D740 */ void calc(f32);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__11JPAKeyBlockFPCUc();
|
||||
extern "C" void calc__11JPAKeyBlockFf();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void JPACalcKeyAnmValue__FfUsPCf();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 8027D730-8027D740 278070 0010+00 0/0 1/1 0/0 .text __ct__11JPAKeyBlockFPCUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JPAKeyBlock::JPAKeyBlock(u8 const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JParticle/JPAKeyBlock/__ct__11JPAKeyBlockFPCUc.s"
|
||||
JPAKeyBlock::JPAKeyBlock(const u8* data)
|
||||
: mDataStart(data)
|
||||
, field_0x4(reinterpret_cast<const float*>(&data[0xC]))
|
||||
{
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80455350-80455358 003950 0008+00 1/1 0/0 0/0 .sdata2 @2215 */
|
||||
SECTION_SDATA2 static f64 lit_2215 = 4503601774854144.0 /* cast s32 to float */;
|
||||
|
||||
/* 8027D740-8027D7D4 278080 0094+00 0/0 1/1 0/0 .text calc__11JPAKeyBlockFf */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JPAKeyBlock::calc(f32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JParticle/JPAKeyBlock/calc__11JPAKeyBlockFf.s"
|
||||
void JPAKeyBlock::calc(float p1) {
|
||||
if (mDataStart[0xB] != '\0') {
|
||||
int v1 = (int)field_0x4[(mDataStart[9] - 1) * 4] + 1;
|
||||
// p1 -= (v1 * ((int)p1 / v1));
|
||||
int v2 = ((int)p1 / v1);
|
||||
p1 = p1 - (v2 * v1);
|
||||
}
|
||||
JPACalcKeyAnmValue(p1, mDataStart[9], field_0x4);
|
||||
}
|
||||
#pragma pop
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
//
|
||||
|
||||
#include "JSystem/JStudio/JStudio/fvb-data-parse.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
|
@ -15,28 +14,25 @@
|
|||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void
|
||||
getData__Q47JStudio3fvb4data17TParse_TParagraphCFPQ57JStudio3fvb4data17TParse_TParagraph5TData();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void
|
||||
parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 802850AC-80285114 27F9EC 0068+00 0/0 1/1 0/0 .text
|
||||
* getData__Q47JStudio3fvb4data17TParse_TParagraphCFPQ57JStudio3fvb4data17TParse_TParagraph5TData */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JStudio::fvb::data::TParse_TParagraph::getData(
|
||||
JStudio::fvb::data::TParse_TParagraph::TData* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JStudio/JStudio/fvb-data-parse/func_802850AC.s"
|
||||
void JStudio::fvb::data::TParse_TParagraph::getData(TParse_TParagraph::TData* data) const
|
||||
{
|
||||
u16* parse = (u16*)JGadget::binary::parseVariableUInt_16_32_following(getRaw(), (u32*)data, (u32*)&data->u32Type, NULL);
|
||||
u32 t = (u32)data->u32Size;
|
||||
if (!t) {
|
||||
data->pContent = NULL;
|
||||
data->next = parse;
|
||||
} else {
|
||||
data->pContent = parse;
|
||||
data->next = parse + ((t + 3) >> 1 & ~1);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
|
|
@ -4,15 +4,12 @@
|
|||
//
|
||||
|
||||
#include "JSystem/JStudio/JStudio/stb-data-parse.h"
|
||||
#include "dol2asm.h"
|
||||
#include "global.h"
|
||||
|
||||
namespace JStudio {
|
||||
namespace stb {
|
||||
namespace data {
|
||||
|
||||
extern "C" u32 gauDataSize_TEParagraph_data__Q37JStudio3stb4data[];
|
||||
|
||||
void TParse_TSequence::getData(TData* pData) const {
|
||||
ASSERT(pData != 0);
|
||||
|
||||
|
@ -50,48 +47,36 @@ void TParse_TParagraph::getData(TData* pData) const {
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void TParse_TParagraph_data::getData(data::TParse_TParagraph_data::TData* pData) const {
|
||||
ASSERT(pData != 0);
|
||||
u8* set2;
|
||||
|
||||
pData->_4 = 0;
|
||||
int dSize = pData->dataSize = 0;
|
||||
pData->_8 = 0;
|
||||
pData->_c = NULL;
|
||||
pData->_10 = 0;
|
||||
u8* p = (u8*)getRaw();
|
||||
if (p != NULL) {
|
||||
u8 val = *p;
|
||||
pData->_0 = val & ~8;
|
||||
if (val != 0) {
|
||||
u32 count = 1;
|
||||
p++;
|
||||
if (val & 8) {
|
||||
count = *(p++);
|
||||
}
|
||||
pData->_8 = count;
|
||||
pData->_c = p;
|
||||
u8 idx = val & 7;
|
||||
if (idx) {
|
||||
u32 size = gauDataSize_TEParagraph_data[idx];
|
||||
pData->_4 = size;
|
||||
pData->_10 = p + size * count;
|
||||
}
|
||||
}
|
||||
pData->fileCount = NULL;
|
||||
pData->_10 = NULL;
|
||||
u8* filedata = (u8*)getRaw();
|
||||
if (filedata == NULL)
|
||||
return;
|
||||
u8 set = *filedata;
|
||||
pData->status = set & ~0x8;
|
||||
if (!set)
|
||||
return;
|
||||
int is8;
|
||||
int set3 = 1;
|
||||
is8 = set & 8;
|
||||
// Probably fake match
|
||||
if (set2 = (filedata + 1), is8) {
|
||||
set3 = *set2++;
|
||||
}
|
||||
pData->_8 = set3;
|
||||
pData->fileCount = set2;
|
||||
|
||||
if (!(set & 7))
|
||||
return;
|
||||
dSize = (gauDataSize_TEParagraph_data)[set &= 7];
|
||||
pData->dataSize = dSize;
|
||||
pData->_10 = (u8*)set2 + (dSize * set3);
|
||||
}
|
||||
#else
|
||||
/* 80289A80-80289B00 2843C0 0080+00 0/0 3/3 1/1 .text
|
||||
* getData__Q47JStudio3stb4data22TParse_TParagraph_dataCFPQ57JStudio3stb4data22TParse_TParagraph_data5TData
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void TParse_TParagraph_data::getData(TParse_TParagraph_data::TData* param_0) const {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JStudio/JStudio/stb-data-parse/func_80289A80.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
} // namespace data
|
||||
} // namespace stb
|
||||
|
|
Loading…
Reference in New Issue