JKRAramHeap and JKRAramPiece (#53)

* renamed func_XXX to _savegpr_XX

* renamed func_XXX to _restgpr_XX

* renamed func_XXX to _savefpr_XX

* renamed func_XXX to _restfpr_XX

* cleanup functions.h and moved intrisics to mwcc.h

* formatting

* cleanup functions.h

* Added include/ar/ARQ.h

* renamed func_XXX to _savegpr_25

* removed JKRAramPiece asm files

* JKRAramHeap OK, JKRAramPiece OK

* formatting

* more formatting

* Added const and removed explicit this->

* fixed merge problems

* changed mMessages[1] to mMessage

* foramatting

Co-authored-by: Julgodis <>
Co-authored-by: Pheenoh <pheenoh@gmail.com>
This commit is contained in:
Jonathan Wase 2021-01-03 11:29:50 +01:00 committed by GitHub
parent ab8dee5c14
commit 4309c3db5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 32859 additions and 726 deletions

8015
asm/d/d_meter2.s Normal file

File diff suppressed because it is too large Load Diff

10948
asm/d/meter/d_meter_button.s Normal file

File diff suppressed because it is too large Load Diff

13497
asm/d/meter2/d_meter2_draw.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -13,13 +13,15 @@ public:
JKRAramBlock* allocHead(u32, u8, JKRAramHeap*);
JKRAramBlock* allocTail(u32, u8, JKRAramHeap*);
void* getAddress() { return (void*)this->mAddress; }
void* getAddress() const { return (void*)mAddress; }
u32 getSize() { return this->mSize; }
u32 getSize() const { return mSize; }
bool isTempMemory() { return this->mIsTempMemory; }
u32 getFreeSize() const { return mFreeSize; }
void newGroupID(u8 groupId) { this->mGroupId = groupId; }
bool isTempMemory() const { return mIsTempMemory; }
void newGroupID(u8 groupId) { mGroupId = groupId; }
public:
JSULink<JKRAramBlock> mBlockLink;

View File

@ -10,33 +10,38 @@ public:
enum EAllocMode {
HEAD = 0,
TAIL = 1,
__EALLOCMODE_FORCE_ENUM_S32 = INT32_MAX,
__EALLOCMODE_FORCE_ENUM_SIGNED = -1,
};
public:
JKRAramHeap(u32, u32);
virtual ~JKRAramHeap(void);
virtual ~JKRAramHeap();
void alloc(u32, EAllocMode);
void allocFromHead(u32);
void allocFromTail(u32);
void getFreeSize(void);
void getTotalFreeSize(void);
JKRAramBlock* alloc(u32, EAllocMode);
JKRAramBlock* allocFromHead(u32);
JKRAramBlock* allocFromTail(u32);
u32 getFreeSize(void);
u32 getTotalFreeSize(void);
// u32 getUsedSize(void);
void dump(void);
u8 getCurrentGroupID() { return this->mGroupId; }
u8 getCurrentGroupID() const { return mGroupId; }
JKRHeap* getMgrHeap() { return this->mHeap; }
JKRHeap* getMgrHeap() const { return mHeap; }
void lock() { OSLockMutex(&this->mMutex); }
private:
void lock() { OSLockMutex(&mMutex); }
void unlock() { OSUnlockMutex(&this->mMutex); }
void unlock() { OSUnlockMutex(&mMutex); }
public:
OSMutex mMutex;
JKRHeap* mHeap;
u32 field_0x34;
u32 field_0x38;
u32 field_0x3c;
u32 mHeadAddress;
u32 mTailAddress;
u32 mSize;
u8 mGroupId;
u8 padding_0x41[3];
};

View File

@ -1,55 +0,0 @@
/* __ct__11JKRAramHeapFUlUl __ct__11JKRAramHeapFUlUl::__ct(unsigned long, unsigned long) */
/* JKRAramHeap */
/* 802D2E44 002CFD84 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D2E48 002CFD88 7C 08 02 A6 */ mflr r0
/* 802D2E4C 002CFD8C 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D2E50 002CFD90 39 61 00 20 */ addi r11, r1, 0x20
/* 802D2E54 002CFD94 48 08 F3 89 */ bl _savegpr_29
/* 802D2E58 002CFD98 7C 7D 1B 78 */ mr r29, r3
/* 802D2E5C 002CFD9C 7C 9E 23 78 */ mr r30, r4
/* 802D2E60 002CFDA0 7C BF 2B 78 */ mr r31, r5
/* 802D2E64 002CFDA4 4B FF E6 19 */ bl __ct__11JKRDisposerFv
/* 802D2E68 002CFDA8 3C 60 80 3D */ lis r3, lbl_803CC168@ha
/* 802D2E6C 002CFDAC 38 03 C1 68 */ addi r0, r3, lbl_803CC168@l
/* 802D2E70 002CFDB0 90 1D 00 00 */ stw r0, 0(r29)
/* 802D2E74 002CFDB4 38 7D 00 18 */ addi r3, r29, 0x18
/* 802D2E78 002CFDB8 48 06 C1 91 */ bl OSInitMutex
/* 802D2E7C 002CFDBC 7F A3 EB 78 */ mr r3, r29
/* 802D2E80 002CFDC0 4B FF B9 BD */ bl findFromRoot__7JKRHeapFPv
/* 802D2E84 002CFDC4 90 7D 00 30 */ stw r3, 0x30(r29)
/* 802D2E88 002CFDC8 57 E0 00 34 */ rlwinm r0, r31, 0, 0, 0x1a
/* 802D2E8C 002CFDCC 90 1D 00 3C */ stw r0, 0x3c(r29)
/* 802D2E90 002CFDD0 38 1E 00 1F */ addi r0, r30, 0x1f
/* 802D2E94 002CFDD4 54 00 00 34 */ rlwinm r0, r0, 0, 0, 0x1a
/* 802D2E98 002CFDD8 90 1D 00 34 */ stw r0, 0x34(r29)
/* 802D2E9C 002CFDDC 80 7D 00 34 */ lwz r3, 0x34(r29)
/* 802D2EA0 002CFDE0 80 1D 00 3C */ lwz r0, 0x3c(r29)
/* 802D2EA4 002CFDE4 7C 03 02 14 */ add r0, r3, r0
/* 802D2EA8 002CFDE8 90 1D 00 38 */ stw r0, 0x38(r29)
/* 802D2EAC 002CFDEC 38 00 00 FF */ li r0, 0xff
/* 802D2EB0 002CFDF0 98 1D 00 40 */ stb r0, 0x40(r29)
/* 802D2EB4 002CFDF4 38 60 00 24 */ li r3, 0x24
/* 802D2EB8 002CFDF8 80 9D 00 30 */ lwz r4, 0x30(r29)
/* 802D2EBC 002CFDFC 38 A0 00 00 */ li r5, 0
/* 802D2EC0 002CFE00 4B FF BD D9 */ bl __nw__FUlP7JKRHeapi
/* 802D2EC4 002CFE04 7C 64 1B 79 */ or. r4, r3, r3
/* 802D2EC8 002CFE08 41 82 00 20 */ beq lbl_802D2EE8
/* 802D2ECC 002CFE0C 80 9D 00 34 */ lwz r4, 0x34(r29)
/* 802D2ED0 002CFE10 38 A0 00 00 */ li r5, 0
/* 802D2ED4 002CFE14 80 DD 00 3C */ lwz r6, 0x3c(r29)
/* 802D2ED8 002CFE18 38 E0 00 FF */ li r7, 0xff
/* 802D2EDC 002CFE1C 39 00 00 00 */ li r8, 0
/* 802D2EE0 002CFE20 48 00 04 25 */ bl __ct__12JKRAramBlockFUlUlUlUcb
/* 802D2EE4 002CFE24 7C 64 1B 78 */ mr r4, r3
lbl_802D2EE8:
/* 802D2EE8 002CFE28 3C 60 80 43 */ lis r3, lbl_8043430C@ha
/* 802D2EEC 002CFE2C 38 63 43 0C */ addi r3, r3, lbl_8043430C@l
/* 802D2EF0 002CFE30 38 84 00 04 */ addi r4, r4, 4
/* 802D2EF4 002CFE34 48 00 90 59 */ bl append__10JSUPtrListFP10JSUPtrLink
/* 802D2EF8 002CFE38 7F A3 EB 78 */ mr r3, r29
/* 802D2EFC 002CFE3C 39 61 00 20 */ addi r11, r1, 0x20
/* 802D2F00 002CFE40 48 08 F3 29 */ bl _restgpr_29
/* 802D2F04 002CFE44 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D2F08 002CFE48 7C 08 03 A6 */ mtlr r0
/* 802D2F0C 002CFE4C 38 21 00 20 */ addi r1, r1, 0x20
/* 802D2F10 002CFE50 4E 80 00 20 */ blr

View File

@ -1,34 +0,0 @@
/* alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode __ct__11JKRAramHeapFUlUl::alloc(unsigned long, __ct__11JKRAramHeapFUlUl::EAllocMode) */
/* JKRAramHeap_NS_alloc */
/* 802D2FBC 002CFEFC 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D2FC0 002CFF00 7C 08 02 A6 */ mflr r0
/* 802D2FC4 002CFF04 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D2FC8 002CFF08 39 61 00 20 */ addi r11, r1, 0x20
/* 802D2FCC 002CFF0C 48 08 F2 11 */ bl _savegpr_29
/* 802D2FD0 002CFF10 7C 7D 1B 78 */ mr r29, r3
/* 802D2FD4 002CFF14 7C 9E 23 78 */ mr r30, r4
/* 802D2FD8 002CFF18 7C BF 2B 78 */ mr r31, r5
/* 802D2FDC 002CFF1C 38 7D 00 18 */ addi r3, r29, 0x18
/* 802D2FE0 002CFF20 48 06 C0 61 */ bl OSLockMutex
/* 802D2FE4 002CFF24 2C 1F 00 00 */ cmpwi r31, 0
/* 802D2FE8 002CFF28 40 82 00 18 */ bne lbl_802D3000
/* 802D2FEC 002CFF2C 7F A3 EB 78 */ mr r3, r29
/* 802D2FF0 002CFF30 7F C4 F3 78 */ mr r4, r30
/* 802D2FF4 002CFF34 48 00 00 41 */ bl allocFromHead__11JKRAramHeapFUl
/* 802D2FF8 002CFF38 7C 7F 1B 78 */ mr r31, r3
/* 802D2FFC 002CFF3C 48 00 00 14 */ b lbl_802D3010
lbl_802D3000:
/* 802D3000 002CFF40 7F A3 EB 78 */ mr r3, r29
/* 802D3004 002CFF44 7F C4 F3 78 */ mr r4, r30
/* 802D3008 002CFF48 48 00 00 B5 */ bl allocFromTail__11JKRAramHeapFUl
/* 802D300C 002CFF4C 7C 7F 1B 78 */ mr r31, r3
lbl_802D3010:
/* 802D3010 002CFF50 38 7D 00 18 */ addi r3, r29, 0x18
/* 802D3014 002CFF54 48 06 C1 09 */ bl OSUnlockMutex
/* 802D3018 002CFF58 7F E3 FB 78 */ mr r3, r31
/* 802D301C 002CFF5C 39 61 00 20 */ addi r11, r1, 0x20
/* 802D3020 002CFF60 48 08 F2 09 */ bl _restgpr_29
/* 802D3024 002CFF64 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D3028 002CFF68 7C 08 03 A6 */ mtlr r0
/* 802D302C 002CFF6C 38 21 00 20 */ addi r1, r1, 0x20
/* 802D3030 002CFF70 4E 80 00 20 */ blr

View File

@ -1,42 +0,0 @@
/* allocFromHead__11JKRAramHeapFUl __ct__11JKRAramHeapFUlUl::allocFromHead(unsigned long) */
/* JKRAramHeap_NS_allocFromHead */
/* 802D3034 002CFF74 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D3038 002CFF78 7C 08 02 A6 */ mflr r0
/* 802D303C 002CFF7C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3040 002CFF80 7C 66 1B 78 */ mr r6, r3
/* 802D3044 002CFF84 38 04 00 1F */ addi r0, r4, 0x1f
/* 802D3048 002CFF88 54 04 00 34 */ rlwinm r4, r0, 0, 0, 0x1a
/* 802D304C 002CFF8C 39 00 FF FF */ li r8, -1
/* 802D3050 002CFF90 38 60 00 00 */ li r3, 0
/* 802D3054 002CFF94 3C A0 80 43 */ lis r5, lbl_8043430C@ha
/* 802D3058 002CFF98 80 E5 43 0C */ lwz r7, lbl_8043430C@l(r5)
/* 802D305C 002CFF9C 48 00 00 30 */ b lbl_802D308C
lbl_802D3060:
/* 802D3060 002CFFA0 80 A7 00 00 */ lwz r5, 0(r7)
/* 802D3064 002CFFA4 80 05 00 1C */ lwz r0, 0x1c(r5)
/* 802D3068 002CFFA8 7C 00 20 40 */ cmplw r0, r4
/* 802D306C 002CFFAC 41 80 00 1C */ blt lbl_802D3088
/* 802D3070 002CFFB0 7C 08 00 40 */ cmplw r8, r0
/* 802D3074 002CFFB4 40 81 00 14 */ ble lbl_802D3088
/* 802D3078 002CFFB8 7C 08 03 78 */ mr r8, r0
/* 802D307C 002CFFBC 7C A3 2B 78 */ mr r3, r5
/* 802D3080 002CFFC0 7C 00 20 40 */ cmplw r0, r4
/* 802D3084 002CFFC4 41 82 00 10 */ beq lbl_802D3094
lbl_802D3088:
/* 802D3088 002CFFC8 80 E7 00 0C */ lwz r7, 0xc(r7)
lbl_802D308C:
/* 802D308C 002CFFCC 28 07 00 00 */ cmplwi r7, 0
/* 802D3090 002CFFD0 40 82 FF D0 */ bne lbl_802D3060
lbl_802D3094:
/* 802D3094 002CFFD4 28 03 00 00 */ cmplwi r3, 0
/* 802D3098 002CFFD8 41 82 00 10 */ beq lbl_802D30A8
/* 802D309C 002CFFDC 88 A6 00 40 */ lbz r5, 0x40(r6)
/* 802D30A0 002CFFE0 48 00 03 95 */ bl allocHead__12JKRAramBlockFUlUcP11JKRAramHeap
/* 802D30A4 002CFFE4 48 00 00 08 */ b lbl_802D30AC
lbl_802D30A8:
/* 802D30A8 002CFFE8 38 60 00 00 */ li r3, 0
lbl_802D30AC:
/* 802D30AC 002CFFEC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D30B0 002CFFF0 7C 08 03 A6 */ mtlr r0
/* 802D30B4 002CFFF4 38 21 00 10 */ addi r1, r1, 0x10
/* 802D30B8 002CFFF8 4E 80 00 20 */ blr

View File

@ -1,38 +0,0 @@
/* allocFromTail__11JKRAramHeapFUl __ct__11JKRAramHeapFUlUl::allocFromTail(unsigned long) */
/* JKRAramHeap_NS_allocFromTail */
/* 802D30BC 002CFFFC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D30C0 002D0000 7C 08 02 A6 */ mflr r0
/* 802D30C4 002D0004 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D30C8 002D0008 7C 66 1B 78 */ mr r6, r3
/* 802D30CC 002D000C 38 04 00 1F */ addi r0, r4, 0x1f
/* 802D30D0 002D0010 54 04 00 34 */ rlwinm r4, r0, 0, 0, 0x1a
/* 802D30D4 002D0014 38 60 00 00 */ li r3, 0
/* 802D30D8 002D0018 3C A0 80 43 */ lis r5, lbl_8043430C@ha
/* 802D30DC 002D001C 38 A5 43 0C */ addi r5, r5, lbl_8043430C@l
/* 802D30E0 002D0020 80 E5 00 04 */ lwz r7, 4(r5)
/* 802D30E4 002D0024 48 00 00 20 */ b lbl_802D3104
lbl_802D30E8:
/* 802D30E8 002D0028 80 A7 00 00 */ lwz r5, 0(r7)
/* 802D30EC 002D002C 80 05 00 1C */ lwz r0, 0x1c(r5)
/* 802D30F0 002D0030 7C 00 20 40 */ cmplw r0, r4
/* 802D30F4 002D0034 41 80 00 0C */ blt lbl_802D3100
/* 802D30F8 002D0038 7C A3 2B 78 */ mr r3, r5
/* 802D30FC 002D003C 48 00 00 10 */ b lbl_802D310C
lbl_802D3100:
/* 802D3100 002D0040 80 E7 00 08 */ lwz r7, 8(r7)
lbl_802D3104:
/* 802D3104 002D0044 28 07 00 00 */ cmplwi r7, 0
/* 802D3108 002D0048 40 82 FF E0 */ bne lbl_802D30E8
lbl_802D310C:
/* 802D310C 002D004C 28 03 00 00 */ cmplwi r3, 0
/* 802D3110 002D0050 41 82 00 10 */ beq lbl_802D3120
/* 802D3114 002D0054 88 A6 00 40 */ lbz r5, 0x40(r6)
/* 802D3118 002D0058 48 00 03 B9 */ bl allocTail__12JKRAramBlockFUlUcP11JKRAramHeap
/* 802D311C 002D005C 48 00 00 08 */ b lbl_802D3124
lbl_802D3120:
/* 802D3120 002D0060 38 60 00 00 */ li r3, 0
lbl_802D3124:
/* 802D3124 002D0064 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3128 002D0068 7C 08 03 A6 */ mtlr r0
/* 802D312C 002D006C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3130 002D0070 4E 80 00 20 */ blr

View File

@ -1,35 +0,0 @@
/* getFreeSize__11JKRAramHeapFv __ct__11JKRAramHeapFUlUl::getFreeSize(void) */
/* JKRAramHeap_NS_getFreeSize */
/* 802D3134 002D0074 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D3138 002D0078 7C 08 02 A6 */ mflr r0
/* 802D313C 002D007C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3140 002D0080 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D3144 002D0084 93 C1 00 08 */ stw r30, 8(r1)
/* 802D3148 002D0088 7C 7E 1B 78 */ mr r30, r3
/* 802D314C 002D008C 3B E0 00 00 */ li r31, 0
/* 802D3150 002D0090 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D3154 002D0094 48 06 BE ED */ bl OSLockMutex
/* 802D3158 002D0098 3C 60 80 43 */ lis r3, lbl_8043430C@ha
/* 802D315C 002D009C 38 63 43 0C */ addi r3, r3, lbl_8043430C@l
/* 802D3160 002D00A0 80 63 00 00 */ lwz r3, 0(r3)
/* 802D3164 002D00A4 48 00 00 1C */ b lbl_802D3180
lbl_802D3168:
/* 802D3168 002D00A8 80 83 00 00 */ lwz r4, 0(r3)
/* 802D316C 002D00AC 80 04 00 1C */ lwz r0, 0x1c(r4)
/* 802D3170 002D00B0 7C 00 F8 40 */ cmplw r0, r31
/* 802D3174 002D00B4 40 81 00 08 */ ble lbl_802D317C
/* 802D3178 002D00B8 7C 1F 03 78 */ mr r31, r0
lbl_802D317C:
/* 802D317C 002D00BC 80 63 00 0C */ lwz r3, 0xc(r3)
lbl_802D3180:
/* 802D3180 002D00C0 28 03 00 00 */ cmplwi r3, 0
/* 802D3184 002D00C4 40 82 FF E4 */ bne lbl_802D3168
/* 802D3188 002D00C8 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D318C 002D00CC 48 06 BF 91 */ bl OSUnlockMutex
/* 802D3190 002D00D0 7F E3 FB 78 */ mr r3, r31
/* 802D3194 002D00D4 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D3198 002D00D8 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D319C 002D00DC 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D31A0 002D00E0 7C 08 03 A6 */ mtlr r0
/* 802D31A4 002D00E4 38 21 00 10 */ addi r1, r1, 0x10
/* 802D31A8 002D00E8 4E 80 00 20 */ blr

View File

@ -1,31 +0,0 @@
/* getTotalFreeSize__11JKRAramHeapFv __ct__11JKRAramHeapFUlUl::getTotalFreeSize(void) */
/* JKRAramHeap_NS_getTotalFreeSize */
/* 802D31AC 002D00EC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D31B0 002D00F0 7C 08 02 A6 */ mflr r0
/* 802D31B4 002D00F4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D31B8 002D00F8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D31BC 002D00FC 93 C1 00 08 */ stw r30, 8(r1)
/* 802D31C0 002D0100 7C 7E 1B 78 */ mr r30, r3
/* 802D31C4 002D0104 3B E0 00 00 */ li r31, 0
/* 802D31C8 002D0108 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D31CC 002D010C 48 06 BE 75 */ bl OSLockMutex
/* 802D31D0 002D0110 3C 60 80 43 */ lis r3, lbl_8043430C@ha
/* 802D31D4 002D0114 80 83 43 0C */ lwz r4, lbl_8043430C@l(r3)
/* 802D31D8 002D0118 48 00 00 14 */ b lbl_802D31EC
lbl_802D31DC:
/* 802D31DC 002D011C 80 64 00 00 */ lwz r3, 0(r4)
/* 802D31E0 002D0120 80 03 00 1C */ lwz r0, 0x1c(r3)
/* 802D31E4 002D0124 7F FF 02 14 */ add r31, r31, r0
/* 802D31E8 002D0128 80 84 00 0C */ lwz r4, 0xc(r4)
lbl_802D31EC:
/* 802D31EC 002D012C 28 04 00 00 */ cmplwi r4, 0
/* 802D31F0 002D0130 40 82 FF EC */ bne lbl_802D31DC
/* 802D31F4 002D0134 38 7E 00 18 */ addi r3, r30, 0x18
/* 802D31F8 002D0138 48 06 BF 25 */ bl OSUnlockMutex
/* 802D31FC 002D013C 7F E3 FB 78 */ mr r3, r31
/* 802D3200 002D0140 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D3204 002D0144 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D3208 002D0148 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D320C 002D014C 7C 08 03 A6 */ mtlr r0
/* 802D3210 002D0150 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3214 002D0154 4E 80 00 20 */ blr

View File

@ -1,25 +0,0 @@
/* dump__11JKRAramHeapFv __ct__11JKRAramHeapFUlUl::dump(void) */
/* JKRAramHeap_NS_dump */
/* 802D3218 002D0158 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D321C 002D015C 7C 08 02 A6 */ mflr r0
/* 802D3220 002D0160 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3224 002D0164 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D3228 002D0168 7C 7F 1B 78 */ mr r31, r3
/* 802D322C 002D016C 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D3230 002D0170 48 06 BE 11 */ bl OSLockMutex
/* 802D3234 002D0174 3C 60 80 43 */ lis r3, lbl_8043430C@ha
/* 802D3238 002D0178 38 63 43 0C */ addi r3, r3, lbl_8043430C@l
/* 802D323C 002D017C 80 63 00 00 */ lwz r3, 0(r3)
/* 802D3240 002D0180 48 00 00 08 */ b lbl_802D3248
lbl_802D3244:
/* 802D3244 002D0184 80 63 00 0C */ lwz r3, 0xc(r3)
lbl_802D3248:
/* 802D3248 002D0188 28 03 00 00 */ cmplwi r3, 0
/* 802D324C 002D018C 40 82 FF F8 */ bne lbl_802D3244
/* 802D3250 002D0190 38 7F 00 18 */ addi r3, r31, 0x18
/* 802D3254 002D0194 48 06 BE C9 */ bl OSUnlockMutex
/* 802D3258 002D0198 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D325C 002D019C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3260 002D01A0 7C 08 03 A6 */ mtlr r0
/* 802D3264 002D01A4 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3268 002D01A8 4E 80 00 20 */ blr

View File

@ -1,25 +1,65 @@
#ifndef __JKRARAMPIECE_H__
#define __JKRARAMPIECE_H__
#include "JSystem/JSupport/JSUList/JSUList.h"
#include "ar/ARQ.h"
#include "dolphin/types.h"
#include "os/OS.h"
class JKRAMCommand {
public:
JKRAMCommand(void);
~JKRAMCommand();
};
extern OSMutex lbl_80434330;
class JKRAramBlock;
class JKRDecompCommand;
class JKRAMCommand {
public:
typedef void (*AsyncCallback)(u32);
JKRAMCommand();
~JKRAMCommand();
public:
/* 0x00 */ ARQRequest mRequest;
/* 0x20 */ JSULink<JKRAMCommand> mPieceLink;
/* 0x30 */ JSULink<JKRAMCommand> field_0x30;
/* 0x40 */ s32 mTransferDirection;
/* 0x44 */ u32 mDataLength;
/* 0x48 */ u32 mSrc;
/* 0x4C */ u32 mDst;
/* 0x50 */ JKRAramBlock* mAramBlock;
/* 0x54 */ u32 field_0x54;
/* 0x58 */ AsyncCallback mCallback;
/* 0x5C */ OSMessageQueue* field_0x5C;
/* 0x60 */ s32 field_0x60;
/* 0x64 */ JKRDecompCommand* mDecompCommand;
/* 0x68 */ OSMessageQueue mMessageQueue;
/* 0x88 */ OSMessage mMessage;
/* 0x8C */ void* field_0x8C;
/* 0x90 */ void* field_0x90;
/* 0x94 */ void* field_0x94;
};
class JKRAramPiece {
public:
static void prepareCommand(int, u32, u32, u32, JKRAramBlock*, void (*)(u32));
struct Message {
s32 field_0x00;
JKRAMCommand* command;
};
public:
static JKRAMCommand* prepareCommand(int, u32, u32, u32, JKRAramBlock*,
JKRAMCommand::AsyncCallback);
static void sendCommand(JKRAMCommand*);
static void orderAsync(int, u32, u32, u32, JKRAramBlock*, void (*)(u32));
static void sync(JKRAMCommand*, int);
static void orderSync(int, u32, u32, u32, JKRAramBlock*);
static JKRAMCommand* orderAsync(int, u32, u32, u32, JKRAramBlock*, JKRAMCommand::AsyncCallback);
static BOOL sync(JKRAMCommand*, int);
static BOOL orderSync(int, u32, u32, u32, JKRAramBlock*);
static void startDMA(JKRAMCommand*);
static void doneDMA(u32);
private:
static void lock() { OSLockMutex(&lbl_80434330); }
static void unlock() { OSUnlockMutex(&lbl_80434330); }
};
#endif

View File

@ -1,35 +0,0 @@
/* prepareCommand__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v JKRAramPiece::prepareCommand(int, unsigned long, unsigned long, unsigned long, JKRAramBlock *, void (*)(unsigned long)) */
/* JKRAramPiece_NS_prepareCommand */
/* 802D3574 002D04B4 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D3578 002D04B8 7C 08 02 A6 */ mflr r0
/* 802D357C 002D04BC 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D3580 002D04C0 39 61 00 20 */ addi r11, r1, 0x20
/* 802D3584 002D04C4 48 08 EC 4D */ bl _savegpr_26
/* 802D3588 002D04C8 7C 7A 1B 78 */ mr r26, r3
/* 802D358C 002D04CC 7C 9B 23 78 */ mr r27, r4
/* 802D3590 002D04D0 7C BC 2B 78 */ mr r28, r5
/* 802D3594 002D04D4 7C DD 33 78 */ mr r29, r6
/* 802D3598 002D04D8 7C FE 3B 78 */ mr r30, r7
/* 802D359C 002D04DC 7D 1F 43 78 */ mr r31, r8
/* 802D35A0 002D04E0 38 60 00 98 */ li r3, 0x98
/* 802D35A4 002D04E4 80 8D 8D F0 */ lwz r4, lbl_80451370-_SDA_BASE_(r13)
/* 802D35A8 002D04E8 38 A0 FF FC */ li r5, -4
/* 802D35AC 002D04EC 4B FF B6 ED */ bl __nw__FUlP7JKRHeapi
/* 802D35B0 002D04F0 7C 64 1B 79 */ or. r4, r3, r3
/* 802D35B4 002D04F4 41 82 00 0C */ beq lbl_802D35C0
/* 802D35B8 002D04F8 48 00 04 35 */ bl __ct__12JKRAMCommandFv
/* 802D35BC 002D04FC 7C 64 1B 78 */ mr r4, r3
lbl_802D35C0:
/* 802D35C0 002D0500 93 44 00 40 */ stw r26, 0x40(r4)
/* 802D35C4 002D0504 93 64 00 48 */ stw r27, 0x48(r4)
/* 802D35C8 002D0508 93 84 00 4C */ stw r28, 0x4c(r4)
/* 802D35CC 002D050C 93 C4 00 50 */ stw r30, 0x50(r4)
/* 802D35D0 002D0510 93 A4 00 44 */ stw r29, 0x44(r4)
/* 802D35D4 002D0514 93 E4 00 58 */ stw r31, 0x58(r4)
/* 802D35D8 002D0518 7C 83 23 78 */ mr r3, r4
/* 802D35DC 002D051C 39 61 00 20 */ addi r11, r1, 0x20
/* 802D35E0 002D0520 48 08 EC 3D */ bl _restgpr_26
/* 802D35E4 002D0524 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D35E8 002D0528 7C 08 03 A6 */ mtlr r0
/* 802D35EC 002D052C 38 21 00 20 */ addi r1, r1, 0x20
/* 802D35F0 002D0530 4E 80 00 20 */ blr

View File

@ -1,10 +0,0 @@
/* sendCommand__12JKRAramPieceFP12JKRAMCommand JKRAramPiece::sendCommand(JKRAMCommand *) */
/* JKRAramPiece_NS_sendCommand */
/* 802D35F4 002D0534 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D35F8 002D0538 7C 08 02 A6 */ mflr r0
/* 802D35FC 002D053C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3600 002D0540 48 00 02 CD */ bl startDMA__12JKRAramPieceFP12JKRAMCommand
/* 802D3604 002D0544 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3608 002D0548 7C 08 03 A6 */ mtlr r0
/* 802D360C 002D054C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3610 002D0550 4E 80 00 20 */ blr

View File

@ -1,55 +0,0 @@
/* sync__12JKRAramPieceFP12JKRAMCommandi JKRAramPiece::sync(JKRAMCommand *, int) */
/* JKRAramPiece_NS_sync */
/* 802D3770 002D06B0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D3774 002D06B4 7C 08 02 A6 */ mflr r0
/* 802D3778 002D06B8 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D377C 002D06BC 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 802D3780 002D06C0 93 C1 00 18 */ stw r30, 0x18(r1)
/* 802D3784 002D06C4 7C 7E 1B 78 */ mr r30, r3
/* 802D3788 002D06C8 7C 9F 23 78 */ mr r31, r4
/* 802D378C 002D06CC 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D3790 002D06D0 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D3794 002D06D4 48 06 B8 AD */ bl OSLockMutex
/* 802D3798 002D06D8 2C 1F 00 00 */ cmpwi r31, 0
/* 802D379C 002D06DC 40 82 00 38 */ bne lbl_802D37D4
/* 802D37A0 002D06E0 38 7E 00 68 */ addi r3, r30, 0x68
/* 802D37A4 002D06E4 38 81 00 08 */ addi r4, r1, 8
/* 802D37A8 002D06E8 38 A0 00 01 */ li r5, 1
/* 802D37AC 002D06EC 48 06 B3 11 */ bl OSReceiveMessage
/* 802D37B0 002D06F0 3C 60 80 43 */ lis r3, lbl_80434324@ha
/* 802D37B4 002D06F4 38 63 43 24 */ addi r3, r3, lbl_80434324@l
/* 802D37B8 002D06F8 38 9E 00 20 */ addi r4, r30, 0x20
/* 802D37BC 002D06FC 48 00 89 A1 */ bl remove__10JSUPtrListFP10JSUPtrLink
/* 802D37C0 002D0700 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D37C4 002D0704 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D37C8 002D0708 48 06 B9 55 */ bl OSUnlockMutex
/* 802D37CC 002D070C 38 60 00 01 */ li r3, 1
/* 802D37D0 002D0710 48 00 00 50 */ b lbl_802D3820
lbl_802D37D4:
/* 802D37D4 002D0714 38 7E 00 68 */ addi r3, r30, 0x68
/* 802D37D8 002D0718 38 81 00 08 */ addi r4, r1, 8
/* 802D37DC 002D071C 38 A0 00 00 */ li r5, 0
/* 802D37E0 002D0720 48 06 B2 DD */ bl OSReceiveMessage
/* 802D37E4 002D0724 2C 03 00 00 */ cmpwi r3, 0
/* 802D37E8 002D0728 40 82 00 18 */ bne lbl_802D3800
/* 802D37EC 002D072C 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D37F0 002D0730 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D37F4 002D0734 48 06 B9 29 */ bl OSUnlockMutex
/* 802D37F8 002D0738 38 60 00 00 */ li r3, 0
/* 802D37FC 002D073C 48 00 00 24 */ b lbl_802D3820
lbl_802D3800:
/* 802D3800 002D0740 3C 60 80 43 */ lis r3, lbl_80434324@ha
/* 802D3804 002D0744 38 63 43 24 */ addi r3, r3, lbl_80434324@l
/* 802D3808 002D0748 38 9E 00 20 */ addi r4, r30, 0x20
/* 802D380C 002D074C 48 00 89 51 */ bl remove__10JSUPtrListFP10JSUPtrLink
/* 802D3810 002D0750 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D3814 002D0754 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D3818 002D0758 48 06 B9 05 */ bl OSUnlockMutex
/* 802D381C 002D075C 38 60 00 01 */ li r3, 1
lbl_802D3820:
/* 802D3820 002D0760 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 802D3824 002D0764 83 C1 00 18 */ lwz r30, 0x18(r1)
/* 802D3828 002D0768 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D382C 002D076C 7C 08 03 A6 */ mtlr r0
/* 802D3830 002D0770 38 21 00 20 */ addi r1, r1, 0x20
/* 802D3834 002D0774 4E 80 00 20 */ blr

View File

@ -1,39 +0,0 @@
/* orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock JKRAramPiece::orderSync(int, unsigned long, unsigned long, unsigned long, JKRAramBlock *) */
/* JKRAramPiece_NS_orderSync */
/* 802D3838 002D0778 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802D383C 002D077C 7C 08 02 A6 */ mflr r0
/* 802D3840 002D0780 90 01 00 24 */ stw r0, 0x24(r1)
/* 802D3844 002D0784 39 61 00 20 */ addi r11, r1, 0x20
/* 802D3848 002D0788 48 08 E9 8D */ bl _savegpr_27
/* 802D384C 002D078C 7C 7B 1B 78 */ mr r27, r3
/* 802D3850 002D0790 7C 9C 23 78 */ mr r28, r4
/* 802D3854 002D0794 7C BD 2B 78 */ mr r29, r5
/* 802D3858 002D0798 7C DF 33 78 */ mr r31, r6
/* 802D385C 002D079C 7C FE 3B 78 */ mr r30, r7
/* 802D3860 002D07A0 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D3864 002D07A4 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D3868 002D07A8 48 06 B7 D9 */ bl OSLockMutex
/* 802D386C 002D07AC 7F 63 DB 78 */ mr r3, r27
/* 802D3870 002D07B0 7F 84 E3 78 */ mr r4, r28
/* 802D3874 002D07B4 7F A5 EB 78 */ mr r5, r29
/* 802D3878 002D07B8 7F E6 FB 78 */ mr r6, r31
/* 802D387C 002D07BC 7F C7 F3 78 */ mr r7, r30
/* 802D3880 002D07C0 39 00 00 00 */ li r8, 0
/* 802D3884 002D07C4 4B FF FD 91 */ bl orderAsync__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v
/* 802D3888 002D07C8 7C 7F 1B 78 */ mr r31, r3
/* 802D388C 002D07CC 38 80 00 00 */ li r4, 0
/* 802D3890 002D07D0 4B FF FE E1 */ bl sync__12JKRAramPieceFP12JKRAMCommandi
/* 802D3894 002D07D4 7C 7E 1B 78 */ mr r30, r3
/* 802D3898 002D07D8 7F E3 FB 78 */ mr r3, r31
/* 802D389C 002D07DC 38 80 00 01 */ li r4, 1
/* 802D38A0 002D07E0 48 00 01 BD */ bl __dt__12JKRAMCommandFv
/* 802D38A4 002D07E4 3C 60 80 43 */ lis r3, lbl_80434330@ha
/* 802D38A8 002D07E8 38 63 43 30 */ addi r3, r3, lbl_80434330@l
/* 802D38AC 002D07EC 48 06 B8 71 */ bl OSUnlockMutex
/* 802D38B0 002D07F0 7F C3 F3 78 */ mr r3, r30
/* 802D38B4 002D07F4 39 61 00 20 */ addi r11, r1, 0x20
/* 802D38B8 002D07F8 48 08 E9 69 */ bl _restgpr_27
/* 802D38BC 002D07FC 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802D38C0 002D0800 7C 08 03 A6 */ mtlr r0
/* 802D38C4 002D0804 38 21 00 20 */ addi r1, r1, 0x20
/* 802D38C8 002D0808 4E 80 00 20 */ blr

View File

@ -1,34 +0,0 @@
/* startDMA__12JKRAramPieceFP12JKRAMCommand JKRAramPiece::startDMA(JKRAMCommand *) */
/* JKRAramPiece_NS_startDMA */
/* 802D38CC 002D080C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D38D0 002D0810 7C 08 02 A6 */ mflr r0
/* 802D38D4 002D0814 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D38D8 002D0818 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D38DC 002D081C 7C 7F 1B 78 */ mr r31, r3
/* 802D38E0 002D0820 80 03 00 40 */ lwz r0, 0x40(r3)
/* 802D38E4 002D0824 2C 00 00 01 */ cmpwi r0, 1
/* 802D38E8 002D0828 40 82 00 14 */ bne lbl_802D38FC
/* 802D38EC 002D082C 80 7F 00 4C */ lwz r3, 0x4c(r31)
/* 802D38F0 002D0830 80 9F 00 44 */ lwz r4, 0x44(r31)
/* 802D38F4 002D0834 48 06 7C 8D */ bl DCInvalidateRange
/* 802D38F8 002D0838 48 00 00 10 */ b lbl_802D3908
lbl_802D38FC:
/* 802D38FC 002D083C 80 7F 00 48 */ lwz r3, 0x48(r31)
/* 802D3900 002D0840 80 9F 00 44 */ lwz r4, 0x44(r31)
/* 802D3904 002D0844 48 06 7C D9 */ bl DCStoreRange
lbl_802D3908:
/* 802D3908 002D0848 7F E3 FB 78 */ mr r3, r31
/* 802D390C 002D084C 38 80 00 00 */ li r4, 0
/* 802D3910 002D0850 80 BF 00 40 */ lwz r5, 0x40(r31)
/* 802D3914 002D0854 38 C0 00 00 */ li r6, 0
/* 802D3918 002D0858 80 FF 00 48 */ lwz r7, 0x48(r31)
/* 802D391C 002D085C 81 1F 00 4C */ lwz r8, 0x4c(r31)
/* 802D3920 002D0860 81 3F 00 44 */ lwz r9, 0x44(r31)
/* 802D3924 002D0864 3D 40 80 2D */ lis r10, doneDMA__12JKRAramPieceFUl@ha
/* 802D3928 002D0868 39 4A 39 44 */ addi r10, r10, doneDMA__12JKRAramPieceFUl@l
/* 802D392C 002D086C 48 07 E9 A9 */ bl ARQPostRequest
/* 802D3930 002D0870 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D3934 002D0874 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3938 002D0878 7C 08 03 A6 */ mtlr r0
/* 802D393C 002D087C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3940 002D0880 4E 80 00 20 */ blr

View File

@ -1,49 +0,0 @@
/* doneDMA__12JKRAramPieceFUl JKRAramPiece::doneDMA(unsigned long) */
/* JKRAramPiece_NS_doneDMA */
/* 802D3944 002D0884 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D3948 002D0888 7C 08 02 A6 */ mflr r0
/* 802D394C 002D088C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3950 002D0890 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D3954 002D0894 7C 7F 1B 78 */ mr r31, r3
/* 802D3958 002D0898 80 03 00 40 */ lwz r0, 0x40(r3)
/* 802D395C 002D089C 2C 00 00 01 */ cmpwi r0, 1
/* 802D3960 002D08A0 40 82 00 10 */ bne lbl_802D3970
/* 802D3964 002D08A4 80 7F 00 4C */ lwz r3, 0x4c(r31)
/* 802D3968 002D08A8 80 9F 00 44 */ lwz r4, 0x44(r31)
/* 802D396C 002D08AC 48 06 7C 15 */ bl DCInvalidateRange
lbl_802D3970:
/* 802D3970 002D08B0 80 1F 00 60 */ lwz r0, 0x60(r31)
/* 802D3974 002D08B4 2C 00 00 00 */ cmpwi r0, 0
/* 802D3978 002D08B8 41 82 00 18 */ beq lbl_802D3990
/* 802D397C 002D08BC 2C 00 00 02 */ cmpwi r0, 2
/* 802D3980 002D08C0 40 82 00 58 */ bne lbl_802D39D8
/* 802D3984 002D08C4 80 7F 00 64 */ lwz r3, 0x64(r31)
/* 802D3988 002D08C8 48 00 7F 49 */ bl sendCommand__9JKRDecompFP16JKRDecompCommand
/* 802D398C 002D08CC 48 00 00 4C */ b lbl_802D39D8
lbl_802D3990:
/* 802D3990 002D08D0 81 9F 00 58 */ lwz r12, 0x58(r31)
/* 802D3994 002D08D4 28 0C 00 00 */ cmplwi r12, 0
/* 802D3998 002D08D8 41 82 00 14 */ beq lbl_802D39AC
/* 802D399C 002D08DC 7F E3 FB 78 */ mr r3, r31
/* 802D39A0 002D08E0 7D 89 03 A6 */ mtctr r12
/* 802D39A4 002D08E4 4E 80 04 21 */ bctrl
/* 802D39A8 002D08E8 48 00 00 30 */ b lbl_802D39D8
lbl_802D39AC:
/* 802D39AC 002D08EC 80 7F 00 5C */ lwz r3, 0x5c(r31)
/* 802D39B0 002D08F0 28 03 00 00 */ cmplwi r3, 0
/* 802D39B4 002D08F4 41 82 00 14 */ beq lbl_802D39C8
/* 802D39B8 002D08F8 7F E4 FB 78 */ mr r4, r31
/* 802D39BC 002D08FC 38 A0 00 00 */ li r5, 0
/* 802D39C0 002D0900 48 06 B0 35 */ bl OSSendMessage
/* 802D39C4 002D0904 48 00 00 14 */ b lbl_802D39D8
lbl_802D39C8:
/* 802D39C8 002D0908 38 7F 00 68 */ addi r3, r31, 0x68
/* 802D39CC 002D090C 7F E4 FB 78 */ mr r4, r31
/* 802D39D0 002D0910 38 A0 00 00 */ li r5, 0
/* 802D39D4 002D0914 48 06 B0 21 */ bl OSSendMessage
lbl_802D39D8:
/* 802D39D8 002D0918 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D39DC 002D091C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D39E0 002D0920 7C 08 03 A6 */ mtlr r0
/* 802D39E4 002D0924 38 21 00 10 */ addi r1, r1, 0x10
/* 802D39E8 002D0928 4E 80 00 20 */ blr

View File

@ -1,30 +0,0 @@
/* __ct__12JKRAMCommandFv __ct__12JKRAMCommandFv::__ct(void) */
/* JKRAMCommand */
/* 802D39EC 002D092C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D39F0 002D0930 7C 08 02 A6 */ mflr r0
/* 802D39F4 002D0934 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D39F8 002D0938 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D39FC 002D093C 7C 7F 1B 78 */ mr r31, r3
/* 802D3A00 002D0940 7F E4 FB 78 */ mr r4, r31
/* 802D3A04 002D0944 38 64 00 20 */ addi r3, r4, 0x20
/* 802D3A08 002D0948 48 00 83 F5 */ bl __ct__10JSUPtrLinkFPv
/* 802D3A0C 002D094C 38 7F 00 30 */ addi r3, r31, 0x30
/* 802D3A10 002D0950 7F E4 FB 78 */ mr r4, r31
/* 802D3A14 002D0954 48 00 83 E9 */ bl __ct__10JSUPtrLinkFPv
/* 802D3A18 002D0958 38 7F 00 68 */ addi r3, r31, 0x68
/* 802D3A1C 002D095C 38 9F 00 88 */ addi r4, r31, 0x88
/* 802D3A20 002D0960 38 A0 00 01 */ li r5, 1
/* 802D3A24 002D0964 48 06 AF 71 */ bl OSInitMessageQueue
/* 802D3A28 002D0968 38 00 00 00 */ li r0, 0
/* 802D3A2C 002D096C 90 1F 00 58 */ stw r0, 0x58(r31)
/* 802D3A30 002D0970 90 1F 00 5C */ stw r0, 0x5c(r31)
/* 802D3A34 002D0974 90 1F 00 60 */ stw r0, 0x60(r31)
/* 802D3A38 002D0978 90 1F 00 8C */ stw r0, 0x8c(r31)
/* 802D3A3C 002D097C 90 1F 00 90 */ stw r0, 0x90(r31)
/* 802D3A40 002D0980 90 1F 00 94 */ stw r0, 0x94(r31)
/* 802D3A44 002D0984 7F E3 FB 78 */ mr r3, r31
/* 802D3A48 002D0988 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D3A4C 002D098C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3A50 002D0990 7C 08 03 A6 */ mtlr r0
/* 802D3A54 002D0994 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3A58 002D0998 4E 80 00 20 */ blr

View File

@ -1,50 +0,0 @@
/* __dt__12JKRAMCommandFv __ct__12JKRAMCommandFv::__dt(void) */
/* JKRAMCommand_NS_dtor */
/* 802D3A5C 002D099C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D3A60 002D09A0 7C 08 02 A6 */ mflr r0
/* 802D3A64 002D09A4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802D3A68 002D09A8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802D3A6C 002D09AC 93 C1 00 08 */ stw r30, 8(r1)
/* 802D3A70 002D09B0 7C 7E 1B 79 */ or. r30, r3, r3
/* 802D3A74 002D09B4 7C 9F 23 78 */ mr r31, r4
/* 802D3A78 002D09B8 41 82 00 70 */ beq lbl_802D3AE8
/* 802D3A7C 002D09BC 80 7E 00 8C */ lwz r3, 0x8c(r30)
/* 802D3A80 002D09C0 28 03 00 00 */ cmplwi r3, 0
/* 802D3A84 002D09C4 41 82 00 08 */ beq lbl_802D3A8C
/* 802D3A88 002D09C8 4B FF B2 B5 */ bl __dl__FPv
lbl_802D3A8C:
/* 802D3A8C 002D09CC 80 7E 00 90 */ lwz r3, 0x90(r30)
/* 802D3A90 002D09D0 28 03 00 00 */ cmplwi r3, 0
/* 802D3A94 002D09D4 41 82 00 08 */ beq lbl_802D3A9C
/* 802D3A98 002D09D8 4B FF B2 A5 */ bl __dl__FPv
lbl_802D3A9C:
/* 802D3A9C 002D09DC 80 7E 00 94 */ lwz r3, 0x94(r30)
/* 802D3AA0 002D09E0 28 03 00 00 */ cmplwi r3, 0
/* 802D3AA4 002D09E4 41 82 00 0C */ beq lbl_802D3AB0
/* 802D3AA8 002D09E8 38 80 00 00 */ li r4, 0
/* 802D3AAC 002D09EC 4B FF AA 55 */ bl free__7JKRHeapFPvP7JKRHeap
lbl_802D3AB0:
/* 802D3AB0 002D09F0 34 1E 00 30 */ addic. r0, r30, 0x30
/* 802D3AB4 002D09F4 41 82 00 10 */ beq lbl_802D3AC4
/* 802D3AB8 002D09F8 38 7E 00 30 */ addi r3, r30, 0x30
/* 802D3ABC 002D09FC 38 80 00 00 */ li r4, 0
/* 802D3AC0 002D0A00 48 00 83 55 */ bl __dt__10JSUPtrLinkFv
lbl_802D3AC4:
/* 802D3AC4 002D0A04 34 1E 00 20 */ addic. r0, r30, 0x20
/* 802D3AC8 002D0A08 41 82 00 10 */ beq lbl_802D3AD8
/* 802D3ACC 002D0A0C 38 7E 00 20 */ addi r3, r30, 0x20
/* 802D3AD0 002D0A10 38 80 00 00 */ li r4, 0
/* 802D3AD4 002D0A14 48 00 83 41 */ bl __dt__10JSUPtrLinkFv
lbl_802D3AD8:
/* 802D3AD8 002D0A18 7F E0 07 35 */ extsh. r0, r31
/* 802D3ADC 002D0A1C 40 81 00 0C */ ble lbl_802D3AE8
/* 802D3AE0 002D0A20 7F C3 F3 78 */ mr r3, r30
/* 802D3AE4 002D0A24 4B FF B2 59 */ bl __dl__FPv
lbl_802D3AE8:
/* 802D3AE8 002D0A28 7F C3 F3 78 */ mr r3, r30
/* 802D3AEC 002D0A2C 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802D3AF0 002D0A30 83 C1 00 08 */ lwz r30, 8(r1)
/* 802D3AF4 002D0A34 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802D3AF8 002D0A38 7C 08 03 A6 */ mtlr r0
/* 802D3AFC 002D0A3C 38 21 00 10 */ addi r1, r1, 0x10
/* 802D3B00 002D0A40 4E 80 00 20 */ blr

View File

@ -135,6 +135,17 @@ public:
return *this;
}
JSUListIterator<T> operator--(int) {
JSUListIterator<T> prev = *this;
this->mLink = this->mLink->getPrev();
return prev;
}
JSUListIterator<T>& operator--() {
this->mLink = this->mLink->getPrev();
return *this;
}
T& operator*() { return *this->getObject(); }
T* operator->() { return this->getObject(); }

25
include/ar/ARQ.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef __ARQ_H__
#define __ARQ_H__
#include "dolphin/types.h"
typedef void (*ARQCallback)(u32 request_address);
struct ARQRequest {
ARQRequest* next;
u32 owner;
u32 type;
u32 priority;
u32 source;
u32 destination;
u32 length;
ARQCallback callback;
};
extern "C" {
void ARQInit(void);
void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source,
u32 destination, u32 length, ARQCallback callback);
}
#endif

View File

@ -32,5 +32,6 @@ typedef int BOOL;
#define NULL (0)
#define INT32_MAX (0x7fffffff)
#define UINT32_MAX (0xffffffff)
#endif

View File

@ -1,3 +1,5 @@
#include "os/OS.h"
extern "C" {
void read__8mDoCPd_cFv(void);
void create__8mDoCPd_cFv(void);
@ -20,11 +22,9 @@ void PSMTXScale(void);
void screenSet__12dFile_info_cFv(void);
void dFile_info_c_NS_screenSet(void);
void mDoExt_removeMesgFont(void);
void JKRAramHeap_NS_getTotalFreeSize(void);
void JKRAramHeap_NS_getFreeSize(void);
void heapDisplay__9HeapCheckCFv(void);
void init__20dSv_player_collect_cFv(void);
void dComIfGp_setSelectItem(int);
void getUsedCount__9HeapCheckCFv(void);
@ -32,11 +32,9 @@ void isEventBit__11dSv_event_cCFUs(void);
char* strcpy(char*, const char*);
int strcmp(char*, char*);
void setBombNum__21dSv_player_item_max_cFUcUc(void);
void func_803620AC(void);
void func_803626BC(void);
void func_803664DC(void);
void JKRAramHeap_NS_dump(void);
void dRes_control_c_NS_dump(void);
void JUTConsole_NS_getLineOffset(void);
@ -46,7 +44,6 @@ void JUTConsole_NS_clear(void);
void JUTReport_X1_(void);
void JUTAssertion_NS_setMessageCount(void);
void DynamicModuleControlBase_NS_dump(void);
unsigned int getSelectItemIndex__21dSv_player_status_a_cCFi(int);
void setLineUpItem__17dSv_player_item_cFv(void);
void dMeter2Info_c_NS_setHotSpringTimer(void);
@ -89,17 +86,13 @@ void isItem__12dSv_memBit_cCFi(void);
void isItem__12dSv_danBit_cCFi(void);
void off__15dSv_zoneActor_cFi(void);
void is__15dSv_zoneActor_cCFi(void);
void onEventBit__11dSv_event_cFUs(void);
void func_8036687C(void);
void func_80003540(void);
void func_80362324(void);
void countUsed__FP10JKRExpHeap(void);
void JUTReport(void);
void offEventBit__11dSv_event_cFUs(void);
void dMeter2Info_c_NS_setSaveStageName(void);
void dComIfG_play_c_NS_setNowVibration(void);
void getVibration__19dSv_player_config_cFv(void);
@ -161,19 +154,15 @@ void JUTConsole_NS_clear(void);
void JUTReportConsole_f(void);
void JUTWarningConsole(void);
void JUTWarningConsole_f(void);
void VIWaitForRetrace(void);
void func_80361C24(void);
void func_80003540(void);
void func_80365470(void);
void func_803688DC(void);
void func_80368ABC(void);
void func_80368BE4(void);
void JKRArchive_NS_getDirEntry(void);
void func_80361C24(void);
void JKRArchive_NS_findDirectory(void);
void JKRArchive_NS_findFsResource(void);
void JKRArchive_NS_findIdResource(void);
@ -182,49 +171,34 @@ void JKRArchive_NS_findNameResource(void);
void JKRArchive_NS_findPtrResource(void);
void JKRArchive_NS_findTypeResource(void);
void JKRCompArchive(void);
void func_80365470(void);
void DCInvalidateRange(void);
void DCStoreRange(void*, u32);
void DCInvalidateRange(void*, u32);
void DCStoreRangeNoSync(void);
void JKRDvdRipper_NS_loadToMainRAM_X1_(void);
void func_80003458(void);
void func_803650D0(void);
void JKRDecomp_NS_orderSync(void);
void func_80003540(void);
void JKRAramHeap_NS_alloc(void);
void JKRAram_NS_aramToMainRam(void);
void JKRDvdAramRipper_NS_loadToAram(void);
void JKRAram_NS_mainRamToAram(void);
void JKRAramPiece_NS_sendCommand(void);
void DCInvalidateRange(void);
void DCStoreRangeNoSync(void);
void __RAS_OSDisableInterrupts_begin(void);
void func_80003540(void);
void func_80361C24(void);
void ARQPostRequest(void);
void DCStoreRange(void);
void JSUInputStream_NS_read(void);
void JSURandomInputStream_NS_seek(void);
void DCInvalidateRange(void);
void JSUInputStream_NS_dtor(void);
void JSUFileInputStream_ct(void);
void ARAlloc(void);
void ARGetSize(void);
void ARInit(void);
void ARQInit(void);
void DCStoreRangeNoSync(void);
void __RAS_OSDisableInterrupts_begin(void);
u8 dComIfGs_getBottleMax(void);
}
#include "os/OS.h"
extern "C" {
u32 OSGetResetSwitchState(void);
@ -258,7 +232,6 @@ void PSMTXScale(void);
void screenSet__12dFile_info_cFv(void);
void dFile_info_c_NS_screenSet(void);
void mDoExt_removeMesgFont(void);
void JKRAramHeap_NS_getTotalFreeSize(void);
void JKRAramHeap_NS_getFreeSize(void);
void heapDisplay__9HeapCheckCFv(void);
@ -273,7 +246,6 @@ void dComIfGs_getMixItemIndex(int);
char* strcpy(char*, const char*);
int strcmp(char*, char*);
void setBombNum__21dSv_player_item_max_cFUcUc(void);
void func_803620AC(void);
void func_803626BC(void);
void func_803664DC(void);
@ -429,10 +401,8 @@ void JKRCompArchive(void);
void func_80365470(void);
void DCInvalidateRange(void);
void JKRDvdRipper_NS_loadToMainRAM_X1_(void);
void func_80003458(void);
void func_803650D0(void);
void JKRDecomp_NS_orderSync(void);
@ -444,26 +414,19 @@ void JKRDvdAramRipper_NS_loadToAram(void);
void JKRAram_NS_mainRamToAram(void);
void JKRAramPiece_NS_sendCommand(void);
void DCInvalidateRange(void);
void DCStoreRangeNoSync(void);
void __RAS_OSDisableInterrupts_begin(void);
void func_80003540(void);
void func_80361C24(void);
void ARQPostRequest(void);
void DCStoreRange(void);
void JSUInputStream_NS_read(void);
void JSURandomInputStream_NS_seek(void);
void DCInvalidateRange(void);
void JSUInputStream_NS_dtor(void);
void JSUFileInputStream_ct(void);
void ARAlloc(void);
void ARGetSize(void);
void ARInit(void);
void ARQInit(void);
void DCStoreRangeNoSync(void);
void __RAS_OSDisableInterrupts_begin(void);
u8 dComIfGs_getBottleMax(void);
@ -732,12 +695,10 @@ void item_func_BEE_CHILD(void);
int func_80368954(char*, char*, u32);
void dComIfG_play_c_NS_getLayerNo(int);
u32 isMagicFlag__21dSv_player_status_a_cCFUc(u8);
void dComIfG_play_c_NS_setItemBombNumCount(u8, s16);
void setEmptyBombBagItemIn__17dSv_player_item_cFUcUcb(u8, bool);
u32 getBombNum__21dSv_player_item_max_cCFUc(u8);
u8 getBombNum__24dSv_player_item_record_cCFUc(u8);
int checkItemGet__FUci(u8, int);
}
@ -1188,7 +1149,6 @@ void dAttention_c_NS_stockAttention(void);
void distace_angle_adjust(void);
void dAttDraw_c_NS_draw(void);
void dAttCatch_c_NS_convPId(void);
void dAttDraw_c_NS_setAnm(void);
void dAttention_c_NS_lockSoundStart(void);
void fopAcM_searchActorDistance(void);
@ -1273,6 +1233,7 @@ void dAttDraw_c_NS_alphaAnm(void);
void dAttention_c_NS_LockonReleaseDistanse(void);
void dAttention_c_NS_runDebugDisp(void);
// void dAttParam_c(void);
void dAttention_c_NS_judgementStatus4Hold(void);
void dAttention_c_NS_calcWeight(void);
void dAttHint_c_NS_getPId(void);
@ -1331,7 +1292,6 @@ void func_801119D8(void);
void daAlink_c_NS_setLandPassiveData(void);
void func_800D0290(void);
void daAlink_c_NS_setCutTurnEffect(void);
void func_8014190C(void);
void daAlink_c_NS_checkHorseGetOffDirection(void);
void func_80101534(void);
@ -1592,7 +1552,6 @@ void daAlink_c_NS_getSwimMaxFallSpeed(void);
void JPAParticleCallBack_NS_dtor(void);
void func_801417D4(void);
void func_8011E960(void);
void setLinkBootsType__14Z2CreatureLinkFl(void);
void cM_atan2s(void);
void daAlink_c_NS_setLastSceneMode(void);
@ -1928,7 +1887,6 @@ void dStage_stagInfo_GetSaveTbl(void);
void daAlink_c_NS_setWolfScreamWaitAnime(void);
void daObjSwHang_c_NS_getHangPos(void);
void func_800C4514(void);
void daAlink_c_NS_checkAtnWaitAnime(void);
void dKy_plight_cut(void);
void Z2Creature_NS_updateAnime(void);
@ -2127,7 +2085,6 @@ void func_800D0688(void);
void daAlink_c_NS_checkHangStartSideWall(void);
void daAlink_c_NS_setDrawHand(void);
void cM_rnd(void);
void dCcD_GObjInf_NS_GetAtHitGObj(void);
void dBgS_RoofChk(void);
void daAlink_c_NS_getCutDirection(void);
@ -2225,7 +2182,6 @@ void func_801391DC(void);
void daAlink_c_NS_setWolfAnmVoice(void);
void func_80362018(void);
void daAlink_c_NS_resetWolfAtCollision(void);
void func_800EA4CC(void);
void daAlink_c_NS_getLadderMoveAnmSpeed(void);
void daAlink_c_NS_checkBoomerangCatchAction(void);
@ -2853,7 +2809,6 @@ void func_80140038(void);
void daAlink_c_NS_seStartSwordCut(void);
void daAlink_c_NS_checkItemButtonChange(void);
void daAlink_c_NS_setOctaIealHangPos(void);
void daAlink_c_NS_procCutJumpInit(void);
void func_8011A5CC(void);
void daAlink_c_NS_checkWolfComboCnt(void);
@ -4135,7 +4090,6 @@ void dComIfGs_setWarpItemData_X1_(void);
void dMeter2Info_setNewLetterSender(void);
void dMeter2Info_getNewLetterNum(void);
void dMsgFlow_c_NS_getMsgNo(void);
void func_8021C11C(void);
void dMeter2Info_c_NS_isFloatingMessageVisible(void);
void dMeter2Info_c_NS_changeWater(void);
@ -4162,7 +4116,6 @@ void dMeter2Info_c_NS_resetMeterString(void);
void offFirstBit__21dSv_player_get_item_cFUc(void);
void dComIfGs_setWarpMarkFlag(void);
void func_8021C7F4(void);
void dMeter2Info_c_NS_decMsgKeyWaitTimer(void);
void dMeter2Info_c_NS_getItemType(void);
void isLetterGetFlag__17dSv_letter_info_cCFi(void);
@ -4702,7 +4655,6 @@ void dKy_efplight_cut(void);
void forward_overhead_bg_chk(void);
void dKy_set_bgcol_ratio(void);
void dKy_GxFog_set(void);
void GXSetZCompLoc(void);
void dKyr_moon_arrival_check(void);
void PSVECAdd(Vec*, Vec*, Vec*);
@ -4710,7 +4662,6 @@ void dKy_set_vrboxcol_ratio(void);
void func_8036C590(void);
void dBgS_CamGndChk_Wtr_NS_dtor(void);
void func_8006F160(void);
void dBgS_ObjGndChk_All_NS_dtor(void);
void dKy_bg_addcol_amb_set(void);
void dKy_set_fogcol_ratio(void);
@ -4734,7 +4685,6 @@ void vectle_calc_X1_(void);
void dKy_vrbox_addcol_sky0_set(void);
void dKy_efplight_set(void);
void dKy_set_actcol_ratio(void);
void PSMTXRotRad(void);
void daPy_py_c_NS_checkNowWolfEyeUp(void);
void dKyr_near_bosslight_check(void);
@ -4884,7 +4834,6 @@ void func_801A7814(void);
void func_801A789C(void);
void dKy_bg3_addcol_amb_set(void);
void dScnKy_env_light_c_NS_Eflight_flush_proc(void);
void func_801A441C(void);
void BOSS_LIGHT_NS_dtor(void);
void dKy_Outdoor_check(void);
@ -4901,7 +4850,6 @@ void dKy_ParticleColor_get_base(void);
void dScnKy_env_light_c_NS_setSunpos(void);
void dKy_ParticleColor_get_actor(void);
void dKy_pol_eff2_ratio_get(void);
void dKy_darkworld_Area_set(void);
void dKy_shadow_mode_check(void);
void mDoGph_gInf_c_NS_bloom_c_NS_create(void);

View File

@ -3,11 +3,18 @@
#define ARRAY_SIZE(o) (sizeof((o)) / sizeof(*(o)))
// Align X to the previous N bytes (N must be power of two)
#define ALIGN_PREV(X, N) ((X) & ~((N)-1))
// Align X to the next N bytes (N must be power of two)
#define ALIGN_NEXT(X, N) ALIGN_PREV(((X) + (N)-1), N)
struct Vec {
float x, y, z;
};
#include "dolphin/types.h"
#include "ar/ARQ.h"
#include "functions.h"
#include "mwcc.h"
#include "os/OS.h"

View File

@ -8,6 +8,9 @@
/* TODO: more structs, and get rid of the ones that are faked! */
#define OS_MESSAGE_NON_BLOCKING 0
#define OS_MESSAGE_BLOCKING 1
struct OSMutex {
u8 unk[24];
};
@ -99,7 +102,7 @@ bool OSIsThreadTerminated(OSThread* thread);
OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback* callback);
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* messages, int message_count);
void OSReceiveMessage(OSMessageQueue* queue, OSMessage message, int flags);
BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage message, int flags);
void OSSendMessage(OSMessageQueue* queue, OSMessage message, int flags);
s32 OSGetConsoleType(void);

View File

@ -307,12 +307,13 @@ extern u8 lbl_803CC168; // JKRAramHeap::__vt
extern u8 lbl_80434300; // JKernel::@297 (global destructor chain)
class JKRAramBlock;
extern JSUList<JKRAramBlock> lbl_8043430C; // JKRAramHeap::sAramList
class JKRAMCommand;
extern JSUList<JKRAMCommand> lbl_80434324; // JKRAramPiece::sAramPieceCommandList
extern OSMutex lbl_80434330; // JKRAramPiece::mMutex
extern char lbl_8039D0B8[]; // "direction = %x\n"
extern u8 lbl_80434324; // JKRAramPiece::sAramPieceCommandList
extern u8 lbl_80434330; // JKRAramPiece::mMutex
extern u8 lbl_8039D0B8; // "direction = %x\n"
extern u8 lbl_80434318; // JKernel::@492 (global destructor chain)
extern u8 lbl_803CC138; // JKRAram::sMessageQueue
extern u8 lbl_80434318; // JKernel::@492 (global destructor chain)
extern OSMessageQueue lbl_803CC138; // JKRAram::sMessageQueue
extern u8 lbl_80451408; // JKRAramStream::sAramStreamObject
extern u8 lbl_80451414; // JKRAramStream::transHeap
@ -371,7 +372,6 @@ extern u8 lbl_80451404; // JKernel::tsArea (static?)
extern u8 lbl_803CC158; // JKRAram::__vt
extern u8 lbl_8039D078; // "JKRAram.cpp"
extern u8 lbl_804342D0; // JKernel::@492 (global destructor chain)
extern u8 lbl_803CC138; // JKRAram::sMessageQueue
extern u8 lbl_804342DC; // JKRAram::sAramCommandList
extern u8 lbl_804342E8; // JKernel::decompMutex (static?)
extern u8 lbl_804508B8; // JKRAram::sSZSBufferSize
@ -404,7 +404,6 @@ extern u8 lbl_80451404; // JKernel::tsArea (static?)
extern u8 lbl_803CC158; // JKRAram::__vt
extern u8 lbl_8039D078; // "JKRAram.cpp"
extern u8 lbl_804342D0; // JKernel::@492 (global destructor chain)
extern u8 lbl_803CC138; // JKRAram::sMessageQueue
extern u8 lbl_804342DC; // JKRAram::sAramCommandList
extern u8 lbl_804342E8; // JKernel::decompMutex (static?)
extern u8 lbl_804508B8; // JKRAram::sSZSBufferSize

View File

@ -5,56 +5,56 @@
JKRAramBlock::JKRAramBlock(u32 address, u32 size, u32 freeSize, u8 groupId, bool isTempMemory)
: mBlockLink(this) {
this->mAddress = address;
this->mSize = size;
this->mFreeSize = freeSize;
this->mGroupId = groupId;
this->mIsTempMemory = isTempMemory;
mAddress = address;
mSize = size;
mFreeSize = freeSize;
mGroupId = groupId;
mIsTempMemory = isTempMemory;
}
JKRAramBlock::~JKRAramBlock() {
JSUList<JKRAramBlock>* list = this->mBlockLink.getSupervisor();
JSULink<JKRAramBlock>* prev = this->mBlockLink.getPrev();
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
JSULink<JKRAramBlock>* prev = mBlockLink.getPrev();
if (prev) {
JKRAramBlock* block = prev->getObject();
block->mFreeSize = this->mSize + this->mFreeSize + block->mFreeSize;
list->remove(&this->mBlockLink);
block->mFreeSize = mSize + mFreeSize + block->mFreeSize;
list->remove(&mBlockLink);
} else {
this->mFreeSize = this->mFreeSize + this->mSize;
this->mSize = 0;
mFreeSize = mFreeSize + mSize;
mSize = 0;
}
}
JKRAramBlock* JKRAramBlock::allocHead(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
u32 address = this->mAddress;
u32 usedSize = this->mSize;
u32 address = mAddress;
u32 usedSize = mSize;
u32 nextAddress = address + usedSize;
u32 freeSize = this->mFreeSize;
u32 freeSize = mFreeSize;
u32 nextFreeSize = freeSize - size;
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0)
JKRAramBlock(nextAddress, size, nextFreeSize, groupId, false);
this->mFreeSize = 0;
JSULink<JKRAramBlock>* next = this->mBlockLink.getNext();
JSUList<JKRAramBlock>* list = this->mBlockLink.getSupervisor();
mFreeSize = 0;
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
list->insert(next, &block->mBlockLink);
return block;
}
JKRAramBlock* JKRAramBlock::allocTail(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
u32 freeSize = this->mFreeSize;
u32 address = this->mAddress;
u32 usedSize = this->mSize;
u32 freeSize = mFreeSize;
u32 address = mAddress;
u32 usedSize = mSize;
u32 endAddress = address + usedSize + freeSize;
u32 tailAddress = endAddress - size;
JKRAramBlock* block =
new (aramHeap->getMgrHeap(), 0) JKRAramBlock(tailAddress, size, 0, groupId, true);
this->mFreeSize -= size;
JSULink<JKRAramBlock>* next = this->mBlockLink.getNext();
JSUList<JKRAramBlock>* list = this->mBlockLink.getSupervisor();
mFreeSize -= size;
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
list->insert(next, &block->mBlockLink);
return block;
}

View File

@ -1,44 +1,145 @@
#include "JSystem/JKernel/JKRAramHeap/JKRAramHeap.h"
#include "global.h"
asm JKRAramHeap::JKRAramHeap(u32, u32) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D2E44.s"
#include "JSystem/JKernel/JKRAramBlock/JKRAramBlock.h"
JKRAramHeap::JKRAramHeap(u32 startAddress, u32 size) {
OSInitMutex(&mMutex);
mHeap = JKRHeap::findFromRoot(this);
mSize = ALIGN_PREV(size, 0x20);
mHeadAddress = ALIGN_NEXT(startAddress, 0x20);
mTailAddress = mHeadAddress + mSize;
mGroupId = -1;
JKRAramBlock* block = new (mHeap, 0) JKRAramBlock(mHeadAddress, 0, mSize, -1, false);
lbl_8043430C.append(&block->mBlockLink);
}
asm JKRAramHeap::~JKRAramHeap(void) {
// close match, regalloc problem in the beginning of the while loop
#if NONMATCHING
JKRAramHeap::~JKRAramHeap() {
JSUList<JKRAramBlock>* list = &lbl_8043430C;
JSUListIterator<JKRAramBlock> iterator = list;
while (iterator != list->getEnd()) {
JSUListIterator<JKRAramBlock> prev = iterator;
JKRAramBlock* block = prev.getObject();
delete block;
}
}
#else
asm JKRAramHeap::~JKRAramHeap() {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D2F14.s"
}
#endif
asm void JKRAramHeap::alloc(u32, JKRAramHeap::EAllocMode) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D2FBC.s"
JKRAramBlock* JKRAramHeap::alloc(u32 size, JKRAramHeap::EAllocMode allocationMode) {
lock();
JKRAramBlock* block;
if (allocationMode == JKRAramHeap::HEAD) {
block = allocFromHead(size);
} else {
block = allocFromTail(size);
}
unlock();
return block;
}
asm void JKRAramHeap::allocFromHead(u32) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D3034.s"
JKRAramBlock* JKRAramHeap::allocFromHead(u32 size) {
u32 alignedSize = ALIGN_NEXT(size, 0x20);
u32 bestFreeSize = UINT32_MAX;
JKRAramBlock* bestBlock = NULL;
JSUList<JKRAramBlock>* list = &lbl_8043430C;
for (JSUListIterator<JKRAramBlock> iterator = list; iterator != list->getEnd(); ++iterator) {
JKRAramBlock* block = iterator.getObject();
if (block->mFreeSize < alignedSize)
continue;
if (bestFreeSize <= block->mFreeSize)
continue;
bestFreeSize = block->mFreeSize;
bestBlock = block;
if (block->mFreeSize == alignedSize) {
break;
}
}
if (bestBlock) {
return bestBlock->allocHead(alignedSize, mGroupId, this);
}
return NULL;
}
asm void JKRAramHeap::allocFromTail(u32) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D30BC.s"
JKRAramBlock* JKRAramHeap::allocFromTail(u32 size) {
u32 alignedSize = ALIGN_NEXT(size, 0x20);
JKRAramBlock* tailBlock = NULL;
JSUList<JKRAramBlock>* list = &lbl_8043430C;
JSUListIterator<JKRAramBlock> iterator = list->getLast();
for (; iterator != list->getEnd(); --iterator) {
JKRAramBlock* block = iterator.getObject();
if (block->mFreeSize >= alignedSize) {
tailBlock = block;
break;
}
}
if (tailBlock) {
return tailBlock->allocTail(alignedSize, mGroupId, this);
}
return NULL;
}
asm void JKRAramHeap::getFreeSize(void) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D3134.s"
u32 JKRAramHeap::getFreeSize(void) {
u32 maxFreeSize = 0;
lock();
JSUList<JKRAramBlock>* list = &lbl_8043430C;
JSUListIterator<JKRAramBlock> iterator = list;
for (; iterator != list->getEnd(); ++iterator) {
if (iterator->mFreeSize > maxFreeSize) {
maxFreeSize = iterator->mFreeSize;
}
}
unlock();
return maxFreeSize;
}
asm void JKRAramHeap::getTotalFreeSize(void) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D31AC.s"
u32 JKRAramHeap::getTotalFreeSize(void) {
u32 totalFreeSize = 0;
lock();
JSUList<JKRAramBlock>* list = &lbl_8043430C;
JSUListIterator<JKRAramBlock> iterator = list;
for (; iterator != list->getEnd(); ++iterator) {
totalFreeSize += iterator->mFreeSize;
}
unlock();
return totalFreeSize;
}
asm void JKRAramHeap::dump(void) {
nofralloc
#include "JSystem/JKernel/JKRAramHeap/asm/func_802D3218.s"
void JKRAramHeap::dump(void) {
lock();
JSUList<JKRAramBlock>* list = &lbl_8043430C;
JSUListIterator<JKRAramBlock> iterator = list;
for (; iterator != list->getEnd(); ++iterator) {
// The debug version calls OSReport
}
unlock();
}
#if 0

View File

@ -1,49 +1,142 @@
#include "JSystem/JKernel/JKRAramPiece/JKRAramPiece.h"
#include "global.h"
asm void JKRAramPiece::prepareCommand(int, u32, u32, u32, JKRAramBlock*, void (*)(u32)) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3574.s"
#include "JSystem/JKernel/JKRDecomp/JKRDecomp.h"
JKRAMCommand* JKRAramPiece::prepareCommand(int direction, u32 src, u32 dst, u32 length,
JKRAramBlock* block,
JKRAMCommand::AsyncCallback callback) {
JKRAMCommand* command = new (JKRHeap::getSystemHeap(), -4) JKRAMCommand();
command->mTransferDirection = direction;
command->mSrc = src;
command->mDst = dst;
command->mAramBlock = block;
command->mDataLength = length;
command->mCallback = callback;
return command;
}
asm void JKRAramPiece::sendCommand(JKRAMCommand*) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D35F4.s"
void JKRAramPiece::sendCommand(JKRAMCommand* command) {
startDMA(command);
}
asm void JKRAramPiece::orderAsync(int, u32, u32, u32, JKRAramBlock*, void (*)(u32)) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3614.s"
JKRAMCommand* JKRAramPiece::orderAsync(int direction, u32 source, u32 destination, u32 length,
JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) {
lock();
if (((source & 0x1f) != 0) || ((destination & 0x1f) != 0)) {
OSReport(lbl_8039D0B8, direction); // "direction = %x\n"
OSReport(lbl_8039D0B8 + 0x10, source); // "source = %x\n"
OSReport(lbl_8039D0B8 + 0x1D, destination); // "destination = %x\n"
OSReport(lbl_8039D0B8 + 0x2F, length); // "length = %x\n"
const char* filename = lbl_8039D0B8 + 0x3C; // "JKRAramPiece.cpp"§
const char* format = lbl_8039D0B8 + 0x3C + 0x11; // "%s"
const char* arg1 = lbl_8039D0B8 + 0x3C + 0x14; // "illegal address. abort."
JUTException_NS_panic_f(filename, 0x6c, format, arg1);
}
Message* message = new (JKRHeap::getSystemHeap(), -4) Message();
JKRAMCommand* command =
JKRAramPiece::prepareCommand(direction, source, destination, length, block, callback);
message->field_0x00 = 1;
message->command = command;
OSSendMessage(&lbl_803CC138, message, OS_MESSAGE_BLOCKING);
if (command->mCallback != NULL) {
lbl_80434324.append(&command->mPieceLink);
}
unlock();
return command;
}
asm void JKRAramPiece::sync(JKRAMCommand*, int) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3770.s"
BOOL JKRAramPiece::sync(JKRAMCommand* command, int is_non_blocking) {
OSMessage* message;
lock();
if (is_non_blocking == 0) {
OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCKING);
lbl_80434324.remove(&command->mPieceLink);
unlock();
return TRUE;
}
BOOL result = OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING);
if (!result) {
unlock();
return FALSE;
}
lbl_80434324.remove(&command->mPieceLink);
unlock();
return TRUE;
}
asm void JKRAramPiece::orderSync(int, u32, u32, u32, JKRAramBlock*) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3838.s"
BOOL JKRAramPiece::orderSync(int direction, u32 source, u32 destination, u32 length,
JKRAramBlock* block) {
lock();
JKRAMCommand* command =
JKRAramPiece::orderAsync(direction, source, destination, length, block, NULL);
BOOL result = JKRAramPiece::sync(command, 0);
delete command;
unlock();
return result;
}
asm void JKRAramPiece::startDMA(JKRAMCommand*) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D38CC.s"
void JKRAramPiece::startDMA(JKRAMCommand* command) {
if (command->mTransferDirection == 1) {
DCInvalidateRange((void*)command->mDst, command->mDataLength);
} else {
DCStoreRange((void*)command->mSrc, command->mDataLength);
}
ARQPostRequest(&command->mRequest, 0, command->mTransferDirection, 0, command->mSrc,
command->mDst, command->mDataLength, JKRAramPiece::doneDMA);
}
asm void JKRAramPiece::doneDMA(u32) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3944.s"
void JKRAramPiece::doneDMA(u32 requestAddress) {
JKRAMCommand* command = (JKRAMCommand*)requestAddress;
if (command->mTransferDirection == 1) {
DCInvalidateRange((void*)command->mDst, command->mDataLength);
}
if (command->field_0x60 != 0) {
if (command->field_0x60 == 2) {
JKRDecomp::sendCommand(command->mDecompCommand);
}
return;
}
if (command->mCallback) {
(*command->mCallback)(requestAddress);
} else if (command->field_0x5C) {
OSSendMessage(command->field_0x5C, command, OS_MESSAGE_NON_BLOCKING);
} else {
OSSendMessage(&command->mMessageQueue, command, OS_MESSAGE_NON_BLOCKING);
}
}
asm JKRAMCommand::JKRAMCommand(void) {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D39EC.s"
JKRAMCommand::JKRAMCommand() : mPieceLink(this), field_0x30(this) {
OSInitMessageQueue(&mMessageQueue, &mMessage, 1);
mCallback = NULL;
field_0x5C = NULL;
field_0x60 = 0;
field_0x8C = NULL;
field_0x90 = NULL;
field_0x94 = NULL;
}
asm JKRAMCommand::~JKRAMCommand() {
nofralloc
#include "JSystem/JKernel/JKRAramPiece/asm/func_802D3A5C.s"
JKRAMCommand::~JKRAMCommand() {
if (field_0x8C)
delete field_0x8C;
if (field_0x90)
delete field_0x90;
if (field_0x94)
JKRHeap::free(field_0x94, NULL);
}
#if 0