This commit is contained in:
Pheenoh
2021-01-06 21:03:19 -05:00
1521 changed files with 56076 additions and 89239 deletions
+37
View File
@@ -0,0 +1,37 @@
#ifndef JSYSTEM_JGADGET_BINARY_H
#define JSYSTEM_JGADGET_BINARY_H
#include "dolphin/types.h"
namespace JGadget {
namespace binary {
inline u32 align_roundUp(u32 arg0, u32 uAlign) {
return (arg0 + uAlign - 1) & ~(uAlign - 1);
}
struct TParseData {
TParseData(const void* pContent) : raw(pContent) {}
const void* getRaw() const { return raw; }
const void* raw;
};
template <int T>
struct TParseData_aligned : public TParseData {
TParseData_aligned(const void* pContent) : TParseData(pContent) {}
};
// Base for header and/or block parsing
struct TParse_header_block {
virtual ~TParse_header_block();
virtual int parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg2) = 0;
virtual int parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg2) = 0;
};
} // namespace binary
} // namespace JGadget
#endif
+59
View File
@@ -0,0 +1,59 @@
#ifndef JSYSTEM_JGADGET_LINKLIST_H
#define JSYSTEM_JGADGET_LINKLIST_H
#include "dolphin/types.h"
namespace JGadget {
struct TLinkListNode {
TLinkListNode() : pNext_(NULL), pPrev_(NULL) {}
TLinkListNode* getPrev() const { return pPrev_; }
TLinkListNode* pNext_;
TLinkListNode* pPrev_;
};
struct TNodeLinkList {
struct iterator {
iterator() {}
iterator(TLinkListNode* p) { node = p; }
TLinkListNode* node;
};
TNodeLinkList() { Initialize_(); }
~TNodeLinkList();
void Initialize_() {
iter.node = NULL;
oNode_.pNext_ = &oNode_;
oNode_.pPrev_ = &oNode_;
}
void Insert(iterator iter, TLinkListNode* node);
iterator end() { return iterator(oNode_.pNext_); }
iterator iter;
TLinkListNode oNode_;
};
// Currently non matching, but its a rough idea
template <class T, int U, int V>
struct TLinkList : TNodeLinkList {
TLinkListNode* Element_toNode(T* p) { return &static_cast<JStudio::stb::TObject*>(p)->mNode; }
iterator end() { return ((TNodeLinkList*)this)->end(); }
iterator Insert(iterator pIt, T* p) {
((TNodeLinkList*)this)->Insert(pIt, Element_toNode(p));
return iterator(iter.node);
}
void Push_back(T* p) { Insert(end(), p); };
};
} // namespace JGadget
#endif
@@ -13,7 +13,7 @@ public:
void getAramAddress_Entry(SDIFileEntry*);
void getAramAddress(char const*);
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -57,7 +57,7 @@ lbl_802D7354:
/* 802D7370 002D42B0 39 00 00 01 */ li r8, 1
/* 802D7374 002D42B4 39 20 00 00 */ li r9, 0
/* 802D7378 002D42B8 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D737C 002D42BC 48 00 28 D9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D737C 002D42BC 48 00 28 D9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7380 002D42C0 7F A3 EB 78 */ mr r3, r29
/* 802D7384 002D42C4 38 80 00 20 */ li r4, 0x20
/* 802D7388 002D42C8 48 06 41 F9 */ bl DCInvalidateRange
@@ -91,7 +91,7 @@ lbl_802D73D8:
/* 802D73F0 002D4330 39 00 00 01 */ li r8, 1
/* 802D73F4 002D4334 39 20 00 20 */ li r9, 0x20
/* 802D73F8 002D4338 39 40 00 00 */ li r10, 0
/* 802D73FC 002D433C 48 00 28 59 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D73FC 002D433C 48 00 28 59 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7400 002D4340 80 7F 00 44 */ lwz r3, 0x44(r31)
/* 802D7404 002D4344 7F 64 DB 78 */ mr r4, r27
/* 802D7408 002D4348 48 06 41 79 */ bl DCInvalidateRange
@@ -10,9 +10,6 @@ public:
enum EAllocMode {
HEAD = 0,
TAIL = 1,
__EALLOCMODE_FORCE_ENUM_S32 = INT32_MAX,
__EALLOCMODE_FORCE_ENUM_SIGNED = -1,
};
public:
+22 -13
View File
@@ -1,16 +1,28 @@
#ifndef __JKRARCHIVEPUB_H__
#define __JKRARCHIVEPUB_H__
#include "JSystem/JKernel/JKRDecomp/JKRDecomp.h"
#include "JSystem/JKernel/JKRFileLoader/JKRFileLoader.h"
#include "dolphin/types.h"
struct SArcHeader {
u32 signature;
u32 file_length;
u32 header_length;
u32 file_data_offset;
u32 file_data_length;
u32 field_0x14;
u32 field_0x18;
u32 field_0x1c;
};
struct SArcDataInfo {
u32 num_nodes;
u32 node_offset;
u32 num_file_entries;
u32 file_entry_offset;
u32 string_table_length;
u32 string_trable_offset;
u32 string_table_offset;
u16 next_free_file_id;
bool sync_file_ids_and_indices;
u8 field_1b[5];
@@ -44,8 +56,10 @@ struct SDIFileEntry {
u16 getNameHash() const { return name_hash; }
u32 getFlags() const { return type_flags_and_name_offset >> 24; }
u16 getFileID() const { return file_id; }
bool isDirectory() const { return (getFlags() & 2) != 0; }
bool isUnknownFlag1() const { return (getFlags() & 1) != 0; }
bool isDirectory() const { return (getFlags() & 0x02) != 0; }
bool isUnknownFlag1() const { return (getFlags() & 0x01) != 0; }
bool isCompressed() const { return (getFlags() & 0x04) != 0; }
bool isYAZ0Compressed() const { return (getFlags() & 0x80) != 0; }
};
extern u32 lbl_80451420; // JKRArchive::sCurrentDirID
@@ -60,17 +74,12 @@ public:
MOUNT_ARAM = 2,
MOUNT_DVD = 3,
MOUNT_COMP = 4,
__EMOUNT_MODE_FORCE_32BIT = UINT32_MAX,
};
enum EMountDirection {
UNKNOWN_MOUNT_DIRECTION = 0,
HEAD = 1,
TAIL = 2,
__EMOUNT_DIRECTION_FORCE_32BIT = INT32_MAX,
__EMOUNT_DIRECTION_FORCE_SIGNED = -1,
};
class CArcName {
@@ -106,7 +115,7 @@ public:
u32 countResource(void) const;
u32 getFileAttribute(u32) const;
EMountMode getMountMode() const { return (EMountMode)mMountMode; }
u32 getMountMode() const { return mMountMode; }
protected:
bool isSameName(CArcName&, u32, u16) const;
@@ -130,14 +139,14 @@ public:
/* vt[11] */ virtual bool detachResource(void*); /* override */
/* vt[12] */ virtual u32 getResSize(const void*) const; /* override */
/* vt[13] */ virtual u32 countFile(const char*) const; /* override */
/* vt[14] */ virtual JKRArcFinder* getFirstFile(const char*) const; /* override */
/* vt[15] */ virtual void getExpandedResSize(const void*) const;
/* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const; /* override */
/* vt[15] */ virtual u32 getExpandedResSize(const void*) const;
/* vt[16] */ virtual void* fetchResource(SDIFileEntry*, u32*) = 0;
/* vt[17] */ virtual void* fetchResource(void*, u32, SDIFileEntry*, u32*) = 0;
/* vt[18] */ virtual void setExpandSize(SDIFileEntry*, u32);
/* vt[19] */ virtual void getExpandSize(SDIFileEntry*) const;
/* vt[19] */ virtual u32 getExpandSize(SDIFileEntry*) const;
private:
protected:
/* 0x00 */ // vtable
/* 0x04 */ // JKRFileLoader
/* 0x38 */ JKRHeap* mHeap;
@@ -10,23 +10,23 @@ protected:
virtual ~JKRAssertHeap();
public:
/* vt[04] */ virtual u32 getHeapType(void); /* override */
/* vt[05] */ virtual bool check(void); /* override */
/* vt[06] */ virtual bool dump_sort(void); /* override */
/* vt[07] */ virtual bool dump(void); /* override */
/* vt[08] */ virtual void do_destroy(void); /* override */
/* vt[09] */ virtual void* do_alloc(u32, int); /* override */
/* vt[10] */ virtual void do_free(void*); /* override */
/* vt[11] */ virtual void do_freeAll(void); /* override */
/* vt[12] */ virtual void do_freeTail(void); /* override */
/* vt[13] */ virtual void do_fillFreeArea(void); /* override */
/* vt[14] */ virtual s32 do_resize(void*, u32); /* override */
/* vt[15] */ virtual s32 do_getSize(void*); /* override */
/* vt[16] */ virtual s32 do_getFreeSize(void); /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock(void); /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize(void); /* override */
/* vt[19] */ virtual u8 do_changeGroupID(u8 param_1); /* override */
/* vt[20] */ virtual u8 do_getCurrentGroupId(void); /* override */
/* vt[04] */ virtual u32 getHeapType(void) const; /* override */
/* vt[05] */ virtual bool check(void); /* override */
/* vt[06] */ virtual bool dump_sort(void); /* override */
/* vt[07] */ virtual bool dump(void); /* override */
/* vt[08] */ virtual void do_destroy(void); /* override */
/* vt[09] */ virtual void* do_alloc(u32, int); /* override */
/* vt[10] */ virtual void do_free(void*); /* override */
/* vt[11] */ virtual void do_freeAll(void); /* override */
/* vt[12] */ virtual void do_freeTail(void); /* override */
/* vt[13] */ virtual void do_fillFreeArea(void); /* override */
/* vt[14] */ virtual s32 do_resize(void*, u32); /* override */
/* vt[15] */ virtual s32 do_getSize(void*) const; /* override */
/* vt[16] */ virtual s32 do_getFreeSize(void) const; /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock(void) const; /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize(void) const; /* override */
/* vt[19] */ virtual u8 do_changeGroupID(u8 param_1); /* override */
/* vt[20] */ virtual u8 do_getCurrentGroupId(void) const; /* override */
public:
static JKRAssertHeap* create(JKRHeap*);
@@ -14,7 +14,7 @@ public:
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -57,7 +57,7 @@ lbl_802D8A6C:
/* 802D8A88 002D59C8 39 00 00 01 */ li r8, 1
/* 802D8A8C 002D59CC 39 20 00 00 */ li r9, 0
/* 802D8A90 002D59D0 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D8A94 002D59D4 48 00 11 C1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8A94 002D59D4 48 00 11 C1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8A98 002D59D8 7F C3 F3 78 */ mr r3, r30
/* 802D8A9C 002D59DC 38 80 00 20 */ li r4, 0x20
/* 802D8AA0 002D59E0 48 06 2A E1 */ bl DCInvalidateRange
@@ -107,7 +107,7 @@ lbl_802D8B20:
/* 802D8B40 002D5A80 39 00 00 01 */ li r8, 1
/* 802D8B44 002D5A84 39 20 00 20 */ li r9, 0x20
/* 802D8B48 002D5A88 39 40 00 00 */ li r10, 0
/* 802D8B4C 002D5A8C 48 00 11 09 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8B4C 002D5A8C 48 00 11 09 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8B50 002D5A90 80 7F 00 44 */ lwz r3, 0x44(r31)
/* 802D8B54 002D5A94 80 9E 00 0C */ lwz r4, 0xc(r30)
/* 802D8B58 002D5A98 80 1F 00 74 */ lwz r0, 0x74(r31)
@@ -196,7 +196,7 @@ lbl_802D8C74:
/* 802D8C90 002D5BD0 39 00 00 01 */ li r8, 1
/* 802D8C94 002D5BD4 39 20 00 00 */ li r9, 0
/* 802D8C98 002D5BD8 39 40 00 00 */ li r10, 0
/* 802D8C9C 002D5BDC 48 00 0F B9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8C9C 002D5BDC 48 00 0F B9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8CA0 002D5BE0 7F 63 DB 78 */ mr r3, r27
/* 802D8CA4 002D5BE4 7F 24 CB 78 */ mr r4, r25
/* 802D8CA8 002D5BE8 48 06 28 D9 */ bl DCInvalidateRange
@@ -63,7 +63,7 @@ lbl_802D9180:
/* 802D9198 002D60D8 7F 85 E3 78 */ mr r5, r28
/* 802D919C 002D60DC 57 A6 00 34 */ rlwinm r6, r29, 0, 0, 0x1a
/* 802D91A0 002D60E0 7D 07 43 78 */ mr r7, r8
/* 802D91A4 002D60E4 4B FF DD B9 */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli
/* 802D91A4 002D60E4 4B FF DD B9 */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression
/* 802D91A8 002D60E8 7C 7B 1B 78 */ mr r27, r3
/* 802D91AC 002D60EC 48 00 00 8C */ b lbl_802D9238
lbl_802D91B0:
@@ -81,7 +81,7 @@ lbl_802D9458:
/* 802D9484 002D63C4 80 1F 00 08 */ lwz r0, 8(r31)
/* 802D9488 002D63C8 7D 29 02 14 */ add r9, r9, r0
/* 802D948C 002D63CC 39 40 00 00 */ li r10, 0
/* 802D9490 002D63D0 48 00 07 C5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9490 002D63D0 48 00 07 C5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9494 002D63D4 7F A3 EB 78 */ mr r3, r29
/* 802D9498 002D63D8 38 80 00 20 */ li r4, 0x20
/* 802D949C 002D63DC 48 06 20 E5 */ bl DCInvalidateRange
+22 -11
View File
@@ -30,6 +30,19 @@ public:
#define JKRDECOMP_SYNC_BLOCKING 0
#define JKRDECOMP_SYNC_NON_BLOCKING 1
#define READ_BIG_ENDIAN_U32(P) \
(((u32)(((u8*)(P))[0]) << 0x18) | ((u32)(((u8*)(P))[1]) << 0x10) | \
((u32)(((u8*)(P))[2]) << 8) | ((u32)(((u8*)(P))[3])))
#define READ_BIG_ENDIAN_U16(P) (((u32)(((u8*)(P))[0]) << 8) | ((u32)(((u8*)(P))[1])))
enum JKRCompression {
COMPRESSION_NONE = 0,
COMPRESSION_YAY0 = 1,
COMPRESSION_YAZ0 = 2,
COMPRESSION_ASR = 3,
};
class JKRDecomp : public JKRThread {
private:
JKRDecomp(long);
@@ -38,16 +51,6 @@ private:
/* vt[03] */ virtual void* run(); /* override */
public:
enum Compression {
NONE = 0,
YAY0 = 1,
YAZ0 = 2,
ASR = 3,
__COMPRESSION_ENUM_FORCE_S32 = INT32_MAX,
__COMPRESSION_ENUM_FORCE_SIGNED = -1,
};
static JKRDecomp* create(long);
static JKRDecompCommand* prepareCommand(u8*, u8*, u32, u32, JKRDecompCommand::AsyncCallback);
static void sendCommand(JKRDecompCommand*);
@@ -57,7 +60,15 @@ public:
static void decode(u8*, u8*, u32, u32);
static void decodeSZP(u8*, u8*, u32, u32);
static void decodeSZS(u8*, u8*, u32, u32);
static Compression checkCompressed(u8*);
static JKRCompression checkCompressed(u8*);
};
inline u32 JKRDecompExpandSize(const void* resource) {
return READ_BIG_ENDIAN_U32((u8*)resource + 4);
}
inline void JKRDecompress(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) {
JKRDecomp::orderSync(srcBuffer, dstBuffer, srcLength, dstLength);
}
#endif
@@ -11,7 +11,7 @@ public:
void open(long);
/* vt[15] */ virtual void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ virtual u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ virtual void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ virtual void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -52,7 +52,7 @@ lbl_802D7E50:
/* 802D7E6C 002D4DAC 39 00 00 01 */ li r8, 1
/* 802D7E70 002D4DB0 39 20 00 00 */ li r9, 0
/* 802D7E74 002D4DB4 39 5D 00 5C */ addi r10, r29, 0x5c
/* 802D7E78 002D4DB8 48 00 1D DD */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D7E78 002D4DB8 48 00 1D DD */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7E7C 002D4DBC 7F C3 F3 78 */ mr r3, r30
/* 802D7E80 002D4DC0 38 80 00 20 */ li r4, 0x20
/* 802D7E84 002D4DC4 48 06 36 FD */ bl DCInvalidateRange
@@ -83,7 +83,7 @@ lbl_802D7EC8:
/* 802D7EE0 002D4E20 39 00 00 01 */ li r8, 1
/* 802D7EE4 002D4E24 39 20 00 20 */ li r9, 0x20
/* 802D7EE8 002D4E28 39 40 00 00 */ li r10, 0
/* 802D7EEC 002D4E2C 48 00 1D 69 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D7EEC 002D4E2C 48 00 1D 69 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7EF0 002D4E30 80 7D 00 44 */ lwz r3, 0x44(r29)
/* 802D7EF4 002D4E34 80 9E 00 0C */ lwz r4, 0xc(r30)
/* 802D7EF8 002D4E38 48 06 36 89 */ bl DCInvalidateRange
@@ -44,7 +44,7 @@ lbl_802D82E4:
/* 802D8300 002D5240 39 00 00 01 */ li r8, 1
/* 802D8304 002D5244 7F C9 F3 78 */ mr r9, r30
/* 802D8308 002D5248 39 40 00 00 */ li r10, 0
/* 802D830C 002D524C 48 00 19 49 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D830C 002D524C 48 00 19 49 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8310 002D5250 7F E3 FB 78 */ mr r3, r31
/* 802D8314 002D5254 7F 84 E3 78 */ mr r4, r28
/* 802D8318 002D5258 48 06 32 69 */ bl DCInvalidateRange
@@ -62,7 +62,7 @@ lbl_802D8324:
/* 802D8344 002D5284 39 00 00 01 */ li r8, 1
/* 802D8348 002D5288 7F C9 F3 78 */ mr r9, r30
/* 802D834C 002D528C 39 40 00 00 */ li r10, 0
/* 802D8350 002D5290 48 00 19 05 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8350 002D5290 48 00 19 05 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8354 002D5294 7F 83 E3 78 */ mr r3, r28
/* 802D8358 002D5298 38 80 00 20 */ li r4, 0x20
/* 802D835C 002D529C 48 06 32 25 */ bl DCInvalidateRange
@@ -90,7 +90,7 @@ lbl_802D8394:
/* 802D83B0 002D52F0 39 00 00 01 */ li r8, 1
/* 802D83B4 002D52F4 7F C9 F3 78 */ mr r9, r30
/* 802D83B8 002D52F8 39 40 00 00 */ li r10, 0
/* 802D83BC 002D52FC 48 00 18 99 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D83BC 002D52FC 48 00 18 99 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D83C0 002D5300 7F E3 FB 78 */ mr r3, r31
/* 802D83C4 002D5304 7F 44 D3 78 */ mr r4, r26
/* 802D83C8 002D5308 48 06 31 B9 */ bl DCInvalidateRange
@@ -111,7 +111,7 @@ lbl_802D83E0:
/* 802D83FC 002D533C 39 00 00 01 */ li r8, 1
/* 802D8400 002D5340 7F C9 F3 78 */ mr r9, r30
/* 802D8404 002D5344 39 40 00 00 */ li r10, 0
/* 802D8408 002D5348 48 00 18 4D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8408 002D5348 48 00 18 4D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D840C 002D534C 7F E3 FB 78 */ mr r3, r31
/* 802D8410 002D5350 7F 44 D3 78 */ mr r4, r26
/* 802D8414 002D5354 48 06 31 6D */ bl DCInvalidateRange
@@ -45,7 +45,7 @@ lbl_802D84E0:
/* 802D8510 002D5450 39 00 00 01 */ li r8, 1
/* 802D8514 002D5454 7F C9 F3 78 */ mr r9, r30
/* 802D8518 002D5458 39 40 00 00 */ li r10, 0
/* 802D851C 002D545C 48 00 17 39 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D851C 002D545C 48 00 17 39 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8520 002D5460 7F 83 E3 78 */ mr r3, r28
/* 802D8524 002D5464 7F 64 DB 78 */ mr r4, r27
/* 802D8528 002D5468 48 06 30 59 */ bl DCInvalidateRange
@@ -64,7 +64,7 @@ lbl_802D8538:
/* 802D8558 002D5498 39 00 00 01 */ li r8, 1
/* 802D855C 002D549C 7F C9 F3 78 */ mr r9, r30
/* 802D8560 002D54A0 39 40 00 00 */ li r10, 0
/* 802D8564 002D54A4 48 00 16 F1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8564 002D54A4 48 00 16 F1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8568 002D54A8 7F 63 DB 78 */ mr r3, r27
/* 802D856C 002D54AC 38 80 00 20 */ li r4, 0x20
/* 802D8570 002D54B0 48 06 30 11 */ bl DCInvalidateRange
@@ -91,7 +91,7 @@ lbl_802D8538:
/* 802D85C4 002D5504 39 00 00 01 */ li r8, 1
/* 802D85C8 002D5508 7F C9 F3 78 */ mr r9, r30
/* 802D85CC 002D550C 39 40 00 00 */ li r10, 0
/* 802D85D0 002D5510 48 00 16 85 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D85D0 002D5510 48 00 16 85 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D85D4 002D5514 7F 63 DB 78 */ mr r3, r27
/* 802D85D8 002D5518 7F 84 E3 78 */ mr r4, r28
/* 802D85DC 002D551C 48 06 2F A5 */ bl DCInvalidateRange
@@ -114,7 +114,7 @@ lbl_802D85EC:
/* 802D861C 002D555C 39 00 00 01 */ li r8, 1
/* 802D8620 002D5560 7F C9 F3 78 */ mr r9, r30
/* 802D8624 002D5564 39 40 00 00 */ li r10, 0
/* 802D8628 002D5568 48 00 16 2D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8628 002D5568 48 00 16 2D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D862C 002D556C 7F 83 E3 78 */ mr r3, r28
/* 802D8630 002D5570 7F 24 CB 78 */ mr r4, r25
/* 802D8634 002D5574 48 06 2F 4D */ bl DCInvalidateRange
@@ -57,7 +57,7 @@ lbl_802D8734:
/* 802D8760 002D56A0 80 1D 00 08 */ lwz r0, 8(r29)
/* 802D8764 002D56A4 7D 29 02 14 */ add r9, r9, r0
/* 802D8768 002D56A8 39 40 00 00 */ li r10, 0
/* 802D876C 002D56AC 48 00 14 E9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D876C 002D56AC 48 00 14 E9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8770 002D56B0 7F C3 F3 78 */ mr r3, r30
/* 802D8774 002D56B4 38 80 00 20 */ li r4, 0x20
/* 802D8778 002D56B8 48 06 2E 09 */ bl DCInvalidateRange
@@ -18,19 +18,17 @@ public:
void initiate(void);
s32 sync(void);
int getFileID() const { return mFileInfo.start_address << 2; }
u32 getFileID() const { return mFileInfo.start_address; }
const DVDFileInfo& getFileInfo() const { return mFileInfo; }
int getStatus() { return DVDGetCommandBlockStatus(&mFileInfo.block); }
public:
/* vt[03] */ virtual bool open(const char*); /* override */
/* vt[04] */ virtual void close(void); /* override */
/* vt[05] */ virtual s32 readData(void*, long, long); /* override */
/* vt[06] */ virtual s32 writeData(const void*, long, long); /* override */
/* vt[07] */ virtual s32 getFileSize(void) const; /* override */
/* vt[08] */ virtual bool open(long);
/* vt[03] */ virtual bool open(const char*); /* override */
/* vt[04] */ virtual void close(void); /* override */
/* vt[05] */ virtual s32 readData(void*, s32, s32); /* override */
/* vt[06] */ virtual s32 writeData(const void*, s32, s32); /* override */
/* vt[07] */ virtual s32 getFileSize(void) const; /* override */
/* vt[08] */ virtual bool open(s32);
private:
/* 0x00 */ // vtable
@@ -1,10 +1,13 @@
#ifndef __JKRDVDRIPPER_H__
#define __JKRDVDRIPPER_H__
#include "JSystem/JKernel/JKRDecomp/JKRDecomp.h"
#include "dolphin/types.h"
enum JKRExpandSwitch {
EXPAND_SWITCH_UNKNOWN0 = 0,
EXPAND_SWITCH_UNKNOWN1 = 1,
EXPAND_SWITCH_UNKNOWN2 = 2,
};
class JKRHeap;
@@ -12,14 +15,17 @@ class JKRDvdFile;
class JKRDvdRipper {
public:
enum EAllocDirection {
UNKNOWN_EALLOC_DIRECTION = 0,
FORWARD = 1,
BACKWARD = 2,
};
void loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*,
u32*);
void loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*, u32*);
void loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*,
u32*);
static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection,
u32, JKRCompression*, u32*);
static void* loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32,
JKRCompression*, u32*);
static void* loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection,
u32, JKRCompression*, u32*);
void isErrorRetry(void);
};
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(char const *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(char const *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM */
/* 802D9B98 002D6AD8 94 21 FE D0 */ stwu r1, -0x130(r1)
/* 802D9B9C 002D6ADC 7C 08 02 A6 */ mflr r0
@@ -36,7 +36,7 @@ lbl_802D9C00:
/* 802D9C18 002D6B58 7F 88 E3 78 */ mr r8, r28
/* 802D9C1C 002D6B5C 7F A9 EB 78 */ mr r9, r29
/* 802D9C20 002D6B60 7F CA F3 78 */ mr r10, r30
/* 802D9C24 002D6B64 48 00 00 ED */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9C24 002D6B64 48 00 00 ED */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9C28 002D6B68 7C 7F 1B 78 */ mr r31, r3
/* 802D9C2C 002D6B6C 38 61 00 10 */ addi r3, r1, 0x10
/* 802D9C30 002D6B70 38 80 FF FF */ li r4, -1
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(long, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(long, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM_X1_ */
/* 802D9C54 002D6B94 94 21 FE D0 */ stwu r1, -0x130(r1)
/* 802D9C58 002D6B98 7C 08 02 A6 */ mflr r0
@@ -36,7 +36,7 @@ lbl_802D9CBC:
/* 802D9CD4 002D6C14 7F 88 E3 78 */ mr r8, r28
/* 802D9CD8 002D6C18 7F A9 EB 78 */ mr r9, r29
/* 802D9CDC 002D6C1C 7F CA F3 78 */ mr r10, r30
/* 802D9CE0 002D6C20 48 00 00 31 */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9CE0 002D6C20 48 00 00 31 */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9CE4 002D6C24 7C 7F 1B 78 */ mr r31, r3
/* 802D9CE8 002D6C28 38 61 00 10 */ addi r3, r1, 0x10
/* 802D9CEC 002D6C2C 38 80 FF FF */ li r4, -1
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(JKRDvdFile *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(JKRDvdFile *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM_X2_ */
/* 802D9D10 002D6C50 94 21 FF 40 */ stwu r1, -0xc0(r1)
/* 802D9D14 002D6C54 7C 08 02 A6 */ mflr r0
+13 -20
View File
@@ -15,20 +15,13 @@ public:
void getHeapBlock(void*);
void newGroupId(u8 groupId) { this->mGroupId = groupId; }
bool isValid() { return this->mMagic == 0x484d; }
bool _isTempMemBlock() { return (this->mFlags & 0x80) ? true : false; }
bool isValid() const { return this->mMagic == 0x484d; }
bool _isTempMemBlock() const { return (this->mFlags & 0x80) ? true : false; }
int getAlignment() const { return this->mFlags & 0x7f; }
void* getContent() { return (void*)(this + 1); }
CMemBlock* getPrevBlock() { return this->mPrev; }
CMemBlock* getNextBlock() { return this->mNext; }
u32 getSize() { return this->size; }
void* getContent() const { return (void*)(this + 1); }
CMemBlock* getPrevBlock() const { return this->mPrev; }
CMemBlock* getNextBlock() const { return this->mNext; }
u32 getSize() const { return this->size; }
private:
u16 mMagic;
@@ -57,10 +50,10 @@ protected:
public:
s32 getUsedSize(u8) const;
s32 getTotalUsedSize(void) const;
CMemBlock* getHeadUsedList() { return mHeadUsedList; }
CMemBlock* getHeadUsedList() const { return mHeadUsedList; }
public:
/* vt[04] */ virtual u32 getHeapType(); /* override */
/* vt[04] */ virtual u32 getHeapType() const; /* override */
/* vt[05] */ virtual bool check(); /* override */
/* vt[06] */ virtual bool dump_sort(); /* override */
/* vt[07] */ virtual bool dump(); /* override */
@@ -71,12 +64,12 @@ public:
/* vt[12] */ virtual void do_freeTail(); /* override */
/* vt[13] */ virtual void do_fillFreeArea(); /* override */
/* vt[14] */ virtual s32 do_resize(void* ptr, u32 size); /* override */
/* vt[15] */ virtual s32 do_getSize(void* ptr); /* override */
/* vt[16] */ virtual s32 do_getFreeSize(); /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock(); /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize(); /* override */
/* vt[15] */ virtual s32 do_getSize(void* ptr) const; /* override */
/* vt[16] */ virtual s32 do_getFreeSize() const; /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock() const; /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize() const; /* override */
/* vt[19] */ virtual u8 do_changeGroupID(u8 newGroupID); /* override */
/* vt[20] */ virtual u8 do_getCurrentGroupId(); /* override */
/* vt[20] */ virtual u8 do_getCurrentGroupId() const; /* override */
/* vt[21] */ virtual void state_register(JKRHeap::TState*, u32) const; /* override */
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const&,
JKRHeap::TState const&) const; /* override */
@@ -15,7 +15,7 @@ lbl_802CEE50:
/* 802CEE58 002CBD98 40 82 00 10 */ bne lbl_802CEE68
/* 802CEE5C 002CBD9C 7F 83 E3 78 */ mr r3, r28
/* 802CEE60 002CBDA0 38 80 00 10 */ li r4, 0x10
/* 802CEE64 002CBDA4 4B FF F9 79 */ bl getMaxAllocatableSize__7JKRHeapFi
/* 802CEE64 002CBDA4 4B FF F9 79 */ bl getMaxAllocatableSize__7JKRHeapCFi
lbl_802CEE68:
/* 802CEE68 002CBDA8 54 7F 00 36 */ rlwinm r31, r3, 0, 0, 0x1b
/* 802CEE6C 002CBDAC 28 1F 00 A0 */ cmplwi r31, 0xa0
@@ -16,7 +16,7 @@
/* 802D096C 002CD8AC 90 7E 00 00 */ stw r3, 0(r30)
/* 802D0970 002CD8B0 48 00 00 14 */ b lbl_802D0984
lbl_802D0974:
/* 802D0974 002CD8B4 4B FF DE 11 */ bl getTotalFreeSize__7JKRHeapFv
/* 802D0974 002CD8B4 4B FF DE 11 */ bl getTotalFreeSize__7JKRHeapCFv
/* 802D0978 002CD8B8 80 1D 00 38 */ lwz r0, 0x38(r29)
/* 802D097C 002CD8BC 7C 03 00 50 */ subf r0, r3, r0
/* 802D0980 002CD8C0 90 1E 00 00 */ stw r0, 0(r30)
+1 -1
View File
@@ -11,7 +11,7 @@ public:
s32 read(void*, long, long);
bool isAvailable() const { return this->mIsAvailable; }
bool isAvailable() const { return mIsAvailable; }
public:
/* vt[03] */ virtual bool open(const char*) = 0;
@@ -9,52 +9,55 @@ class JKRFileCache : public JKRFileLoader {
public:
class CCacheBlock {
public:
CCacheBlock(u32, u32, void const*);
CCacheBlock(u32, u32, const void*);
~CCacheBlock() {}
private:
JSULink<CCacheBlock> mLink;
u32 field_0x10;
u32 mFileId;
u32 mFileSize;
void const* mMemoryPtr;
public:
/* 0x00 */ JSULink<CCacheBlock> mCacheBlockLink;
/* 0x10 */ u32 mReferenceCount;
/* 0x14 */ u32 mFileId;
/* 0x18 */ u32 mFileSize;
/* 0x1C */ void* mMemoryPtr;
};
protected:
JKRFileCache(char const*, char const*);
JKRFileCache(const char*, const char*);
virtual ~JKRFileCache();
void findCacheBlock(void const*) const;
void findCacheBlock(u32) const;
void findFile(char*, char const*) const;
void getDvdPathName(char const*) const;
CCacheBlock* findCacheBlock(const void*) const;
CCacheBlock* findCacheBlock(u32) const;
bool findFile(char*, const char*) const;
char* getDvdPathName(const char*) const;
void convStrLower(char*) const;
public:
/* vt[04] */ virtual void becomeCurrent(char const*); /* override */
/* vt[05] */ virtual void* getResource(char const*); /* override */
/* vt[06] */ virtual void* getResource(u32, char const*); /* override */
/* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */
/* vt[09] */ virtual void removeResourceAll(void); /* override */
/* vt[10] */ virtual bool removeResource(void*); /* override */
/* vt[11] */ virtual bool detachResource(void*); /* override */
/* vt[12] */ virtual void getResSize(void const*) const; /* override */
/* vt[13] */ virtual void countFile(char const*) const; /* override */
/* vt[14] */ virtual void getFirstFile(char const*) const; /* override */
/* vt[15] */ virtual void getFsResource(char const*);
/* vt[16] */ virtual void getNameResource(u32, char const*);
/* vt[17] */ virtual void readFsResource(void*, u32, char const*);
/* vt[18] */ virtual void readNameResource(void*, u32, u32, char const*);
/* vt[04] */ virtual bool becomeCurrent(const char*); /* override */
/* vt[05] */ virtual void* getResource(const char*); /* override */
/* vt[06] */ virtual void* getResource(u32, const char*); /* override */
/* vt[07] */ virtual u32 readResource(void*, u32, const char*); /* override */
/* vt[08] */ virtual u32 readResource(void*, u32, u32, const char*); /* override */
/* vt[09] */ virtual void removeResourceAll(void); /* override */
/* vt[10] */ virtual bool removeResource(void*); /* override */
/* vt[11] */ virtual bool detachResource(void*); /* override */
/* vt[12] */ virtual u32 getResSize(const void*) const; /* override */
/* vt[13] */ virtual u32 countFile(const char*) const; /* override */
/* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const; /* override */
/* vt[15] */ virtual void* getFsResource(const char*);
/* vt[16] */ virtual void* getNameResource(u32, const char*);
/* vt[17] */ virtual u32 readFsResource(void*, u32, const char*);
/* vt[18] */ virtual u32 readNameResource(void*, u32, u32, const char*);
private:
JKRHeap* mParentHeap;
JSUList<CCacheBlock> mCacheBlockList;
char* field_0x40;
char* field_0x4c;
char* field_0x50;
/* 0x00 */ // vtable
/* 0x04 */ // JKRFileLoader
/* 0x38 */ JKRHeap* mParentHeap;
/* 0x3C */ JSUList<CCacheBlock> mCacheBlockList;
/* 0x48 */ char* mRootPath;
/* 0x4C */ char* mCurrentPath;
/* 0x50 */ char* mVolumePath;
public:
static void mount(char const*, JKRHeap*, char const*);
static JKRFileCache* mount(const char*, JKRHeap*, const char*);
};
#endif
@@ -15,7 +15,7 @@ lbl_802D49E4:
/* 802D49E4 002D1924 38 60 00 00 */ li r3, 0
/* 802D49E8 002D1928 48 00 00 B4 */ b lbl_802D4A9C
lbl_802D49EC:
/* 802D49EC 002D192C 48 09 41 F9 */ bl func_80368BE4
/* 802D49EC 002D192C 48 09 41 F9 */ bl strlen
/* 802D49F0 002D1930 28 03 00 01 */ cmplwi r3, 1
/* 802D49F4 002D1934 41 82 00 1C */ beq lbl_802D4A10
/* 802D49F8 002D1938 7C 7E 1A 14 */ add r3, r30, r3
@@ -23,7 +23,7 @@
/* 802D4B04 002D1A44 38 03 53 48 */ addi r0, r3, 0x43415348@l
/* 802D4B08 002D1A48 90 1F 00 2C */ stw r0, 0x2c(r31)
/* 802D4B0C 002D1A4C 7F 83 E3 78 */ mr r3, r28
/* 802D4B10 002D1A50 48 09 40 D5 */ bl func_80368BE4
/* 802D4B10 002D1A50 48 09 40 D5 */ bl strlen
/* 802D4B14 002D1A54 7C 7E 1B 78 */ mr r30, r3
/* 802D4B18 002D1A58 38 7E 00 01 */ addi r3, r30, 1
/* 802D4B1C 002D1A5C 38 80 00 01 */ li r4, 1
@@ -53,17 +53,17 @@
/* 802D4B7C 002D1ABC 80 7F 00 4C */ lwz r3, 0x4c(r31)
/* 802D4B80 002D1AC0 3C 80 80 3A */ lis r4, lbl_8039D158@ha
/* 802D4B84 002D1AC4 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l
/* 802D4B88 002D1AC8 48 09 3F 35 */ bl func_80368ABC
/* 802D4B88 002D1AC8 48 09 3F 35 */ bl strcat
/* 802D4B8C 002D1ACC 7F BE EB 78 */ mr r30, r29
/* 802D4B90 002D1AD0 28 1D 00 00 */ cmplwi r29, 0
/* 802D4B94 002D1AD4 40 82 00 14 */ bne lbl_802D4BA8
/* 802D4B98 002D1AD8 80 7F 00 48 */ lwz r3, 0x48(r31)
/* 802D4B9C 002D1ADC 38 80 00 2F */ li r4, 0x2f
/* 802D4BA0 002D1AE0 48 09 3D 3D */ bl func_803688DC
/* 802D4BA0 002D1AE0 48 09 3D 3D */ bl strrchr
/* 802D4BA4 002D1AE4 3B C3 00 01 */ addi r30, r3, 1
lbl_802D4BA8:
/* 802D4BA8 002D1AE8 7F C3 F3 78 */ mr r3, r30
/* 802D4BAC 002D1AEC 48 09 40 39 */ bl func_80368BE4
/* 802D4BAC 002D1AEC 48 09 40 39 */ bl strlen
/* 802D4BB0 002D1AF0 38 83 00 01 */ addi r4, r3, 1
/* 802D4BB4 002D1AF4 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13)
/* 802D4BB8 002D1AF8 38 A0 00 00 */ li r5, 0
@@ -87,7 +87,7 @@ lbl_802D4BE8:
/* 802D4BFC 002D1B3C 3B C3 00 02 */ addi r30, r3, 2
lbl_802D4C00:
/* 802D4C00 002D1B40 7F C3 F3 78 */ mr r3, r30
/* 802D4C04 002D1B44 48 09 3F E1 */ bl func_80368BE4
/* 802D4C04 002D1B44 48 09 3F E1 */ bl strlen
/* 802D4C08 002D1B48 38 83 00 01 */ addi r4, r3, 1
/* 802D4C0C 002D1B4C 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13)
/* 802D4C10 002D1B50 38 A0 00 00 */ li r5, 0
@@ -25,7 +25,7 @@
/* 802D4D9C 002D1CDC 41 82 00 20 */ beq lbl_802D4DBC
/* 802D4DA0 002D1CE0 3C 80 80 3A */ lis r4, lbl_8039D158@ha
/* 802D4DA4 002D1CE4 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l
/* 802D4DA8 002D1CE8 48 09 3D 15 */ bl func_80368ABC
/* 802D4DA8 002D1CE8 48 09 3D 15 */ bl strcat
/* 802D4DAC 002D1CEC 48 00 00 10 */ b lbl_802D4DBC
lbl_802D4DB0:
/* 802D4DB0 002D1CF0 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13)
@@ -8,7 +8,7 @@
/* 802D4EF0 002D1E30 7C 7D 1B 78 */ mr r29, r3
/* 802D4EF4 002D1E34 7C BE 2B 78 */ mr r30, r5
/* 802D4EF8 002D1E38 80 63 00 48 */ lwz r3, 0x48(r3)
/* 802D4EFC 002D1E3C 48 09 3C E9 */ bl func_80368BE4
/* 802D4EFC 002D1E3C 48 09 3C E9 */ bl strlen
/* 802D4F00 002D1E40 3B E1 00 08 */ addi r31, r1, 8
/* 802D4F04 002D1E44 7F FF 1A 14 */ add r31, r31, r3
/* 802D4F08 002D1E48 38 61 00 08 */ addi r3, r1, 8
@@ -10,7 +10,7 @@
/* 802D5058 002D1F98 7C BD 2B 78 */ mr r29, r5
/* 802D505C 002D1F9C 7C FE 3B 78 */ mr r30, r7
/* 802D5060 002D1FA0 80 63 00 48 */ lwz r3, 0x48(r3)
/* 802D5064 002D1FA4 48 09 3B 81 */ bl func_80368BE4
/* 802D5064 002D1FA4 48 09 3B 81 */ bl strlen
/* 802D5068 002D1FA8 3B E1 00 08 */ addi r31, r1, 8
/* 802D506C 002D1FAC 7F FF 1A 14 */ add r31, r31, r3
/* 802D5070 002D1FB0 38 61 00 08 */ addi r3, r1, 8
@@ -10,7 +10,7 @@
/* 802D542C 002D236C 7C BC 2B 78 */ mr r28, r5
/* 802D5430 002D2370 3B A0 00 00 */ li r29, 0
/* 802D5434 002D2374 7F 63 DB 78 */ mr r3, r27
/* 802D5438 002D2378 48 09 37 AD */ bl func_80368BE4
/* 802D5438 002D2378 48 09 37 AD */ bl strlen
/* 802D543C 002D237C 7C 7F 1B 78 */ mr r31, r3
/* 802D5440 002D2380 7F 63 DB 78 */ mr r3, r27
/* 802D5444 002D2384 38 81 00 14 */ addi r4, r1, 0x14
@@ -50,10 +50,10 @@ lbl_802D54A8:
/* 802D54C4 002D2404 7F 63 DB 78 */ mr r3, r27
/* 802D54C8 002D2408 3C 80 80 3A */ lis r4, lbl_8039D158@ha
/* 802D54CC 002D240C 38 84 D1 58 */ addi r4, r4, lbl_8039D158@l
/* 802D54D0 002D2410 48 09 35 ED */ bl func_80368ABC
/* 802D54D0 002D2410 48 09 35 ED */ bl strcat
/* 802D54D4 002D2414 7F 63 DB 78 */ mr r3, r27
/* 802D54D8 002D2418 7F 84 E3 78 */ mr r4, r28
/* 802D54DC 002D241C 48 09 35 E1 */ bl func_80368ABC
/* 802D54DC 002D241C 48 09 35 E1 */ bl strcat
/* 802D54E0 002D2420 48 00 00 18 */ b lbl_802D54F8
lbl_802D54E4:
/* 802D54E4 002D2424 38 61 00 14 */ addi r3, r1, 0x14
@@ -11,10 +11,10 @@
/* 802D553C 002D247C 2C 00 00 2F */ cmpwi r0, 0x2f
/* 802D5540 002D2480 40 82 00 78 */ bne lbl_802D55B8
/* 802D5544 002D2484 7F C3 F3 78 */ mr r3, r30
/* 802D5548 002D2488 48 09 36 9D */ bl func_80368BE4
/* 802D5548 002D2488 48 09 36 9D */ bl strlen
/* 802D554C 002D248C 7C 7F 1B 78 */ mr r31, r3
/* 802D5550 002D2490 80 7D 00 48 */ lwz r3, 0x48(r29)
/* 802D5554 002D2494 48 09 36 91 */ bl func_80368BE4
/* 802D5554 002D2494 48 09 36 91 */ bl strlen
/* 802D5558 002D2498 38 9F 00 02 */ addi r4, r31, 2
/* 802D555C 002D249C 7C 83 22 14 */ add r4, r3, r4
/* 802D5560 002D24A0 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13)
@@ -33,19 +33,19 @@
/* 802D5594 002D24D4 40 82 00 14 */ bne lbl_802D55A8
/* 802D5598 002D24D8 7F E3 FB 78 */ mr r3, r31
/* 802D559C 002D24DC 38 9E 00 01 */ addi r4, r30, 1
/* 802D55A0 002D24E0 48 09 35 1D */ bl func_80368ABC
/* 802D55A0 002D24E0 48 09 35 1D */ bl strcat
/* 802D55A4 002D24E4 48 00 00 58 */ b lbl_802D55FC
lbl_802D55A8:
/* 802D55A8 002D24E8 7F E3 FB 78 */ mr r3, r31
/* 802D55AC 002D24EC 7F C4 F3 78 */ mr r4, r30
/* 802D55B0 002D24F0 48 09 35 0D */ bl func_80368ABC
/* 802D55B0 002D24F0 48 09 35 0D */ bl strcat
/* 802D55B4 002D24F4 48 00 00 48 */ b lbl_802D55FC
lbl_802D55B8:
/* 802D55B8 002D24F8 7F C3 F3 78 */ mr r3, r30
/* 802D55BC 002D24FC 48 09 36 29 */ bl func_80368BE4
/* 802D55BC 002D24FC 48 09 36 29 */ bl strlen
/* 802D55C0 002D2500 7C 7F 1B 78 */ mr r31, r3
/* 802D55C4 002D2504 80 7D 00 4C */ lwz r3, 0x4c(r29)
/* 802D55C8 002D2508 48 09 36 1D */ bl func_80368BE4
/* 802D55C8 002D2508 48 09 36 1D */ bl strlen
/* 802D55CC 002D250C 38 9F 00 02 */ addi r4, r31, 2
/* 802D55D0 002D2510 7C 83 22 14 */ add r4, r3, r4
/* 802D55D4 002D2514 80 6D 8D F0 */ lwz r3, lbl_80451370-_SDA_BASE_(r13)
@@ -57,7 +57,7 @@ lbl_802D55B8:
/* 802D55EC 002D252C 48 09 35 41 */ bl strcpy
/* 802D55F0 002D2530 7F E3 FB 78 */ mr r3, r31
/* 802D55F4 002D2534 7F C4 F3 78 */ mr r4, r30
/* 802D55F8 002D2538 48 09 34 C5 */ bl func_80368ABC
/* 802D55F8 002D2538 48 09 34 C5 */ bl strcat
lbl_802D55FC:
/* 802D55FC 002D253C 7F A3 EB 78 */ mr r3, r29
/* 802D5600 002D2540 7F E4 FB 78 */ mr r4, r31
@@ -8,14 +8,13 @@ class JKRFileLoader;
extern JKRFileLoader* lbl_80451418; // JKRFileLoader::sCurrentVolume
extern JSUList<JKRFileLoader> lbl_80434354; // JKRFileLoader::sVolumeList
class JKRArcFinder;
class JKRFileFinder;
class JKRFileLoader : public JKRDisposer {
public:
JKRFileLoader(void);
virtual ~JKRFileLoader();
bool isMounted() const { return this->mIsMounted; }
u32 getVolumeType() const { return this->mVolumeType; }
public:
@@ -30,13 +29,13 @@ public:
/* vt[11] */ virtual bool detachResource(void*) = 0;
/* vt[12] */ virtual u32 getResSize(const void*) const = 0;
/* vt[13] */ virtual u32 countFile(const char*) const = 0;
/* vt[14] */ virtual JKRArcFinder* getFirstFile(const char*) const = 0;
/* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const = 0;
protected:
/* 0x00 */ // vtable
/* 0x04 */ // JKRDisposer
/* 0x18 */ JSULink<JKRFileLoader> mFileLoaderLink;
/* 0x28 */ char* mVolumeName;
/* 0x28 */ const char* mVolumeName;
/* 0x2C */ u32 mVolumeType;
/* 0x30 */ bool mIsMounted;
/* 0x31 */ u8 field_0x31[3];
+59 -32
View File
@@ -5,10 +5,27 @@
#include "dolphin/types.h"
#include "global.h"
typedef void (*JKRErrorHandler)(void*, u32, int);
class JKRHeap;
typedef void (*JKRErrorHandler)(JKRHeap*, u32, int);
extern JKRErrorHandler lbl_8045137C; // JKRHeap::mErrorHandler
class JKRHeap : public JKRDisposer {
public:
class TState {};
class TState {
public:
u32 mUsedSize;
u32 mCheckCode;
u32 mBuf;
u32 field_0xc;
JKRHeap* mHeap;
u32 mId;
public:
u32 getUsedSize() const { return mUsedSize; }
u32 getCheckCode() const { return mCheckCode; }
JKRHeap* getHeap() const { return mHeap; }
u32 getId() const { return mId; }
};
public:
JKRHeap(void*, u32, JKRHeap*, bool);
@@ -23,12 +40,12 @@ public:
void freeAll();
void freeTail();
s32 resize(void* ptr, u32 size);
s32 getSize(void* ptr);
s32 getFreeSize();
void* getMaxFreeBlock();
s32 getTotalFreeSize();
s32 getSize(void* ptr) const;
s32 getFreeSize() const;
void* getMaxFreeBlock() const;
s32 getTotalFreeSize() const;
u8 changeGroupID(u8 newGroupId);
s32 getMaxAllocatableSize(int alignment);
u32 getMaxAllocatableSize(int alignment) const;
JKRHeap* find(void* ptr) const;
JKRHeap* findAllHeap(void* ptr) const;
@@ -42,7 +59,7 @@ public:
bool isSubHeap(JKRHeap* heap) const;
/* vt[03] */ virtual void callAllDisposer();
/* vt[04] */ virtual u32 getHeapType() = 0;
/* vt[04] */ virtual u32 getHeapType() const = 0;
/* vt[05] */ virtual bool check() = 0;
/* vt[06] */ virtual bool dump_sort();
/* vt[07] */ virtual bool dump() = 0;
@@ -53,25 +70,28 @@ public:
/* vt[12] */ virtual void do_freeTail() = 0;
/* vt[13] */ virtual void do_fillFreeArea() = 0;
/* vt[14] */ virtual s32 do_resize(void* ptr, u32 size) = 0;
/* vt[15] */ virtual s32 do_getSize(void* ptr) = 0;
/* vt[16] */ virtual s32 do_getFreeSize() = 0;
/* vt[17] */ virtual void* do_getMaxFreeBlock() = 0;
/* vt[18] */ virtual s32 do_getTotalFreeSize() = 0;
/* vt[15] */ virtual s32 do_getSize(void* ptr) const = 0;
/* vt[16] */ virtual s32 do_getFreeSize() const = 0;
/* vt[17] */ virtual void* do_getMaxFreeBlock() const = 0;
/* vt[18] */ virtual s32 do_getTotalFreeSize() const = 0;
/* vt[19] */ virtual u8 do_changeGroupID(u8 newGroupID);
/* vt[20] */ virtual u8 do_getCurrentGroupId();
/* vt[20] */ virtual u8 do_getCurrentGroupId() const;
/* vt[21] */ virtual void state_register(JKRHeap::TState*, unsigned long) const;
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const;
/* vt[23] */ virtual void state_dump();
/* vt[23] */ virtual void state_dump(JKRHeap::TState const&) const;
void setDebugFill(bool debugFill) { mDebugFill = debugFill; }
bool getDebugFill() const { return mDebugFill; }
void* getStartAddr() const { return (void*)mStart; }
void* getEndAddr() const { return (void*)mEnd; }
u32 getSize() const { return mSize; }
bool getErrorFlag() const { return mErrorFlag; }
void callErrorHandler(JKRHeap* heap, u32 size, int alignment) {
// lbl_8045137C = JKRHeap::mErrorHandler
if (lbl_8045137C) {
(*lbl_8045137C)(heap, size, alignment);
}
}
JKRHeap* getParent() const {
JSUTree<JKRHeap>* parent = mChildTree.getParent();
@@ -79,21 +99,17 @@ public:
}
JSUTree<JKRHeap>& getHeapTree() { return mChildTree; }
void appendDisposer(JKRDisposer* disposer) { mDisposerList.append(&disposer->mLink); }
void removeDisposer(JKRDisposer* disposer) { mDisposerList.remove(&disposer->mLink); }
void lock() { OSLockMutex(&mMutex); }
void unlock() { OSUnlockMutex(&mMutex); }
protected:
/* 0x00 */ // vtable
/* 0x04 */ // JKRDisposer
/* 0x18 */ OSMutex mMutex;
/* 0x30 */ u32 mStart;
/* 0x34 */ u32 mEnd;
/* 0x30 */ u8* mStart;
/* 0x34 */ u8* mEnd;
/* 0x38 */ u32 mSize;
/* 0x3C */ bool mDebugFill;
/* 0x3D */ bool mCheckMemoryFilled;
@@ -118,23 +134,24 @@ public:
static bool checkMemoryFilled(void* src, u32 size, u8 value);
static void JKRDefaultMemoryErrorRoutine(JKRHeap* heap, u32 size, int alignment);
static JKRErrorHandler setErrorHandler(JKRErrorHandler error_handler);
static JKRErrorHandler setErrorHandler(JKRErrorHandler errorHandler);
static void* getCodeStart(void) { return lbl_80451384; }
static void* getCodeEnd(void) { return lbl_80451388; }
static void* getUserRamStart(void) { return lbl_8045138C; }
static void* getUserRamEnd(void) { return lbl_80451390; }
static u32 getMemorySize(void) { return lbl_80451394; }
static JKRHeap* getRootHeap() { return lbl_80451378; }
static JKRHeap* getSystemHeap() { return lbl_80451370; }
static JKRHeap* getCurrentHeap() { return lbl_80451374; }
static void setState_u32ID_(TState* state, u32 id) { state->mId = id; }
static void setState_uUsedSize_(TState* state, u32 usedSize) { state->mUsedSize = usedSize; }
static void setState_u32CheckCode_(TState* state, u32 checkCode) {
state->mCheckCode = checkCode;
}
static void* getState_buf_(TState* state) { return &state->mBuf; }
static void* getState_(TState* state) { return getState_buf_(state); }
};
void* operator new(u32 size);
@@ -156,10 +173,20 @@ inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) {
return JKRHeap::alloc(size, alignment, heap);
}
inline void* JKRAllocFromSysHeap(u32 size, int alignment) {
JKRHeap* systemHeap = JKRHeap::getSystemHeap();
return systemHeap->alloc(size, alignment);
}
inline void JKRFreeToHeap(JKRHeap* heap, void* ptr) {
JKRHeap::free(ptr, heap);
}
inline void JKRFreeToSysHeap(void* ptr) {
JKRHeap* systemHeap = JKRHeap::getSystemHeap();
systemHeap->free(ptr);
}
inline void JKRFree(void* ptr) {
JKRHeap::free(ptr, NULL);
}
@@ -13,7 +13,7 @@
lbl_802CE6E0:
/* 802CE6E0 002CB620 7C 83 23 78 */ mr r3, r4
/* 802CE6E4 002CB624 7F E4 FB 78 */ mr r4, r31
/* 802CE6E8 002CB628 48 00 00 19 */ bl getSize__7JKRHeapFPv
/* 802CE6E8 002CB628 48 00 00 19 */ bl getSize__7JKRHeapCFPv
lbl_802CE6EC:
/* 802CE6EC 002CB62C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802CE6F0 002CB630 80 01 00 14 */ lwz r0, 0x14(r1)
@@ -5,10 +5,10 @@
/* 802CE7EC 002CB72C 48 09 39 F1 */ bl _savegpr_29
/* 802CE7F0 002CB730 7C 7D 1B 78 */ mr r29, r3
/* 802CE7F4 002CB734 7C 9E 23 78 */ mr r30, r4
/* 802CE7F8 002CB738 4B FF FF 61 */ bl getMaxFreeBlock__7JKRHeapFv
/* 802CE7F8 002CB738 4B FF FF 61 */ bl getMaxFreeBlock__7JKRHeapCFv
/* 802CE7FC 002CB73C 7C 7F 1B 78 */ mr r31, r3
/* 802CE800 002CB740 7F A3 EB 78 */ mr r3, r29
/* 802CE804 002CB744 4B FF FF 29 */ bl getFreeSize__7JKRHeapFv
/* 802CE804 002CB744 4B FF FF 29 */ bl getFreeSize__7JKRHeapCFv
/* 802CE808 002CB748 38 9E FF FF */ addi r4, r30, -1
/* 802CE80C 002CB74C 57 E0 07 3E */ clrlwi r0, r31, 0x1c
/* 802CE810 002CB750 7C 00 F0 50 */ subf r0, r0, r30
@@ -6,7 +6,7 @@
enum JKRMemBreakFlag {
JKRMEMBREAK_FLAG_UNKNOWN0 = 0,
_JKRMemBreakFlag_PADDING_32BIT = 0xFFFFFFFF,
JKRMEMBREAK_FLAG_UNKNOWN1 = 1,
};
class JKRMemArchive : public JKRArchive {
@@ -15,23 +15,28 @@ public:
JKRMemArchive(void*, u32, JKRMemBreakFlag);
virtual ~JKRMemArchive();
void open(long, JKRArchive::EMountDirection);
void open(void*, u32, JKRMemBreakFlag);
bool open(long, JKRArchive::EMountDirection);
bool open(void*, u32, JKRMemBreakFlag);
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
public:
static void fetchResource_subroutine(u8*, u32, u8*, u32, int);
static u32 fetchResource_subroutine(u8*, u32, u8*, u32, JKRCompression);
private:
/* 0x00 */ // vtable
/* 0x04 */ // JKRArchive
u8 unk[20];
/* 0x5C */ JKRCompression mCompression;
/* 0x60 */ EMountDirection mMountDirection;
/* 0x64 */ SArcHeader* mArcHeader;
/* 0x68 */ u8* mArchiveData;
/* 0x6C */ bool mIsOpen;
/* 0x6D */ u8 field_0x6d[3];
};
#endif
@@ -27,7 +27,7 @@
/* 802D6C2C 002D3B6C 39 00 00 01 */ li r8, 1
/* 802D6C30 002D3B70 39 20 00 00 */ li r9, 0
/* 802D6C34 002D3B74 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D6C38 002D3B78 48 00 30 1D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D6C38 002D3B78 48 00 30 1D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D6C3C 002D3B7C 90 7F 00 64 */ stw r3, 0x64(r31)
/* 802D6C40 002D3B80 80 7F 00 64 */ lwz r3, 0x64(r31)
/* 802D6C44 002D3B84 28 03 00 00 */ cmplwi r3, 0
@@ -46,7 +46,7 @@ lbl_802D6C58:
/* 802D6C74 002D3BB4 39 00 00 02 */ li r8, 2
/* 802D6C78 002D3BB8 39 20 00 00 */ li r9, 0
/* 802D6C7C 002D3BBC 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D6C80 002D3BC0 48 00 2F D5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D6C80 002D3BC0 48 00 2F D5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D6C84 002D3BC4 90 7F 00 64 */ stw r3, 0x64(r31)
/* 802D6C88 002D3BC8 80 7F 00 64 */ lwz r3, 0x64(r31)
/* 802D6C8C 002D3BCC 28 03 00 00 */ cmplwi r3, 0
@@ -41,7 +41,7 @@ lbl_802D6E88:
/* 802D6E94 002D3DD4 7F E4 FB 78 */ mr r4, r31
/* 802D6E98 002D3DD8 7F A5 EB 78 */ mr r5, r29
/* 802D6E9C 002D3DDC 7D 06 43 78 */ mr r6, r8
/* 802D6EA0 002D3DE0 48 00 00 BD */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli
/* 802D6EA0 002D3DE0 48 00 00 BD */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression
/* 802D6EA4 002D3DE4 7C 7F 1B 78 */ mr r31, r3
lbl_802D6EA8:
/* 802D6EA8 002D3DE8 28 1E 00 00 */ cmplwi r30, 0
@@ -1,4 +1,4 @@
/* fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection::fetchResource_subroutine(unsigned char *, unsigned long, unsigned char *, unsigned long, int) */
/* fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection::fetchResource_subroutine(unsigned char *, unsigned long, unsigned char *, unsigned long, int) */
/* JKRMemArchive_NS_fetchResource_subroutine */
/* 802D6F5C 002D3E9C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D6F60 002D3EA0 7C 08 02 A6 */ mflr r0
@@ -5,43 +5,56 @@
#include "dolphin/types.h"
class JKRSolidHeap : public JKRHeap {
public:
struct Unknown {
u32 field_0x0;
u32 field_0x4;
u32 field_0x8;
void* field_0xc;
Unknown* mNext;
};
protected:
JKRSolidHeap(void*, u32, JKRHeap*, bool);
virtual ~JKRSolidHeap();
void adjustSize(void);
void allocFromHead(u32, int);
void allocFromTail(u32, int);
s32 adjustSize(void);
void* allocFromHead(u32, int);
void* allocFromTail(u32, int);
s32 getUsedSize() const { return mSize - getTotalFreeSize(); }
public:
/* vt[04] */ virtual u32 getHeapType(void); /* override */
/* vt[05] */ virtual bool check(void); /* override */
/* vt[04] */ virtual u32 getHeapType(void) const; /* override */
/* vt[05] */ virtual bool check(void); /* override */
/* vt[07] */ virtual bool dump(void); /* override */
/* vt[08] */ virtual void do_destroy(void); /* override */
/* vt[09] */ virtual void* do_alloc(u32, int); /* override */
/* vt[10] */ virtual void do_free(void*); /* override */
/* vt[11] */ virtual void do_freeAll(void); /* override */
/* vt[12] */ virtual void do_freeTail(void); /* override */
/* vt[13] */ virtual void do_fillFreeArea(void); /* override */
/* vt[14] */ virtual s32 do_resize(void*, u32); /* override */
/* vt[15] */ virtual s32 do_getSize(void*); /* override */
/* vt[16] */ virtual s32 do_getFreeSize(void); /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock(void); /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize(void); /* override */
/* vt[07] */ virtual bool dump(void); /* override */
/* vt[08] */ virtual void do_destroy(void); /* override */
/* vt[09] */ virtual void* do_alloc(u32, int); /* override */
/* vt[10] */ virtual void do_free(void*); /* override */
/* vt[11] */ virtual void do_freeAll(void); /* override */
/* vt[12] */ virtual void do_freeTail(void); /* override */
/* vt[13] */ virtual void do_fillFreeArea(void); /* override */
/* vt[14] */ virtual s32 do_resize(void*, u32); /* override */
/* vt[15] */ virtual s32 do_getSize(void*) const; /* override */
/* vt[16] */ virtual s32 do_getFreeSize(void) const; /* override */
/* vt[17] */ virtual void* do_getMaxFreeBlock(void) const; /* override */
/* vt[18] */ virtual s32 do_getTotalFreeSize(void) const; /* override */
/* vt[21] */ virtual void state_register(JKRHeap::TState*, u32) const; /* override */
/* vt[22] */ virtual bool state_compare(JKRHeap::TState const&,
JKRHeap::TState const&) const; /* override */
private:
u32 mFreeSize;
void* mSolidStart;
void* mSolidEnd;
u32 field_0x78;
/* 0x00 */ // vtable
/* 0x04 */ // JKRHeap
/* 0x6C */ u32 mFreeSize;
/* 0x70 */ u8* mSolidHead;
/* 0x74 */ u8* mSolidTail;
/* 0x78 */ Unknown* field_0x78;
public:
static void create(u32, JKRHeap*, bool);
static JKRSolidHeap* create(u32, JKRHeap*, bool);
};
#endif
@@ -1,51 +0,0 @@
/* create__12JKRSolidHeapFUlP7JKRHeapb __ct__12JKRSolidHeapFPvUlP7JKRHeapb::create(unsigned long, JKRHeap *, bool) */
/* JKRSolidHeap_NS_create */
/* 802D0A24 002CD964 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D0A28 002CD968 7C 08 02 A6 */ mflr r0
/* 802D0A2C 002CD96C 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D0A30 002CD970 39 61 00 20 */ addi r11, r1, 0x20
/* 802D0A34 002CD974 48 09 17 A9 */ bl _savegpr_29
/* 802D0A38 002CD978 7C 9D 23 79 */ or. r29, r4, r4
/* 802D0A3C 002CD97C 7C BE 2B 78 */ mr r30, r5
/* 802D0A40 002CD980 40 82 00 08 */ bne lbl_802D0A48
/* 802D0A44 002CD984 83 AD 8D F8 */ lwz r29, lbl_80451378-_SDA_BASE_(r13)
lbl_802D0A48:
/* 802D0A48 002CD988 3C 03 00 01 */ addis r0, r3, 1
/* 802D0A4C 002CD98C 28 00 FF FF */ cmplwi r0, 0xffff
/* 802D0A50 002CD990 40 82 00 10 */ bne lbl_802D0A60
/* 802D0A54 002CD994 7F A3 EB 78 */ mr r3, r29
/* 802D0A58 002CD998 38 80 00 10 */ li r4, 0x10
/* 802D0A5C 002CD99C 4B FF DD 81 */ bl getMaxAllocatableSize__7JKRHeapFi
lbl_802D0A60:
/* 802D0A60 002CD9A0 54 7F 00 36 */ rlwinm r31, r3, 0, 0, 0x1b
/* 802D0A64 002CD9A4 28 1F 00 80 */ cmplwi r31, 0x80
/* 802D0A68 002CD9A8 40 80 00 0C */ bge lbl_802D0A74
/* 802D0A6C 002CD9AC 38 60 00 00 */ li r3, 0
/* 802D0A70 002CD9B0 48 00 00 48 */ b lbl_802D0AB8
lbl_802D0A74:
/* 802D0A74 002CD9B4 7F E3 FB 78 */ mr r3, r31
/* 802D0A78 002CD9B8 38 80 00 10 */ li r4, 0x10
/* 802D0A7C 002CD9BC 7F A5 EB 78 */ mr r5, r29
/* 802D0A80 002CD9C0 4B FF D9 F5 */ bl alloc__7JKRHeapFUliP7JKRHeap
/* 802D0A84 002CD9C4 7C 60 1B 78 */ mr r0, r3
/* 802D0A88 002CD9C8 7C 05 03 79 */ or. r5, r0, r0
/* 802D0A8C 002CD9CC 38 85 00 80 */ addi r4, r5, 0x80
/* 802D0A90 002CD9D0 40 82 00 0C */ bne lbl_802D0A9C
/* 802D0A94 002CD9D4 38 60 00 00 */ li r3, 0
/* 802D0A98 002CD9D8 48 00 00 20 */ b lbl_802D0AB8
lbl_802D0A9C:
/* 802D0A9C 002CD9DC 41 82 00 18 */ beq lbl_802D0AB4
/* 802D0AA0 002CD9E0 38 BF FF 80 */ addi r5, r31, -128
/* 802D0AA4 002CD9E4 7F A6 EB 78 */ mr r6, r29
/* 802D0AA8 002CD9E8 7F C7 F3 78 */ mr r7, r30
/* 802D0AAC 002CD9EC 48 00 00 85 */ bl __ct__12JKRSolidHeapFPvUlP7JKRHeapb
/* 802D0AB0 002CD9F0 7C 60 1B 78 */ mr r0, r3
lbl_802D0AB4:
/* 802D0AB4 002CD9F4 7C 03 03 78 */ mr r3, r0
lbl_802D0AB8:
/* 802D0AB8 002CD9F8 39 61 00 20 */ addi r11, r1, 0x20
/* 802D0ABC 002CD9FC 48 09 17 6D */ bl _restgpr_29
/* 802D0AC0 002CDA00 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D0AC4 002CDA04 7C 08 03 A6 */ mtlr r0
/* 802D0AC8 002CDA08 38 21 00 20 */ addi r1, r1, 0x20
/* 802D0ACC 002CDA0C 4E 80 00 20 */ blr
@@ -1,27 +0,0 @@
/* do_destroy__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_destroy(void) */
/* missing reference */
/* 802D0AD0 002CDA10 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0AD4 002CDA14 7C 08 02 A6 */ mflr r0
/* 802D0AD8 002CDA18 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0ADC 002CDA1C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D0AE0 002CDA20 93 C1 00 08 */ stw r30, 8(r1)
/* 802D0AE4 002CDA24 7C 7E 1B 78 */ mr r30, r3
/* 802D0AE8 002CDA28 80 83 00 50 */ lwz r4, 0x50(r3)
/* 802D0AEC 002CDA2C 83 E4 00 0C */ lwz r31, 0xc(r4)
/* 802D0AF0 002CDA30 28 1F 00 00 */ cmplwi r31, 0
/* 802D0AF4 002CDA34 41 82 00 24 */ beq lbl_802D0B18
/* 802D0AF8 002CDA38 38 80 FF FF */ li r4, -1
/* 802D0AFC 002CDA3C 81 83 00 00 */ lwz r12, 0(r3)
/* 802D0B00 002CDA40 81 8C 00 08 */ lwz r12, 8(r12)
/* 802D0B04 002CDA44 7D 89 03 A6 */ mtctr r12
/* 802D0B08 002CDA48 4E 80 04 21 */ bctrl
/* 802D0B0C 002CDA4C 7F C3 F3 78 */ mr r3, r30
/* 802D0B10 002CDA50 7F E4 FB 78 */ mr r4, r31
/* 802D0B14 002CDA54 4B FF D9 ED */ bl free__7JKRHeapFPvP7JKRHeap
lbl_802D0B18:
/* 802D0B18 002CDA58 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D0B1C 002CDA5C 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D0B20 002CDA60 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0B24 002CDA64 7C 08 03 A6 */ mtlr r0
/* 802D0B28 002CDA68 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0B2C 002CDA6C 4E 80 00 20 */ blr
@@ -1,25 +0,0 @@
/* __ct__12JKRSolidHeapFPvUlP7JKRHeapb __ct__12JKRSolidHeapFPvUlP7JKRHeapb::__ct(void *, unsigned long, JKRHeap *, bool) */
/* JKRSolidHeap */
/* 802D0B30 002CDA70 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0B34 002CDA74 7C 08 02 A6 */ mflr r0
/* 802D0B38 002CDA78 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0B3C 002CDA7C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D0B40 002CDA80 7C 7F 1B 78 */ mr r31, r3
/* 802D0B44 002CDA84 4B FF D5 F5 */ bl __ct__7JKRHeapFPvUlP7JKRHeapb
/* 802D0B48 002CDA88 3C 60 80 3D */ lis r3, lbl_803CC030@ha
/* 802D0B4C 002CDA8C 38 03 C0 30 */ addi r0, r3, lbl_803CC030@l
/* 802D0B50 002CDA90 90 1F 00 00 */ stw r0, 0(r31)
/* 802D0B54 002CDA94 80 1F 00 38 */ lwz r0, 0x38(r31)
/* 802D0B58 002CDA98 90 1F 00 6C */ stw r0, 0x6c(r31)
/* 802D0B5C 002CDA9C 80 1F 00 30 */ lwz r0, 0x30(r31)
/* 802D0B60 002CDAA0 90 1F 00 70 */ stw r0, 0x70(r31)
/* 802D0B64 002CDAA4 80 1F 00 34 */ lwz r0, 0x34(r31)
/* 802D0B68 002CDAA8 90 1F 00 74 */ stw r0, 0x74(r31)
/* 802D0B6C 002CDAAC 38 00 00 00 */ li r0, 0
/* 802D0B70 002CDAB0 90 1F 00 78 */ stw r0, 0x78(r31)
/* 802D0B74 002CDAB4 7F E3 FB 78 */ mr r3, r31
/* 802D0B78 002CDAB8 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D0B7C 002CDABC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0B80 002CDAC0 7C 08 03 A6 */ mtlr r0
/* 802D0B84 002CDAC4 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0B88 002CDAC8 4E 80 00 20 */ blr
@@ -1,29 +0,0 @@
/* __dt__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::__dt(void) */
/* missing reference */
/* 802D0B8C 002CDACC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0B90 002CDAD0 7C 08 02 A6 */ mflr r0
/* 802D0B94 002CDAD4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0B98 002CDAD8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D0B9C 002CDADC 93 C1 00 08 */ stw r30, 8(r1)
/* 802D0BA0 002CDAE0 7C 7E 1B 79 */ or. r30, r3, r3
/* 802D0BA4 002CDAE4 7C 9F 23 78 */ mr r31, r4
/* 802D0BA8 002CDAE8 41 82 00 30 */ beq lbl_802D0BD8
/* 802D0BAC 002CDAEC 3C 80 80 3D */ lis r4, lbl_803CC030@ha
/* 802D0BB0 002CDAF0 38 04 C0 30 */ addi r0, r4, lbl_803CC030@l
/* 802D0BB4 002CDAF4 90 1E 00 00 */ stw r0, 0(r30)
/* 802D0BB8 002CDAF8 4B FF DF 09 */ bl dispose__7JKRHeapFv
/* 802D0BBC 002CDAFC 7F C3 F3 78 */ mr r3, r30
/* 802D0BC0 002CDB00 38 80 00 00 */ li r4, 0
/* 802D0BC4 002CDB04 4B FF D6 A1 */ bl __dt__7JKRHeapFv
/* 802D0BC8 002CDB08 7F E0 07 35 */ extsh. r0, r31
/* 802D0BCC 002CDB0C 40 81 00 0C */ ble lbl_802D0BD8
/* 802D0BD0 002CDB10 7F C3 F3 78 */ mr r3, r30
/* 802D0BD4 002CDB14 4B FF E1 69 */ bl __dl__FPv
lbl_802D0BD8:
/* 802D0BD8 002CDB18 7F C3 F3 78 */ mr r3, r30
/* 802D0BDC 002CDB1C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D0BE0 002CDB20 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D0BE4 002CDB24 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0BE8 002CDB28 7C 08 03 A6 */ mtlr r0
/* 802D0BEC 002CDB2C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0BF0 002CDB30 4E 80 00 20 */ blr
@@ -1,49 +0,0 @@
/* do_alloc__12JKRSolidHeapFUli __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_alloc(unsigned long, int) */
/* missing reference */
/* 802D0CB0 002CDBF0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D0CB4 002CDBF4 7C 08 02 A6 */ mflr r0
/* 802D0CB8 002CDBF8 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D0CBC 002CDBFC 39 61 00 20 */ addi r11, r1, 0x20
/* 802D0CC0 002CDC00 48 09 15 1D */ bl _savegpr_29
/* 802D0CC4 002CDC04 7C 7D 1B 78 */ mr r29, r3
/* 802D0CC8 002CDC08 7C 9E 23 78 */ mr r30, r4
/* 802D0CCC 002CDC0C 7C BF 2B 78 */ mr r31, r5
/* 802D0CD0 002CDC10 38 7D 00 18 */ addi r3, r29, 0x18
/* 802D0CD4 002CDC14 48 06 E3 6D */ bl OSLockMutex
/* 802D0CD8 002CDC18 28 1E 00 04 */ cmplwi r30, 4
/* 802D0CDC 002CDC1C 40 80 00 08 */ bge lbl_802D0CE4
/* 802D0CE0 002CDC20 3B C0 00 04 */ li r30, 4
lbl_802D0CE4:
/* 802D0CE4 002CDC24 2C 1F 00 00 */ cmpwi r31, 0
/* 802D0CE8 002CDC28 41 80 00 28 */ blt lbl_802D0D10
/* 802D0CEC 002CDC2C 7F A3 EB 78 */ mr r3, r29
/* 802D0CF0 002CDC30 7F C4 F3 78 */ mr r4, r30
/* 802D0CF4 002CDC34 2C 1F 00 04 */ cmpwi r31, 4
/* 802D0CF8 002CDC38 38 A0 00 04 */ li r5, 4
/* 802D0CFC 002CDC3C 41 80 00 08 */ blt lbl_802D0D04
/* 802D0D00 002CDC40 7F E5 FB 78 */ mr r5, r31
lbl_802D0D04:
/* 802D0D04 002CDC44 48 00 00 55 */ bl allocFromHead__12JKRSolidHeapFUli
/* 802D0D08 002CDC48 7C 7F 1B 78 */ mr r31, r3
/* 802D0D0C 002CDC4C 48 00 00 28 */ b lbl_802D0D34
lbl_802D0D10:
/* 802D0D10 002CDC50 7C 1F 00 D0 */ neg r0, r31
/* 802D0D14 002CDC54 2C 00 00 04 */ cmpwi r0, 4
/* 802D0D18 002CDC58 38 A0 00 04 */ li r5, 4
/* 802D0D1C 002CDC5C 41 80 00 08 */ blt lbl_802D0D24
/* 802D0D20 002CDC60 7C 05 03 78 */ mr r5, r0
lbl_802D0D24:
/* 802D0D24 002CDC64 7F A3 EB 78 */ mr r3, r29
/* 802D0D28 002CDC68 7F C4 F3 78 */ mr r4, r30
/* 802D0D2C 002CDC6C 48 00 00 F5 */ bl allocFromTail__12JKRSolidHeapFUli
/* 802D0D30 002CDC70 7C 7F 1B 78 */ mr r31, r3
lbl_802D0D34:
/* 802D0D34 002CDC74 38 7D 00 18 */ addi r3, r29, 0x18
/* 802D0D38 002CDC78 48 06 E3 E5 */ bl OSUnlockMutex
/* 802D0D3C 002CDC7C 7F E3 FB 78 */ mr r3, r31
/* 802D0D40 002CDC80 39 61 00 20 */ addi r11, r1, 0x20
/* 802D0D44 002CDC84 48 09 14 E5 */ bl _restgpr_29
/* 802D0D48 002CDC88 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D0D4C 002CDC8C 7C 08 03 A6 */ mtlr r0
/* 802D0D50 002CDC90 38 21 00 20 */ addi r1, r1, 0x20
/* 802D0D54 002CDC94 4E 80 00 20 */ blr
@@ -1,14 +0,0 @@
/* do_free__12JKRSolidHeapFPv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_free(void *) */
/* missing reference */
/* 802D0EE4 002CDE24 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0EE8 002CDE28 7C 08 02 A6 */ mflr r0
/* 802D0EEC 002CDE2C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0EF0 002CDE30 3C 60 80 3A */ lis r3, lbl_8039CE50@ha
/* 802D0EF4 002CDE34 38 63 CE 50 */ addi r3, r3, lbl_8039CE50@l
/* 802D0EF8 002CDE38 38 63 00 62 */ addi r3, r3, 0x62
/* 802D0EFC 002CDE3C 4C C6 31 82 */ crclr 6
/* 802D0F00 002CDE40 48 01 77 7D */ bl JUTWarningConsole_f
/* 802D0F04 002CDE44 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0F08 002CDE48 7C 08 03 A6 */ mtlr r0
/* 802D0F0C 002CDE4C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0F10 002CDE50 4E 80 00 20 */ blr
@@ -1,26 +0,0 @@
/* do_freeAll__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_freeAll(void) */
/* missing reference */
/* 802D0F14 002CDE54 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0F18 002CDE58 7C 08 02 A6 */ mflr r0
/* 802D0F1C 002CDE5C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0F20 002CDE60 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D0F24 002CDE64 7C 7F 1B 78 */ mr r31, r3
/* 802D0F28 002CDE68 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D0F2C 002CDE6C 48 06 E1 15 */ bl OSLockMutex
/* 802D0F30 002CDE70 7F E3 FB 78 */ mr r3, r31
/* 802D0F34 002CDE74 4B FF D6 41 */ bl callAllDisposer__7JKRHeapFv
/* 802D0F38 002CDE78 80 1F 00 38 */ lwz r0, 0x38(r31)
/* 802D0F3C 002CDE7C 90 1F 00 6C */ stw r0, 0x6c(r31)
/* 802D0F40 002CDE80 80 1F 00 30 */ lwz r0, 0x30(r31)
/* 802D0F44 002CDE84 90 1F 00 70 */ stw r0, 0x70(r31)
/* 802D0F48 002CDE88 80 1F 00 34 */ lwz r0, 0x34(r31)
/* 802D0F4C 002CDE8C 90 1F 00 74 */ stw r0, 0x74(r31)
/* 802D0F50 002CDE90 38 00 00 00 */ li r0, 0
/* 802D0F54 002CDE94 90 1F 00 78 */ stw r0, 0x78(r31)
/* 802D0F58 002CDE98 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D0F5C 002CDE9C 48 06 E1 C1 */ bl OSUnlockMutex
/* 802D0F60 002CDEA0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D0F64 002CDEA4 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0F68 002CDEA8 7C 08 03 A6 */ mtlr r0
/* 802D0F6C 002CDEAC 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0F70 002CDEB0 4E 80 00 20 */ blr
@@ -1,40 +0,0 @@
/* do_freeTail__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_freeTail(void) */
/* missing reference */
/* 802D0F74 002CDEB4 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D0F78 002CDEB8 7C 08 02 A6 */ mflr r0
/* 802D0F7C 002CDEBC 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D0F80 002CDEC0 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D0F84 002CDEC4 7C 7F 1B 78 */ mr r31, r3
/* 802D0F88 002CDEC8 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D0F8C 002CDECC 48 06 E0 B5 */ bl OSLockMutex
/* 802D0F90 002CDED0 80 9F 00 74 */ lwz r4, 0x74(r31)
/* 802D0F94 002CDED4 80 BF 00 34 */ lwz r5, 0x34(r31)
/* 802D0F98 002CDED8 7C 04 28 40 */ cmplw r4, r5
/* 802D0F9C 002CDEDC 41 82 00 0C */ beq lbl_802D0FA8
/* 802D0FA0 002CDEE0 7F E3 FB 78 */ mr r3, r31
/* 802D0FA4 002CDEE4 4B FF DA FD */ bl dispose__7JKRHeapFPvPv
lbl_802D0FA8:
/* 802D0FA8 002CDEE8 80 9F 00 6C */ lwz r4, 0x6c(r31)
/* 802D0FAC 002CDEEC 80 7F 00 74 */ lwz r3, 0x74(r31)
/* 802D0FB0 002CDEF0 80 1F 00 34 */ lwz r0, 0x34(r31)
/* 802D0FB4 002CDEF4 7C 03 00 50 */ subf r0, r3, r0
/* 802D0FB8 002CDEF8 7C 04 02 14 */ add r0, r4, r0
/* 802D0FBC 002CDEFC 90 1F 00 6C */ stw r0, 0x6c(r31)
/* 802D0FC0 002CDF00 80 1F 00 34 */ lwz r0, 0x34(r31)
/* 802D0FC4 002CDF04 90 1F 00 74 */ stw r0, 0x74(r31)
/* 802D0FC8 002CDF08 80 7F 00 78 */ lwz r3, 0x78(r31)
/* 802D0FCC 002CDF0C 48 00 00 10 */ b lbl_802D0FDC
lbl_802D0FD0:
/* 802D0FD0 002CDF10 80 1F 00 34 */ lwz r0, 0x34(r31)
/* 802D0FD4 002CDF14 90 03 00 0C */ stw r0, 0xc(r3)
/* 802D0FD8 002CDF18 80 63 00 10 */ lwz r3, 0x10(r3)
lbl_802D0FDC:
/* 802D0FDC 002CDF1C 28 03 00 00 */ cmplwi r3, 0
/* 802D0FE0 002CDF20 40 82 FF F0 */ bne lbl_802D0FD0
/* 802D0FE4 002CDF24 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D0FE8 002CDF28 48 06 E1 35 */ bl OSUnlockMutex
/* 802D0FEC 002CDF2C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D0FF0 002CDF30 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D0FF4 002CDF34 7C 08 03 A6 */ mtlr r0
/* 802D0FF8 002CDF38 38 21 00 10 */ addi r1, r1, 0x10
/* 802D0FFC 002CDF3C 4E 80 00 20 */ blr
@@ -1,3 +0,0 @@
/* do_fillFreeArea__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_fillFreeArea(void) */
/* missing reference */
/* 802D1000 002CDF40 4E 80 00 20 */ blr
@@ -1,15 +0,0 @@
/* do_resize__12JKRSolidHeapFPvUl __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_resize(void *, unsigned long) */
/* missing reference */
/* 802D1004 002CDF44 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D1008 002CDF48 7C 08 02 A6 */ mflr r0
/* 802D100C 002CDF4C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D1010 002CDF50 3C 60 80 3A */ lis r3, lbl_8039CE50@ha
/* 802D1014 002CDF54 38 63 CE 50 */ addi r3, r3, lbl_8039CE50@l
/* 802D1018 002CDF58 38 63 00 89 */ addi r3, r3, 0x89
/* 802D101C 002CDF5C 4C C6 31 82 */ crclr 6
/* 802D1020 002CDF60 48 01 76 5D */ bl JUTWarningConsole_f
/* 802D1024 002CDF64 38 60 FF FF */ li r3, -1
/* 802D1028 002CDF68 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D102C 002CDF6C 7C 08 03 A6 */ mtlr r0
/* 802D1030 002CDF70 38 21 00 10 */ addi r1, r1, 0x10
/* 802D1034 002CDF74 4E 80 00 20 */ blr
@@ -1,15 +0,0 @@
/* do_getSize__12JKRSolidHeapFPv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_getSize(void *) */
/* missing reference */
/* 802D1038 002CDF78 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D103C 002CDF7C 7C 08 02 A6 */ mflr r0
/* 802D1040 002CDF80 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D1044 002CDF84 3C 60 80 3A */ lis r3, lbl_8039CE50@ha
/* 802D1048 002CDF88 38 63 CE 50 */ addi r3, r3, lbl_8039CE50@l
/* 802D104C 002CDF8C 38 63 00 B8 */ addi r3, r3, 0xb8
/* 802D1050 002CDF90 4C C6 31 82 */ crclr 6
/* 802D1054 002CDF94 48 01 76 29 */ bl JUTWarningConsole_f
/* 802D1058 002CDF98 38 60 FF FF */ li r3, -1
/* 802D105C 002CDF9C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D1060 002CDFA0 7C 08 03 A6 */ mtlr r0
/* 802D1064 002CDFA4 38 21 00 10 */ addi r1, r1, 0x10
/* 802D1068 002CDFA8 4E 80 00 20 */ blr
@@ -1,39 +0,0 @@
/* check__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::check(void) */
/* missing reference */
/* 802D106C 002CDFAC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D1070 002CDFB0 7C 08 02 A6 */ mflr r0
/* 802D1074 002CDFB4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D1078 002CDFB8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D107C 002CDFBC 93 C1 00 08 */ stw r30, 8(r1)
/* 802D1080 002CDFC0 7C 7E 1B 78 */ mr r30, r3
/* 802D1084 002CDFC4 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D1088 002CDFC8 48 06 DF B9 */ bl OSLockMutex
/* 802D108C 002CDFCC 3B E0 00 01 */ li r31, 1
/* 802D1090 002CDFD0 80 DE 00 6C */ lwz r6, 0x6c(r30)
/* 802D1094 002CDFD4 80 7E 00 30 */ lwz r3, 0x30(r30)
/* 802D1098 002CDFD8 80 1E 00 70 */ lwz r0, 0x70(r30)
/* 802D109C 002CDFDC 7C 83 00 50 */ subf r4, r3, r0
/* 802D10A0 002CDFE0 80 7E 00 74 */ lwz r3, 0x74(r30)
/* 802D10A4 002CDFE4 80 1E 00 34 */ lwz r0, 0x34(r30)
/* 802D10A8 002CDFE8 7C 03 00 50 */ subf r0, r3, r0
/* 802D10AC 002CDFEC 7C A4 02 14 */ add r5, r4, r0
/* 802D10B0 002CDFF0 7C A6 2A 14 */ add r5, r6, r5
/* 802D10B4 002CDFF4 80 9E 00 38 */ lwz r4, 0x38(r30)
/* 802D10B8 002CDFF8 7C 05 20 40 */ cmplw r5, r4
/* 802D10BC 002CDFFC 41 82 00 1C */ beq lbl_802D10D8
/* 802D10C0 002CE000 3B E0 00 00 */ li r31, 0
/* 802D10C4 002CE004 3C 60 80 3A */ lis r3, lbl_8039CE50@ha
/* 802D10C8 002CE008 38 63 CE 50 */ addi r3, r3, lbl_8039CE50@l
/* 802D10CC 002CE00C 38 63 00 E6 */ addi r3, r3, 0xe6
/* 802D10D0 002CE010 4C C6 31 82 */ crclr 6
/* 802D10D4 002CE014 48 01 75 A9 */ bl JUTWarningConsole_f
lbl_802D10D8:
/* 802D10D8 002CE018 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D10DC 002CE01C 48 06 E0 41 */ bl OSUnlockMutex
/* 802D10E0 002CE020 7F E3 FB 78 */ mr r3, r31
/* 802D10E4 002CE024 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D10E8 002CE028 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D10EC 002CE02C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D10F0 002CE030 7C 08 03 A6 */ mtlr r0
/* 802D10F4 002CE034 38 21 00 10 */ addi r1, r1, 0x10
/* 802D10F8 002CE038 4E 80 00 20 */ blr
@@ -8,7 +8,7 @@
/* 802D1210 002CE150 7C 7E 1B 78 */ mr r30, r3
/* 802D1214 002CE154 7C 9F 23 78 */ mr r31, r4
/* 802D1218 002CE158 90 A4 00 14 */ stw r5, 0x14(r4)
/* 802D121C 002CE15C 4B FF D5 69 */ bl getTotalFreeSize__7JKRHeapFv
/* 802D121C 002CE15C 4B FF D5 69 */ bl getTotalFreeSize__7JKRHeapCFv
/* 802D1220 002CE160 80 1E 00 38 */ lwz r0, 0x38(r30)
/* 802D1224 002CE164 7C 03 00 50 */ subf r0, r3, r0
/* 802D1228 002CE168 90 1F 00 00 */ stw r0, 0(r31)
@@ -1,15 +0,0 @@
/* state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState __ct__12JKRSolidHeapFPvUlP7JKRHeapb::state_compare( const(JKRHeap::TState const &, JKRHeap::TState const &)) */
/* missing reference */
/* 802D1258 002CE198 38 60 00 01 */ li r3, 1
/* 802D125C 002CE19C 80 C4 00 04 */ lwz r6, 4(r4)
/* 802D1260 002CE1A0 80 05 00 04 */ lwz r0, 4(r5)
/* 802D1264 002CE1A4 7C 06 00 40 */ cmplw r6, r0
/* 802D1268 002CE1A8 41 82 00 08 */ beq lbl_802D1270
/* 802D126C 002CE1AC 38 60 00 00 */ li r3, 0
lbl_802D1270:
/* 802D1270 002CE1B0 80 84 00 00 */ lwz r4, 0(r4)
/* 802D1274 002CE1B4 80 05 00 00 */ lwz r0, 0(r5)
/* 802D1278 002CE1B8 7C 04 00 40 */ cmplw r4, r0
/* 802D127C 002CE1BC 4D 82 00 20 */ beqlr
/* 802D1280 002CE1C0 38 60 00 00 */ li r3, 0
/* 802D1284 002CE1C4 4E 80 00 20 */ blr
@@ -1,5 +0,0 @@
/* getHeapType__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::getHeapType(void) */
/* missing reference */
/* 802D1288 002CE1C8 3C 60 53 4C */ lis r3, 0x534C4944@ha
/* 802D128C 002CE1CC 38 63 49 44 */ addi r3, r3, 0x534C4944@l
/* 802D1290 002CE1D0 4E 80 00 20 */ blr
@@ -1,4 +0,0 @@
/* do_getFreeSize__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_getFreeSize(void) */
/* missing reference */
/* 802D1294 002CE1D4 80 63 00 6C */ lwz r3, 0x6c(r3)
/* 802D1298 002CE1D8 4E 80 00 20 */ blr
@@ -1,4 +0,0 @@
/* do_getMaxFreeBlock__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_getMaxFreeBlock(void) */
/* missing reference */
/* 802D129C 002CE1DC 80 63 00 70 */ lwz r3, 0x70(r3)
/* 802D12A0 002CE1E0 4E 80 00 20 */ blr
@@ -1,10 +0,0 @@
/* do_getTotalFreeSize__12JKRSolidHeapFv __ct__12JKRSolidHeapFPvUlP7JKRHeapb::do_getTotalFreeSize(void) */
/* missing reference */
/* 802D12A4 002CE1E4 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D12A8 002CE1E8 7C 08 02 A6 */ mflr r0
/* 802D12AC 002CE1EC 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D12B0 002CE1F0 4B FF D4 7D */ bl getFreeSize__7JKRHeapFv
/* 802D12B4 002CE1F4 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D12B8 002CE1F8 7C 08 03 A6 */ mtlr r0
/* 802D12BC 002CE1FC 38 21 00 10 */ addi r1, r1, 0x10
/* 802D12C0 002CE200 4E 80 00 20 */ blr
+21
View File
@@ -8,6 +8,27 @@ struct TRandom_fast_ {
u32 value;
TRandom_fast_(u32 value);
u32 get(void) {
value = (value * 0x19660d) + 0x3c6ef35f;
return value;
}
u32 get_bit32(void) { return this->get(); }
// due to the float constant, having this function inlined adds that float to data,
// making it not match
float get_ufloat_1(void) {
// !@bug UB: in C++ it's not legal to read from an union member other
// than the last one that was written to.
union {
f32 f;
u32 s;
} out;
out.s = (this->get() >> 9) | 0x3f800000;
return out.f - 1;
}
void setSeed(u32 seed) { value = seed; }
};
} // namespace JMath
@@ -0,0 +1,20 @@
/* 80289228 00286168 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8028922C 0028616C 7C 08 02 A6 */ mflr r0
/* 80289230 00286170 90 01 00 24 */ stw r0, 0x24(r1)
/* 80289234 00286174 7C 65 1B 78 */ mr r5, r3
/* 80289238 00286178 90 A4 00 14 */ stw r5, 0x14(r4)
/* 8028923C 0028617C 38 05 00 14 */ addi r0, r5, 0x14
/* 80289240 00286180 90 01 00 0C */ stw r0, 0xc(r1)
/* 80289244 00286184 90 01 00 08 */ stw r0, 8(r1)
/* 80289248 00286188 90 01 00 1C */ stw r0, 0x1c(r1)
/* 8028924C 0028618C 90 01 00 18 */ stw r0, 0x18(r1)
/* 80289250 00286190 38 C4 00 0C */ addi r6, r4, 0xc
/* 80289254 00286194 90 01 00 14 */ stw r0, 0x14(r1)
/* 80289258 00286198 38 61 00 10 */ addi r3, r1, 0x10
/* 8028925C 0028619C 38 85 00 10 */ addi r4, r5, 0x10
/* 80289260 002861A0 38 A1 00 14 */ addi r5, r1, 0x14
/* 80289264 002861A4 48 05 39 45 */ bl Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode
/* 80289268 002861A8 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8028926C 002861AC 7C 08 03 A6 */ mtlr r0
/* 80289270 002861B0 38 21 00 20 */ addi r1, r1, 0x20
/* 80289274 002861B4 4E 80 00 20 */ blr
@@ -0,0 +1,27 @@
/* 80289300 00286240 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80289304 00286244 7C 08 02 A6 */ mflr r0
/* 80289308 00286248 90 01 00 24 */ stw r0, 0x24(r1)
/* 8028930C 0028624C 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 80289310 00286250 93 C1 00 18 */ stw r30, 0x18(r1)
/* 80289314 00286254 7C 7E 1B 78 */ mr r30, r3
/* 80289318 00286258 3B FE 00 14 */ addi r31, r30, 0x14
/* 8028931C 0028625C 93 E1 00 10 */ stw r31, 0x10(r1)
/* 80289320 00286260 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80289324 00286264 93 E1 00 14 */ stw r31, 0x14(r1)
/* 80289328 00286268 48 00 00 18 */ b lbl_80289340
lbl_8028932C:
/* 8028932C 0028626C 80 7F 00 04 */ lwz r3, 4(r31)
/* 80289330 00286270 90 61 00 08 */ stw r3, 8(r1)
/* 80289334 00286274 38 83 FF F4 */ addi r4, r3, -12
/* 80289338 00286278 7F C3 F3 78 */ mr r3, r30
/* 8028933C 0028627C 4B FF FF 75 */ bl destroyObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject
lbl_80289340:
/* 80289340 00286280 80 1E 00 10 */ lwz r0, 0x10(r30)
/* 80289344 00286284 28 00 00 00 */ cmplwi r0, 0
/* 80289348 00286288 40 82 FF E4 */ bne lbl_8028932C
/* 8028934C 0028628C 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 80289350 00286290 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 80289354 00286294 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80289358 00286298 7C 08 03 A6 */ mtlr r0
/* 8028935C 0028629C 38 21 00 20 */ addi r1, r1, 0x20
/* 80289360 002862A0 4E 80 00 20 */ blr
@@ -0,0 +1,157 @@
/* 80288BE8 00285B28 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80288BEC 00285B2C 7C 08 02 A6 */ mflr r0
/* 80288BF0 00285B30 90 01 00 24 */ stw r0, 0x24(r1)
/* 80288BF4 00285B34 39 61 00 20 */ addi r11, r1, 0x20
/* 80288BF8 00285B38 48 0D 95 E5 */ bl _savegpr_29
/* 80288BFC 00285B3C 7C 7E 1B 78 */ mr r30, r3
/* 80288C00 00285B40 7C 9F 23 78 */ mr r31, r4
/* 80288C04 00285B44 3B A0 00 00 */ li r29, 0
lbl_80288C08:
/* 80288C08 00285B48 A0 1E 00 1C */ lhz r0, 0x1c(r30)
/* 80288C0C 00285B4C 54 00 04 21 */ rlwinm. r0, r0, 0, 0x10, 0x10
/* 80288C10 00285B50 41 82 00 60 */ beq lbl_80288C70
/* 80288C14 00285B54 80 1E 00 30 */ lwz r0, 0x30(r30)
/* 80288C18 00285B58 2C 00 00 04 */ cmpwi r0, 4
/* 80288C1C 00285B5C 41 82 00 24 */ beq lbl_80288C40
/* 80288C20 00285B60 40 80 00 14 */ bge lbl_80288C34
/* 80288C24 00285B64 2C 00 00 02 */ cmpwi r0, 2
/* 80288C28 00285B68 41 82 00 18 */ beq lbl_80288C40
/* 80288C2C 00285B6C 40 80 00 3C */ bge lbl_80288C68
/* 80288C30 00285B70 48 00 00 38 */ b lbl_80288C68
lbl_80288C34:
/* 80288C34 00285B74 2C 00 00 08 */ cmpwi r0, 8
/* 80288C38 00285B78 41 82 00 30 */ beq lbl_80288C68
/* 80288C3C 00285B7C 48 00 00 2C */ b lbl_80288C68
lbl_80288C40:
/* 80288C40 00285B80 38 00 00 08 */ li r0, 8
/* 80288C44 00285B84 90 1E 00 30 */ stw r0, 0x30(r30)
/* 80288C48 00285B88 88 1E 00 1E */ lbz r0, 0x1e(r30)
/* 80288C4C 00285B8C 28 00 00 00 */ cmplwi r0, 0
/* 80288C50 00285B90 41 82 00 18 */ beq lbl_80288C68
/* 80288C54 00285B94 7F C3 F3 78 */ mr r3, r30
/* 80288C58 00285B98 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288C5C 00285B9C 81 8C 00 10 */ lwz r12, 0x10(r12)
/* 80288C60 00285BA0 7D 89 03 A6 */ mtctr r12
/* 80288C64 00285BA4 4E 80 04 21 */ bctrl
lbl_80288C68:
/* 80288C68 00285BA8 38 60 00 01 */ li r3, 1
/* 80288C6C 00285BAC 48 00 01 94 */ b lbl_80288E00
lbl_80288C70:
/* 80288C70 00285BB0 80 1E 00 30 */ lwz r0, 0x30(r30)
/* 80288C74 00285BB4 2C 00 00 08 */ cmpwi r0, 8
/* 80288C78 00285BB8 40 82 00 20 */ bne lbl_80288C98
/* 80288C7C 00285BBC 7F C3 F3 78 */ mr r3, r30
/* 80288C80 00285BC0 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288C84 00285BC4 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 80288C88 00285BC8 7D 89 03 A6 */ mtctr r12
/* 80288C8C 00285BCC 4E 80 04 21 */ bctrl
/* 80288C90 00285BD0 38 00 00 02 */ li r0, 2
/* 80288C94 00285BD4 90 1E 00 30 */ stw r0, 0x30(r30)
lbl_80288C98:
/* 80288C98 00285BD8 80 7E 00 14 */ lwz r3, 0x14(r30)
/* 80288C9C 00285BDC 28 03 00 00 */ cmplwi r3, 0
/* 80288CA0 00285BE0 41 82 00 10 */ beq lbl_80288CB0
/* 80288CA4 00285BE4 80 03 00 54 */ lwz r0, 0x54(r3)
/* 80288CA8 00285BE8 2C 00 00 00 */ cmpwi r0, 0
/* 80288CAC 00285BEC 41 81 00 10 */ bgt lbl_80288CBC
lbl_80288CB0:
/* 80288CB0 00285BF0 80 1E 00 20 */ lwz r0, 0x20(r30)
/* 80288CB4 00285BF4 2C 00 00 00 */ cmpwi r0, 0
/* 80288CB8 00285BF8 40 81 00 38 */ ble lbl_80288CF0
lbl_80288CBC:
/* 80288CBC 00285BFC 88 1E 00 1E */ lbz r0, 0x1e(r30)
/* 80288CC0 00285C00 28 00 00 00 */ cmplwi r0, 0
/* 80288CC4 00285C04 41 82 00 24 */ beq lbl_80288CE8
/* 80288CC8 00285C08 38 00 00 04 */ li r0, 4
/* 80288CCC 00285C0C 90 1E 00 30 */ stw r0, 0x30(r30)
/* 80288CD0 00285C10 7F C3 F3 78 */ mr r3, r30
/* 80288CD4 00285C14 7F E4 FB 78 */ mr r4, r31
/* 80288CD8 00285C18 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288CDC 00285C1C 81 8C 00 18 */ lwz r12, 0x18(r12)
/* 80288CE0 00285C20 7D 89 03 A6 */ mtctr r12
/* 80288CE4 00285C24 4E 80 04 21 */ bctrl
lbl_80288CE8:
/* 80288CE8 00285C28 38 60 00 01 */ li r3, 1
/* 80288CEC 00285C2C 48 00 01 14 */ b lbl_80288E00
lbl_80288CF0:
/* 80288CF0 00285C30 80 1E 00 28 */ lwz r0, 0x28(r30)
/* 80288CF4 00285C34 90 1E 00 24 */ stw r0, 0x24(r30)
/* 80288CF8 00285C38 28 00 00 00 */ cmplwi r0, 0
/* 80288CFC 00285C3C 40 82 00 5C */ bne lbl_80288D58
/* 80288D00 00285C40 88 1E 00 1E */ lbz r0, 0x1e(r30)
/* 80288D04 00285C44 28 00 00 00 */ cmplwi r0, 0
/* 80288D08 00285C48 41 82 00 48 */ beq lbl_80288D50
/* 80288D0C 00285C4C 57 A0 06 3F */ clrlwi. r0, r29, 0x18
/* 80288D10 00285C50 40 82 00 1C */ bne lbl_80288D2C
/* 80288D14 00285C54 7F C3 F3 78 */ mr r3, r30
/* 80288D18 00285C58 38 80 00 00 */ li r4, 0
/* 80288D1C 00285C5C 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288D20 00285C60 81 8C 00 18 */ lwz r12, 0x18(r12)
/* 80288D24 00285C64 7D 89 03 A6 */ mtctr r12
/* 80288D28 00285C68 4E 80 04 21 */ bctrl
lbl_80288D2C:
/* 80288D2C 00285C6C 38 00 00 00 */ li r0, 0
/* 80288D30 00285C70 98 1E 00 1E */ stb r0, 0x1e(r30)
/* 80288D34 00285C74 38 00 00 01 */ li r0, 1
/* 80288D38 00285C78 90 1E 00 30 */ stw r0, 0x30(r30)
/* 80288D3C 00285C7C 7F C3 F3 78 */ mr r3, r30
/* 80288D40 00285C80 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288D44 00285C84 81 8C 00 10 */ lwz r12, 0x10(r12)
/* 80288D48 00285C88 7D 89 03 A6 */ mtctr r12
/* 80288D4C 00285C8C 4E 80 04 21 */ bctrl
lbl_80288D50:
/* 80288D50 00285C90 38 60 00 00 */ li r3, 0
/* 80288D54 00285C94 48 00 00 AC */ b lbl_80288E00
lbl_80288D58:
/* 80288D58 00285C98 88 1E 00 1E */ lbz r0, 0x1e(r30)
/* 80288D5C 00285C9C 28 00 00 00 */ cmplwi r0, 0
/* 80288D60 00285CA0 40 82 00 20 */ bne lbl_80288D80
/* 80288D64 00285CA4 38 00 00 01 */ li r0, 1
/* 80288D68 00285CA8 98 1E 00 1E */ stb r0, 0x1e(r30)
/* 80288D6C 00285CAC 7F C3 F3 78 */ mr r3, r30
/* 80288D70 00285CB0 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288D74 00285CB4 81 8C 00 0C */ lwz r12, 0xc(r12)
/* 80288D78 00285CB8 7D 89 03 A6 */ mtctr r12
/* 80288D7C 00285CBC 4E 80 04 21 */ bctrl
lbl_80288D80:
/* 80288D80 00285CC0 38 00 00 02 */ li r0, 2
/* 80288D84 00285CC4 90 1E 00 30 */ stw r0, 0x30(r30)
/* 80288D88 00285CC8 80 1E 00 2C */ lwz r0, 0x2c(r30)
/* 80288D8C 00285CCC 28 00 00 00 */ cmplwi r0, 0
/* 80288D90 00285CD0 40 82 00 18 */ bne lbl_80288DA8
/* 80288D94 00285CD4 7F C3 F3 78 */ mr r3, r30
/* 80288D98 00285CD8 48 00 00 95 */ bl process_sequence___Q37JStudio3stb7TObjectFv
/* 80288D9C 00285CDC 80 1E 00 2C */ lwz r0, 0x2c(r30)
/* 80288DA0 00285CE0 28 00 00 00 */ cmplwi r0, 0
/* 80288DA4 00285CE4 41 82 FE 64 */ beq lbl_80288C08
lbl_80288DA8:
/* 80288DA8 00285CE8 3B A0 00 01 */ li r29, 1
/* 80288DAC 00285CEC 80 9E 00 2C */ lwz r4, 0x2c(r30)
/* 80288DB0 00285CF0 7C 1F 20 40 */ cmplw r31, r4
/* 80288DB4 00285CF4 41 80 00 28 */ blt lbl_80288DDC
/* 80288DB8 00285CF8 7F E4 F8 50 */ subf r31, r4, r31
/* 80288DBC 00285CFC 38 00 00 00 */ li r0, 0
/* 80288DC0 00285D00 90 1E 00 2C */ stw r0, 0x2c(r30)
/* 80288DC4 00285D04 7F C3 F3 78 */ mr r3, r30
/* 80288DC8 00285D08 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288DCC 00285D0C 81 8C 00 18 */ lwz r12, 0x18(r12)
/* 80288DD0 00285D10 7D 89 03 A6 */ mtctr r12
/* 80288DD4 00285D14 4E 80 04 21 */ bctrl
/* 80288DD8 00285D18 4B FF FF 18 */ b lbl_80288CF0
lbl_80288DDC:
/* 80288DDC 00285D1C 7C 1F 20 50 */ subf r0, r31, r4
/* 80288DE0 00285D20 90 1E 00 2C */ stw r0, 0x2c(r30)
/* 80288DE4 00285D24 7F C3 F3 78 */ mr r3, r30
/* 80288DE8 00285D28 7F E4 FB 78 */ mr r4, r31
/* 80288DEC 00285D2C 81 9E 00 08 */ lwz r12, 8(r30)
/* 80288DF0 00285D30 81 8C 00 18 */ lwz r12, 0x18(r12)
/* 80288DF4 00285D34 7D 89 03 A6 */ mtctr r12
/* 80288DF8 00285D38 4E 80 04 21 */ bctrl
/* 80288DFC 00285D3C 38 60 00 01 */ li r3, 1
lbl_80288E00:
/* 80288E00 00285D40 39 61 00 20 */ addi r11, r1, 0x20
/* 80288E04 00285D44 48 0D 94 25 */ bl _restgpr_29
/* 80288E08 00285D48 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80288E0C 00285D4C 7C 08 03 A6 */ mtlr r0
/* 80288E10 00285D50 38 21 00 20 */ addi r1, r1, 0x20
/* 80288E14 00285D54 4E 80 00 20 */ blr
@@ -0,0 +1,68 @@
/* 802894B4 002863F4 94 21 FF A0 */ stwu r1, -0x60(r1)
/* 802894B8 002863F8 7C 08 02 A6 */ mflr r0
/* 802894BC 002863FC 90 01 00 64 */ stw r0, 0x64(r1)
/* 802894C0 00286400 39 61 00 60 */ addi r11, r1, 0x60
/* 802894C4 00286404 48 0D 8D 09 */ bl _savegpr_25
/* 802894C8 00286408 7C 7B 1B 78 */ mr r27, r3
/* 802894CC 0028640C 7C 9C 23 78 */ mr r28, r4
/* 802894D0 00286410 80 03 00 40 */ lwz r0, 0x40(r3)
/* 802894D4 00286414 90 03 00 54 */ stw r0, 0x54(r3)
/* 802894D8 00286418 38 7B 00 20 */ addi r3, r27, 0x20
/* 802894DC 0028641C 4B FF F7 0D */ bl forward__Q37JStudio3stb7TObjectFUl
/* 802894E0 00286420 7C 7F 1B 78 */ mr r31, r3
/* 802894E4 00286424 3B C0 00 0F */ li r30, 0xf
/* 802894E8 00286428 3B A0 00 00 */ li r29, 0
/* 802894EC 0028642C 38 1B 00 14 */ addi r0, r27, 0x14
/* 802894F0 00286430 90 01 00 24 */ stw r0, 0x24(r1)
/* 802894F4 00286434 90 01 00 20 */ stw r0, 0x20(r1)
/* 802894F8 00286438 90 01 00 34 */ stw r0, 0x34(r1)
/* 802894FC 0028643C 90 01 00 30 */ stw r0, 0x30(r1)
/* 80289500 00286440 80 7B 00 14 */ lwz r3, 0x14(r27)
/* 80289504 00286444 90 61 00 1C */ stw r3, 0x1c(r1)
/* 80289508 00286448 90 61 00 18 */ stw r3, 0x18(r1)
/* 8028950C 0028644C 90 61 00 2C */ stw r3, 0x2c(r1)
/* 80289510 00286450 90 61 00 28 */ stw r3, 0x28(r1)
/* 80289514 00286454 90 61 00 38 */ stw r3, 0x38(r1)
/* 80289518 00286458 90 01 00 3C */ stw r0, 0x3c(r1)
/* 8028951C 0028645C 48 00 00 48 */ b lbl_80289564
lbl_80289520:
/* 80289520 00286460 80 61 00 38 */ lwz r3, 0x38(r1)
/* 80289524 00286464 3B 23 FF F4 */ addi r25, r3, -12
/* 80289528 00286468 80 03 00 00 */ lwz r0, 0(r3)
/* 8028952C 0028646C 90 01 00 38 */ stw r0, 0x38(r1)
/* 80289530 00286470 3B 40 00 00 */ li r26, 0
/* 80289534 00286474 7F 23 CB 78 */ mr r3, r25
/* 80289538 00286478 7F 84 E3 78 */ mr r4, r28
/* 8028953C 0028647C 4B FF F6 AD */ bl forward__Q37JStudio3stb7TObjectFUl
/* 80289540 00286480 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 80289544 00286484 40 82 00 0C */ bne lbl_80289550
/* 80289548 00286488 57 E0 06 3F */ clrlwi. r0, r31, 0x18
/* 8028954C 0028648C 41 82 00 08 */ beq lbl_80289554
lbl_80289550:
/* 80289550 00286490 3B 40 00 01 */ li r26, 1
lbl_80289554:
/* 80289554 00286494 7F 5F D3 78 */ mr r31, r26
/* 80289558 00286498 80 19 00 30 */ lwz r0, 0x30(r25)
/* 8028955C 0028649C 7F DE 00 38 */ and r30, r30, r0
/* 80289560 002864A0 7F BD 03 78 */ or r29, r29, r0
lbl_80289564:
/* 80289564 002864A4 80 61 00 3C */ lwz r3, 0x3c(r1)
/* 80289568 002864A8 90 61 00 14 */ stw r3, 0x14(r1)
/* 8028956C 002864AC 80 01 00 38 */ lwz r0, 0x38(r1)
/* 80289570 002864B0 90 01 00 10 */ stw r0, 0x10(r1)
/* 80289574 002864B4 90 61 00 0C */ stw r3, 0xc(r1)
/* 80289578 002864B8 90 01 00 08 */ stw r0, 8(r1)
/* 8028957C 002864BC 7C 00 18 50 */ subf r0, r0, r3
/* 80289580 002864C0 7C 00 00 34 */ cntlzw r0, r0
/* 80289584 002864C4 54 00 DE 3F */ rlwinm. r0, r0, 0x1b, 0x18, 0x1f
/* 80289588 002864C8 41 82 FF 98 */ beq lbl_80289520
/* 8028958C 002864CC 57 A0 80 1E */ slwi r0, r29, 0x10
/* 80289590 002864D0 7F C0 03 78 */ or r0, r30, r0
/* 80289594 002864D4 90 1B 00 1C */ stw r0, 0x1c(r27)
/* 80289598 002864D8 7F E3 FB 78 */ mr r3, r31
/* 8028959C 002864DC 39 61 00 60 */ addi r11, r1, 0x60
/* 802895A0 002864E0 48 0D 8C 79 */ bl _restgpr_25
/* 802895A4 002864E4 80 01 00 64 */ lwz r0, 0x64(r1)
/* 802895A8 002864E8 7C 08 03 A6 */ mtlr r0
/* 802895AC 002864EC 38 21 00 60 */ addi r1, r1, 0x60
/* 802895B0 002864F0 4E 80 00 20 */ blr
@@ -0,0 +1,42 @@
/* 80289364 002862A4 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 80289368 002862A8 7C 08 02 A6 */ mflr r0
/* 8028936C 002862AC 90 01 00 54 */ stw r0, 0x54(r1)
/* 80289370 002862B0 80 C3 00 14 */ lwz r6, 0x14(r3)
/* 80289374 002862B4 90 C1 00 1C */ stw r6, 0x1c(r1)
/* 80289378 002862B8 90 C1 00 18 */ stw r6, 0x18(r1)
/* 8028937C 002862BC 90 C1 00 3C */ stw r6, 0x3c(r1)
/* 80289380 002862C0 38 03 00 14 */ addi r0, r3, 0x14
/* 80289384 002862C4 90 01 00 14 */ stw r0, 0x14(r1)
/* 80289388 002862C8 90 01 00 10 */ stw r0, 0x10(r1)
/* 8028938C 002862CC 90 01 00 38 */ stw r0, 0x38(r1)
/* 80289390 002862D0 90 81 00 40 */ stw r4, 0x40(r1)
/* 80289394 002862D4 90 A1 00 44 */ stw r5, 0x44(r1)
/* 80289398 002862D8 90 01 00 28 */ stw r0, 0x28(r1)
/* 8028939C 002862DC 90 C1 00 2C */ stw r6, 0x2c(r1)
/* 802893A0 002862E0 38 61 00 30 */ addi r3, r1, 0x30
/* 802893A4 002862E4 38 81 00 2C */ addi r4, r1, 0x2c
/* 802893A8 002862E8 38 A1 00 28 */ addi r5, r1, 0x28
/* 802893AC 002862EC 38 C1 00 40 */ addi r6, r1, 0x40
/* 802893B0 002862F0 48 00 05 79 */ bl std_NS_find_if_X2_
/* 802893B4 002862F4 80 61 00 30 */ lwz r3, 0x30(r1)
/* 802893B8 002862F8 90 61 00 34 */ stw r3, 0x34(r1)
/* 802893BC 002862FC 80 01 00 38 */ lwz r0, 0x38(r1)
/* 802893C0 00286300 90 01 00 24 */ stw r0, 0x24(r1)
/* 802893C4 00286304 90 61 00 20 */ stw r3, 0x20(r1)
/* 802893C8 00286308 90 01 00 0C */ stw r0, 0xc(r1)
/* 802893CC 0028630C 90 61 00 08 */ stw r3, 8(r1)
/* 802893D0 00286310 7C 03 00 50 */ subf r0, r3, r0
/* 802893D4 00286314 7C 00 00 34 */ cntlzw r0, r0
/* 802893D8 00286318 54 00 DE 3E */ rlwinm r0, r0, 0x1b, 0x18, 0x1f
/* 802893DC 0028631C 7C 00 00 34 */ cntlzw r0, r0
/* 802893E0 00286320 54 00 DE 3F */ rlwinm. r0, r0, 0x1b, 0x18, 0x1f
/* 802893E4 00286324 41 82 00 0C */ beq lbl_802893F0
/* 802893E8 00286328 38 63 FF F4 */ addi r3, r3, -12
/* 802893EC 0028632C 48 00 00 08 */ b lbl_802893F4
lbl_802893F0:
/* 802893F0 00286330 38 60 00 00 */ li r3, 0
lbl_802893F4:
/* 802893F4 00286334 80 01 00 54 */ lwz r0, 0x54(r1)
/* 802893F8 00286338 7C 08 03 A6 */ mtlr r0
/* 802893FC 0028633C 38 21 00 50 */ addi r1, r1, 0x50
/* 80289400 00286340 4E 80 00 20 */ blr
@@ -0,0 +1,21 @@
/* 8028978C 002866CC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80289790 002866D0 7C 08 02 A6 */ mflr r0
/* 80289794 002866D4 90 01 00 14 */ stw r0, 0x14(r1)
/* 80289798 002866D8 80 E4 00 00 */ lwz r7, 0(r4)
/* 8028979C 002866DC 90 E1 00 08 */ stw r7, 8(r1)
/* 802897A0 002866E0 80 07 00 00 */ lwz r0, 0(r7)
/* 802897A4 002866E4 7C 07 02 14 */ add r0, r7, r0
/* 802897A8 002866E8 90 04 00 00 */ stw r0, 0(r4)
/* 802897AC 002866EC 80 81 00 08 */ lwz r4, 8(r1)
/* 802897B0 002866F0 80 04 00 00 */ lwz r0, 0(r4)
/* 802897B4 002866F4 90 05 00 00 */ stw r0, 0(r5)
/* 802897B8 002866F8 38 81 00 08 */ addi r4, r1, 8
/* 802897BC 002866FC 7C C5 33 78 */ mr r5, r6
/* 802897C0 00286700 81 83 00 00 */ lwz r12, 0(r3)
/* 802897C4 00286704 81 8C 00 18 */ lwz r12, 0x18(r12)
/* 802897C8 00286708 7D 89 03 A6 */ mtctr r12
/* 802897CC 0028670C 4E 80 04 21 */ bctrl
/* 802897D0 00286710 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802897D4 00286714 7C 08 03 A6 */ mtlr r0
/* 802897D8 00286718 38 21 00 10 */ addi r1, r1, 0x10
/* 802897DC 0028671C 4E 80 00 20 */ blr
@@ -0,0 +1,56 @@
/* 802896C0 00286600 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802896C4 00286604 7C 08 02 A6 */ mflr r0
/* 802896C8 00286608 90 01 00 24 */ stw r0, 0x24(r1)
/* 802896CC 0028660C 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 802896D0 00286610 93 C1 00 18 */ stw r30, 0x18(r1)
/* 802896D4 00286614 7C 7E 1B 78 */ mr r30, r3
/* 802896D8 00286618 7C DF 33 78 */ mr r31, r6
/* 802896DC 0028661C 80 64 00 00 */ lwz r3, 0(r4)
/* 802896E0 00286620 90 61 00 08 */ stw r3, 8(r1)
/* 802896E4 00286624 38 03 00 20 */ addi r0, r3, 0x20
/* 802896E8 00286628 90 04 00 00 */ stw r0, 0(r4)
/* 802896EC 0028662C 80 61 00 08 */ lwz r3, 8(r1)
/* 802896F0 00286630 80 03 00 0C */ lwz r0, 0xc(r3)
/* 802896F4 00286634 90 05 00 00 */ stw r0, 0(r5)
/* 802896F8 00286638 80 61 00 08 */ lwz r3, 8(r1)
/* 802896FC 0028663C 38 82 BA D8 */ addi r4, r2, 0x804554D8 - 0x80459A00 /*SDA HACK; original: lbl_804554D8-_SDA2_BASE_*/
/* 80289700 00286640 38 A0 00 04 */ li r5, 4
/* 80289704 00286644 48 0D C9 89 */ bl func_8036608C
/* 80289708 00286648 2C 03 00 00 */ cmpwi r3, 0
/* 8028970C 0028664C 41 82 00 0C */ beq lbl_80289718
/* 80289710 00286650 38 60 00 00 */ li r3, 0
/* 80289714 00286654 48 00 00 60 */ b lbl_80289774
lbl_80289718:
/* 80289718 00286658 80 61 00 08 */ lwz r3, 8(r1)
/* 8028971C 0028665C A0 03 00 04 */ lhz r0, 4(r3)
/* 80289720 00286660 28 00 FE FF */ cmplwi r0, 0xfeff
/* 80289724 00286664 41 82 00 0C */ beq lbl_80289730
/* 80289728 00286668 38 60 00 00 */ li r3, 0
/* 8028972C 0028666C 48 00 00 48 */ b lbl_80289774
lbl_80289730:
/* 80289730 00286670 A0 03 00 06 */ lhz r0, 6(r3)
/* 80289734 00286674 28 00 00 01 */ cmplwi r0, 1
/* 80289738 00286678 40 80 00 0C */ bge lbl_80289744
/* 8028973C 0028667C 38 60 00 00 */ li r3, 0
/* 80289740 00286680 48 00 00 34 */ b lbl_80289774
lbl_80289744:
/* 80289744 00286684 54 00 04 3E */ clrlwi r0, r0, 0x10
/* 80289748 00286688 28 00 00 03 */ cmplwi r0, 3
/* 8028974C 0028668C 40 81 00 0C */ ble lbl_80289758
/* 80289750 00286690 38 60 00 00 */ li r3, 0
/* 80289754 00286694 48 00 00 20 */ b lbl_80289774
lbl_80289758:
/* 80289758 00286698 7F C3 F3 78 */ mr r3, r30
/* 8028975C 0028669C 38 81 00 08 */ addi r4, r1, 8
/* 80289760 002866A0 7F E5 FB 78 */ mr r5, r31
/* 80289764 002866A4 81 9E 00 00 */ lwz r12, 0(r30)
/* 80289768 002866A8 81 8C 00 14 */ lwz r12, 0x14(r12)
/* 8028976C 002866AC 7D 89 03 A6 */ mtctr r12
/* 80289770 002866B0 4E 80 04 21 */ bctrl
lbl_80289774:
/* 80289774 002866B4 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 80289778 002866B8 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 8028977C 002866BC 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80289780 002866C0 7C 08 03 A6 */ mtlr r0
/* 80289784 002866C4 38 21 00 20 */ addi r1, r1, 0x20
/* 80289788 002866C8 4E 80 00 20 */ blr
@@ -0,0 +1,66 @@
/* 80288F80 00285EC0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80288F84 00285EC4 7C 08 02 A6 */ mflr r0
/* 80288F88 00285EC8 90 01 00 14 */ stw r0, 0x14(r1)
/* 80288F8C 00285ECC 7C A8 2B 78 */ mr r8, r5
/* 80288F90 00285ED0 7C C7 33 78 */ mr r7, r6
/* 80288F94 00285ED4 2C 04 00 80 */ cmpwi r4, 0x80
/* 80288F98 00285ED8 41 82 00 70 */ beq lbl_80289008
/* 80288F9C 00285EDC 40 80 00 28 */ bge lbl_80288FC4
/* 80288FA0 00285EE0 2C 04 00 02 */ cmpwi r4, 2
/* 80288FA4 00285EE4 41 82 00 44 */ beq lbl_80288FE8
/* 80288FA8 00285EE8 40 80 00 10 */ bge lbl_80288FB8
/* 80288FAC 00285EEC 2C 04 00 01 */ cmpwi r4, 1
/* 80288FB0 00285EF0 40 80 00 24 */ bge lbl_80288FD4
/* 80288FB4 00285EF4 48 00 00 A4 */ b lbl_80289058
lbl_80288FB8:
/* 80288FB8 00285EF8 2C 04 00 04 */ cmpwi r4, 4
/* 80288FBC 00285EFC 40 80 00 9C */ bge lbl_80289058
/* 80288FC0 00285F00 48 00 00 34 */ b lbl_80288FF4
lbl_80288FC4:
/* 80288FC4 00285F04 2C 04 00 82 */ cmpwi r4, 0x82
/* 80288FC8 00285F08 41 82 00 90 */ beq lbl_80289058
/* 80288FCC 00285F0C 40 80 00 8C */ bge lbl_80289058
/* 80288FD0 00285F10 48 00 00 58 */ b lbl_80289028
lbl_80288FD4:
/* 80288FD4 00285F14 80 08 00 00 */ lwz r0, 0(r8)
/* 80288FD8 00285F18 54 04 86 3E */ rlwinm r4, r0, 0x10, 0x18, 0x1f
/* 80288FDC 00285F1C 54 05 04 3E */ clrlwi r5, r0, 0x10
/* 80288FE0 00285F20 4B FF FB 99 */ bl setFlag_operation__Q37JStudio3stb7TObjectFUci
/* 80288FE4 00285F24 48 00 00 74 */ b lbl_80289058
lbl_80288FE8:
/* 80288FE8 00285F28 80 08 00 00 */ lwz r0, 0(r8)
/* 80288FEC 00285F2C 90 03 00 2C */ stw r0, 0x2c(r3)
/* 80288FF0 00285F30 48 00 00 68 */ b lbl_80289058
lbl_80288FF4:
/* 80288FF4 00285F34 80 83 00 24 */ lwz r4, 0x24(r3)
/* 80288FF8 00285F38 80 08 00 00 */ lwz r0, 0(r8)
/* 80288FFC 00285F3C 7C 04 02 14 */ add r0, r4, r0
/* 80289000 00285F40 90 03 00 28 */ stw r0, 0x28(r3)
/* 80289004 00285F44 48 00 00 54 */ b lbl_80289058
lbl_80289008:
/* 80289008 00285F48 38 80 00 00 */ li r4, 0
/* 8028900C 00285F4C 38 A0 00 00 */ li r5, 0
/* 80289010 00285F50 7D 06 43 78 */ mr r6, r8
/* 80289014 00285F54 81 83 00 08 */ lwz r12, 8(r3)
/* 80289018 00285F58 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 8028901C 00285F5C 7D 89 03 A6 */ mtctr r12
/* 80289020 00285F60 4E 80 04 21 */ bctrl
/* 80289024 00285F64 48 00 00 34 */ b lbl_80289058
lbl_80289028:
/* 80289028 00285F68 A0 A8 00 02 */ lhz r5, 2(r8)
/* 8028902C 00285F6C 38 05 00 03 */ addi r0, r5, 3
/* 80289030 00285F70 54 04 00 3A */ rlwinm r4, r0, 0, 0, 0x1d
/* 80289034 00285F74 38 C4 00 04 */ addi r6, r4, 4
/* 80289038 00285F78 7C C8 32 14 */ add r6, r8, r6
/* 8028903C 00285F7C 38 88 00 04 */ addi r4, r8, 4
/* 80289040 00285F80 7C 08 30 50 */ subf r0, r8, r6
/* 80289044 00285F84 7C E0 38 50 */ subf r7, r0, r7
/* 80289048 00285F88 81 83 00 08 */ lwz r12, 8(r3)
/* 8028904C 00285F8C 81 8C 00 1C */ lwz r12, 0x1c(r12)
/* 80289050 00285F90 7D 89 03 A6 */ mtctr r12
/* 80289054 00285F94 4E 80 04 21 */ bctrl
lbl_80289058:
/* 80289058 00285F98 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8028905C 00285F9C 7C 08 03 A6 */ mtlr r0
/* 80289060 00285FA0 38 21 00 10 */ addi r1, r1, 0x10
/* 80289064 00285FA4 4E 80 00 20 */ blr
@@ -0,0 +1,98 @@
/* 80288E2C 00285D6C 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 80288E30 00285D70 7C 08 02 A6 */ mflr r0
/* 80288E34 00285D74 90 01 00 44 */ stw r0, 0x44(r1)
/* 80288E38 00285D78 93 E1 00 3C */ stw r31, 0x3c(r1)
/* 80288E3C 00285D7C 93 C1 00 38 */ stw r30, 0x38(r1)
/* 80288E40 00285D80 7C 7F 1B 78 */ mr r31, r3
/* 80288E44 00285D84 80 03 00 24 */ lwz r0, 0x24(r3)
/* 80288E48 00285D88 90 01 00 0C */ stw r0, 0xc(r1)
/* 80288E4C 00285D8C 38 61 00 0C */ addi r3, r1, 0xc
/* 80288E50 00285D90 38 81 00 20 */ addi r4, r1, 0x20
/* 80288E54 00285D94 48 00 0B 69 */ bl JStudio_NS_stb_NS_data_NS_TParse_TSequence_NS_getData
/* 80288E58 00285D98 88 01 00 20 */ lbz r0, 0x20(r1)
/* 80288E5C 00285D9C 80 A1 00 24 */ lwz r5, 0x24(r1)
/* 80288E60 00285DA0 80 61 00 28 */ lwz r3, 0x28(r1)
/* 80288E64 00285DA4 83 C1 00 2C */ lwz r30, 0x2c(r1)
/* 80288E68 00285DA8 93 DF 00 28 */ stw r30, 0x28(r31)
/* 80288E6C 00285DAC 2C 00 00 03 */ cmpwi r0, 3
/* 80288E70 00285DB0 41 82 00 4C */ beq lbl_80288EBC
/* 80288E74 00285DB4 40 80 00 14 */ bge lbl_80288E88
/* 80288E78 00285DB8 2C 00 00 01 */ cmpwi r0, 1
/* 80288E7C 00285DBC 41 82 00 24 */ beq lbl_80288EA0
/* 80288E80 00285DC0 40 80 00 34 */ bge lbl_80288EB4
/* 80288E84 00285DC4 48 00 00 E4 */ b lbl_80288F68
lbl_80288E88:
/* 80288E88 00285DC8 2C 00 00 80 */ cmpwi r0, 0x80
/* 80288E8C 00285DCC 41 82 00 78 */ beq lbl_80288F04
/* 80288E90 00285DD0 40 80 00 D8 */ bge lbl_80288F68
/* 80288E94 00285DD4 2C 00 00 05 */ cmpwi r0, 5
/* 80288E98 00285DD8 40 80 00 D0 */ bge lbl_80288F68
/* 80288E9C 00285DDC 48 00 00 44 */ b lbl_80288EE0
lbl_80288EA0:
/* 80288EA0 00285DE0 7F E3 FB 78 */ mr r3, r31
/* 80288EA4 00285DE4 54 A4 86 3E */ rlwinm r4, r5, 0x10, 0x18, 0x1f
/* 80288EA8 00285DE8 54 A5 04 3E */ clrlwi r5, r5, 0x10
/* 80288EAC 00285DEC 4B FF FC CD */ bl setFlag_operation__Q37JStudio3stb7TObjectFUci
/* 80288EB0 00285DF0 48 00 00 B8 */ b lbl_80288F68
lbl_80288EB4:
/* 80288EB4 00285DF4 90 BF 00 2C */ stw r5, 0x2c(r31)
/* 80288EB8 00285DF8 48 00 00 B0 */ b lbl_80288F68
lbl_80288EBC:
/* 80288EBC 00285DFC 7C A3 2B 78 */ mr r3, r5
/* 80288EC0 00285E00 54 A0 02 11 */ rlwinm. r0, r5, 0, 8, 8
/* 80288EC4 00285E04 41 82 00 0C */ beq lbl_80288ED0
/* 80288EC8 00285E08 80 02 BA D0 */ lwz r0, lbl_804554D0-_SDA2_BASE_(r2)
/* 80288ECC 00285E0C 7C A3 03 78 */ or r3, r5, r0
lbl_80288ED0:
/* 80288ED0 00285E10 80 1F 00 24 */ lwz r0, 0x24(r31)
/* 80288ED4 00285E14 7C 00 1A 14 */ add r0, r0, r3
/* 80288ED8 00285E18 90 1F 00 28 */ stw r0, 0x28(r31)
/* 80288EDC 00285E1C 48 00 00 8C */ b lbl_80288F68
lbl_80288EE0:
/* 80288EE0 00285E20 7C A3 2B 78 */ mr r3, r5
/* 80288EE4 00285E24 54 A0 02 11 */ rlwinm. r0, r5, 0, 8, 8
/* 80288EE8 00285E28 41 82 00 0C */ beq lbl_80288EF4
/* 80288EEC 00285E2C 80 02 BA D0 */ lwz r0, lbl_804554D0-_SDA2_BASE_(r2)
/* 80288EF0 00285E30 7C A3 03 78 */ or r3, r5, r0
lbl_80288EF4:
/* 80288EF4 00285E34 80 1F 00 20 */ lwz r0, 0x20(r31)
/* 80288EF8 00285E38 7C 00 1A 14 */ add r0, r0, r3
/* 80288EFC 00285E3C 90 1F 00 20 */ stw r0, 0x20(r31)
/* 80288F00 00285E40 48 00 00 68 */ b lbl_80288F68
lbl_80288F04:
/* 80288F04 00285E44 38 00 00 00 */ li r0, 0
/* 80288F08 00285E48 90 01 00 08 */ stw r0, 8(r1)
/* 80288F0C 00285E4C 48 00 00 54 */ b lbl_80288F60
lbl_80288F10:
/* 80288F10 00285E50 90 61 00 08 */ stw r3, 8(r1)
/* 80288F14 00285E54 38 61 00 08 */ addi r3, r1, 8
/* 80288F18 00285E58 38 81 00 10 */ addi r4, r1, 0x10
/* 80288F1C 00285E5C 48 00 0A ED */ bl JStudio_NS_stb_NS_data_NS_TParse_TParagraph_NS_getData
/* 80288F20 00285E60 80 81 00 10 */ lwz r4, 0x10(r1)
/* 80288F24 00285E64 28 04 00 FF */ cmplwi r4, 0xff
/* 80288F28 00285E68 41 81 00 18 */ bgt lbl_80288F40
/* 80288F2C 00285E6C 7F E3 FB 78 */ mr r3, r31
/* 80288F30 00285E70 80 A1 00 18 */ lwz r5, 0x18(r1)
/* 80288F34 00285E74 80 C1 00 14 */ lwz r6, 0x14(r1)
/* 80288F38 00285E78 48 00 00 49 */ bl process_paragraph_reserved___Q37JStudio3stb7TObjectFUlPCvUl
/* 80288F3C 00285E7C 48 00 00 20 */ b lbl_80288F5C
lbl_80288F40:
/* 80288F40 00285E80 7F E3 FB 78 */ mr r3, r31
/* 80288F44 00285E84 80 A1 00 18 */ lwz r5, 0x18(r1)
/* 80288F48 00285E88 80 C1 00 14 */ lwz r6, 0x14(r1)
/* 80288F4C 00285E8C 81 9F 00 08 */ lwz r12, 8(r31)
/* 80288F50 00285E90 81 8C 00 14 */ lwz r12, 0x14(r12)
/* 80288F54 00285E94 7D 89 03 A6 */ mtctr r12
/* 80288F58 00285E98 4E 80 04 21 */ bctrl
lbl_80288F5C:
/* 80288F5C 00285E9C 80 61 00 1C */ lwz r3, 0x1c(r1)
lbl_80288F60:
/* 80288F60 00285EA0 7C 03 F0 40 */ cmplw r3, r30
/* 80288F64 00285EA4 41 80 FF AC */ blt lbl_80288F10
lbl_80288F68:
/* 80288F68 00285EA8 83 E1 00 3C */ lwz r31, 0x3c(r1)
/* 80288F6C 00285EAC 83 C1 00 38 */ lwz r30, 0x38(r1)
/* 80288F70 00285EB0 80 01 00 44 */ lwz r0, 0x44(r1)
/* 80288F74 00285EB4 7C 08 03 A6 */ mtlr r0
/* 80288F78 00285EB8 38 21 00 40 */ addi r1, r1, 0x40
/* 80288F7C 00285EBC 4E 80 00 20 */ blr
@@ -0,0 +1,14 @@
/* 80289278 002861B8 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8028927C 002861BC 7C 08 02 A6 */ mflr r0
/* 80289280 002861C0 90 01 00 14 */ stw r0, 0x14(r1)
/* 80289284 002861C4 7C 66 1B 78 */ mr r6, r3
/* 80289288 002861C8 38 00 00 00 */ li r0, 0
/* 8028928C 002861CC 90 04 00 14 */ stw r0, 0x14(r4)
/* 80289290 002861D0 38 A4 00 0C */ addi r5, r4, 0xc
/* 80289294 002861D4 38 61 00 08 */ addi r3, r1, 8
/* 80289298 002861D8 38 86 00 10 */ addi r4, r6, 0x10
/* 8028929C 002861DC 48 05 39 39 */ bl JGadget_NS_TNodeLinkList_NS_Erase
/* 802892A0 002861E0 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802892A4 002861E4 7C 08 03 A6 */ mtlr r0
/* 802892A8 002861E8 38 21 00 10 */ addi r1, r1, 0x10
/* 802892AC 002861EC 4E 80 00 20 */ blr
@@ -0,0 +1,46 @@
/* 80289404 00286344 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 80289408 00286348 7C 08 02 A6 */ mflr r0
/* 8028940C 0028634C 90 01 00 54 */ stw r0, 0x54(r1)
/* 80289410 00286350 93 E1 00 4C */ stw r31, 0x4c(r1)
/* 80289414 00286354 7C 7F 1B 78 */ mr r31, r3
/* 80289418 00286358 38 00 00 00 */ li r0, 0
/* 8028941C 0028635C 90 03 00 1C */ stw r0, 0x1c(r3)
/* 80289420 00286360 38 7F 00 20 */ addi r3, r31, 0x20
/* 80289424 00286364 38 80 00 00 */ li r4, 0
/* 80289428 00286368 4B FF F7 A9 */ bl reset__Q37JStudio3stb7TObjectFPCv
/* 8028942C 0028636C 38 1F 00 14 */ addi r0, r31, 0x14
/* 80289430 00286370 90 01 00 24 */ stw r0, 0x24(r1)
/* 80289434 00286374 90 01 00 20 */ stw r0, 0x20(r1)
/* 80289438 00286378 90 01 00 34 */ stw r0, 0x34(r1)
/* 8028943C 0028637C 90 01 00 30 */ stw r0, 0x30(r1)
/* 80289440 00286380 80 7F 00 14 */ lwz r3, 0x14(r31)
/* 80289444 00286384 90 61 00 1C */ stw r3, 0x1c(r1)
/* 80289448 00286388 90 61 00 18 */ stw r3, 0x18(r1)
/* 8028944C 0028638C 90 61 00 2C */ stw r3, 0x2c(r1)
/* 80289450 00286390 90 61 00 28 */ stw r3, 0x28(r1)
/* 80289454 00286394 90 61 00 38 */ stw r3, 0x38(r1)
/* 80289458 00286398 90 01 00 3C */ stw r0, 0x3c(r1)
/* 8028945C 0028639C 48 00 00 1C */ b lbl_80289478
lbl_80289460:
/* 80289460 002863A0 80 81 00 38 */ lwz r4, 0x38(r1)
/* 80289464 002863A4 38 64 FF F4 */ addi r3, r4, -12
/* 80289468 002863A8 80 04 00 00 */ lwz r0, 0(r4)
/* 8028946C 002863AC 90 01 00 38 */ stw r0, 0x38(r1)
/* 80289470 002863B0 38 80 00 00 */ li r4, 0
/* 80289474 002863B4 4B FF F7 5D */ bl reset__Q37JStudio3stb7TObjectFPCv
lbl_80289478:
/* 80289478 002863B8 80 61 00 3C */ lwz r3, 0x3c(r1)
/* 8028947C 002863BC 90 61 00 14 */ stw r3, 0x14(r1)
/* 80289480 002863C0 80 01 00 38 */ lwz r0, 0x38(r1)
/* 80289484 002863C4 90 01 00 10 */ stw r0, 0x10(r1)
/* 80289488 002863C8 90 61 00 0C */ stw r3, 0xc(r1)
/* 8028948C 002863CC 90 01 00 08 */ stw r0, 8(r1)
/* 80289490 002863D0 7C 00 18 50 */ subf r0, r0, r3
/* 80289494 002863D4 7C 00 00 34 */ cntlzw r0, r0
/* 80289498 002863D8 54 00 DE 3F */ rlwinm. r0, r0, 0x1b, 0x18, 0x1f
/* 8028949C 002863DC 41 82 FF C4 */ beq lbl_80289460
/* 802894A0 002863E0 83 E1 00 4C */ lwz r31, 0x4c(r1)
/* 802894A4 002863E4 80 01 00 54 */ lwz r0, 0x54(r1)
/* 802894A8 002863E8 7C 08 03 A6 */ mtlr r0
/* 802894AC 002863EC 38 21 00 50 */ addi r1, r1, 0x50
/* 802894B0 002863F0 4E 80 00 20 */ blr
@@ -0,0 +1,40 @@
/* 80289928 00286868 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 8028992C 0028686C 7C 08 02 A6 */ mflr r0
/* 80289930 00286870 90 01 00 34 */ stw r0, 0x34(r1)
/* 80289934 00286874 39 61 00 30 */ addi r11, r1, 0x30
/* 80289938 00286878 48 0D 88 A1 */ bl _savegpr_28
/* 8028993C 0028687C 7C 7C 1B 78 */ mr r28, r3
/* 80289940 00286880 7C 9D 23 78 */ mr r29, r4
/* 80289944 00286884 7C BE 2B 78 */ mr r30, r5
/* 80289948 00286888 7C DF 33 78 */ mr r31, r6
/* 8028994C 0028688C 48 00 00 10 */ b lbl_8028995C
lbl_80289950:
/* 80289950 00286890 80 7D 00 00 */ lwz r3, 0(r29)
/* 80289954 00286894 80 03 00 00 */ lwz r0, 0(r3)
/* 80289958 00286898 90 1D 00 00 */ stw r0, 0(r29)
lbl_8028995C:
/* 8028995C 0028689C 80 7E 00 00 */ lwz r3, 0(r30)
/* 80289960 002868A0 90 61 00 14 */ stw r3, 0x14(r1)
/* 80289964 002868A4 80 1D 00 00 */ lwz r0, 0(r29)
/* 80289968 002868A8 90 01 00 10 */ stw r0, 0x10(r1)
/* 8028996C 002868AC 90 61 00 0C */ stw r3, 0xc(r1)
/* 80289970 002868B0 90 01 00 08 */ stw r0, 8(r1)
/* 80289974 002868B4 7C 00 18 50 */ subf r0, r0, r3
/* 80289978 002868B8 7C 00 00 34 */ cntlzw r0, r0
/* 8028997C 002868BC 54 00 DE 3F */ rlwinm. r0, r0, 0x1b, 0x18, 0x1f
/* 80289980 002868C0 40 82 00 1C */ bne lbl_8028999C
/* 80289984 002868C4 80 7D 00 00 */ lwz r3, 0(r29)
/* 80289988 002868C8 38 63 FF F4 */ addi r3, r3, -12
/* 8028998C 002868CC 7F E4 FB 78 */ mr r4, r31
/* 80289990 002868D0 4B FF EF F9 */ bl JStudio_NS_object_NS_TIDData_NS_isEqual
/* 80289994 002868D4 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 80289998 002868D8 41 82 FF B8 */ beq lbl_80289950
lbl_8028999C:
/* 8028999C 002868DC 80 1D 00 00 */ lwz r0, 0(r29)
/* 802899A0 002868E0 90 1C 00 00 */ stw r0, 0(r28)
/* 802899A4 002868E4 39 61 00 30 */ addi r11, r1, 0x30
/* 802899A8 002868E8 48 0D 88 7D */ bl _restgpr_28
/* 802899AC 002868EC 80 01 00 34 */ lwz r0, 0x34(r1)
/* 802899B0 002868F0 7C 08 03 A6 */ mtlr r0
/* 802899B4 002868F4 38 21 00 30 */ addi r1, r1, 0x30
/* 802899B8 002868F8 4E 80 00 20 */ blr
+247
View File
@@ -0,0 +1,247 @@
#ifndef JSYSTEM_OBJECTID_H
#define JSYSTEM_OBJECTID_H
#include "JSystem/JGadget/binary.h"
#include "JSystem/JGadget/linklist.h"
#include "global.h"
using namespace JGadget::binary;
namespace JStudio {
namespace stb {
class TControl;
static const int STATUS_STILL = 0;
static const int STATUS_UNK1 = 1;
static const int STATUS_WAIT = 2;
static const int STATUS_SUSPEND = 4;
static const int STATUS_INACTIVE = 8;
namespace data {
static const int BLOCK_SOUND = 'JSND';
static const int BLOCK_ACTOR = 'JACT';
static const int BLOCK_AMBIENTLIGHT = 'JABL';
static const int BLOCK_CAMERA = 'JCMR';
static const int BLOCK_FOG = 'JFOG';
static const int BLOCK_LIGHT = 'JLIT';
static const int BLOCK_MESSAGE = 'JMSG';
static const int BLOCK_PARTICLE = 'JPTC';
static const int BLOCK_NONE = -1;
struct THeader {
struct Target {
/* 0x00 */ char name[8]; // "jstudio"
/* 0x08 */ u16 _8[3];
/* 0x0e */ u16 target_version; // 0-1 = obselete, 2-7 = OK
};
/* 0x00 */ char signature[4];
/* 0x04 */ u16 byte_order;
/* 0x06 */ u16 version;
/* 0x08 */ u32 _8;
/* 0x0c */ u32 block_number;
/* 0x10 */ Target target;
/* 0x20 */ u8 content;
};
struct TBlock {
/* 0x0 */ u32 size;
/* 0x4 */ u32 type; // actually a char[4] - JMSG, JSND, JACT, ...
};
struct TBlock_object : TBlock {
/* 0x8 */ u16 flag;
/* 0xa */ u16 id_size;
/* 0xc */ u8 id[0]; // unique identifier
///* ??? */ u8 content[0];
};
// Parses a THeader
struct TParse_THeader : TParseData_aligned<4> {
TParse_THeader(const void* p) : TParseData_aligned<4>(p) {}
// inlines
const THeader* get() const { return (THeader*)getRaw(); }
const void* getContent() const { return &((THeader*)getRaw())->content; }
const char* get_signature() const { return get()->signature; }
u16 get_byteOrder() const { return get()->byte_order; }
u16 get_version() const { return get()->version; }
u32 get_blockNumber() const { return get()->block_number; }
};
struct TParse_TBlock : public TParseData_aligned<4> {
TParse_TBlock(const void* content) : TParseData_aligned<4>(content) {}
const TBlock* get() const { return (TBlock*)getRaw(); }
u32 get_size() const { return get()->size; }
u32 get_type() const { return get()->type; }
};
// Parses a TObject ("demo object")
struct TParse_TBlock_object : public TParse_TBlock {
TParse_TBlock_object(const void* content) : TParse_TBlock(content) {}
const TBlock_object* get() const { return (TBlock_object*)getRaw(); }
const void* getContent() const { // id is arbitrary size
return ((TBlock_object*)getRaw())->id + align_roundUp(get_IDSize(), 4);
}
u16 get_flag() const { return get()->flag; }
u16 get_IDSize() const { return get()->id_size; }
const void* get_ID() const { return get()->id; }
};
struct TParse_TParagraph_dataID : public TParseData_aligned<4> {
TParse_TParagraph_dataID(const void* pContent) : TParseData_aligned<4>(pContent) {}
};
} // namespace data
// Delegates handling of STB file blocks
class TParse : public TParse_header_block {
public:
TParse(TControl* control);
virtual ~TParse();
// virtuals
virtual int parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg3);
virtual int parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg3);
virtual int parseHeader(const data::TParse_THeader& header, u32 arg2);
virtual bool parseBlock_block(const data::TParse_TBlock& referBlock, u32 arg2);
virtual bool parseBlock_object(const data::TParse_TBlock_object& referObject, u32 arg2);
// inlines
TControl* getControl() const { return pControl; }
private:
TControl* pControl;
};
struct TIDData {
TIDData(const void* arg1, u32 arg2) : _0(arg1), _4(arg2) {}
const void* _0;
u32 _4;
};
struct TObject_ID : public TIDData {
TObject_ID(const void* arg1, u32 arg2) : TIDData(arg1, arg2) {}
};
class TObject : public TObject_ID {
public:
TObject(u32 arg1, const void* arg2, u32 arg3);
explicit TObject(const data::TParse_TBlock_object& object);
virtual ~TObject();
// virtuals
virtual void do_begin();
virtual void do_end();
virtual void do_paragraph(u32 arg1, const void* arg2, u32 arg3);
virtual void do_wait(u32 arg1);
virtual void do_data(const void* arg1, u32 arg2, const void* arg3, u32 arg4);
void on_begin() { do_begin(); }
void on_end() { do_end(); }
void on_paragraph(u32 arg1, const void* arg2, u32 arg3) { do_paragraph(arg1, arg2, arg3); }
void on_wait(u32 arg1) { do_wait(arg1); }
void on_data(const void* arg1, u32 arg2, const void* arg3, u32 arg4) {
do_data(arg1, arg2, arg3, arg4);
}
// member functions
void setFlag_operation(u8 op, int val);
void reset(const void* arg1);
int forward(u32 arg1);
void process_sequence_();
void process_paragraph_reserved_(u32 arg1, const void* pContent, u32 arg3);
// inlines
TControl* getControl() const { return pControl; }
void setControl(TControl* control) { pControl = control; }
int getSuspend() const { return _20; }
bool isSuspended() const { return getSuspend() == 0; }
const void* getSequence() const { return _24; }
void setSequence_(const void* arg1) { _24 = arg1; }
const void* getSequence_offset(s32 i_no) const { return &((u32*)getSequence())[i_no]; }
const void* getSequence_next() const { return _28; }
void setSequence_next(const void* seq) { _24 = seq; }
u32 getWait() const { return u32Wait_; }
void setWait(u32 wait) { u32Wait_ = wait; }
u32 getStatus() const { return mStatus; }
void setStatus_(u32 status) { mStatus = status; }
private:
/* 0x10 */ JGadget::TLinkListNode mNode;
/* 0x14 */ TControl* pControl;
/* 0x18 */ u32 _18;
/* 0x1c */ u16 mFlag;
/* 0x1e */ u8 bSequence_;
/* 0x20 */ u32 _20; // "second per frame"?
/* 0x24 */ const void* _24;
/* 0x28 */ const void* _28;
/* 0x2c */ u32 u32Wait_;
/* 0x30 */ u32 mStatus;
};
// Creates and deletes TObjects from parsed input
class TFactory {
public:
TFactory();
virtual ~TFactory();
virtual TObject* create(const data::TParse_TBlock_object& p);
virtual void destroy(TObject* p);
};
class TObject_control : public TObject {
public:
TObject_control(const void* arg1, u32 arg2);
~TObject_control() {}
};
// Manages TObjects
class TControl {
public:
TControl();
virtual ~TControl();
// member functions
TObject* getObject(const void* arg1, u32 arg2);
void appendObject(TObject* p);
void removeObject(TObject* p);
void destroyObject(TObject* p);
void destroyObject_all();
void reset();
void forward(u32 arg1);
// inlines
void setStatus_(u32 status) { mStatus = status; }
void resetStatus_() { setStatus_(0); }
bool isSuspended() const { return _54 == 0; }
TFactory* getFactory() const { return pFactory; }
TObject_control& referObject_control() { return mObject_control; }
private:
/* 0x04 */ u32 _4;
/* 0x08 */ u32 _8;
/* 0x0c */ TFactory* pFactory;
/* 0x10 */ JGadget::TLinkList<TObject, 0, 2> mObjectContainer;
/* 0x1c */ u32 mStatus;
/* 0x20 */ TObject_control mObject_control;
/* 0x54 */ u32 _54; // "second per frame"?
};
} // namespace stb
} // namespace JStudio
#endif
+37 -35
View File
@@ -2,61 +2,63 @@
#define JSYSTEM_JUTILITY_JUTFONT_H
#include "global.h"
#include "gx/GX.h"
static const unsigned int CLR_WHITE = 0xFFFFFFFF;
static const unsigned int CLR_BLACK = 0;
namespace JUtility {
typedef const char* ResFONT;
struct TColor {
TColor() { *(u32*)&r = 0xFFFFFFFF; }
struct TColor : _GXColor {
TColor() { set(-1); }
TColor(u32 raw) { *(u32*)&r = raw; }
u32 Raw() { return *(u32*)&r; }
void set(u32 col) { *(u32*)&r = col; }
u8 r;
u8 g;
u8 b;
u8 a;
u32 toUInt32() const { return *(u32*)&r; }
operator u32() const { return toUInt32(); }
void operator=(const TColor& rhs) { ((_GXColor*)this)->operator=(rhs); }
};
} // namespace JUtility
class JUTFont {
public:
JUTFont();
virtual ~JUTFont();
virtual ~JUTFont() {}
struct TWidth {};
virtual void setGX() = 0;
virtual void setGX(TColor col1, TColor col2);
/* 0x0c */ virtual void setGX() = 0;
/* 0x10 */ virtual void setGX(JUtility::TColor col1, JUtility::TColor col2);
/* 0x14 */ virtual f32 drawChar_scale(f32 a1, f32 a2, f32 a3, f32 a4, int a5, bool a6) = 0;
/* 0x18 */ virtual u16 getLeading() const = 0;
/* 0x1c */ virtual u16 getAscent() const = 0;
/* 0x20 */ virtual u16 getDescent() const = 0;
/* 0x24 */ virtual u32 getHeight() const = 0;
/* 0x28 */ virtual u32 getWidth() const = 0;
/* 0x2c */ virtual void getWidthEntry(int i_no, TWidth* width) const;
/* 0x30 */ virtual u32 getCellWidth() const;
/* 0x34 */ virtual u32 getCellHeight() const;
/* 0x38 */ virtual u32 getFontType() const = 0;
/* 0x3c */ virtual void getResFont() const = 0;
/* 0x40 */ virtual bool isLeadByte(int a1) const = 0;
virtual void drawChar_scale(float a1, float a2, float a3, float a4, int a5, bool a6);
virtual u16 getLeading() = 0;
virtual u16 getAscent() = 0;
virtual u16 getDescent() = 0;
virtual u32 getHeight() = 0;
virtual u32 getWidth() = 0;
virtual void getWidthEntry(s32 i_no, TWidth* width);
virtual u32 getCellWidth();
virtual u32 getCellHeight();
virtual u32 getFontType() = 0;
virtual TColor getResFont() = 0;
virtual bool isLeadByte(s32 a1) = 0;
static bool isLeadByte_1Byte(int b);
static bool isLeadByte_2Byte(int b);
static bool isLeadByte_ShiftJIS(int b);
void initialize_state();
void setCharColor(TColor col1);
void setGradColor(TColor col1, TColor col2);
float drawString_size_scale(float a1, float a2, float a3, float a4, char* a5, unsigned long usz,
bool a7);
void setCharColor(JUtility::TColor col1);
void setGradColor(JUtility::TColor col1, JUtility::TColor col2);
f32 drawString_size_scale(f32 a1, f32 a2, f32 a3, f32 a4, const char* a5, u32 usz, bool a7);
bool unk4;
u8 unk4;
bool unk5;
int unk8;
TColor mColor1;
TColor mColor2;
TColor mColor3;
TColor mColor4;
JUtility::TColor mColor1;
JUtility::TColor mColor2;
JUtility::TColor mColor3;
JUtility::TColor mColor4;
int unk1C;
};
+48 -30
View File
@@ -4,54 +4,72 @@
#include "JSystem/JKernel/JKRHeap/JKRHeap.h"
#include "JSystem/JUtility/JUTFont/JUTFont.h"
// todo: move
inline u8 JSUHiByte(u16 i) {
return i >> 8;
}
inline u8 JSULoByte(u16 i) {
return i & 0xff;
}
struct ResFONT {};
class JUTResFont : JUTFont {
public:
JUTResFont();
JUTResFont(ResFONT font, JKRHeap* heap);
JUTResFont(const ResFONT* font, JKRHeap* heap);
~JUTResFont();
struct Unknown {
struct Unknown2 {
struct Cell {
u32 filler0;
u32 filler4;
u32 filler8;
u16 unkC;
u16 unkE;
u16 width;
u16 height;
};
Unknown2* unk0;
Cell* cell;
};
virtual void setGX();
virtual void setGX(TColor col1, TColor col2);
virtual void drawChar_scale(float a1, float a2, float a3, float a4, int a5, bool a6);
virtual void getWidthEntry(s32 i_no, TWidth* width);
virtual u32 getCellWidth();
virtual u32 getCellHeight();
virtual bool isLeadByte(s32 a1);
// virtuals
/* 0x0c */ virtual void setGX();
/* 0x10 */ virtual void setGX(JUtility::TColor col1, JUtility::TColor col2);
/* 0x14 */ virtual f32 drawChar_scale(f32 a1, f32 a2, f32 a3, f32 a4, int a5, bool a6);
virtual void loadImage(s32 a1, u32 a2);
virtual void setBlock();
/* 0x2c */ virtual void getWidthEntry(int i_no, TWidth* width) const;
/* 0x30 */ virtual u32 getCellWidth() const;
/* 0x34 */ virtual u32 getCellHeight() const;
/* 0x40 */ virtual bool isLeadByte(int a1) const;
/* 0x44 */ virtual void loadImage(int a1, GXTexMapID a2);
/* 0x48 */ virtual void setBlock();
// inlines
void delete_and_initialize() {
deleteMemBlocks_ResFont();
initialize_state();
}
// member functions
void deleteMemBlocks_ResFont();
void initialize_state();
bool initiate(ResFONT font, JKRHeap* heap);
bool protected_initiate(ResFONT font, JKRHeap* heap);
bool initiate(const ResFONT* font, JKRHeap* heap);
bool protected_initiate(const ResFONT* font, JKRHeap* heap);
u32 countBlock();
void loadFont(s32 a1, u32 a2, TWidth* a3);
u32 getFontCode(s32 a1);
s32 convertSjis(s32 a1, u16* a2);
void loadFont(int a1, GXTexMapID a2, TWidth* a3);
int getFontCode(int a1) const;
u32 convertSjis(int a1, u16* a2) const;
u32 unk20;
u8 filler24[0x20];
u32 unk44;
u32 unk48;
u32 filler4C;
JKRHeap* unk50;
u32 unk54;
Unknown* unk58;
u32 unk5C;
u8 filler60[0xC];
bool (**unk6C)(s32 a1);
/* 0x20 */ u32 unk20;
/* 0x24 */ u8 filler24[0x20];
/* 0x44 */ u32 unk44;
/* 0x48 */ const ResFONT* pFontFile;
/* 0x4c */ u32 filler4C;
/* 0x50 */ JKRHeap* pMemBlocks;
/* 0x54 */ u32 unk54;
/* 0x58 */ Unknown* unk58;
/* 0x5c */ u32 unk5C;
/* 0x60 */ u16 mBlockCounts[6];
/* 0x6c */ bool (**unk6C)(int a1);
};
#endif // JSYSTEM_JUTILITY_JUT_RES_FONT
@@ -23,7 +23,7 @@
/* 802DF81C 002DC75C 7C BB 2B 78 */ mr r27, r5
/* 802DF820 002DC760 38 A0 00 00 */ li r5, 0
/* 802DF824 002DC764 38 C1 00 08 */ addi r6, r1, 8
/* 802DF828 002DC768 48 00 03 C1 */ bl loadFont__10JUTResFontFlUlPQ27JUTFont6TWidth
/* 802DF828 002DC768 48 00 03 C1 */ bl loadFont__10JUTResFontFi11_GXTexMapIDPQ27JUTFont6TWidth
/* 802DF82C 002DC76C 88 1E 00 05 */ lbz r0, 5(r30)
/* 802DF830 002DC770 28 00 00 00 */ cmplwi r0, 0
/* 802DF834 002DC774 40 82 00 0C */ bne lbl_802DF840
@@ -94,7 +94,7 @@ lbl_802DFF0C:
lbl_802DFF28:
/* 802DFF28 002DCE68 7F A3 EB 78 */ mr r3, r29
/* 802DFF2C 002DCE6C 7F C4 F3 78 */ mr r4, r30
/* 802DFF30 002DCE70 48 00 01 95 */ bl convertSjis__10JUTResFontFlPUs
/* 802DFF30 002DCE70 48 00 01 95 */ bl convertSjis__10JUTResFontCFiPUs
/* 802DFF34 002DCE74 7C 7F 1B 78 */ mr r31, r3
/* 802DFF38 002DCE78 48 00 00 0C */ b lbl_802DFF44
lbl_802DFF3C:
@@ -5,7 +5,7 @@
/* 802DFC74 002DCBB4 93 C1 00 08 */ stw r30, 8(r1)
/* 802DFC78 002DCBB8 7C 7E 1B 78 */ mr r30, r3
/* 802DFC7C 002DCBBC 7C BF 2B 78 */ mr r31, r5
/* 802DFC80 002DCBC0 48 00 01 59 */ bl getFontCode__10JUTResFontFl
/* 802DFC80 002DCBC0 48 00 01 59 */ bl getFontCode__10JUTResFontCFi
/* 802DFC84 002DCBC4 38 A0 00 00 */ li r5, 0
/* 802DFC88 002DCBC8 98 BF 00 00 */ stb r5, 0(r31)
/* 802DFC8C 002DCBCC 80 9E 00 4C */ lwz r4, 0x4c(r30)
+10
View File
@@ -0,0 +1,10 @@
#ifndef __C_API_GRAPHIC_H_
#define __C_API_GRAPHIC_H_
#include "global.h"
void cAPIGph_Painter(void);
void cAPIGph_BeforeOfDraw(void);
void cAPIGph_AfterOfDraw(void);
#endif
+104
View File
@@ -0,0 +1,104 @@
#ifndef __C_ANGLE_H_
#define __C_ANGLE_H_
#include "SComponent/c_xyz.h"
#include "global.h"
class cSAngle {
private:
s16 mAngle;
public:
cSAngle() {}
cSAngle(const cSAngle&);
cSAngle(s16);
cSAngle(float);
s16 Val() const { return this->mAngle; }
// void Set(s16 angle) { this->mAngle = angle; }
void Val(const cSAngle&);
void Val(s16);
void Val(float);
float Degree(void) const;
float Radian(void) const;
float Norm(void) const;
s16 Abs(void) const;
s16 Inv(void) const;
float Sin(void) const;
float Cos(void) const;
cSAngle operator-(void) const;
cSAngle operator+(const cSAngle&) const;
cSAngle operator-(const cSAngle&) const;
void operator+=(const cSAngle&);
void operator-=(const cSAngle&);
cSAngle operator+(short) const;
cSAngle operator-(short) const;
void operator+=(short);
cSAngle operator*(float) const;
void operator*=(float);
bool operator<(const cSAngle& other) const { return mAngle < other.mAngle; }
bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; }
operator s16(void) const { return mAngle; }
void operator=(const cSAngle& other) { mAngle = other.mAngle; }
static cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); }
void mirrorAtMaxNeg(void) { *this = getMaxNegative() - *this; }
};
cSAngle operator+(short, const cSAngle&);
cSAngle operator-(short, const cSAngle&);
class cDegree {
private:
float mDegree;
public:
cDegree(float);
cDegree& Formal(void);
void Val(float);
float Radian(void) const;
float Sin(void) const;
float Cos(void) const;
float Tan(void) const;
};
class cSPolar {
private:
float mRadial;
cSAngle mAngle1;
cSAngle mAngle2;
public:
cSPolar() {}
cSPolar(const cXyz&);
cSPolar& Formal(void);
void Val(float, short, short);
void Val(const cXyz&);
cXyz Xyz(void) const;
void Globe(class cSGlobe*) const;
};
class cSGlobe {
private:
float mRadius;
cSAngle mAzimuth; // original: V
cSAngle mInclination; // original: U
public:
cSGlobe(const cSGlobe&);
cSGlobe(float, short, short);
cSGlobe(float, const cSAngle&, const cSAngle&);
cSGlobe(const cXyz&);
cSGlobe& Formal(void);
void Val(const cSGlobe&);
void Val(float, short, short);
void Val(float, const cSAngle&, const cSAngle&);
void Val(const cXyz&);
float R(void) const { return mRadius; }
const cSAngle& V(void) const { return mAzimuth; }
const cSAngle& U(void) const { return mInclination; }
cXyz Xyz(void) const;
void Polar(cSPolar*) const;
cXyz Norm(void) const;
cSGlobe& Invert(void);
};
#endif
@@ -0,0 +1,13 @@
/* 80271030 0026DF70 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80271034 0026DF74 C0 42 B8 0C */ lfs f2, lbl_8045520C-_SDA2_BASE_(r2)
/* 80271038 0026DF78 A8 03 00 00 */ lha r0, 0(r3)
/* 8027103C 0026DF7C C8 22 B8 10 */ lfd f1, lbl_80455210-_SDA2_BASE_(r2)
/* 80271040 0026DF80 6C 00 80 00 */ xoris r0, r0, 0x8000
/* 80271044 0026DF84 90 01 00 0C */ stw r0, 0xc(r1)
/* 80271048 0026DF88 3C 00 43 30 */ lis r0, 0x4330
/* 8027104C 0026DF8C 90 01 00 08 */ stw r0, 8(r1)
/* 80271050 0026DF90 C8 01 00 08 */ lfd f0, 8(r1)
/* 80271054 0026DF94 EC 00 08 28 */ fsubs f0, f0, f1
/* 80271058 0026DF98 EC 22 00 32 */ fmuls f1, f2, f0
/* 8027105C 0026DF9C 38 21 00 10 */ addi r1, r1, 0x10
/* 80271060 0026DFA0 4E 80 00 20 */ blr
@@ -0,0 +1,13 @@
/* 80271064 0026DFA4 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80271068 0026DFA8 C0 42 B8 18 */ lfs f2, lbl_80455218-_SDA2_BASE_(r2)
/* 8027106C 0026DFAC A8 03 00 00 */ lha r0, 0(r3)
/* 80271070 0026DFB0 C8 22 B8 10 */ lfd f1, lbl_80455210-_SDA2_BASE_(r2)
/* 80271074 0026DFB4 6C 00 80 00 */ xoris r0, r0, 0x8000
/* 80271078 0026DFB8 90 01 00 0C */ stw r0, 0xc(r1)
/* 8027107C 0026DFBC 3C 00 43 30 */ lis r0, 0x4330
/* 80271080 0026DFC0 90 01 00 08 */ stw r0, 8(r1)
/* 80271084 0026DFC4 C8 01 00 08 */ lfd f0, 8(r1)
/* 80271088 0026DFC8 EC 00 08 28 */ fsubs f0, f0, f1
/* 8027108C 0026DFCC EC 22 00 32 */ fmuls f1, f2, f0
/* 80271090 0026DFD0 38 21 00 10 */ addi r1, r1, 0x10
/* 80271094 0026DFD4 4E 80 00 20 */ blr
@@ -0,0 +1,13 @@
/* 80271098 0026DFD8 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 8027109C 0026DFDC C0 42 B8 1C */ lfs f2, lbl_8045521C-_SDA2_BASE_(r2)
/* 802710A0 0026DFE0 A8 03 00 00 */ lha r0, 0(r3)
/* 802710A4 0026DFE4 C8 22 B8 10 */ lfd f1, lbl_80455210-_SDA2_BASE_(r2)
/* 802710A8 0026DFE8 6C 00 80 00 */ xoris r0, r0, 0x8000
/* 802710AC 0026DFEC 90 01 00 0C */ stw r0, 0xc(r1)
/* 802710B0 0026DFF0 3C 00 43 30 */ lis r0, 0x4330
/* 802710B4 0026DFF4 90 01 00 08 */ stw r0, 8(r1)
/* 802710B8 0026DFF8 C8 01 00 08 */ lfd f0, 8(r1)
/* 802710BC 0026DFFC EC 00 08 28 */ fsubs f0, f0, f1
/* 802710C0 0026E000 EC 22 00 32 */ fmuls f1, f2, f0
/* 802710C4 0026E004 38 21 00 10 */ addi r1, r1, 0x10
/* 802710C8 0026E008 4E 80 00 20 */ blr
@@ -0,0 +1,20 @@
/* 80271264 0026E1A4 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80271268 0026E1A8 7C 08 02 A6 */ mflr r0
/* 8027126C 0026E1AC 90 01 00 24 */ stw r0, 0x24(r1)
/* 80271270 0026E1B0 A8 04 00 00 */ lha r0, 0(r4)
/* 80271274 0026E1B4 C8 42 B8 10 */ lfd f2, lbl_80455210-_SDA2_BASE_(r2)
/* 80271278 0026E1B8 6C 00 80 00 */ xoris r0, r0, 0x8000
/* 8027127C 0026E1BC 90 01 00 0C */ stw r0, 0xc(r1)
/* 80271280 0026E1C0 3C 00 43 30 */ lis r0, 0x4330
/* 80271284 0026E1C4 90 01 00 08 */ stw r0, 8(r1)
/* 80271288 0026E1C8 C8 01 00 08 */ lfd f0, 8(r1)
/* 8027128C 0026E1CC EC 00 10 28 */ fsubs f0, f0, f2
/* 80271290 0026E1D0 EC 00 00 72 */ fmuls f0, f0, f1
/* 80271294 0026E1D4 FC 00 00 1E */ fctiwz f0, f0
/* 80271298 0026E1D8 D8 01 00 10 */ stfd f0, 0x10(r1)
/* 8027129C 0026E1DC 80 81 00 14 */ lwz r4, 0x14(r1)
/* 802712A0 0026E1E0 4B FF FC F9 */ bl __ct__7cSAngleFs
/* 802712A4 0026E1E4 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802712A8 0026E1E8 7C 08 03 A6 */ mtlr r0
/* 802712AC 0026E1EC 38 21 00 20 */ addi r1, r1, 0x20
/* 802712B0 0026E1F0 4E 80 00 20 */ blr
@@ -0,0 +1,16 @@
/* 802712B4 0026E1F4 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802712B8 0026E1F8 A8 03 00 00 */ lha r0, 0(r3)
/* 802712BC 0026E1FC C8 42 B8 10 */ lfd f2, lbl_80455210-_SDA2_BASE_(r2)
/* 802712C0 0026E200 6C 00 80 00 */ xoris r0, r0, 0x8000
/* 802712C4 0026E204 90 01 00 0C */ stw r0, 0xc(r1)
/* 802712C8 0026E208 3C 00 43 30 */ lis r0, 0x4330
/* 802712CC 0026E20C 90 01 00 08 */ stw r0, 8(r1)
/* 802712D0 0026E210 C8 01 00 08 */ lfd f0, 8(r1)
/* 802712D4 0026E214 EC 00 10 28 */ fsubs f0, f0, f2
/* 802712D8 0026E218 EC 00 00 72 */ fmuls f0, f0, f1
/* 802712DC 0026E21C FC 00 00 1E */ fctiwz f0, f0
/* 802712E0 0026E220 D8 01 00 10 */ stfd f0, 0x10(r1)
/* 802712E4 0026E224 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802712E8 0026E228 B0 03 00 00 */ sth r0, 0(r3)
/* 802712EC 0026E22C 38 21 00 20 */ addi r1, r1, 0x20
/* 802712F0 0026E230 4E 80 00 20 */ blr
@@ -0,0 +1,46 @@
/* 80271BD4 0026EB14 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80271BD8 0026EB18 7C 08 02 A6 */ mflr r0
/* 80271BDC 0026EB1C 90 01 00 14 */ stw r0, 0x14(r1)
/* 80271BE0 0026EB20 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80271BE4 0026EB24 3C 60 80 43 */ lis r3, lbl_80430F98@ha
/* 80271BE8 0026EB28 3B E3 0F 98 */ addi r31, r3, lbl_80430F98@l
/* 80271BEC 0026EB2C 38 6D 8C 08 */ addi r3, r13, 0x80451188 - 0x80458580 /*SDA HACK; original: lbl_80451188-_SDA_BASE_*/
/* 80271BF0 0026EB30 38 80 00 00 */ li r4, 0
/* 80271BF4 0026EB34 4B FF F3 A5 */ bl __ct__7cSAngleFs
/* 80271BF8 0026EB38 3C 80 80 03 */ lis r4, cSAngle_NS_dtor@ha
/* 80271BFC 0026EB3C 38 84 05 10 */ addi r4, r4, cSAngle_NS_dtor@l
/* 80271C00 0026EB40 38 BF 00 00 */ addi r5, r31, 0
/* 80271C04 0026EB44 48 0F 00 21 */ bl func_80361C24
/* 80271C08 0026EB48 38 6D 8C 0C */ addi r3, r13, 0x8045118C - 0x80458580 /*SDA HACK; original: lbl_8045118C-_SDA_BASE_*/
/* 80271C0C 0026EB4C 38 80 00 B6 */ li r4, 0xb6
/* 80271C10 0026EB50 4B FF F3 89 */ bl __ct__7cSAngleFs
/* 80271C14 0026EB54 3C 80 80 03 */ lis r4, cSAngle_NS_dtor@ha
/* 80271C18 0026EB58 38 84 05 10 */ addi r4, r4, cSAngle_NS_dtor@l
/* 80271C1C 0026EB5C 38 BF 00 0C */ addi r5, r31, 0xc
/* 80271C20 0026EB60 48 0F 00 05 */ bl func_80361C24
/* 80271C24 0026EB64 38 6D 8C 10 */ addi r3, r13, 0x80451190 - 0x80458580 /*SDA HACK; original: lbl_80451190-_SDA_BASE_*/
/* 80271C28 0026EB68 38 80 40 00 */ li r4, 0x4000
/* 80271C2C 0026EB6C 4B FF F3 6D */ bl __ct__7cSAngleFs
/* 80271C30 0026EB70 3C 80 80 03 */ lis r4, cSAngle_NS_dtor@ha
/* 80271C34 0026EB74 38 84 05 10 */ addi r4, r4, cSAngle_NS_dtor@l
/* 80271C38 0026EB78 38 BF 00 18 */ addi r5, r31, 0x18
/* 80271C3C 0026EB7C 48 0E FF E9 */ bl func_80361C24
/* 80271C40 0026EB80 38 6D 8C 14 */ addi r3, r13, 0x80451194 - 0x80458580 /*SDA HACK; original: lbl_80451194-_SDA_BASE_*/
/* 80271C44 0026EB84 38 80 80 00 */ li r4, -32768
/* 80271C48 0026EB88 4B FF F3 51 */ bl __ct__7cSAngleFs
/* 80271C4C 0026EB8C 3C 80 80 03 */ lis r4, cSAngle_NS_dtor@ha
/* 80271C50 0026EB90 38 84 05 10 */ addi r4, r4, cSAngle_NS_dtor@l
/* 80271C54 0026EB94 38 BF 00 24 */ addi r5, r31, 0x24
/* 80271C58 0026EB98 48 0E FF CD */ bl func_80361C24
/* 80271C5C 0026EB9C 38 6D 8C 18 */ addi r3, r13, 0x80451198 - 0x80458580 /*SDA HACK; original: lbl_80451198-_SDA_BASE_*/
/* 80271C60 0026EBA0 38 80 C0 00 */ li r4, -16384
/* 80271C64 0026EBA4 4B FF F3 35 */ bl __ct__7cSAngleFs
/* 80271C68 0026EBA8 3C 80 80 03 */ lis r4, cSAngle_NS_dtor@ha
/* 80271C6C 0026EBAC 38 84 05 10 */ addi r4, r4, cSAngle_NS_dtor@l
/* 80271C70 0026EBB0 38 BF 00 30 */ addi r5, r31, 0x30
/* 80271C74 0026EBB4 48 0E FF B1 */ bl func_80361C24
/* 80271C78 0026EBB8 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80271C7C 0026EBBC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80271C80 0026EBC0 7C 08 03 A6 */ mtlr r0
/* 80271C84 0026EBC4 38 21 00 10 */ addi r1, r1, 0x10
/* 80271C88 0026EBC8 4E 80 00 20 */ blr
-14
View File
@@ -1,14 +0,0 @@
#ifndef __C_ANGLE_H_
#define __C_ANGLE_H_
#include "global.h"
class cSAngle {
public:
cSAngle();
private:
s16 value;
};
#endif
+14
View File
@@ -0,0 +1,14 @@
#ifndef __C_BG_S_CHK_H_
#define __C_BG_S_CHK_H_
#include "global.h"
class cBgS_Chk {
public:
cBgS_Chk(void);
~cBgS_Chk(void);
void SetExtChk(cBgS_Chk&);
bool ChkSameActorPid(unsigned int) const;
};
#endif
@@ -0,0 +1,9 @@
/* 80267B4C 00264A8C 3C 80 80 3C */ lis r4, lbl_803C3F80@ha
/* 80267B50 00264A90 38 04 3F 80 */ addi r0, r4, lbl_803C3F80@l
/* 80267B54 00264A94 90 03 00 10 */ stw r0, 0x10(r3)
/* 80267B58 00264A98 38 00 00 00 */ li r0, 0
/* 80267B5C 00264A9C 90 03 00 00 */ stw r0, 0(r3)
/* 80267B60 00264AA0 90 03 00 04 */ stw r0, 4(r3)
/* 80267B64 00264AA4 38 00 00 01 */ li r0, 1
/* 80267B68 00264AA8 98 03 00 0C */ stb r0, 0xc(r3)
/* 80267B6C 00264AAC 4E 80 00 20 */ blr
@@ -0,0 +1,19 @@
/* 80267B70 00264AB0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80267B74 00264AB4 7C 08 02 A6 */ mflr r0
/* 80267B78 00264AB8 90 01 00 14 */ stw r0, 0x14(r1)
/* 80267B7C 00264ABC 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80267B80 00264AC0 7C 7F 1B 79 */ or. r31, r3, r3
/* 80267B84 00264AC4 41 82 00 1C */ beq lbl_80267BA0
/* 80267B88 00264AC8 3C A0 80 3C */ lis r5, lbl_803C3F80@ha
/* 80267B8C 00264ACC 38 05 3F 80 */ addi r0, r5, lbl_803C3F80@l
/* 80267B90 00264AD0 90 1F 00 10 */ stw r0, 0x10(r31)
/* 80267B94 00264AD4 7C 80 07 35 */ extsh. r0, r4
/* 80267B98 00264AD8 40 81 00 08 */ ble lbl_80267BA0
/* 80267B9C 00264ADC 48 06 71 A1 */ bl __dl__FPv
lbl_80267BA0:
/* 80267BA0 00264AE0 7F E3 FB 78 */ mr r3, r31
/* 80267BA4 00264AE4 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80267BA8 00264AE8 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80267BAC 00264AEC 7C 08 03 A6 */ mtlr r0
/* 80267BB0 00264AF0 38 21 00 10 */ addi r1, r1, 0x10
/* 80267BB4 00264AF4 4E 80 00 20 */ blr
@@ -0,0 +1,9 @@
/* 80267BB8 00264AF8 80 04 00 00 */ lwz r0, 0(r4)
/* 80267BBC 00264AFC 90 03 00 00 */ stw r0, 0(r3)
/* 80267BC0 00264B00 80 04 00 04 */ lwz r0, 4(r4)
/* 80267BC4 00264B04 90 03 00 04 */ stw r0, 4(r3)
/* 80267BC8 00264B08 80 04 00 08 */ lwz r0, 8(r4)
/* 80267BCC 00264B0C 90 03 00 08 */ stw r0, 8(r3)
/* 80267BD0 00264B10 88 04 00 0C */ lbz r0, 0xc(r4)
/* 80267BD4 00264B14 98 03 00 0C */ stb r0, 0xc(r3)
/* 80267BD8 00264B18 4E 80 00 20 */ blr
@@ -0,0 +1,18 @@
/* 80267BDC 00264B1C 80 A3 00 08 */ lwz r5, 8(r3)
/* 80267BE0 00264B20 3C 05 00 01 */ addis r0, r5, 1
/* 80267BE4 00264B24 28 00 FF FF */ cmplwi r0, 0xffff
/* 80267BE8 00264B28 41 82 00 1C */ beq lbl_80267C04
/* 80267BEC 00264B2C 3C 04 00 01 */ addis r0, r4, 1
/* 80267BF0 00264B30 28 00 FF FF */ cmplwi r0, 0xffff
/* 80267BF4 00264B34 41 82 00 10 */ beq lbl_80267C04
/* 80267BF8 00264B38 88 03 00 0C */ lbz r0, 0xc(r3)
/* 80267BFC 00264B3C 28 00 00 00 */ cmplwi r0, 0
/* 80267C00 00264B40 40 82 00 0C */ bne lbl_80267C0C
lbl_80267C04:
/* 80267C04 00264B44 38 60 00 00 */ li r3, 0
/* 80267C08 00264B48 4E 80 00 20 */ blr
lbl_80267C0C:
/* 80267C0C 00264B4C 7C 05 20 50 */ subf r0, r5, r4
/* 80267C10 00264B50 7C 00 00 34 */ cntlzw r0, r0
/* 80267C14 00264B54 54 03 DE 3E */ rlwinm r3, r0, 0x1b, 0x18, 0x1f
/* 80267C18 00264B58 4E 80 00 20 */ blr
+15
View File
@@ -0,0 +1,15 @@
#ifndef __C_BG_S_GND_CHK_H_
#define __C_BG_S_GND_CHK_H_
#include "SComponent/c_xyz.h"
#include "global.h"
class cBgS_GndChk {
cBgS_GndChk(void);
~cBgS_GndChk(void);
void SetPos(const Vec*);
void SetPos(const cXyz*);
void PreCheck(void);
};
#endif
@@ -0,0 +1,30 @@
/* 80267C1C 00264B5C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80267C20 00264B60 7C 08 02 A6 */ mflr r0
/* 80267C24 00264B64 90 01 00 14 */ stw r0, 0x14(r1)
/* 80267C28 00264B68 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80267C2C 00264B6C 7C 7F 1B 78 */ mr r31, r3
/* 80267C30 00264B70 4B FF FF 1D */ bl __ct__8cBgS_ChkFv
/* 80267C34 00264B74 38 7F 00 14 */ addi r3, r31, 0x14
/* 80267C38 00264B78 48 00 04 3D */ bl __ct__13cBgS_PolyInfoFv
/* 80267C3C 00264B7C 3C 60 80 3C */ lis r3, lbl_803C3F90@ha
/* 80267C40 00264B80 38 63 3F 90 */ addi r3, r3, lbl_803C3F90@l
/* 80267C44 00264B84 90 7F 00 10 */ stw r3, 0x10(r31)
/* 80267C48 00264B88 38 03 00 0C */ addi r0, r3, 0xc
/* 80267C4C 00264B8C 90 1F 00 20 */ stw r0, 0x20(r31)
/* 80267C50 00264B90 3C 60 80 43 */ lis r3, lbl_80430CF4@ha
/* 80267C54 00264B94 C4 03 0C F4 */ lfsu f0, lbl_80430CF4@l(r3)
/* 80267C58 00264B98 D0 1F 00 24 */ stfs f0, 0x24(r31)
/* 80267C5C 00264B9C C0 03 00 04 */ lfs f0, 4(r3)
/* 80267C60 00264BA0 D0 1F 00 28 */ stfs f0, 0x28(r31)
/* 80267C64 00264BA4 C0 03 00 08 */ lfs f0, 8(r3)
/* 80267C68 00264BA8 D0 1F 00 2C */ stfs f0, 0x2c(r31)
/* 80267C6C 00264BAC 38 00 FF FF */ li r0, -1
/* 80267C70 00264BB0 90 1F 00 08 */ stw r0, 8(r31)
/* 80267C74 00264BB4 38 00 00 02 */ li r0, 2
/* 80267C78 00264BB8 90 1F 00 30 */ stw r0, 0x30(r31)
/* 80267C7C 00264BBC 7F E3 FB 78 */ mr r3, r31
/* 80267C80 00264BC0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80267C84 00264BC4 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80267C88 00264BC8 7C 08 03 A6 */ mtlr r0
/* 80267C8C 00264BCC 38 21 00 10 */ addi r1, r1, 0x10
/* 80267C90 00264BD0 4E 80 00 20 */ blr
@@ -0,0 +1,31 @@
/* 80267C94 00264BD4 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80267C98 00264BD8 7C 08 02 A6 */ mflr r0
/* 80267C9C 00264BDC 90 01 00 14 */ stw r0, 0x14(r1)
/* 80267CA0 00264BE0 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80267CA4 00264BE4 93 C1 00 08 */ stw r30, 8(r1)
/* 80267CA8 00264BE8 7C 7E 1B 79 */ or. r30, r3, r3
/* 80267CAC 00264BEC 7C 9F 23 78 */ mr r31, r4
/* 80267CB0 00264BF0 41 82 00 40 */ beq lbl_80267CF0
/* 80267CB4 00264BF4 3C 60 80 3C */ lis r3, lbl_803C3F90@ha
/* 80267CB8 00264BF8 38 63 3F 90 */ addi r3, r3, lbl_803C3F90@l
/* 80267CBC 00264BFC 90 7E 00 10 */ stw r3, 0x10(r30)
/* 80267CC0 00264C00 38 03 00 0C */ addi r0, r3, 0xc
/* 80267CC4 00264C04 90 1E 00 20 */ stw r0, 0x20(r30)
/* 80267CC8 00264C08 38 7E 00 14 */ addi r3, r30, 0x14
/* 80267CCC 00264C0C 38 80 00 00 */ li r4, 0
/* 80267CD0 00264C10 48 00 03 E1 */ bl __dt__13cBgS_PolyInfoFv
/* 80267CD4 00264C14 7F C3 F3 78 */ mr r3, r30
/* 80267CD8 00264C18 38 80 00 00 */ li r4, 0
/* 80267CDC 00264C1C 4B FF FE 95 */ bl __dt__8cBgS_ChkFv
/* 80267CE0 00264C20 7F E0 07 35 */ extsh. r0, r31
/* 80267CE4 00264C24 40 81 00 0C */ ble lbl_80267CF0
/* 80267CE8 00264C28 7F C3 F3 78 */ mr r3, r30
/* 80267CEC 00264C2C 48 06 70 51 */ bl __dl__FPv
lbl_80267CF0:
/* 80267CF0 00264C30 7F C3 F3 78 */ mr r3, r30
/* 80267CF4 00264C34 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80267CF8 00264C38 83 C1 00 08 */ lwz r30, 8(r1)
/* 80267CFC 00264C3C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80267D00 00264C40 7C 08 03 A6 */ mtlr r0
/* 80267D04 00264C44 38 21 00 10 */ addi r1, r1, 0x10
/* 80267D08 00264C48 4E 80 00 20 */ blr
@@ -0,0 +1,7 @@
/* 80267D0C 00264C4C C0 04 00 00 */ lfs f0, 0(r4)
/* 80267D10 00264C50 D0 03 00 24 */ stfs f0, 0x24(r3)
/* 80267D14 00264C54 C0 04 00 04 */ lfs f0, 4(r4)
/* 80267D18 00264C58 D0 03 00 28 */ stfs f0, 0x28(r3)
/* 80267D1C 00264C5C C0 04 00 08 */ lfs f0, 8(r4)
/* 80267D20 00264C60 D0 03 00 2C */ stfs f0, 0x2c(r3)
/* 80267D24 00264C64 4E 80 00 20 */ blr
@@ -0,0 +1,7 @@
/* 80267D28 00264C68 C0 04 00 00 */ lfs f0, 0(r4)
/* 80267D2C 00264C6C D0 03 00 24 */ stfs f0, 0x24(r3)
/* 80267D30 00264C70 C0 04 00 04 */ lfs f0, 4(r4)
/* 80267D34 00264C74 D0 03 00 28 */ stfs f0, 0x28(r3)
/* 80267D38 00264C78 C0 04 00 08 */ lfs f0, 8(r4)
/* 80267D3C 00264C7C D0 03 00 2C */ stfs f0, 0x2c(r3)
/* 80267D40 00264C80 4E 80 00 20 */ blr
@@ -0,0 +1,4 @@
/* 80267D44 00264C84 80 03 00 30 */ lwz r0, 0x30(r3)
/* 80267D48 00264C88 54 00 07 BC */ rlwinm r0, r0, 0, 0x1e, 0x1e
/* 80267D4C 00264C8C 90 03 00 38 */ stw r0, 0x38(r3)
/* 80267D50 00264C90 4E 80 00 20 */ blr

Some files were not shown because too many files have changed in this diff Show More