JASHeapCtrl (#1965)

This commit is contained in:
Jcw87 2023-10-20 09:36:29 -07:00 committed by GitHub
parent c5a25e295c
commit 33a285f179
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 196 additions and 402 deletions

View File

@ -1,7 +0,0 @@
lbl_80290848:
/* 80290848 38 00 00 00 */ li r0, 0
/* 8029084C 90 03 00 00 */ stw r0, 0(r3)
/* 80290850 90 03 00 04 */ stw r0, 4(r3)
/* 80290854 90 03 00 08 */ stw r0, 8(r3)
/* 80290858 90 03 00 0C */ stw r0, 0xc(r3)
/* 8029085C 4E 80 00 20 */ blr

View File

@ -1,28 +0,0 @@
lbl_80290140:
/* 80290140 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80290144 7C 08 02 A6 */ mflr r0
/* 80290148 90 01 00 24 */ stw r0, 0x24(r1)
/* 8029014C 39 61 00 20 */ addi r11, r1, 0x20
/* 80290150 48 0D 20 8D */ bl _savegpr_29
/* 80290154 7C 7D 1B 78 */ mr r29, r3
/* 80290158 7C 9F 23 78 */ mr r31, r4
/* 8029015C 7F A0 EB 78 */ mr r0, r29
/* 80290160 7C 1E 03 78 */ mr r30, r0
/* 80290164 48 04 BD B1 */ bl initiate__10JSUPtrListFv
/* 80290168 38 7E 00 0C */ addi r3, r30, 0xc
/* 8029016C 7F A4 EB 78 */ mr r4, r29
/* 80290170 48 04 BC 8D */ bl __ct__10JSUPtrLinkFPv
/* 80290174 93 FD 00 34 */ stw r31, 0x34(r29)
/* 80290178 38 00 00 00 */ li r0, 0
/* 8029017C 90 1D 00 38 */ stw r0, 0x38(r29)
/* 80290180 90 1D 00 3C */ stw r0, 0x3c(r29)
/* 80290184 90 1D 00 40 */ stw r0, 0x40(r29)
/* 80290188 38 7D 00 1C */ addi r3, r29, 0x1c
/* 8029018C 48 0A EE 7D */ bl OSInitMutex
/* 80290190 7F A3 EB 78 */ mr r3, r29
/* 80290194 39 61 00 20 */ addi r11, r1, 0x20
/* 80290198 48 0D 20 91 */ bl _restgpr_29
/* 8029019C 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802901A0 7C 08 03 A6 */ mtlr r0
/* 802901A4 38 21 00 20 */ addi r1, r1, 0x20
/* 802901A8 4E 80 00 20 */ blr

View File

@ -1,130 +0,0 @@
lbl_8029021C:
/* 8029021C 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80290220 7C 08 02 A6 */ mflr r0
/* 80290224 90 01 00 34 */ stw r0, 0x34(r1)
/* 80290228 39 61 00 30 */ addi r11, r1, 0x30
/* 8029022C 48 0D 1F A9 */ bl _savegpr_27
/* 80290230 7C 7C 1B 78 */ mr r28, r3
/* 80290234 7C 9D 23 78 */ mr r29, r4
/* 80290238 7C BE 2B 78 */ mr r30, r5
/* 8029023C 38 7C 00 1C */ addi r3, r28, 0x1c
/* 80290240 90 61 00 08 */ stw r3, 8(r1)
/* 80290244 48 0A ED FD */ bl OSLockMutex
/* 80290248 80 1C 00 38 */ lwz r0, 0x38(r28)
/* 8029024C 28 00 00 00 */ cmplwi r0, 0
/* 80290250 41 82 00 14 */ beq lbl_80290264
/* 80290254 80 61 00 08 */ lwz r3, 8(r1)
/* 80290258 48 0A EE C5 */ bl OSUnlockMutex
/* 8029025C 38 60 00 00 */ li r3, 0
/* 80290260 48 00 01 7C */ b lbl_802903DC
lbl_80290264:
/* 80290264 80 1D 00 38 */ lwz r0, 0x38(r29)
/* 80290268 28 00 00 00 */ cmplwi r0, 0
/* 8029026C 40 82 00 14 */ bne lbl_80290280
/* 80290270 80 61 00 08 */ lwz r3, 8(r1)
/* 80290274 48 0A EE A9 */ bl OSUnlockMutex
/* 80290278 38 60 00 00 */ li r3, 0
/* 8029027C 48 00 01 60 */ b lbl_802903DC
lbl_80290280:
/* 80290280 38 1E 00 1F */ addi r0, r30, 0x1f
/* 80290284 54 1E 00 34 */ rlwinm r30, r0, 0, 0, 0x1a
/* 80290288 7F A3 EB 78 */ mr r3, r29
/* 8029028C 48 00 05 55 */ bl getCurOffset__7JASHeapFv
/* 80290290 7C 7B 1B 78 */ mr r27, r3
/* 80290294 7F A3 EB 78 */ mr r3, r29
/* 80290298 48 00 04 E5 */ bl getTailOffset__7JASHeapFv
/* 8029029C 7C 1B F2 14 */ add r0, r27, r30
/* 802902A0 7C 00 18 40 */ cmplw r0, r3
/* 802902A4 41 81 00 3C */ bgt lbl_802902E0
/* 802902A8 7F A3 EB 78 */ mr r3, r29
/* 802902AC 48 00 04 45 */ bl getTailHeap__7JASHeapFv
/* 802902B0 7C 65 1B 78 */ mr r5, r3
/* 802902B4 7F A3 EB 78 */ mr r3, r29
/* 802902B8 7F 84 E3 78 */ mr r4, r28
/* 802902BC 80 1D 00 38 */ lwz r0, 0x38(r29)
/* 802902C0 7C C0 DA 14 */ add r6, r0, r27
/* 802902C4 7F C7 F3 78 */ mr r7, r30
/* 802902C8 39 00 00 00 */ li r8, 0
/* 802902CC 48 00 03 3D */ bl insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb
/* 802902D0 80 61 00 08 */ lwz r3, 8(r1)
/* 802902D4 48 0A EE 49 */ bl OSUnlockMutex
/* 802902D8 38 60 00 01 */ li r3, 1
/* 802902DC 48 00 01 00 */ b lbl_802903DC
lbl_802902E0:
/* 802902E0 39 40 FF FF */ li r10, -1
/* 802902E4 81 1D 00 38 */ lwz r8, 0x38(r29)
/* 802902E8 7D 04 43 78 */ mr r4, r8
/* 802902EC 39 60 00 00 */ li r11, 0
/* 802902F0 38 A0 00 00 */ li r5, 0
/* 802902F4 80 FD 00 00 */ lwz r7, 0(r29)
/* 802902F8 28 07 00 00 */ cmplwi r7, 0
/* 802902FC 41 82 00 08 */ beq lbl_80290304
/* 80290300 38 E7 FF F4 */ addi r7, r7, -12
lbl_80290304:
/* 80290304 7C C8 1A 14 */ add r6, r8, r3
/* 80290308 48 00 00 54 */ b lbl_8029035C
lbl_8029030C:
/* 8029030C 7C 04 30 40 */ cmplw r4, r6
/* 80290310 40 80 00 54 */ bge lbl_80290364
/* 80290314 81 27 00 0C */ lwz r9, 0xc(r7)
/* 80290318 80 09 00 38 */ lwz r0, 0x38(r9)
/* 8029031C 7C 04 00 50 */ subf r0, r4, r0
/* 80290320 7C 00 F0 40 */ cmplw r0, r30
/* 80290324 41 80 00 1C */ blt lbl_80290340
/* 80290328 7C 00 50 40 */ cmplw r0, r10
/* 8029032C 40 80 00 14 */ bge lbl_80290340
/* 80290330 7D 25 4B 78 */ mr r5, r9
/* 80290334 7C 9F 23 78 */ mr r31, r4
/* 80290338 7C 0A 03 78 */ mr r10, r0
/* 8029033C 39 60 00 01 */ li r11, 1
lbl_80290340:
/* 80290340 80 89 00 38 */ lwz r4, 0x38(r9)
/* 80290344 80 09 00 3C */ lwz r0, 0x3c(r9)
/* 80290348 7C 84 02 14 */ add r4, r4, r0
/* 8029034C 80 E7 00 18 */ lwz r7, 0x18(r7)
/* 80290350 28 07 00 00 */ cmplwi r7, 0
/* 80290354 41 82 00 08 */ beq lbl_8029035C
/* 80290358 38 E7 FF F4 */ addi r7, r7, -12
lbl_8029035C:
/* 8029035C 28 07 00 00 */ cmplwi r7, 0
/* 80290360 40 82 FF AC */ bne lbl_8029030C
lbl_80290364:
/* 80290364 7C 04 40 40 */ cmplw r4, r8
/* 80290368 41 82 00 38 */ beq lbl_802903A0
/* 8029036C 7C 08 1A 14 */ add r0, r8, r3
/* 80290370 7C 04 00 40 */ cmplw r4, r0
/* 80290374 40 80 00 2C */ bge lbl_802903A0
/* 80290378 80 1D 00 3C */ lwz r0, 0x3c(r29)
/* 8029037C 7C 08 02 14 */ add r0, r8, r0
/* 80290380 7C 04 00 50 */ subf r0, r4, r0
/* 80290384 7C 00 F0 40 */ cmplw r0, r30
/* 80290388 41 80 00 18 */ blt lbl_802903A0
/* 8029038C 7C 00 50 40 */ cmplw r0, r10
/* 80290390 40 80 00 10 */ bge lbl_802903A0
/* 80290394 38 A0 00 00 */ li r5, 0
/* 80290398 7C 9F 23 78 */ mr r31, r4
/* 8029039C 39 60 00 01 */ li r11, 1
lbl_802903A0:
/* 802903A0 55 60 06 3F */ clrlwi. r0, r11, 0x18
/* 802903A4 40 82 00 14 */ bne lbl_802903B8
/* 802903A8 80 61 00 08 */ lwz r3, 8(r1)
/* 802903AC 48 0A ED 71 */ bl OSUnlockMutex
/* 802903B0 38 60 00 00 */ li r3, 0
/* 802903B4 48 00 00 28 */ b lbl_802903DC
lbl_802903B8:
/* 802903B8 7F A3 EB 78 */ mr r3, r29
/* 802903BC 7F 84 E3 78 */ mr r4, r28
/* 802903C0 7F E6 FB 78 */ mr r6, r31
/* 802903C4 7F C7 F3 78 */ mr r7, r30
/* 802903C8 39 00 00 00 */ li r8, 0
/* 802903CC 48 00 02 3D */ bl insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb
/* 802903D0 80 61 00 08 */ lwz r3, 8(r1)
/* 802903D4 48 0A ED 49 */ bl OSUnlockMutex
/* 802903D8 38 60 00 01 */ li r3, 1
lbl_802903DC:
/* 802903DC 39 61 00 30 */ addi r11, r1, 0x30
/* 802903E0 48 0D 1E 41 */ bl _restgpr_27
/* 802903E4 80 01 00 34 */ lwz r0, 0x34(r1)
/* 802903E8 7C 08 03 A6 */ mtlr r0
/* 802903EC 38 21 00 30 */ addi r1, r1, 0x30
/* 802903F0 4E 80 00 20 */ blr

View File

@ -1,4 +0,0 @@
lbl_80290B08:
/* 80290B08 3C 60 80 43 */ lis r3, audioAramHeap__9JASKernel@ha /* 0x804315DC@ha */
/* 80290B0C 38 63 15 DC */ addi r3, r3, audioAramHeap__9JASKernel@l /* 0x804315DC@l */
/* 80290B10 4E 80 00 20 */ blr

View File

@ -1,29 +0,0 @@
lbl_802907E0:
/* 802907E0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802907E4 7C 08 02 A6 */ mflr r0
/* 802907E8 90 01 00 24 */ stw r0, 0x24(r1)
/* 802907EC 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 802907F0 7C 7F 1B 78 */ mr r31, r3
/* 802907F4 38 7F 00 1C */ addi r3, r31, 0x1c
/* 802907F8 90 61 00 08 */ stw r3, 8(r1)
/* 802907FC 48 0A E8 45 */ bl OSLockMutex
/* 80290800 80 BF 00 40 */ lwz r5, 0x40(r31)
/* 80290804 28 05 00 00 */ cmplwi r5, 0
/* 80290808 40 82 00 0C */ bne lbl_80290814
/* 8029080C 3B E0 00 00 */ li r31, 0
/* 80290810 48 00 00 18 */ b lbl_80290828
lbl_80290814:
/* 80290814 80 9F 00 38 */ lwz r4, 0x38(r31)
/* 80290818 80 65 00 38 */ lwz r3, 0x38(r5)
/* 8029081C 80 05 00 3C */ lwz r0, 0x3c(r5)
/* 80290820 7C 03 02 14 */ add r0, r3, r0
/* 80290824 7F E4 00 50 */ subf r31, r4, r0
lbl_80290828:
/* 80290828 80 61 00 08 */ lwz r3, 8(r1)
/* 8029082C 48 0A E8 F1 */ bl OSUnlockMutex
/* 80290830 7F E3 FB 78 */ mr r3, r31
/* 80290834 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 80290838 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8029083C 7C 08 03 A6 */ mtlr r0
/* 80290840 38 21 00 20 */ addi r1, r1, 0x20
/* 80290844 4E 80 00 20 */ blr

View File

@ -1,40 +0,0 @@
lbl_802906F0:
/* 802906F0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802906F4 7C 08 02 A6 */ mflr r0
/* 802906F8 90 01 00 24 */ stw r0, 0x24(r1)
/* 802906FC 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 80290700 7C 7F 1B 78 */ mr r31, r3
/* 80290704 38 7F 00 1C */ addi r3, r31, 0x1c
/* 80290708 90 61 00 08 */ stw r3, 8(r1)
/* 8029070C 48 0A E9 35 */ bl OSLockMutex
/* 80290710 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80290714 28 03 00 00 */ cmplwi r3, 0
/* 80290718 40 82 00 18 */ bne lbl_80290730
/* 8029071C 80 7F 00 00 */ lwz r3, 0(r31)
/* 80290720 28 03 00 00 */ cmplwi r3, 0
/* 80290724 41 82 00 1C */ beq lbl_80290740
/* 80290728 38 63 FF F4 */ addi r3, r3, -12
/* 8029072C 48 00 00 14 */ b lbl_80290740
lbl_80290730:
/* 80290730 80 63 00 18 */ lwz r3, 0x18(r3)
/* 80290734 28 03 00 00 */ cmplwi r3, 0
/* 80290738 41 82 00 08 */ beq lbl_80290740
/* 8029073C 38 63 FF F4 */ addi r3, r3, -12
lbl_80290740:
/* 80290740 28 03 00 00 */ cmplwi r3, 0
/* 80290744 40 82 00 14 */ bne lbl_80290758
/* 80290748 80 61 00 08 */ lwz r3, 8(r1)
/* 8029074C 48 0A E9 D1 */ bl OSUnlockMutex
/* 80290750 38 60 00 00 */ li r3, 0
/* 80290754 48 00 00 14 */ b lbl_80290768
lbl_80290758:
/* 80290758 83 E3 00 0C */ lwz r31, 0xc(r3)
/* 8029075C 80 61 00 08 */ lwz r3, 8(r1)
/* 80290760 48 0A E9 BD */ bl OSUnlockMutex
/* 80290764 7F E3 FB 78 */ mr r3, r31
lbl_80290768:
/* 80290768 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 8029076C 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80290770 7C 08 03 A6 */ mtlr r0
/* 80290774 38 21 00 20 */ addi r1, r1, 0x20
/* 80290778 4E 80 00 20 */ blr

View File

@ -1,28 +0,0 @@
lbl_8029077C:
/* 8029077C 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80290780 7C 08 02 A6 */ mflr r0
/* 80290784 90 01 00 24 */ stw r0, 0x24(r1)
/* 80290788 93 E1 00 1C */ stw r31, 0x1c(r1)
/* 8029078C 7C 7F 1B 78 */ mr r31, r3
/* 80290790 38 7F 00 1C */ addi r3, r31, 0x1c
/* 80290794 90 61 00 08 */ stw r3, 8(r1)
/* 80290798 48 0A E8 A9 */ bl OSLockMutex
/* 8029079C 7F E3 FB 78 */ mr r3, r31
/* 802907A0 4B FF FF 51 */ bl getTailHeap__7JASHeapFv
/* 802907A4 28 03 00 00 */ cmplwi r3, 0
/* 802907A8 40 82 00 0C */ bne lbl_802907B4
/* 802907AC 83 FF 00 3C */ lwz r31, 0x3c(r31)
/* 802907B0 48 00 00 10 */ b lbl_802907C0
lbl_802907B4:
/* 802907B4 80 9F 00 38 */ lwz r4, 0x38(r31)
/* 802907B8 80 03 00 38 */ lwz r0, 0x38(r3)
/* 802907BC 7F E4 00 50 */ subf r31, r4, r0
lbl_802907C0:
/* 802907C0 80 61 00 08 */ lwz r3, 8(r1)
/* 802907C4 48 0A E9 59 */ bl OSUnlockMutex
/* 802907C8 7F E3 FB 78 */ mr r3, r31
/* 802907CC 83 E1 00 1C */ lwz r31, 0x1c(r1)
/* 802907D0 80 01 00 24 */ lwz r0, 0x24(r1)
/* 802907D4 7C 08 03 A6 */ mtlr r0
/* 802907D8 38 21 00 20 */ addi r1, r1, 0x20
/* 802907DC 4E 80 00 20 */ blr

View File

@ -1,29 +0,0 @@
lbl_802901AC:
/* 802901AC 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 802901B0 7C 08 02 A6 */ mflr r0
/* 802901B4 90 01 00 24 */ stw r0, 0x24(r1)
/* 802901B8 39 61 00 20 */ addi r11, r1, 0x20
/* 802901BC 48 0D 20 21 */ bl _savegpr_29
/* 802901C0 7C 7D 1B 78 */ mr r29, r3
/* 802901C4 7C 9E 23 78 */ mr r30, r4
/* 802901C8 7C BF 2B 78 */ mr r31, r5
/* 802901CC 38 7D 00 1C */ addi r3, r29, 0x1c
/* 802901D0 90 61 00 08 */ stw r3, 8(r1)
/* 802901D4 48 0A EE 6D */ bl OSLockMutex
/* 802901D8 38 1E 00 1F */ addi r0, r30, 0x1f
/* 802901DC 54 00 00 34 */ rlwinm r0, r0, 0, 0, 0x1a
/* 802901E0 90 1D 00 38 */ stw r0, 0x38(r29)
/* 802901E4 38 00 00 00 */ li r0, 0
/* 802901E8 90 1D 00 40 */ stw r0, 0x40(r29)
/* 802901EC 80 1D 00 38 */ lwz r0, 0x38(r29)
/* 802901F0 7C 1E 00 50 */ subf r0, r30, r0
/* 802901F4 7C 00 F8 50 */ subf r0, r0, r31
/* 802901F8 90 1D 00 3C */ stw r0, 0x3c(r29)
/* 802901FC 80 61 00 08 */ lwz r3, 8(r1)
/* 80290200 48 0A EF 1D */ bl OSUnlockMutex
/* 80290204 39 61 00 20 */ addi r11, r1, 0x20
/* 80290208 48 0D 20 21 */ bl _restgpr_29
/* 8029020C 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80290210 7C 08 03 A6 */ mtlr r0
/* 80290214 38 21 00 20 */ addi r1, r1, 0x20
/* 80290218 4E 80 00 20 */ blr

View File

@ -1,15 +0,0 @@
lbl_80290AD0:
/* 80290AD0 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80290AD4 7C 08 02 A6 */ mflr r0
/* 80290AD8 90 01 00 14 */ stw r0, 0x14(r1)
/* 80290ADC 7C 60 1B 78 */ mr r0, r3
/* 80290AE0 7C 85 23 78 */ mr r5, r4
/* 80290AE4 90 0D 8C 94 */ stw r0, sAramBase__9JASKernel(r13)
/* 80290AE8 3C 60 80 43 */ lis r3, audioAramHeap__9JASKernel@ha /* 0x804315DC@ha */
/* 80290AEC 38 63 15 DC */ addi r3, r3, audioAramHeap__9JASKernel@l /* 0x804315DC@l */
/* 80290AF0 7C 04 03 78 */ mr r4, r0
/* 80290AF4 4B FF F6 B9 */ bl initRootHeap__7JASHeapFPvUl
/* 80290AF8 80 01 00 14 */ lwz r0, 0x14(r1)
/* 80290AFC 7C 08 03 A6 */ mtlr r0
/* 80290B00 38 21 00 10 */ addi r1, r1, 0x10
/* 80290B04 4E 80 00 20 */ blr

View File

@ -15,19 +15,20 @@ public:
/* 802901AC */ void initRootHeap(void*, u32);
/* 8029021C */ bool alloc(JASHeap*, u32);
/* 802903F4 */ bool allocTail(JASHeap*, u32);
/* 802904E4 */ void free();
/* 802904E4 */ bool free();
/* 80290608 */ void insertChild(JASHeap*, JASHeap*, void*, u32, bool);
/* 802906F0 */ void getTailHeap();
/* 8029077C */ void getTailOffset();
/* 802907E0 */ void getCurOffset();
/* 802906F0 */ JASHeap* getTailHeap();
/* 8029077C */ u32 getTailOffset();
/* 802907E0 */ u32 getCurOffset();
/* 80290B54 */ ~JASHeap();
void* getBase() { return mBase; }
bool isAllocated() { return mBase; }
/* 0x00 */ JSUTree<JASHeap> mTree;
/* 0x1C */ OSMutex mMutex;
/* 0x34 */ JASDisposer* mDisposer;
/* 0x38 */ void* mBase;
/* 0x38 */ u8* mBase;
/* 0x3c */ u32 mSize;
/* 0x40 */ JASHeap* field_0x40;
};
@ -35,14 +36,14 @@ public:
namespace JASKernel {
/* 802909B8 */ void setupRootHeap(JKRSolidHeap*, u32);
/* 80290AC0 */ JKRHeap* getSystemHeap();
/* 80290AC8 */ u32 getCommandHeap();
/* 80290AC8 */ void* getCommandHeap();
/* 80290AD0 */ void setupAramHeap(u32, u32);
/* 80290B08 */ JASHeap* getAramHeap();
extern u8 audioAramHeap[68];
extern u8 sAramBase[4];
extern u32 sAramBase;
extern JKRHeap* sSystemHeap;
extern u8 sCommandHeap[4];
extern void* sCommandHeap;
};
struct JASGenericMemPool {

View File

@ -212,7 +212,7 @@ public:
return *this;
}
T& operator*() { return *this->getObject(); }
T* operator*() { return this->getObject(); }
T* operator->() { return this->getObject(); }

View File

@ -4,24 +4,19 @@
//
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRSolidHeap {};
struct JKRHeap {
static u8 sSystemHeap[4];
};
struct JKRExpHeap {
/* 802CEE2C */ void create(u32, JKRHeap*, bool);
};
struct JASDisposer {
/* 80290BCC */ void onDispose();
virtual ~JASDisposer();
/* 80290BCC */ virtual void onDispose();
};
//
@ -86,34 +81,80 @@ extern "C" u8 sSystemHeap__7JKRHeap[4];
//
/* 80290140-802901AC 28AA80 006C+00 1/1 2/2 0/0 .text __ct__7JASHeapFP11JASDisposer */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JASHeap::JASHeap(JASDisposer* param_0) : mTree(this) {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/__ct__7JASHeapFP11JASDisposer.s"
JASHeap::JASHeap(JASDisposer* disposer) : mTree(this) {
mDisposer = disposer;
mBase = NULL;
mSize = 0;
field_0x40 = 0;
OSInitMutex(&mMutex);
}
#pragma pop
/* 802901AC-8029021C 28AAEC 0070+00 1/1 0/0 0/0 .text initRootHeap__7JASHeapFPvUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASHeap::initRootHeap(void* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/initRootHeap__7JASHeapFPvUl.s"
void JASHeap::initRootHeap(void* param_0, u32 param_1) {
JUT_ASSERT(97, ! isAllocated());
JASMutexLock lock(&mMutex);
mBase = (u8*)OSRoundUpPtr(param_0, 0x20);
field_0x40 = NULL;
mSize = param_1 - (u32(mBase) - u32(param_0));
}
#pragma pop
/* 8029021C-802903F4 28AB5C 01D8+00 0/0 2/2 0/0 .text alloc__7JASHeapFP7JASHeapUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool JASHeap::alloc(JASHeap* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/alloc__7JASHeapFP7JASHeapUl.s"
bool JASHeap::alloc(JASHeap* mother, u32 param_1) {
JUT_ASSERT(120, mother != 0);
JASMutexLock lock(&mMutex);
if (isAllocated()) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] すでにヒープは確保されています。初期化してからにしてください。\n");
#endif
return 0;
}
if (!mother->isAllocated()) {
return 0;
}
param_1 = OSRoundUp32B(param_1);
u32 local_28 = mother->getCurOffset();
u32 local_2c = mother->getTailOffset();
if (local_28 + param_1 <= local_2c) {
mother->insertChild(this, mother->getTailHeap(), mother->mBase + local_28, param_1, false);
return 1;
}
s32 r27 = -1;
u8* r29 = mother->mBase;
bool local_43 = false;
JASHeap* local_30 = NULL;
void* local_34;
for (JSUTreeIterator<JASHeap> it = mother->mTree.getFirstChild(); it != mother->mTree.getEndChild(); it++) {
if (r29 >= mother->mBase + local_2c) {
break;
}
u32 local_3c = u32(it->mBase) - u32(r29);
if (local_3c >= param_1 && local_3c < r27) {
local_30 = *it;
local_34 = r29;
r27 = local_3c;
local_43 = true;
}
u32 r25 = it->mSize;
r29 = (u8*)it->mBase + r25;
}
if (r29 != mother->mBase && r29 < mother->mBase + local_2c) {
u32 local_40 = mother->mBase + mother->mSize - r29;
if (local_40 >= param_1 && local_40 < r27) {
local_30 = NULL;
local_34 = r29;
r27 = local_40;
local_43 = true;
}
}
if (!local_43) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] マザーメモリが足りないので確保できません。\n");
#endif
return 0;
}
mother->insertChild(this, local_30, local_34, param_1, false);
return 1;
}
#pragma pop
/* 802903F4-802904E4 28AD34 00F0+00 0/0 1/1 0/0 .text allocTail__7JASHeapFP7JASHeapUl */
#pragma push
@ -126,17 +167,77 @@ asm bool JASHeap::allocTail(JASHeap* param_0, u32 param_1) {
#pragma pop
/* 802904E4-80290608 28AE24 0124+00 0/0 4/4 0/0 .text free__7JASHeapFv */
// regswap
#ifdef NONMATCHING
bool JASHeap::free() {
JASMutexLock lock(&mMutex);
if (!isAllocated()) {
return false;
}
JSUTreeIterator<JASHeap> stack_20;
for (JSUTreeIterator<JASHeap> it(mTree.getFirstChild()); it != mTree.getEndChild(); it = stack_20) {
stack_20 = it;
stack_20++;
it->free();
}
JSUTree<JASHeap>* parentTree = mTree.getParent();
if (parentTree) {
JASHeap* parentHeap = parentTree->getObject();
if (parentHeap->field_0x40 == this) {
JSUTreeIterator<JASHeap> stack_28(mTree.getPrevChild());
if (stack_28 != mTree.getEndChild()) {
parentHeap->field_0x40 = *stack_28;
} else {
parentHeap->field_0x40 = NULL;
}
}
parentTree->removeChild(&mTree);
}
mBase = NULL;
field_0x40 = NULL;
mSize = 0;
if (mDisposer) {
mDisposer->onDispose();
}
return true;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASHeap::free() {
asm bool JASHeap::free() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/free__7JASHeapFv.s"
}
#pragma pop
#endif
/* 80290608-802906F0 28AF48 00E8+00 2/2 0/0 0/0 .text
* insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb */
// regalloc
#ifdef NONMATCHING
void JASHeap::insertChild(JASHeap* heap, JASHeap* next, void* param_2, u32 param_3, bool param_4) {
JUT_ASSERT(537, heap != 0);
JUT_ASSERT(538, next == 0 || &mTree == next->mTree.getParent());
JASMutexLock lock(&mMutex);
if (!param_4) {
JSUTreeIterator<JASHeap> it;
if (!next) {
it = mTree.getLastChild();
} else {
it = next->mTree.getPrevChild();
}
JASHeap* r24 = it != mTree.getEndChild() ? it.getObject() : NULL;
if (field_0x40 == r24) {
field_0x40 = heap;
}
}
heap->mBase = (u8*)param_2;
heap->mSize = param_3;
heap->field_0x40 = NULL;
mTree.insertChild(&next->mTree, &heap->mTree);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -146,46 +247,45 @@ asm void JASHeap::insertChild(JASHeap* param_0, JASHeap* param_1, void* param_2,
#include "asm/JSystem/JAudio2/JASHeapCtrl/insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb.s"
}
#pragma pop
#endif
/* 802906F0-8029077C 28B030 008C+00 3/3 0/0 0/0 .text getTailHeap__7JASHeapFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASHeap::getTailHeap() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/getTailHeap__7JASHeapFv.s"
JASHeap* JASHeap::getTailHeap() {
JSUTreeIterator<JASHeap> it;
JASMutexLock lock(&mMutex);
if (!field_0x40) {
it = mTree.getFirstChild();
} else {
it = field_0x40->mTree.getNextChild();
}
if (it == mTree.getEndChild()) {
return NULL;
}
return it.getObject();
}
#pragma pop
/* 8029077C-802907E0 28B0BC 0064+00 2/2 0/0 0/0 .text getTailOffset__7JASHeapFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASHeap::getTailOffset() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/getTailOffset__7JASHeapFv.s"
u32 JASHeap::getTailOffset() {
JASMutexLock lock(&mMutex);
JASHeap* heap = getTailHeap();
u32 offset = !heap ? mSize : heap->mBase - mBase;
return offset;
}
#pragma pop
/* 802907E0-80290848 28B120 0068+00 2/2 0/0 0/0 .text getCurOffset__7JASHeapFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASHeap::getCurOffset() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/getCurOffset__7JASHeapFv.s"
u32 JASHeap::getCurOffset() {
JASMutexLock lock(&mMutex);
u32 offset = !field_0x40 ? 0 : field_0x40->mBase + field_0x40->mSize - mBase;
return offset;
}
#pragma pop
/* 80290848-80290860 28B188 0018+00 0/0 32/32 0/0 .text __ct__17JASGenericMemPoolFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JASGenericMemPool::JASGenericMemPool() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/__ct__17JASGenericMemPoolFv.s"
JASGenericMemPool::JASGenericMemPool() {
field_0x0 = NULL;
freeMemCount = 0;
totalMemCount = 0;
field_0xc = 0;
}
#pragma pop
/* 80290860-802908C8 28B1A0 0068+00 0/0 9/9 0/0 .text __dt__17JASGenericMemPoolFv */
#pragma push
@ -234,16 +334,27 @@ asm void JASGenericMemPool::free(void* param_0, u32 param_1) {
/* ############################################################################################## */
/* 80451214-80451218 000714 0004+00 1/1 0/0 0/0 .sbss sAramBase__9JASKernel */
u8 JASKernel::sAramBase[4];
u32 JASKernel::sAramBase;
/* 80451218-8045121C 000718 0004+00 2/1 0/0 0/0 .sbss sSystemHeap__9JASKernel */
JKRHeap* JASKernel::sSystemHeap;
/* 8045121C-80451220 00071C 0004+00 2/1 0/0 0/0 .sbss sCommandHeap__9JASKernel */
u8 JASKernel::sCommandHeap[4];
void* JASKernel::sCommandHeap;
/* 802909B8-80290AC0 28B2F8 0108+00 0/0 1/1 0/0 .text setupRootHeap__9JASKernelFP12JKRSolidHeapUl
*/
// implement JASMemChunkPool
#ifdef NONMATCHING
void JASKernel::setupRootHeap(JKRSolidHeap* heap, u32 size) {
JUT_ASSERT(784, heap);
sSystemHeap = JKRExpHeap::create(size, heap, false);
JUT_ASSERT(787, sSystemHeap);
sCommandHeap = new JASMemChunkPool();
JUT_ASSERT(790, sCommandHeap);
JASDram = heap;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -252,6 +363,7 @@ asm void JASKernel::setupRootHeap(JKRSolidHeap* param_0, u32 param_1) {
#include "asm/JSystem/JAudio2/JASHeapCtrl/setupRootHeap__9JASKernelFP12JKRSolidHeapUl.s"
}
#pragma pop
#endif
/* 80290AC0-80290AC8 -00001 0008+00 0/0 0/0 0/0 .text getSystemHeap__9JASKernelFv */
JKRHeap* JASKernel::getSystemHeap() {
@ -259,8 +371,8 @@ JKRHeap* JASKernel::getSystemHeap() {
}
/* 80290AC8-80290AD0 -00001 0008+00 0/0 0/0 0/0 .text getCommandHeap__9JASKernelFv */
u32 JASKernel::getCommandHeap() {
return *(u32*)(&JASKernel::sCommandHeap);
void* JASKernel::getCommandHeap() {
return JASKernel::sCommandHeap;
}
/* ############################################################################################## */
@ -271,24 +383,15 @@ static u8 lit_313[12];
u8 JASKernel::audioAramHeap[68];
/* 80290AD0-80290B08 28B410 0038+00 0/0 1/1 0/0 .text setupAramHeap__9JASKernelFUlUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JASKernel::setupAramHeap(u32 param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/setupAramHeap__9JASKernelFUlUl.s"
void JASKernel::setupAramHeap(u32 param_0, u32 param_1) {
sAramBase = param_0;
(*(JASHeap*)audioAramHeap).initRootHeap((void*)sAramBase, param_1);
}
#pragma pop
/* 80290B08-80290B14 28B448 000C+00 0/0 3/2 0/0 .text getAramHeap__9JASKernelFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JASHeap* JASKernel::getAramHeap() {
nofralloc
#include "asm/JSystem/JAudio2/JASHeapCtrl/getAramHeap__9JASKernelFv.s"
JASHeap* JASKernel::getAramHeap() {
return (JASHeap*)audioAramHeap;
}
#pragma pop
/* 80290B14-80290B54 28B454 0040+00 0/0 1/0 0/0 .text __sinit_JASHeapCtrl_cpp */
#pragma push

View File

@ -130,8 +130,8 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 p
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
u32 heap = JASKernel::getCommandHeap();
((ThreadMemPool*)pvVar1)->free((void*)heap);
void* heap = JASKernel::getCommandHeap();
((ThreadMemPool*)pvVar1)->free(heap);
}
return iVar2;
}
@ -146,8 +146,8 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
u32 heap = JASKernel::getCommandHeap();
((ThreadMemPool*)pvVar1)->free((void*)heap);
void* heap = JASKernel::getCommandHeap();
((ThreadMemPool*)pvVar1)->free(heap);
}
return iVar2;
}