From a1dd5f81facbb317a6b86a85e7c97971c9c24049 Mon Sep 17 00:00:00 2001 From: SwareJonge Date: Sun, 28 May 2023 13:37:53 +0200 Subject: [PATCH] decompile JASCalc --- configure.py | 2 +- include/JSystem/JAudio/JAS/JASCalc.h | 24 +- src/JSystem/JAudio/JAS/JASCalc.cpp | 664 +++++---------------------- src/JSystem/JAudio/JAS/Makefile | 2 +- 4 files changed, 122 insertions(+), 570 deletions(-) diff --git a/configure.py b/configure.py index 2f747722c..a2adb9657 100755 --- a/configure.py +++ b/configure.py @@ -334,7 +334,7 @@ "JSystem/JAudio/JAS/JASDSPChannel", "JSystem/JAudio/JAS/JASDSPInterface", ["JSystem/JAudio/JAS/JASAudioThread", True], - "JSystem/JAudio/JAS/JASCalc", + ["JSystem/JAudio/JAS/JASCalc", True], ["JSystem/JAudio/JAS/JASCallback", True], "JSystem/JAudio/JAS/JASCmdStack", ["JSystem/JAudio/JAS/JASDvdThread", True], diff --git a/include/JSystem/JAudio/JAS/JASCalc.h b/include/JSystem/JAudio/JAS/JASCalc.h index 6dd03083c..fa3ee6170 100644 --- a/include/JSystem/JAudio/JAS/JASCalc.h +++ b/include/JSystem/JAudio/JAS/JASCalc.h @@ -1,6 +1,7 @@ #ifndef _JSYSTEM_JAS_JASCALC_H #define _JSYSTEM_JAS_JASCALC_H +#include "stl/limits" #include "types.h" namespace JASCalc { @@ -8,15 +9,24 @@ void imixcopy(const short*, const short*, short*, unsigned long); void bcopy(const void*, void*, unsigned long); void bzero(void*, unsigned long); -// TODO: The existence of this function likely implies the usage of standard C++ type limits API. We should adopt the same throughout. +/* + * --INFO-- + * Address: 800A64D8 + * Size: 000028 + */ template -A clamp(B p1); +A clamp(B x) +{ + if (std::numeric_limits::min() >= x) { + return std::numeric_limits::min(); + } + if (x >= std::numeric_limits::max()) { + return std::numeric_limits::max(); + } + return x; +} -/** - * @fabricated - * See JASChannel::updateAutoMixer - */ -inline f32 clamp_0_1(f32 value) +inline f32 clamp01(f32 value) { if (value <= 0.0f) { return 0.0f; diff --git a/src/JSystem/JAudio/JAS/JASCalc.cpp b/src/JSystem/JAudio/JAS/JASCalc.cpp index 0fa1094b9..6fd3f4f8d 100644 --- a/src/JSystem/JAudio/JAS/JASCalc.cpp +++ b/src/JSystem/JAudio/JAS/JASCalc.cpp @@ -2,16 +2,14 @@ #include "Dolphin/os.h" #include "types.h" -/* - Generated from dpostproc -*/ +namespace JASCalc { /* * --INFO-- * Address: ........ * Size: 00007C */ -void JASCalc::mixcopy(const short*, const short*, short*, unsigned long) +void mixcopy(const short*, const short*, short*, unsigned long) { // UNUSED FUNCTION } @@ -21,69 +19,12 @@ void JASCalc::mixcopy(const short*, const short*, short*, unsigned long) * Address: 800A5EBC * Size: 0000D4 */ -void JASCalc::imixcopy(const short*, const short*, short*, unsigned long) +void imixcopy(const s16* s1, const s16* s2, s16* dst, u32 n) { - /* - cmplwi r6, 0 - beqlr - rlwinm. r0, r6, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A5F68 - -lbl_800A5ED0: - lha r7, 0(r3) - lha r0, 0(r4) - sth r7, 0(r5) - lha r7, 2(r3) - sth r0, 2(r5) - lha r0, 2(r4) - sth r7, 4(r5) - lha r7, 4(r3) - sth r0, 6(r5) - lha r0, 4(r4) - sth r7, 8(r5) - lha r7, 6(r3) - sth r0, 0xa(r5) - lha r0, 6(r4) - sth r7, 0xc(r5) - lha r7, 8(r3) - sth r0, 0xe(r5) - lha r0, 8(r4) - sth r7, 0x10(r5) - lha r7, 0xa(r3) - sth r0, 0x12(r5) - lha r0, 0xa(r4) - sth r7, 0x14(r5) - lha r7, 0xc(r3) - sth r0, 0x16(r5) - lha r0, 0xc(r4) - sth r7, 0x18(r5) - lha r7, 0xe(r3) - addi r3, r3, 0x10 - sth r0, 0x1a(r5) - lha r0, 0xe(r4) - addi r4, r4, 0x10 - sth r7, 0x1c(r5) - sth r0, 0x1e(r5) - addi r5, r5, 0x20 - bdnz lbl_800A5ED0 - andi. r6, r6, 7 - beqlr - -lbl_800A5F68: - mtctr r6 - -lbl_800A5F6C: - lha r7, 0(r3) - addi r3, r3, 2 - lha r0, 0(r4) - addi r4, r4, 2 - sth r7, 0(r5) - sth r0, 2(r5) - addi r5, r5, 4 - bdnz lbl_800A5F6C - blr - */ + for (n; n != 0; n--) { + *dst++ = *((s16*)s1)++; + *dst++ = *((s16*)s2)++; + } } /* @@ -91,9 +32,24 @@ void JASCalc::imixcopy(const short*, const short*, short*, unsigned long) * Address: ........ * Size: 0000E0 */ -void JASCalc::bcopyfast(const void*, void*, unsigned long) +void bcopyfast(const void* src, void* dest, u32 size) { - // UNUSED FUNCTION + u32 copy1, copy2, copy3, copy4; + + u32* usrc = (u32*)src; + u32* udest = (u32*)dest; + + for (size = size / (4 * sizeof(u32)); size != 0; size--) { + copy1 = *((u32*)usrc)++; + copy2 = *((u32*)usrc)++; + copy3 = *((u32*)usrc)++; + copy4 = *((u32*)usrc)++; + + *udest++ = copy1; + *udest++ = copy2; + *udest++ = copy3; + *udest++ = copy4; + } } /* @@ -101,229 +57,46 @@ void JASCalc::bcopyfast(const void*, void*, unsigned long) * Address: 800A5F90 * Size: 0002D4 */ -void JASCalc::bcopy(const void*, void*, unsigned long) +void bcopy(const void* src, void* dest, u32 size) { - /* - clrlwi r7, r3, 0x1e - clrlwi r6, r4, 0x1e - cmplw r7, r6 - bne lbl_800A6084 - clrlwi. r0, r5, 0x1c - bne lbl_800A6084 - rlwinm. r8, r5, 0x1c, 4, 0x1f - beqlr - rlwinm. r0, r8, 0x1e, 2, 0x1f - mtctr r0 - beq lbl_800A6050 - -lbl_800A5FBC: - lwz r7, 0(r3) - lwz r6, 4(r3) - lwz r5, 8(r3) - lwz r0, 0xc(r3) - stw r7, 0(r4) - stw r6, 4(r4) - stw r5, 8(r4) - stw r0, 0xc(r4) - lwz r7, 0x10(r3) - lwz r6, 0x14(r3) - lwz r5, 0x18(r3) - lwz r0, 0x1c(r3) - stw r7, 0x10(r4) - stw r6, 0x14(r4) - stw r5, 0x18(r4) - stw r0, 0x1c(r4) - lwz r7, 0x20(r3) - lwz r6, 0x24(r3) - lwz r5, 0x28(r3) - lwz r0, 0x2c(r3) - stw r7, 0x20(r4) - stw r6, 0x24(r4) - stw r5, 0x28(r4) - stw r0, 0x2c(r4) - lwz r7, 0x30(r3) - lwz r6, 0x34(r3) - lwz r5, 0x38(r3) - lwz r0, 0x3c(r3) - addi r3, r3, 0x40 - stw r7, 0x30(r4) - stw r6, 0x34(r4) - stw r5, 0x38(r4) - stw r0, 0x3c(r4) - addi r4, r4, 0x40 - bdnz lbl_800A5FBC - andi. r8, r8, 3 - beqlr - -lbl_800A6050: - mtctr r8 - -lbl_800A6054: - lwz r7, 0(r3) - lwz r6, 4(r3) - lwz r5, 8(r3) - lwz r0, 0xc(r3) - addi r3, r3, 0x10 - stw r7, 0(r4) - stw r6, 4(r4) - stw r5, 8(r4) - stw r0, 0xc(r4) - addi r4, r4, 0x10 - bdnz lbl_800A6054 - blr - -lbl_800A6084: - cmplw r7, r6 - bne lbl_800A61E0 - cmplwi r5, 0x10 - blt lbl_800A61E0 - cmplwi r7, 0 - beq lbl_800A60C8 - subfic r0, r7, 4 - clrlwi r6, r0, 0x18 - b lbl_800A60C0 - -lbl_800A60A8: - lbz r0, 0(r3) - addi r5, r5, -1 - addi r6, r6, -1 - addi r3, r3, 1 - stb r0, 0(r4) - addi r4, r4, 1 - -lbl_800A60C0: - clrlwi. r0, r6, 0x18 - bne lbl_800A60A8 - -lbl_800A60C8: - cmplwi r5, 4 - srwi r7, r5, 2 - blt lbl_800A6158 - rlwinm. r6, r7, 0x1d, 3, 0x1f - slwi r0, r7, 2 - neg r0, r0 - mtctr r6 - beq lbl_800A613C - -lbl_800A60E8: - lwz r6, 0(r3) - stw r6, 0(r4) - lwz r6, 4(r3) - stw r6, 4(r4) - lwz r6, 8(r3) - stw r6, 8(r4) - lwz r6, 0xc(r3) - stw r6, 0xc(r4) - lwz r6, 0x10(r3) - stw r6, 0x10(r4) - lwz r6, 0x14(r3) - stw r6, 0x14(r4) - lwz r6, 0x18(r3) - stw r6, 0x18(r4) - lwz r6, 0x1c(r3) - addi r3, r3, 0x20 - stw r6, 0x1c(r4) - addi r4, r4, 0x20 - bdnz lbl_800A60E8 - andi. r7, r7, 7 - beq lbl_800A6154 - -lbl_800A613C: - mtctr r7 - -lbl_800A6140: - lwz r6, 0(r3) - addi r3, r3, 4 - stw r6, 0(r4) - addi r4, r4, 4 - bdnz lbl_800A6140 - -lbl_800A6154: - add r5, r5, r0 - -lbl_800A6158: - cmplwi r5, 0 - beqlr - beqlr - rlwinm. r0, r5, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A61C4 - -lbl_800A6170: - lbz r0, 0(r3) - stb r0, 0(r4) - lbz r0, 1(r3) - stb r0, 1(r4) - lbz r0, 2(r3) - stb r0, 2(r4) - lbz r0, 3(r3) - stb r0, 3(r4) - lbz r0, 4(r3) - stb r0, 4(r4) - lbz r0, 5(r3) - stb r0, 5(r4) - lbz r0, 6(r3) - stb r0, 6(r4) - lbz r0, 7(r3) - addi r3, r3, 8 - stb r0, 7(r4) - addi r4, r4, 8 - bdnz lbl_800A6170 - andi. r5, r5, 7 - beqlr - -lbl_800A61C4: - mtctr r5 - -lbl_800A61C8: - lbz r0, 0(r3) - addi r3, r3, 1 - stb r0, 0(r4) - addi r4, r4, 1 - bdnz lbl_800A61C8 - blr + u32* usrc; + u32* udest; + + u8* bsrc = (u8*)src; + u8* bdest = (u8*)dest; + + u8 endbitsSrc = (reinterpret_cast(bsrc) & 0x03); + u8 enbitsDst = (reinterpret_cast(bdest) & 0x03); + if ((endbitsSrc) == (enbitsDst) && (size & 0x0f) == 0) { + bcopyfast(src, dest, size); + } else if ((endbitsSrc == enbitsDst) && (size >= 16)) { + if (endbitsSrc != 0) { + for (endbitsSrc = 4 - endbitsSrc; endbitsSrc != 0; endbitsSrc--) { + *bdest++ = (u32)*bsrc++; + size--; + } + } -lbl_800A61E0: - cmplwi r5, 0 - beqlr - rlwinm. r0, r5, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A6248 + udest = (u32*)bdest; + usrc = (u32*)bsrc; -lbl_800A61F4: - lbz r0, 0(r3) - stb r0, 0(r4) - lbz r0, 1(r3) - stb r0, 1(r4) - lbz r0, 2(r3) - stb r0, 2(r4) - lbz r0, 3(r3) - stb r0, 3(r4) - lbz r0, 4(r3) - stb r0, 4(r4) - lbz r0, 5(r3) - stb r0, 5(r4) - lbz r0, 6(r3) - stb r0, 6(r4) - lbz r0, 7(r3) - addi r3, r3, 8 - stb r0, 7(r4) - addi r4, r4, 8 - bdnz lbl_800A61F4 - andi. r5, r5, 7 - beqlr + for (; size >= 4; size -= 4) { + *udest++ = *usrc++; + } -lbl_800A6248: - mtctr r5 + if (size != 0) { + bdest = (u8*)udest; + bsrc = (u8*)usrc; -lbl_800A624C: - lbz r0, 0(r3) - addi r3, r3, 1 - stb r0, 0(r4) - addi r4, r4, 1 - bdnz lbl_800A624C - blr - */ + for (; size != 0; size--) { + *bdest++ = (u32)*bsrc++; + } + } + } else { + for (; size != 0; size--) { + *bdest++ = (u32)*bsrc++; + } + } } /* @@ -331,17 +104,15 @@ void JASCalc::bcopy(const void*, void*, unsigned long) * Address: ........ * Size: 0000CC */ -void JASCalc::bzerofast(void* addr, unsigned long nBytes) +void bzerofast(void* dest, u32 size) { - // UNUSED FUNCTION - u32* dwords = (u32*)addr; - int steps = nBytes / (4 * sizeof(u32)); - for (; steps != 0; steps--) { - dwords[0] = 0; - dwords[1] = 0; - dwords[2] = 0; - dwords[3] = 0; - dwords += 4; + u32* udest = (u32*)dest; + + for (size = size / (4 * sizeof(u32)); size != 0; size--) { + *udest++ = 0; + *udest++ = 0; + *udest++ = 0; + *udest++ = 0; } } @@ -351,254 +122,46 @@ void JASCalc::bzerofast(void* addr, unsigned long nBytes) * Size: 000274 * bzero__7JASCalcFPvUl */ -void JASCalc::bzero(void* addr, unsigned long nBytes) +void bzero(void* dest, u32 size) { - if (IS_ALIGNED(nBytes, 0x20) && IS_ALIGNED((u32)addr, 0x20)) { - DCZeroRange(addr, nBytes); + u32* udest; + u8* bdest = (u8*)dest; + if ((size & 0x1f) == 0 && (reinterpret_cast(dest) & 0x1f) == 0) { + DCZeroRange(dest, size); return; } - u8 addrAlignmentToDWBoundary = (u32)addr & 0x3; - if (IS_ALIGNED(nBytes, sizeof(u32) * 4) && addrAlignmentToDWBoundary == 0) { - u32* dwords = (u32*)addr; - int steps = nBytes / (4 * sizeof(u32)); - for (; steps != 0; steps--) { - dwords[0] = 0; - dwords[1] = 0; - dwords[2] = 0; - dwords[3] = 0; - dwords += 4; - } + + u8 alignedbitsDst = reinterpret_cast(bdest) & 0x3; + + if ((size & 0xf) == 0 && alignedbitsDst == 0) { + bzerofast(dest, size); return; } - if (nBytes >= 0x10) { - u8* bytes = (u8*)addr; - if (addrAlignmentToDWBoundary != 0) { - // u8* bytes = (u8*)addr; - for (; ((u32)bytes & 0x3) != 0; nBytes--) { - *bytes = 0; - bytes++; + + if (size >= 16) { + if (alignedbitsDst != 0) { + for (alignedbitsDst = 4 - alignedbitsDst; alignedbitsDst != 0; alignedbitsDst--) { + *bdest++ = 0; + size--; } } - u32* dwords = (u32*)bytes; - for (; nBytes >= 4; nBytes -= 4) { - *dwords = 0; - dwords++; + + udest = (u32*)bdest; + for (; size >= 4; size -= 4) { + *udest++ = 0; } - if (nBytes != 0) { - u8* bytes = (u8*)dwords; - for (; nBytes > 0; nBytes--) { - *bytes = 0; - bytes++; + + if (size != 0) { + bdest = (u8*)udest; + for (; size != 0; size--) { + *bdest++ = 0; } } - return; - } - u8* bytes = (u8*)addr; - for (; nBytes != 0; nBytes--) { - *bytes = 0; - bytes++; + } else { + for (; size != 0; size--) { + *bdest++ = 0; + } } - /* - stwu r1, -0x10(r1) - mflr r0 - mr r6, r3 - stw r0, 0x14(r1) - clrlwi. r0, r4, 0x1b - bne lbl_800A628C - clrlwi. r0, r3, 0x1b - bne lbl_800A628C - bl DCZeroRange - b lbl_800A64C8 - -lbl_800A628C: - clrlwi. r0, r4, 0x1c - clrlwi r5, r6, 0x1e - bne lbl_800A6368 - cmplwi r5, 0 - bne lbl_800A6368 - rlwinm. r5, r4, 0x1c, 4, 0x1f - li r4, 0 - beq lbl_800A64C8 - rlwinm. r0, r5, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A6348 - -lbl_800A62B8: - stw r4, 0(r3) - stw r4, 4(r3) - stw r4, 8(r3) - stw r4, 0xc(r3) - stw r4, 0x10(r3) - stw r4, 0x14(r3) - stw r4, 0x18(r3) - stw r4, 0x1c(r3) - stw r4, 0x20(r3) - stw r4, 0x24(r3) - stw r4, 0x28(r3) - stw r4, 0x2c(r3) - stw r4, 0x30(r3) - stw r4, 0x34(r3) - stw r4, 0x38(r3) - stw r4, 0x3c(r3) - stw r4, 0x40(r3) - stw r4, 0x44(r3) - stw r4, 0x48(r3) - stw r4, 0x4c(r3) - stw r4, 0x50(r3) - stw r4, 0x54(r3) - stw r4, 0x58(r3) - stw r4, 0x5c(r3) - stw r4, 0x60(r3) - stw r4, 0x64(r3) - stw r4, 0x68(r3) - stw r4, 0x6c(r3) - stw r4, 0x70(r3) - stw r4, 0x74(r3) - stw r4, 0x78(r3) - stw r4, 0x7c(r3) - addi r3, r3, 0x80 - bdnz lbl_800A62B8 - andi. r5, r5, 7 - beq lbl_800A64C8 - -lbl_800A6348: - mtctr r5 - -lbl_800A634C: - stw r4, 0(r3) - stw r4, 4(r3) - stw r4, 8(r3) - stw r4, 0xc(r3) - addi r3, r3, 0x10 - bdnz lbl_800A634C - b lbl_800A64C8 - -lbl_800A6368: - cmplwi r4, 0x10 - blt lbl_800A6470 - cmplwi r5, 0 - beq lbl_800A63A0 - subfic r0, r5, 4 - li r3, 0 - clrlwi r5, r0, 0x18 - b lbl_800A6398 - -lbl_800A6388: - stb r3, 0(r6) - addi r6, r6, 1 - addi r4, r4, -1 - addi r5, r5, -1 - -lbl_800A6398: - clrlwi. r0, r5, 0x18 - bne lbl_800A6388 - -lbl_800A63A0: - cmplwi r4, 4 - mr r7, r6 - srwi r5, r4, 2 - li r6, 0 - blt lbl_800A640C - rlwinm. r3, r5, 0x1d, 3, 0x1f - slwi r0, r5, 2 - neg r0, r0 - mtctr r3 - beq lbl_800A63F8 - -lbl_800A63C8: - stw r6, 0(r7) - stw r6, 4(r7) - stw r6, 8(r7) - stw r6, 0xc(r7) - stw r6, 0x10(r7) - stw r6, 0x14(r7) - stw r6, 0x18(r7) - stw r6, 0x1c(r7) - addi r7, r7, 0x20 - bdnz lbl_800A63C8 - andi. r5, r5, 7 - beq lbl_800A6408 - -lbl_800A63F8: - mtctr r5 - -lbl_800A63FC: - stw r6, 0(r7) - addi r7, r7, 4 - bdnz lbl_800A63FC - -lbl_800A6408: - add r4, r4, r0 - -lbl_800A640C: - cmplwi r4, 0 - beq lbl_800A64C8 - mr r5, r7 - li r3, 0 - beq lbl_800A64C8 - rlwinm. r0, r4, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A645C - -lbl_800A642C: - stb r3, 0(r5) - stb r3, 1(r5) - stb r3, 2(r5) - stb r3, 3(r5) - stb r3, 4(r5) - stb r3, 5(r5) - stb r3, 6(r5) - stb r3, 7(r5) - addi r5, r5, 8 - bdnz lbl_800A642C - andi. r4, r4, 7 - beq lbl_800A64C8 - -lbl_800A645C: - mtctr r4 - -lbl_800A6460: - stb r3, 0(r5) - addi r5, r5, 1 - bdnz lbl_800A6460 - b lbl_800A64C8 - -lbl_800A6470: - cmplwi r4, 0 - li r3, 0 - beq lbl_800A64C8 - rlwinm. r0, r4, 0x1d, 3, 0x1f - mtctr r0 - beq lbl_800A64B8 - -lbl_800A6488: - stb r3, 0(r6) - stb r3, 1(r6) - stb r3, 2(r6) - stb r3, 3(r6) - stb r3, 4(r6) - stb r3, 5(r6) - stb r3, 6(r6) - stb r3, 7(r6) - addi r6, r6, 8 - bdnz lbl_800A6488 - andi. r4, r4, 7 - beq lbl_800A64C8 - -lbl_800A64B8: - mtctr r4 - -lbl_800A64BC: - stb r3, 0(r6) - addi r6, r6, 1 - bdnz lbl_800A64BC - -lbl_800A64C8: - lwz r0, 0x14(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ } /* @@ -606,17 +169,20 @@ void JASCalc::bzero(void* addr, unsigned long nBytes) * Address: ........ * Size: 000104 */ -void JASCalc::hannWindow(short*, unsigned long) +void hannWindow(short*, unsigned long x) { // UNUSED FUNCTION } +// required to get clamp to generate +void fake(long x) { clamp(x); } + /* * --INFO-- * Address: ........ * Size: 000118 */ -void JASCalc::hammWindow(short*, unsigned long) +void hammWindow(short*, unsigned long) { // UNUSED FUNCTION } @@ -626,32 +192,8 @@ void JASCalc::hammWindow(short*, unsigned long) * Address: ........ * Size: 0004CC */ -void JASCalc::fft(float*, float*, unsigned long, long) +void fft(float*, float*, unsigned long, long) { // UNUSED FUNCTION } - -/* - * --INFO-- - * Address: 800A64D8 - * Size: 000028 - */ -// short JASCalc::clamp(long p1) -// { -// /* -// cmpwi r3, -32768 -// bgt lbl_800A64E8 -// li r3, -32768 -// blr - -// lbl_800A64E8: -// cmpwi r3, 0x7fff -// li r0, 0x7fff -// bge lbl_800A64F8 -// extsh r0, r3 - -// lbl_800A64F8: -// mr r3, r0 -// blr -// */ -// } +} // namespace JASCalc diff --git a/src/JSystem/JAudio/JAS/Makefile b/src/JSystem/JAudio/JAS/Makefile index e3a8a0869..76303446e 100644 --- a/src/JSystem/JAudio/JAS/Makefile +++ b/src/JSystem/JAudio/JAS/Makefile @@ -28,7 +28,7 @@ JAUDIO_JAS_FILES:=\ $(BUILD_DIR)/asm/JSystem/JAudio/JAS/JASDSPChannel.o\ $(BUILD_DIR)/asm/JSystem/JAudio/JAS/JASDSPInterface.o\ $(BUILD_DIR)/src/JSystem/JAudio/JAS/JASAudioThread.o\ - $(BUILD_DIR)/asm/JSystem/JAudio/JAS/JASCalc.o\ + $(BUILD_DIR)/src/JSystem/JAudio/JAS/JASCalc.o\ $(BUILD_DIR)/src/JSystem/JAudio/JAS/JASCallback.o\ $(BUILD_DIR)/asm/JSystem/JAudio/JAS/JASCmdStack.o\ $(BUILD_DIR)/src/JSystem/JAudio/JAS/JASDvdThread.o\