From 3625dae703409951352e33d4ef33691268ca91d0 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Sun, 15 Oct 2023 13:27:52 +0300 Subject: [PATCH] JASSoundParams imported. Work on JASTaskThread (#1961) --- .../clamp__14JASSoundParamsFv.s | 61 ------- ...amsFRC14JASSoundParamsRC14JASSoundParams.s | 24 --- .../__ct__13JASTaskThreadFiiUl.s | 25 --- ...ocCallStack__13JASTaskThreadFPFPv_vPCvUl.s | 115 ------------- ...allocCallStack__13JASTaskThreadFPFPv_vPv.s | 103 ------------ .../JASTaskThread/pause__13JASTaskThreadFb.s | 33 ---- .../sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s | 71 -------- .../sendCmdMsg__13JASTaskThreadFPFPv_vPv.s | 71 -------- include/JSystem/JAudio2/JASHeapCtrl.h | 127 +++++++++++++++ include/JSystem/JAudio2/JASSoundParams.h | 35 ++++ include/JSystem/JAudio2/JASTaskThread.h | 21 ++- include/JSystem/JKernel/JKRThread.h | 13 +- libs/JSystem/JAudio2/JASSoundParams.cpp | 61 ++----- libs/JSystem/JAudio2/JASTaskThread.cpp | 154 ++++++++++++------ 14 files changed, 304 insertions(+), 610 deletions(-) delete mode 100644 asm/JSystem/JAudio2/JASSoundParams/clamp__14JASSoundParamsFv.s delete mode 100644 asm/JSystem/JAudio2/JASSoundParams/combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s delete mode 100644 asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s diff --git a/asm/JSystem/JAudio2/JASSoundParams/clamp__14JASSoundParamsFv.s b/asm/JSystem/JAudio2/JASSoundParams/clamp__14JASSoundParamsFv.s deleted file mode 100644 index 333db5b5b14..00000000000 --- a/asm/JSystem/JAudio2/JASSoundParams/clamp__14JASSoundParamsFv.s +++ /dev/null @@ -1,61 +0,0 @@ -lbl_8029E3B0: -/* 8029E3B0 C0 23 00 00 */ lfs f1, 0(r3) -/* 8029E3B4 C0 02 BD 60 */ lfs f0, lit_299(r2) -/* 8029E3B8 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E3BC 40 80 00 0C */ bge lbl_8029E3C8 -/* 8029E3C0 D0 03 00 00 */ stfs f0, 0(r3) -/* 8029E3C4 48 00 00 14 */ b lbl_8029E3D8 -lbl_8029E3C8: -/* 8029E3C8 C0 02 BD 64 */ lfs f0, lit_300(r2) -/* 8029E3CC FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E3D0 40 81 00 08 */ ble lbl_8029E3D8 -/* 8029E3D4 D0 03 00 00 */ stfs f0, 0(r3) -lbl_8029E3D8: -/* 8029E3D8 C0 23 00 08 */ lfs f1, 8(r3) -/* 8029E3DC C0 02 BD 60 */ lfs f0, lit_299(r2) -/* 8029E3E0 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E3E4 40 80 00 0C */ bge lbl_8029E3F0 -/* 8029E3E8 D0 03 00 08 */ stfs f0, 8(r3) -/* 8029E3EC 48 00 00 14 */ b lbl_8029E400 -lbl_8029E3F0: -/* 8029E3F0 C0 02 BD 68 */ lfs f0, lit_301(r2) -/* 8029E3F4 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E3F8 40 81 00 08 */ ble lbl_8029E400 -/* 8029E3FC D0 03 00 08 */ stfs f0, 8(r3) -lbl_8029E400: -/* 8029E400 C0 23 00 04 */ lfs f1, 4(r3) -/* 8029E404 C0 02 BD 60 */ lfs f0, lit_299(r2) -/* 8029E408 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E40C 40 80 00 0C */ bge lbl_8029E418 -/* 8029E410 D0 03 00 04 */ stfs f0, 4(r3) -/* 8029E414 48 00 00 14 */ b lbl_8029E428 -lbl_8029E418: -/* 8029E418 C0 02 BD 64 */ lfs f0, lit_300(r2) -/* 8029E41C FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E420 40 81 00 08 */ ble lbl_8029E428 -/* 8029E424 D0 03 00 04 */ stfs f0, 4(r3) -lbl_8029E428: -/* 8029E428 C0 23 00 0C */ lfs f1, 0xc(r3) -/* 8029E42C C0 02 BD 60 */ lfs f0, lit_299(r2) -/* 8029E430 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E434 40 80 00 0C */ bge lbl_8029E440 -/* 8029E438 D0 03 00 0C */ stfs f0, 0xc(r3) -/* 8029E43C 48 00 00 14 */ b lbl_8029E450 -lbl_8029E440: -/* 8029E440 C0 02 BD 64 */ lfs f0, lit_300(r2) -/* 8029E444 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E448 40 81 00 08 */ ble lbl_8029E450 -/* 8029E44C D0 03 00 0C */ stfs f0, 0xc(r3) -lbl_8029E450: -/* 8029E450 C0 23 00 10 */ lfs f1, 0x10(r3) -/* 8029E454 C0 02 BD 60 */ lfs f0, lit_299(r2) -/* 8029E458 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E45C 40 80 00 0C */ bge lbl_8029E468 -/* 8029E460 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 8029E464 4E 80 00 20 */ blr -lbl_8029E468: -/* 8029E468 C0 02 BD 64 */ lfs f0, lit_300(r2) -/* 8029E46C FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 8029E470 4C 81 00 20 */ blelr -/* 8029E474 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 8029E478 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASSoundParams/combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams.s b/asm/JSystem/JAudio2/JASSoundParams/combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams.s deleted file mode 100644 index f0a7b85115f..00000000000 --- a/asm/JSystem/JAudio2/JASSoundParams/combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_8029E47C: -/* 8029E47C C0 24 00 00 */ lfs f1, 0(r4) -/* 8029E480 C0 05 00 00 */ lfs f0, 0(r5) -/* 8029E484 EC 01 00 32 */ fmuls f0, f1, f0 -/* 8029E488 D0 03 00 00 */ stfs f0, 0(r3) -/* 8029E48C C0 24 00 08 */ lfs f1, 8(r4) -/* 8029E490 C0 05 00 08 */ lfs f0, 8(r5) -/* 8029E494 EC 01 00 32 */ fmuls f0, f1, f0 -/* 8029E498 D0 03 00 08 */ stfs f0, 8(r3) -/* 8029E49C C0 24 00 04 */ lfs f1, 4(r4) -/* 8029E4A0 C0 05 00 04 */ lfs f0, 4(r5) -/* 8029E4A4 EC 01 00 2A */ fadds f0, f1, f0 -/* 8029E4A8 D0 03 00 04 */ stfs f0, 4(r3) -/* 8029E4AC C0 24 00 0C */ lfs f1, 0xc(r4) -/* 8029E4B0 C0 05 00 0C */ lfs f0, 0xc(r5) -/* 8029E4B4 EC 21 00 2A */ fadds f1, f1, f0 -/* 8029E4B8 C0 02 BD 6C */ lfs f0, lit_311(r2) -/* 8029E4BC EC 01 00 28 */ fsubs f0, f1, f0 -/* 8029E4C0 D0 03 00 0C */ stfs f0, 0xc(r3) -/* 8029E4C4 C0 24 00 10 */ lfs f1, 0x10(r4) -/* 8029E4C8 C0 05 00 10 */ lfs f0, 0x10(r5) -/* 8029E4CC EC 01 00 2A */ fadds f0, f1, f0 -/* 8029E4D0 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 8029E4D4 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s b/asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s deleted file mode 100644 index 8fe798162ab..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_8028F6C4: -/* 8028F6C4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8028F6C8 7C 08 02 A6 */ mflr r0 -/* 8028F6CC 90 01 00 14 */ stw r0, 0x14(r1) -/* 8028F6D0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8028F6D4 7C 7F 1B 78 */ mr r31, r3 -/* 8028F6D8 7C 87 23 78 */ mr r7, r4 -/* 8028F6DC 7C A0 2B 78 */ mr r0, r5 -/* 8028F6E0 80 8D 8C 90 */ lwz r4, JASDram(r13) -/* 8028F6E4 7C C5 33 78 */ mr r5, r6 -/* 8028F6E8 7C 06 03 78 */ mr r6, r0 -/* 8028F6EC 48 04 1F 25 */ bl __ct__9JKRThreadFP7JKRHeapUlii -/* 8028F6F0 3C 60 80 3C */ lis r3, __vt__13JASTaskThread@ha /* 0x803C5B58@ha */ -/* 8028F6F4 38 03 5B 58 */ addi r0, r3, __vt__13JASTaskThread@l /* 0x803C5B58@l */ -/* 8028F6F8 90 1F 00 00 */ stw r0, 0(r31) -/* 8028F6FC 38 00 00 00 */ li r0, 0 -/* 8028F700 98 1F 00 84 */ stb r0, 0x84(r31) -/* 8028F704 38 7F 00 7C */ addi r3, r31, 0x7c -/* 8028F708 48 0B 15 6D */ bl OSInitThreadQueue -/* 8028F70C 7F E3 FB 78 */ mr r3, r31 -/* 8028F710 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8028F714 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8028F718 7C 08 03 A6 */ mtlr r0 -/* 8028F71C 38 21 00 10 */ addi r1, r1, 0x10 -/* 8028F720 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s b/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s deleted file mode 100644 index b97d40e4877..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s +++ /dev/null @@ -1,115 +0,0 @@ -lbl_8028F850: -/* 8028F850 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 8028F854 7C 08 02 A6 */ mflr r0 -/* 8028F858 90 01 00 34 */ stw r0, 0x34(r1) -/* 8028F85C 39 61 00 30 */ addi r11, r1, 0x30 -/* 8028F860 48 0D 29 71 */ bl _savegpr_26 -/* 8028F864 7C 9C 23 78 */ mr r28, r4 -/* 8028F868 7C BD 2B 78 */ mr r29, r5 -/* 8028F86C 7C DE 33 78 */ mr r30, r6 -/* 8028F870 3B FE 00 08 */ addi r31, r30, 8 -/* 8028F874 48 00 12 55 */ bl getCommandHeap__9JASKernelFv -/* 8028F878 7C 7B 1B 78 */ mr r27, r3 -/* 8028F87C 93 61 00 08 */ stw r27, 8(r1) -/* 8028F880 48 0A F7 C1 */ bl OSLockMutex -/* 8028F884 83 5B 00 18 */ lwz r26, 0x18(r27) -/* 8028F888 80 1A 00 04 */ lwz r0, 4(r26) -/* 8028F88C 20 00 04 00 */ subfic r0, r0, 0x400 -/* 8028F890 7C 00 F8 40 */ cmplw r0, r31 -/* 8028F894 40 80 00 E4 */ bge lbl_8028F978 -/* 8028F898 28 1F 04 00 */ cmplwi r31, 0x400 -/* 8028F89C 40 81 00 14 */ ble lbl_8028F8B0 -/* 8028F8A0 7F 63 DB 78 */ mr r3, r27 -/* 8028F8A4 48 0A F8 79 */ bl OSUnlockMutex -/* 8028F8A8 3B 60 00 00 */ li r27, 0 -/* 8028F8AC 48 00 00 F8 */ b lbl_8028F9A4 -lbl_8028F8B0: -/* 8028F8B0 28 1A 00 00 */ cmplwi r26, 0 -/* 8028F8B4 41 82 00 20 */ beq lbl_8028F8D4 -/* 8028F8B8 80 1A 00 08 */ lwz r0, 8(r26) -/* 8028F8BC 28 00 00 00 */ cmplwi r0, 0 -/* 8028F8C0 40 82 00 14 */ bne lbl_8028F8D4 -/* 8028F8C4 38 00 00 00 */ li r0, 0 -/* 8028F8C8 90 1A 00 04 */ stw r0, 4(r26) -/* 8028F8CC 38 00 00 01 */ li r0, 1 -/* 8028F8D0 48 00 00 90 */ b lbl_8028F960 -lbl_8028F8D4: -/* 8028F8D4 48 00 11 ED */ bl getSystemHeap__9JASKernelFv -/* 8028F8D8 7C 64 1B 78 */ mr r4, r3 -/* 8028F8DC 38 60 04 0C */ li r3, 0x40c -/* 8028F8E0 38 A0 00 00 */ li r5, 0 -/* 8028F8E4 48 03 F3 B5 */ bl __nw__FUlP7JKRHeapi -/* 8028F8E8 28 03 00 00 */ cmplwi r3, 0 -/* 8028F8EC 41 82 00 14 */ beq lbl_8028F900 -/* 8028F8F0 93 43 00 00 */ stw r26, 0(r3) -/* 8028F8F4 38 00 00 00 */ li r0, 0 -/* 8028F8F8 90 03 00 04 */ stw r0, 4(r3) -/* 8028F8FC 90 03 00 08 */ stw r0, 8(r3) -lbl_8028F900: -/* 8028F900 90 7B 00 18 */ stw r3, 0x18(r27) -/* 8028F904 80 1B 00 18 */ lwz r0, 0x18(r27) -/* 8028F908 28 00 00 00 */ cmplwi r0, 0 -/* 8028F90C 41 82 00 0C */ beq lbl_8028F918 -/* 8028F910 38 00 00 01 */ li r0, 1 -/* 8028F914 48 00 00 4C */ b lbl_8028F960 -lbl_8028F918: -/* 8028F918 38 60 04 0C */ li r3, 0x40c -/* 8028F91C 80 8D 8D F0 */ lwz r4, sSystemHeap__7JKRHeap(r13) -/* 8028F920 38 A0 00 00 */ li r5, 0 -/* 8028F924 48 03 F3 75 */ bl __nw__FUlP7JKRHeapi -/* 8028F928 28 03 00 00 */ cmplwi r3, 0 -/* 8028F92C 41 82 00 14 */ beq lbl_8028F940 -/* 8028F930 93 43 00 00 */ stw r26, 0(r3) -/* 8028F934 38 00 00 00 */ li r0, 0 -/* 8028F938 90 03 00 04 */ stw r0, 4(r3) -/* 8028F93C 90 03 00 08 */ stw r0, 8(r3) -lbl_8028F940: -/* 8028F940 90 7B 00 18 */ stw r3, 0x18(r27) -/* 8028F944 80 1B 00 18 */ lwz r0, 0x18(r27) -/* 8028F948 28 00 00 00 */ cmplwi r0, 0 -/* 8028F94C 41 82 00 0C */ beq lbl_8028F958 -/* 8028F950 38 00 00 01 */ li r0, 1 -/* 8028F954 48 00 00 0C */ b lbl_8028F960 -lbl_8028F958: -/* 8028F958 93 5B 00 18 */ stw r26, 0x18(r27) -/* 8028F95C 38 00 00 00 */ li r0, 0 -lbl_8028F960: -/* 8028F960 54 00 06 3F */ clrlwi. r0, r0, 0x18 -/* 8028F964 40 82 00 14 */ bne lbl_8028F978 -/* 8028F968 80 61 00 08 */ lwz r3, 8(r1) -/* 8028F96C 48 0A F7 B1 */ bl OSUnlockMutex -/* 8028F970 3B 60 00 00 */ li r27, 0 -/* 8028F974 48 00 00 30 */ b lbl_8028F9A4 -lbl_8028F978: -/* 8028F978 80 9B 00 18 */ lwz r4, 0x18(r27) -/* 8028F97C 80 64 00 04 */ lwz r3, 4(r4) -/* 8028F980 3B 63 00 0C */ addi r27, r3, 0xc -/* 8028F984 7F 64 DA 14 */ add r27, r4, r27 -/* 8028F988 7C 03 FA 14 */ add r0, r3, r31 -/* 8028F98C 90 04 00 04 */ stw r0, 4(r4) -/* 8028F990 80 64 00 08 */ lwz r3, 8(r4) -/* 8028F994 38 03 00 01 */ addi r0, r3, 1 -/* 8028F998 90 04 00 08 */ stw r0, 8(r4) -/* 8028F99C 80 61 00 08 */ lwz r3, 8(r1) -/* 8028F9A0 48 0A F7 7D */ bl OSUnlockMutex -lbl_8028F9A4: -/* 8028F9A4 28 1B 00 00 */ cmplwi r27, 0 -/* 8028F9A8 40 82 00 0C */ bne lbl_8028F9B4 -/* 8028F9AC 38 60 00 00 */ li r3, 0 -/* 8028F9B0 48 00 00 24 */ b lbl_8028F9D4 -lbl_8028F9B4: -/* 8028F9B4 38 00 00 01 */ li r0, 1 -/* 8028F9B8 90 1B 00 04 */ stw r0, 4(r27) -/* 8028F9BC 7F A3 EB 78 */ mr r3, r29 -/* 8028F9C0 38 9B 00 08 */ addi r4, r27, 8 -/* 8028F9C4 7F C5 F3 78 */ mr r5, r30 -/* 8028F9C8 4B FF F9 8D */ bl bcopy__7JASCalcFPCvPvUl -/* 8028F9CC 93 9B 00 00 */ stw r28, 0(r27) -/* 8028F9D0 7F 63 DB 78 */ mr r3, r27 -lbl_8028F9D4: -/* 8028F9D4 39 61 00 30 */ addi r11, r1, 0x30 -/* 8028F9D8 48 0D 28 45 */ bl _restgpr_26 -/* 8028F9DC 80 01 00 34 */ lwz r0, 0x34(r1) -/* 8028F9E0 7C 08 03 A6 */ mtlr r0 -/* 8028F9E4 38 21 00 30 */ addi r1, r1, 0x30 -/* 8028F9E8 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s b/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s deleted file mode 100644 index f45915ed11a..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s +++ /dev/null @@ -1,103 +0,0 @@ -lbl_8028F9EC: -/* 8028F9EC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8028F9F0 7C 08 02 A6 */ mflr r0 -/* 8028F9F4 90 01 00 24 */ stw r0, 0x24(r1) -/* 8028F9F8 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028F9FC 48 0D 27 DD */ bl _savegpr_28 -/* 8028FA00 7C 9E 23 78 */ mr r30, r4 -/* 8028FA04 7C BF 2B 78 */ mr r31, r5 -/* 8028FA08 48 00 10 C1 */ bl getCommandHeap__9JASKernelFv -/* 8028FA0C 7C 7D 1B 78 */ mr r29, r3 -/* 8028FA10 93 A1 00 08 */ stw r29, 8(r1) -/* 8028FA14 48 0A F6 2D */ bl OSLockMutex -/* 8028FA18 83 9D 00 18 */ lwz r28, 0x18(r29) -/* 8028FA1C 80 1C 00 04 */ lwz r0, 4(r28) -/* 8028FA20 20 00 04 00 */ subfic r0, r0, 0x400 -/* 8028FA24 28 00 00 0C */ cmplwi r0, 0xc -/* 8028FA28 40 80 00 CC */ bge lbl_8028FAF4 -/* 8028FA2C 28 1C 00 00 */ cmplwi r28, 0 -/* 8028FA30 41 82 00 20 */ beq lbl_8028FA50 -/* 8028FA34 80 1C 00 08 */ lwz r0, 8(r28) -/* 8028FA38 28 00 00 00 */ cmplwi r0, 0 -/* 8028FA3C 40 82 00 14 */ bne lbl_8028FA50 -/* 8028FA40 38 00 00 00 */ li r0, 0 -/* 8028FA44 90 1C 00 04 */ stw r0, 4(r28) -/* 8028FA48 38 00 00 01 */ li r0, 1 -/* 8028FA4C 48 00 00 90 */ b lbl_8028FADC -lbl_8028FA50: -/* 8028FA50 48 00 10 71 */ bl getSystemHeap__9JASKernelFv -/* 8028FA54 7C 64 1B 78 */ mr r4, r3 -/* 8028FA58 38 60 04 0C */ li r3, 0x40c -/* 8028FA5C 38 A0 00 00 */ li r5, 0 -/* 8028FA60 48 03 F2 39 */ bl __nw__FUlP7JKRHeapi -/* 8028FA64 28 03 00 00 */ cmplwi r3, 0 -/* 8028FA68 41 82 00 14 */ beq lbl_8028FA7C -/* 8028FA6C 93 83 00 00 */ stw r28, 0(r3) -/* 8028FA70 38 00 00 00 */ li r0, 0 -/* 8028FA74 90 03 00 04 */ stw r0, 4(r3) -/* 8028FA78 90 03 00 08 */ stw r0, 8(r3) -lbl_8028FA7C: -/* 8028FA7C 90 7D 00 18 */ stw r3, 0x18(r29) -/* 8028FA80 80 1D 00 18 */ lwz r0, 0x18(r29) -/* 8028FA84 28 00 00 00 */ cmplwi r0, 0 -/* 8028FA88 41 82 00 0C */ beq lbl_8028FA94 -/* 8028FA8C 38 00 00 01 */ li r0, 1 -/* 8028FA90 48 00 00 4C */ b lbl_8028FADC -lbl_8028FA94: -/* 8028FA94 38 60 04 0C */ li r3, 0x40c -/* 8028FA98 80 8D 8D F0 */ lwz r4, sSystemHeap__7JKRHeap(r13) -/* 8028FA9C 38 A0 00 00 */ li r5, 0 -/* 8028FAA0 48 03 F1 F9 */ bl __nw__FUlP7JKRHeapi -/* 8028FAA4 28 03 00 00 */ cmplwi r3, 0 -/* 8028FAA8 41 82 00 14 */ beq lbl_8028FABC -/* 8028FAAC 93 83 00 00 */ stw r28, 0(r3) -/* 8028FAB0 38 00 00 00 */ li r0, 0 -/* 8028FAB4 90 03 00 04 */ stw r0, 4(r3) -/* 8028FAB8 90 03 00 08 */ stw r0, 8(r3) -lbl_8028FABC: -/* 8028FABC 90 7D 00 18 */ stw r3, 0x18(r29) -/* 8028FAC0 80 1D 00 18 */ lwz r0, 0x18(r29) -/* 8028FAC4 28 00 00 00 */ cmplwi r0, 0 -/* 8028FAC8 41 82 00 0C */ beq lbl_8028FAD4 -/* 8028FACC 38 00 00 01 */ li r0, 1 -/* 8028FAD0 48 00 00 0C */ b lbl_8028FADC -lbl_8028FAD4: -/* 8028FAD4 93 9D 00 18 */ stw r28, 0x18(r29) -/* 8028FAD8 38 00 00 00 */ li r0, 0 -lbl_8028FADC: -/* 8028FADC 54 00 06 3F */ clrlwi. r0, r0, 0x18 -/* 8028FAE0 40 82 00 14 */ bne lbl_8028FAF4 -/* 8028FAE4 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FAE8 48 0A F6 35 */ bl OSUnlockMutex -/* 8028FAEC 3B A0 00 00 */ li r29, 0 -/* 8028FAF0 48 00 00 30 */ b lbl_8028FB20 -lbl_8028FAF4: -/* 8028FAF4 80 9D 00 18 */ lwz r4, 0x18(r29) -/* 8028FAF8 80 64 00 04 */ lwz r3, 4(r4) -/* 8028FAFC 3B A3 00 0C */ addi r29, r3, 0xc -/* 8028FB00 7F A4 EA 14 */ add r29, r4, r29 -/* 8028FB04 38 03 00 0C */ addi r0, r3, 0xc -/* 8028FB08 90 04 00 04 */ stw r0, 4(r4) -/* 8028FB0C 80 64 00 08 */ lwz r3, 8(r4) -/* 8028FB10 38 03 00 01 */ addi r0, r3, 1 -/* 8028FB14 90 04 00 08 */ stw r0, 8(r4) -/* 8028FB18 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FB1C 48 0A F6 01 */ bl OSUnlockMutex -lbl_8028FB20: -/* 8028FB20 28 1D 00 00 */ cmplwi r29, 0 -/* 8028FB24 40 82 00 0C */ bne lbl_8028FB30 -/* 8028FB28 38 60 00 00 */ li r3, 0 -/* 8028FB2C 48 00 00 18 */ b lbl_8028FB44 -lbl_8028FB30: -/* 8028FB30 38 00 00 00 */ li r0, 0 -/* 8028FB34 90 1D 00 04 */ stw r0, 4(r29) -/* 8028FB38 93 FD 00 08 */ stw r31, 8(r29) -/* 8028FB3C 93 DD 00 00 */ stw r30, 0(r29) -/* 8028FB40 7F A3 EB 78 */ mr r3, r29 -lbl_8028FB44: -/* 8028FB44 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028FB48 48 0D 26 DD */ bl _restgpr_28 -/* 8028FB4C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8028FB50 7C 08 03 A6 */ mtlr r0 -/* 8028FB54 38 21 00 20 */ addi r1, r1, 0x20 -/* 8028FB58 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s b/asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s deleted file mode 100644 index a288e4e2a58..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s +++ /dev/null @@ -1,33 +0,0 @@ -lbl_8028FE88: -/* 8028FE88 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8028FE8C 7C 08 02 A6 */ mflr r0 -/* 8028FE90 90 01 00 24 */ stw r0, 0x24(r1) -/* 8028FE94 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8028FE98 93 C1 00 18 */ stw r30, 0x18(r1) -/* 8028FE9C 7C 7E 1B 78 */ mr r30, r3 -/* 8028FEA0 7C 9F 23 78 */ mr r31, r4 -/* 8028FEA4 48 0A D8 51 */ bl OSDisableInterrupts -/* 8028FEA8 90 61 00 08 */ stw r3, 8(r1) -/* 8028FEAC 57 E0 06 3F */ clrlwi. r0, r31, 0x18 -/* 8028FEB0 41 82 00 10 */ beq lbl_8028FEC0 -/* 8028FEB4 38 00 00 01 */ li r0, 1 -/* 8028FEB8 98 1E 00 84 */ stb r0, 0x84(r30) -/* 8028FEBC 48 00 00 20 */ b lbl_8028FEDC -lbl_8028FEC0: -/* 8028FEC0 88 1E 00 84 */ lbz r0, 0x84(r30) -/* 8028FEC4 28 00 00 00 */ cmplwi r0, 0 -/* 8028FEC8 41 82 00 0C */ beq lbl_8028FED4 -/* 8028FECC 38 7E 00 7C */ addi r3, r30, 0x7c -/* 8028FED0 48 0B 1D C9 */ bl OSWakeupThread -lbl_8028FED4: -/* 8028FED4 38 00 00 00 */ li r0, 0 -/* 8028FED8 98 1E 00 84 */ stb r0, 0x84(r30) -lbl_8028FEDC: -/* 8028FEDC 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FEE0 48 0A D8 3D */ bl OSRestoreInterrupts -/* 8028FEE4 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8028FEE8 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 8028FEEC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8028FEF0 7C 08 03 A6 */ mtlr r0 -/* 8028FEF4 38 21 00 20 */ addi r1, r1, 0x20 -/* 8028FEF8 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s b/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s deleted file mode 100644 index 3f85e41acbf..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s +++ /dev/null @@ -1,71 +0,0 @@ -lbl_8028FB5C: -/* 8028FB5C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8028FB60 7C 08 02 A6 */ mflr r0 -/* 8028FB64 90 01 00 24 */ stw r0, 0x24(r1) -/* 8028FB68 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028FB6C 48 0D 26 6D */ bl _savegpr_28 -/* 8028FB70 7C 7D 1B 78 */ mr r29, r3 -/* 8028FB74 4B FF FC DD */ bl allocCallStack__13JASTaskThreadFPFPv_vPCvUl -/* 8028FB78 7C 7C 1B 79 */ or. r28, r3, r3 -/* 8028FB7C 40 82 00 0C */ bne lbl_8028FB88 -/* 8028FB80 38 60 00 00 */ li r3, 0 -/* 8028FB84 48 00 00 B8 */ b lbl_8028FC3C -lbl_8028FB88: -/* 8028FB88 38 7D 00 30 */ addi r3, r29, 0x30 -/* 8028FB8C 7F 84 E3 78 */ mr r4, r28 -/* 8028FB90 38 A0 00 00 */ li r5, 0 -/* 8028FB94 48 0A EE 61 */ bl OSSendMessage -/* 8028FB98 7C 7D 1B 79 */ or. r29, r3, r3 -/* 8028FB9C 40 82 00 9C */ bne lbl_8028FC38 -/* 8028FBA0 48 00 0F 29 */ bl getCommandHeap__9JASKernelFv -/* 8028FBA4 7C 7F 1B 78 */ mr r31, r3 -/* 8028FBA8 93 E1 00 08 */ stw r31, 8(r1) -/* 8028FBAC 48 0A F4 95 */ bl OSLockMutex -/* 8028FBB0 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 8028FBB4 3B C0 00 00 */ li r30, 0 -/* 8028FBB8 48 00 00 70 */ b lbl_8028FC28 -lbl_8028FBBC: -/* 8028FBBC 38 80 00 00 */ li r4, 0 -/* 8028FBC0 38 03 00 0C */ addi r0, r3, 0xc -/* 8028FBC4 7C 00 E0 40 */ cmplw r0, r28 -/* 8028FBC8 41 81 00 14 */ bgt lbl_8028FBDC -/* 8028FBCC 38 03 04 0C */ addi r0, r3, 0x40c -/* 8028FBD0 7C 1C 00 40 */ cmplw r28, r0 -/* 8028FBD4 40 80 00 08 */ bge lbl_8028FBDC -/* 8028FBD8 38 80 00 01 */ li r4, 1 -lbl_8028FBDC: -/* 8028FBDC 54 80 06 3F */ clrlwi. r0, r4, 0x18 -/* 8028FBE0 41 82 00 40 */ beq lbl_8028FC20 -/* 8028FBE4 80 83 00 08 */ lwz r4, 8(r3) -/* 8028FBE8 38 04 FF FF */ addi r0, r4, -1 -/* 8028FBEC 90 03 00 08 */ stw r0, 8(r3) -/* 8028FBF0 80 1F 00 18 */ lwz r0, 0x18(r31) -/* 8028FBF4 7C 03 00 40 */ cmplw r3, r0 -/* 8028FBF8 41 82 00 1C */ beq lbl_8028FC14 -/* 8028FBFC 80 03 00 08 */ lwz r0, 8(r3) -/* 8028FC00 28 00 00 00 */ cmplwi r0, 0 -/* 8028FC04 40 82 00 10 */ bne lbl_8028FC14 -/* 8028FC08 83 E3 00 00 */ lwz r31, 0(r3) -/* 8028FC0C 48 03 F1 31 */ bl __dl__FPv -/* 8028FC10 93 FE 00 00 */ stw r31, 0(r30) -lbl_8028FC14: -/* 8028FC14 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FC18 48 0A F5 05 */ bl OSUnlockMutex -/* 8028FC1C 48 00 00 1C */ b lbl_8028FC38 -lbl_8028FC20: -/* 8028FC20 7C 7E 1B 78 */ mr r30, r3 -/* 8028FC24 80 63 00 00 */ lwz r3, 0(r3) -lbl_8028FC28: -/* 8028FC28 28 03 00 00 */ cmplwi r3, 0 -/* 8028FC2C 40 82 FF 90 */ bne lbl_8028FBBC -/* 8028FC30 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FC34 48 0A F4 E9 */ bl OSUnlockMutex -lbl_8028FC38: -/* 8028FC38 7F A3 EB 78 */ mr r3, r29 -lbl_8028FC3C: -/* 8028FC3C 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028FC40 48 0D 25 E5 */ bl _restgpr_28 -/* 8028FC44 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8028FC48 7C 08 03 A6 */ mtlr r0 -/* 8028FC4C 38 21 00 20 */ addi r1, r1, 0x20 -/* 8028FC50 4E 80 00 20 */ blr diff --git a/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s b/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s deleted file mode 100644 index b53d74e66c6..00000000000 --- a/asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s +++ /dev/null @@ -1,71 +0,0 @@ -lbl_8028FC54: -/* 8028FC54 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8028FC58 7C 08 02 A6 */ mflr r0 -/* 8028FC5C 90 01 00 24 */ stw r0, 0x24(r1) -/* 8028FC60 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028FC64 48 0D 25 75 */ bl _savegpr_28 -/* 8028FC68 7C 7D 1B 78 */ mr r29, r3 -/* 8028FC6C 4B FF FD 81 */ bl allocCallStack__13JASTaskThreadFPFPv_vPv -/* 8028FC70 7C 7C 1B 79 */ or. r28, r3, r3 -/* 8028FC74 40 82 00 0C */ bne lbl_8028FC80 -/* 8028FC78 38 60 00 00 */ li r3, 0 -/* 8028FC7C 48 00 00 B8 */ b lbl_8028FD34 -lbl_8028FC80: -/* 8028FC80 38 7D 00 30 */ addi r3, r29, 0x30 -/* 8028FC84 7F 84 E3 78 */ mr r4, r28 -/* 8028FC88 38 A0 00 00 */ li r5, 0 -/* 8028FC8C 48 0A ED 69 */ bl OSSendMessage -/* 8028FC90 7C 7D 1B 79 */ or. r29, r3, r3 -/* 8028FC94 40 82 00 9C */ bne lbl_8028FD30 -/* 8028FC98 48 00 0E 31 */ bl getCommandHeap__9JASKernelFv -/* 8028FC9C 7C 7F 1B 78 */ mr r31, r3 -/* 8028FCA0 93 E1 00 08 */ stw r31, 8(r1) -/* 8028FCA4 48 0A F3 9D */ bl OSLockMutex -/* 8028FCA8 80 7F 00 18 */ lwz r3, 0x18(r31) -/* 8028FCAC 3B C0 00 00 */ li r30, 0 -/* 8028FCB0 48 00 00 70 */ b lbl_8028FD20 -lbl_8028FCB4: -/* 8028FCB4 38 80 00 00 */ li r4, 0 -/* 8028FCB8 38 03 00 0C */ addi r0, r3, 0xc -/* 8028FCBC 7C 00 E0 40 */ cmplw r0, r28 -/* 8028FCC0 41 81 00 14 */ bgt lbl_8028FCD4 -/* 8028FCC4 38 03 04 0C */ addi r0, r3, 0x40c -/* 8028FCC8 7C 1C 00 40 */ cmplw r28, r0 -/* 8028FCCC 40 80 00 08 */ bge lbl_8028FCD4 -/* 8028FCD0 38 80 00 01 */ li r4, 1 -lbl_8028FCD4: -/* 8028FCD4 54 80 06 3F */ clrlwi. r0, r4, 0x18 -/* 8028FCD8 41 82 00 40 */ beq lbl_8028FD18 -/* 8028FCDC 80 83 00 08 */ lwz r4, 8(r3) -/* 8028FCE0 38 04 FF FF */ addi r0, r4, -1 -/* 8028FCE4 90 03 00 08 */ stw r0, 8(r3) -/* 8028FCE8 80 1F 00 18 */ lwz r0, 0x18(r31) -/* 8028FCEC 7C 03 00 40 */ cmplw r3, r0 -/* 8028FCF0 41 82 00 1C */ beq lbl_8028FD0C -/* 8028FCF4 80 03 00 08 */ lwz r0, 8(r3) -/* 8028FCF8 28 00 00 00 */ cmplwi r0, 0 -/* 8028FCFC 40 82 00 10 */ bne lbl_8028FD0C -/* 8028FD00 83 E3 00 00 */ lwz r31, 0(r3) -/* 8028FD04 48 03 F0 39 */ bl __dl__FPv -/* 8028FD08 93 FE 00 00 */ stw r31, 0(r30) -lbl_8028FD0C: -/* 8028FD0C 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FD10 48 0A F4 0D */ bl OSUnlockMutex -/* 8028FD14 48 00 00 1C */ b lbl_8028FD30 -lbl_8028FD18: -/* 8028FD18 7C 7E 1B 78 */ mr r30, r3 -/* 8028FD1C 80 63 00 00 */ lwz r3, 0(r3) -lbl_8028FD20: -/* 8028FD20 28 03 00 00 */ cmplwi r3, 0 -/* 8028FD24 40 82 FF 90 */ bne lbl_8028FCB4 -/* 8028FD28 80 61 00 08 */ lwz r3, 8(r1) -/* 8028FD2C 48 0A F3 F1 */ bl OSUnlockMutex -lbl_8028FD30: -/* 8028FD30 7F A3 EB 78 */ mr r3, r29 -lbl_8028FD34: -/* 8028FD34 39 61 00 20 */ addi r11, r1, 0x20 -/* 8028FD38 48 0D 24 ED */ bl _restgpr_28 -/* 8028FD3C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8028FD40 7C 08 03 A6 */ mtlr r0 -/* 8028FD44 38 21 00 20 */ addi r1, r1, 0x20 -/* 8028FD48 4E 80 00 20 */ blr diff --git a/include/JSystem/JAudio2/JASHeapCtrl.h b/include/JSystem/JAudio2/JASHeapCtrl.h index fdb33566b40..e58e2e75f82 100644 --- a/include/JSystem/JAudio2/JASHeapCtrl.h +++ b/include/JSystem/JAudio2/JASHeapCtrl.h @@ -69,6 +69,24 @@ namespace JASThreadingModel { BOOL field_0x0; }; }; + + + struct ObjectLevelLockable { + // Should be templated on the chunk memory but couldn't initialize it inside the class itself + //template + struct Lock { + Lock(OSMutex* mutex) { + mMutex = mutex; + OSLockMutex(mMutex); + } + + ~Lock() { + OSUnlockMutex(mMutex); + } + + OSMutex* mMutex; + }; + }; }; template @@ -79,6 +97,115 @@ public: void free(void* ptr, u32 n) { JASGenericMemPool::free(ptr, n); } }; +template +class JASMemChunkPool { + struct MemoryChunk { + MemoryChunk(MemoryChunk* nextChunk) { + mNextChunk = nextChunk; + mUsedSize = 0; + mChunks = 0; + } + + bool checkArea(void* ptr) { + return (u8*)this + 0xc <= (u8*)ptr && (u8*)ptr < (u8*)this + (ChunkSize + 0xc); + } + + MemoryChunk* getNextChunk() { + return mNextChunk; + } + + void* alloc(u32 size) { + u8* rv = mBuffer + mUsedSize; + mUsedSize += size; + mChunks++; + return rv; + } + + void free() { + mChunks--; + } + + bool isEmpty() { + return mChunks == 0; + } + + void setNextChunk(MemoryChunk* chunk) { + mNextChunk = chunk; + } + + u32 getFreeSize() { + return ChunkSize - mUsedSize; + } + + void revive() { + mUsedSize = 0; + } + + MemoryChunk* mNextChunk; + u32 mUsedSize; + u32 mChunks; + u8 mBuffer[ChunkSize]; + }; +public: + bool createNewChunk() { + bool uVar2; + if (field_0x18 != NULL && field_0x18->isEmpty()) { + field_0x18->revive(); + uVar2 = 1; + } else { + MemoryChunk* pMVar4 = field_0x18; + field_0x18 = new (JASKernel::getSystemHeap(), 0) MemoryChunk(pMVar4); + if (field_0x18 != NULL) { + uVar2 = 1; + } else { + field_0x18 = new (JKRHeap::getSystemHeap(), 0) MemoryChunk(pMVar4); + if (field_0x18 != NULL) { + uVar2 = 1; + } else { + field_0x18 = pMVar4; + uVar2 = 0; + } + } + } + return uVar2; + } + + void* alloc(u32 size) { + T::Lock lock(&mMutex); + if (field_0x18->getFreeSize() < size) { + if (ChunkSize < size) { + return NULL; + } + if (createNewChunk() == 0) { + return NULL; + } + } + return field_0x18->alloc(size); + } + + void free(void* ptr) { + T::Lock lock(&((JASMemChunkPool*)ptr)->mMutex); + MemoryChunk* chunk = ((JASMemChunkPool*)ptr)->field_0x18; + MemoryChunk* prevChunk = NULL; + while (chunk != NULL) { + if (chunk->checkArea(this)) { + chunk->free(); + if (chunk != ((JASMemChunkPool*)ptr)->field_0x18 && chunk->isEmpty()) { + MemoryChunk* nextChunk = chunk->getNextChunk(); + delete chunk; + prevChunk->setNextChunk(nextChunk); + } + return; + } + prevChunk = chunk; + chunk = chunk->getNextChunk(); + } + } + + /* 0x00 */ OSMutex mMutex; + /* 0x18 */ MemoryChunk* field_0x18; +}; + template class JASPoolAllocObject { public: diff --git a/include/JSystem/JAudio2/JASSoundParams.h b/include/JSystem/JAudio2/JASSoundParams.h index 353148452b8..b48dbaea32a 100644 --- a/include/JSystem/JAudio2/JASSoundParams.h +++ b/include/JSystem/JAudio2/JASSoundParams.h @@ -22,6 +22,41 @@ struct JASSoundParams { JASSoundParams() { init(); } + void clampVolume() { + if (mVolume < 0.0f) + mVolume = 0.0f; + else if (mVolume > 1.0f) + mVolume = 1.0f; + } + + void clampFxMix(void) { + if (mFxMix < 0.0f) + mFxMix = 0.0f; + else if (mFxMix > 1.0f) + mFxMix = 1.0f; + } + + void clampPitch() { + if (mPitch < 0.0f) + mPitch = 0.0f; + else if (mPitch > 8.0f) + mPitch = 8.0f; + } + + void clampPan() { + if (mPan < 0.0f) + mPan = 0.0f; + else if (mPan > 1.0f) + mPan = 1.0f; + } + + void clampDolby() { + if (mDolby < 0.0f) + mDolby = 0.0f; + else if (mDolby > 1.0f) + mDolby = 1.0f; + } + /* 0x00 */ f32 mVolume; /* 0x04 */ f32 mFxMix; /* 0x08 */ f32 mPitch; diff --git a/include/JSystem/JAudio2/JASTaskThread.h b/include/JSystem/JAudio2/JASTaskThread.h index 60fa90c7ce3..976f89ee1ff 100644 --- a/include/JSystem/JAudio2/JASTaskThread.h +++ b/include/JSystem/JAudio2/JASTaskThread.h @@ -2,22 +2,33 @@ #define JASTASKTHREAD_H #include "JSystem/JKernel/JKRThread.h" +#include "JSystem/JAudio2/JASHeapCtrl.h" class JASTaskThread : public JKRThread { +private: + struct JASThreadCallStack { + /* 0x00 */ void (*mRunFunc)(void*); + /* 0x04 */ u32 field_0x4; + /* 0x08 */ union { + u8 buffer[0x400]; + void* pBuffer; + }field_0x8; + }; public: + typedef JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable> ThreadMemPool; + /* 8028F6C4 */ JASTaskThread(int, int, u32); - /* 8028F9EC */ void allocCallStack(void (*)(void*), void*); - /* 8028F850 */ void allocCallStack(void (*)(void*), void const*, u32); - /* 8028FC54 */ void sendCmdMsg(void (*)(void*), void*); + /* 8028F9EC */ void* allocCallStack(void (*)(void*), void*); + /* 8028F850 */ void* allocCallStack(void (*)(void*), void const*, u32); + /* 8028FC54 */ int sendCmdMsg(void (*)(void*), void*); /* 8028FB5C */ int sendCmdMsg(void (*)(void*), void const*, u32); /* 8028FE88 */ void pause(bool); /* 8028F724 */ virtual ~JASTaskThread(); /* 8028FD4C */ virtual void run(); - /* 0x7C */ OSThreadQueue* mpThreadQueue; + /* 0x7C */ OSThreadQueue mpThreadQueue; /* 0x84 */ bool field_0x84; - /* 0x88 */ u32 field_0x88; }; #endif /* JASTASKTHREAD_H */ diff --git a/include/JSystem/JKernel/JKRThread.h b/include/JSystem/JKernel/JKRThread.h index c2b89de8479..625da65447e 100644 --- a/include/JSystem/JKernel/JKRThread.h +++ b/include/JSystem/JKernel/JKRThread.h @@ -74,8 +74,8 @@ public: protected: void resume() { OSResumeThread(mThreadRecord); } - void sendMessage(OSMessage message) { - OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NOBLOCK); + BOOL sendMessage(OSMessage message) { + return OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NOBLOCK); } void sendMessageBlock(OSMessage message) { OSSendMessage(&mMessageQueue, message, OS_MESSAGE_BLOCK); @@ -85,6 +85,15 @@ protected: OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NOBLOCK); return message; } + + OSMessage waitMessage(BOOL* received) { + OSMessage message; + BOOL rv = OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NOBLOCK); + if (received) { + *received = rv; + } + return message; + } OSMessage waitMessageBlock() { OSMessage message; OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_BLOCK); diff --git a/libs/JSystem/JAudio2/JASSoundParams.cpp b/libs/JSystem/JAudio2/JASSoundParams.cpp index 92d60071742..890a8179db2 100644 --- a/libs/JSystem/JAudio2/JASSoundParams.cpp +++ b/libs/JSystem/JAudio2/JASSoundParams.cpp @@ -4,59 +4,22 @@ // #include "JSystem/JAudio2/JASSoundParams.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void clamp__14JASSoundParamsFv(); -extern "C" void combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams(); - -// -// External References: -// - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80455760-80455764 003D60 0004+00 1/1 0/0 0/0 .sdata2 @299 */ -SECTION_SDATA2 static u8 lit_299[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* 80455764-80455768 003D64 0004+00 1/1 0/0 0/0 .sdata2 @300 */ -SECTION_SDATA2 static f32 lit_300 = 1.0f; - -/* 80455768-8045576C 003D68 0004+00 1/1 0/0 0/0 .sdata2 @301 */ -SECTION_SDATA2 static f32 lit_301 = 8.0f; /* 8029E3B0-8029E47C 298CF0 00CC+00 0/0 2/2 0/0 .text clamp__14JASSoundParamsFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASSoundParams::clamp() { - nofralloc -#include "asm/JSystem/JAudio2/JASSoundParams/clamp__14JASSoundParamsFv.s" +void JASSoundParams::clamp() { + clampVolume(); + clampPitch(); + clampFxMix(); + clampPan(); + clampDolby(); } -#pragma pop - -/* ############################################################################################## */ -/* 8045576C-80455770 003D6C 0004+00 1/1 0/0 0/0 .sdata2 @311 */ -SECTION_SDATA2 static f32 lit_311 = 0.5f; /* 8029E47C-8029E4D8 298DBC 005C+00 0/0 2/2 0/0 .text * combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASSoundParams::combine(JASSoundParams const& param_0, JASSoundParams const& param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASSoundParams/combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams.s" +void JASSoundParams::combine(const JASSoundParams &other1, const JASSoundParams &other2) { + mVolume = other1.mVolume * other2.mVolume; + mPitch = other1.mPitch * other2.mPitch; + mFxMix = other1.mFxMix + other2.mFxMix; + mPan = other1.mPan + other2.mPan - 0.5f; + mDolby = other1.mDolby + other2.mDolby; } -#pragma pop diff --git a/libs/JSystem/JAudio2/JASTaskThread.cpp b/libs/JSystem/JAudio2/JASTaskThread.cpp index daf2e8d525d..5013df614ce 100644 --- a/libs/JSystem/JAudio2/JASTaskThread.cpp +++ b/libs/JSystem/JAudio2/JASTaskThread.cpp @@ -4,16 +4,12 @@ // #include "JSystem/JAudio2/JASTaskThread.h" +#include "JSystem/JAudio2/JASCalc.h" +#include "JSystem/JAudio2/JASCriticalSection.h" +#include "JSystem/JKernel/JKRSolidHeap.h" #include "dol2asm.h" #include "dolphin/os/OSInterrupt.h" - -// -// Types: -// - -struct JASCalc { - /* 8028F354 */ void bcopy(void const*, void*, u32); -}; +#include "dolphin/os/OS.h" // // Forward References: @@ -45,7 +41,6 @@ extern "C" void _savegpr_28(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); -extern "C" extern u8 JASDram[4]; extern "C" u8 sSystemHeap__7JKRHeap[4]; // @@ -62,16 +57,25 @@ SECTION_DATA extern void* __vt__13JASTaskThread[4] = { }; /* 8028F6C4-8028F724 28A004 0060+00 0/0 1/1 0/0 .text __ct__13JASTaskThreadFiiUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s" +JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) : JKRThread(JASDram, param_2, param_1, param_0) { + field_0x84 = false; + OSInitThreadQueue(&mpThreadQueue); } -#pragma pop /* 8028F724-8028F850 28A064 012C+00 1/0 0/0 0/0 .text __dt__13JASTaskThreadFv */ +// vtable maybe +#ifdef NONMATCHING +JASTaskThread::~JASTaskThread() { + OSMessage msg; + BOOL received; + waitmsg: + msg = waitMessage(&received); + if (!received) return; + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)msg)->free((void*)heap); + goto waitmsg; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -81,49 +85,93 @@ extern "C" asm void __dt__13JASTaskThreadFv() { #include "asm/JSystem/JAudio2/JASTaskThread/__dt__13JASTaskThreadFv.s" } #pragma pop +#endif /* 8028F850-8028F9EC 28A190 019C+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s" +void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) { + ThreadMemPool* heap; + u32 size = param_2 + 8; + heap = + (ThreadMemPool*)JASKernel::getCommandHeap(); + JASThreadCallStack *callStack = (JASThreadCallStack*) heap->alloc(size); + if (callStack == NULL) { + return NULL; + } + callStack->field_0x4 = 1; + JASCalc::bcopy(param_1, callStack->field_0x8.buffer, param_2); + callStack->mRunFunc = param_0; + return callStack; } -#pragma pop /* 8028F9EC-8028FB5C 28A32C 0170+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::allocCallStack(void (*param_0)(void*), void* param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s" +void* JASTaskThread::allocCallStack(void (*runFunc)(void*), void* param_1) { + ThreadMemPool* heap; + JASThreadCallStack *callStack; + heap = + (ThreadMemPool*)JASKernel::getCommandHeap(); + callStack = (JASThreadCallStack*)heap->alloc(0xc); + if (callStack == NULL) { + return NULL; + } + callStack->field_0x4 = 0; + callStack->field_0x8.pBuffer = param_1; + callStack->mRunFunc = runFunc; + return callStack; } -#pragma pop /* 8028FB5C-8028FC54 28A49C 00F8+00 0/0 6/6 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s" +int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { + void* pvVar1; + + pvVar1 = allocCallStack(param_0, param_1, param_2); + if (pvVar1 == NULL) { + return 0; + } + int iVar2 = sendMessage(pvVar1); + if (iVar2 == 0) { + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free((void*)heap); + } + return iVar2; } -#pragma pop /* 8028FC54-8028FD4C 28A594 00F8+00 0/0 3/3 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s" +int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) { + void* pvVar1; + + pvVar1 = allocCallStack(param_0, param_1); + if (pvVar1 == NULL) { + return 0; + } + int iVar2 = sendMessage(pvVar1); + if (iVar2 == 0) { + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free((void*)heap); + } + return iVar2; } -#pragma pop /* 8028FD4C-8028FE88 28A68C 013C+00 1/0 0/0 0/0 .text run__13JASTaskThreadFv */ +// Regalloc +#ifdef NONMATCHING +void JASTaskThread::run() { + i_OSInitFastCast(); + do { + JASThreadCallStack* ppcVar1 = (JASThreadCallStack*)waitMessageBlock(); + if (field_0x84) { + OSSleepThread(&mpThreadQueue); + } + if (ppcVar1->field_0x4) { + ppcVar1->mRunFunc(ppcVar1->field_0x8.buffer); + } else { + ppcVar1->mRunFunc(ppcVar1->field_0x8.pBuffer); + } + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)ppcVar1)->free((void*)heap); + } while (true); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -132,13 +180,17 @@ asm void JASTaskThread::run() { #include "asm/JSystem/JAudio2/JASTaskThread/run__13JASTaskThreadFv.s" } #pragma pop +#endif /* 8028FE88-8028FEFC 28A7C8 0074+00 0/0 1/1 0/0 .text pause__13JASTaskThreadFb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::pause(bool param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s" +void JASTaskThread::pause(bool param_0) { + JASCriticalSection aJStack_14; + if (param_0) { + field_0x84 = 1; + } else { + if (field_0x84) { + OSWakeupThread(&mpThreadQueue); + } + field_0x84 = 0; + } } -#pragma pop