summaryrefslogtreecommitdiff
path: root/libs/JSystem/JKernel/JKRAram.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-01-24 04:00:46 -0800
committerGitHub <noreply@github.com>2024-01-24 14:00:46 +0200
commitba44ade90c3f04f5c163278fcadc4361c263acbb (patch)
tree3b7948dc4dcf260ff61230da15ddea595635cbc8 /libs/JSystem/JKernel/JKRAram.cpp
parentb2310b84b65e62d9f1a82a5b9e52766b325b765f (diff)
more various JSystem work (#2046)
* most of J3DAnmLoader done * J3D / JKernel / JUTConsole work * remove asm * fix build * dol 50%
Diffstat (limited to 'libs/JSystem/JKernel/JKRAram.cpp')
-rw-r--r--libs/JSystem/JKernel/JKRAram.cpp138
1 files changed, 56 insertions, 82 deletions
diff --git a/libs/JSystem/JKernel/JKRAram.cpp b/libs/JSystem/JKernel/JKRAram.cpp
index 4a8e1746a6..40583f4e50 100644
--- a/libs/JSystem/JKernel/JKRAram.cpp
+++ b/libs/JSystem/JKernel/JKRAram.cpp
@@ -1,46 +1,27 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JKRAram
-//
-
#include "JSystem/JKernel/JKRAram.h"
#include "JSystem/JKernel/JKRAramPiece.h"
#include "JSystem/JKernel/JKRAramStream.h"
#include "JSystem/JKernel/JKRDecomp.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JUtility/JUTException.h"
-#include "string.h"
#include "dolphin/ar.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/os/OSInterrupt.h"
#include "global.h"
-
-//
-// Forward References:
-//
+#include "string.h"
static u8* firstSrcData();
static u8* nextSrcData(u8* param_0);
-static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
- u32* resourceSize);
-int decompSZS_subroutine(u8 *src, u8 *dest);
-
-//
-// External References:
-//
+static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength,
+ u32 offset, u32* resourceSize);
+int decompSZS_subroutine(u8* src, u8* dest);
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
/* 804513C8-804513CC 0008C8 0004+00 3/3 9/9 0/0 .sbss sAramObject__7JKRAram */
JKRAram* JKRAram::sAramObject;
/* 802D1FA4-802D2040 2CC8E4 009C+00 0/0 1/1 0/0 .text create__7JKRAramFUlUllll */
-JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size,
- s32 stream_priority, s32 decomp_priority, s32 piece_priority) {
+JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, s32 stream_priority,
+ s32 decomp_priority, s32 piece_priority) {
if (!sAramObject) {
sAramObject = new (JKRHeap::getSystemHeap(), 0)
JKRAram(aram_audio_buffer_size, aram_audio_graph_size, piece_priority);
@@ -144,11 +125,15 @@ void JKRAram::changeGroupIdIfNeed(u8* data, int groupId) {
/* 802D233C-802D25B4 2CCC7C 0278+00 0/0 3/3 0/0 .text
* mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */
-JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id, u32 *pSize) {
- JKRAramBlock *block = NULL;
+JKRAramBlock* JKRAram::mainRamToAram(u8* buf, u32 bufSize, u32 alignedSize,
+ JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap,
+ int id, u32* pSize) {
+ JKRAramBlock* block = NULL;
checkOkAddress(buf, bufSize, NULL, 0);
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
- expandSwitch = (JKRCheckCompressed_noASR(buf) == COMPRESSION_NONE) ? EXPAND_SWITCH_UNKNOWN0 : EXPAND_SWITCH_UNKNOWN1;
+ expandSwitch = (JKRCheckCompressed_noASR(buf) == COMPRESSION_NONE) ?
+ EXPAND_SWITCH_UNKNOWN0 :
+ EXPAND_SWITCH_UNKNOWN1;
}
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
u32 expandSize = JKRDecompExpandSize(buf);
@@ -156,7 +141,8 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE
fileSize = ALIGN_NEXT(expandSize, 32);
}
if (bufSize == 0) {
- JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD);
+ JKRAramBlock* allocatedBlock =
+ (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD);
block = (JKRAramBlock*)allocatedBlock;
if (allocatedBlock == NULL)
return NULL;
@@ -170,29 +156,27 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE
if (alignedSize > fileSize)
alignedSize = fileSize;
- void *allocatedMem = JKRAllocFromHeap(heap, fileSize, -32);
+ void* allocatedMem = JKRAllocFromHeap(heap, fileSize, -32);
if (allocatedMem == NULL) {
if (block != NULL) {
JKRFreeToAram(block);
}
block = NULL;
- }
- else {
- JKRDecompress(buf, (u8 *)allocatedMem, fileSize, 0);
+ } else {
+ JKRDecompress(buf, (u8*)allocatedMem, fileSize, 0);
JKRAramPcs(0, (u32)allocatedMem, bufSize, alignedSize, block);
JKRFreeToHeap(heap, allocatedMem);
- block = block == NULL ? (JKRAramBlock *)-1 : block;
+ block = block == NULL ? (JKRAramBlock*)-1 : block;
if (pSize != NULL) {
*pSize = alignedSize;
}
}
- }
- else {
+ } else {
if (fileSize != 0 && alignedSize > fileSize)
alignedSize = fileSize;
if (bufSize == 0) {
-
- JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD);
+ JKRAramBlock* allocatedBlock =
+ (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD);
block = allocatedBlock;
block->newGroupID(decideAramGroupId(id));
if (block == NULL)
@@ -202,7 +186,7 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE
}
JKRAramPcs(0, (u32)buf, bufSize, alignedSize, block);
- block = block == NULL ? (JKRAramBlock *)-1 : block;
+ block = block == NULL ? (JKRAramBlock*)-1 : block;
if (pSize != NULL)
*pSize = alignedSize;
}
@@ -211,7 +195,8 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE
/* 802D25B4-802D2830 2CCEF4 027C+00 0/0 6/6 0/0 .text
* aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl */
-u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5, JKRHeap *heap, int id, u32 *pSize) {
+u8* JKRAram::aramToMainRam(u32 address, u8* buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5,
+ JKRHeap* heap, int id, u32* pSize) {
JKRCompression compression = COMPRESSION_NONE;
if (pSize != NULL)
*pSize = 0;
@@ -221,18 +206,19 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS
u32 expandSize;
if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) {
u8 buffer[64];
- u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32);
- JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2, NULL); // probably change sizeof(buffer) / 2 to 32
+ u8* bufPtr = (u8*)ALIGN_NEXT((u32)buffer, 32);
+ JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2,
+ NULL); // probably change sizeof(buffer) / 2 to 32
compression = JKRCheckCompressed_noASR(bufPtr);
expandSize = JKRDecompExpandSize(bufPtr);
}
- if (compression == COMPRESSION_YAZ0) { // SZS
+ if (compression == COMPRESSION_YAZ0) { // SZS
if (p5 != 0 && p5 < expandSize)
expandSize = p5;
if (buf == NULL)
- buf = (u8 *)JKRAllocFromHeap(heap, expandSize, 32);
+ buf = (u8*)JKRAllocFromHeap(heap, expandSize, 32);
if (buf == NULL)
return NULL;
else {
@@ -240,20 +226,18 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS
JKRDecompressFromAramToMainRam(address, buf, p3, expandSize, 0, pSize);
return buf;
}
- }
- else if (compression == COMPRESSION_YAY0) { // SZP
- u8 *szpSpace = (u8 *)JKRAllocFromHeap(heap, p3, -32);
+ } else if (compression == COMPRESSION_YAY0) { // SZP
+ u8* szpSpace = (u8*)JKRAllocFromHeap(heap, p3, -32);
if (szpSpace == NULL) {
return NULL;
- }
- else {
+ } else {
JKRAramPcs(1, address, (u32)szpSpace, p3, NULL);
if (p5 != 0 && p5 < expandSize)
expandSize = p5;
u8* rv;
if (buf == NULL) {
- rv = (u8 *)JKRAllocFromHeap(heap, expandSize, 32);
+ rv = (u8*)JKRAllocFromHeap(heap, expandSize, 32);
} else {
rv = buf;
}
@@ -261,8 +245,7 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS
if (rv == NULL) {
i_JKRFree(szpSpace);
return NULL;
- }
- else {
+ } else {
changeGroupIdIfNeed(rv, id);
JKRDecompress(szpSpace, rv, expandSize, 0);
JKRFreeToHeap(heap, szpSpace);
@@ -272,14 +255,12 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS
return rv;
}
}
- }
- else { // Not compressed or ASR
+ } else { // Not compressed or ASR
if (buf == NULL)
- buf = (u8 *)JKRAllocFromHeap(heap, p3, 32);
+ buf = (u8*)JKRAllocFromHeap(heap, p3, 32);
if (buf == NULL) {
return NULL;
- }
- else {
+ } else {
changeGroupIdIfNeed(buf, id);
JKRAramPcs(1, address, (u32)buf, p3, NULL);
if (pSize != NULL) {
@@ -346,8 +327,8 @@ static u32 tsArea;
/* 802D2830-802D29A0 2CD170 0170+00 1/1 0/0 0/0 .text
* JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */
-static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset,
- u32* resourceSize) {
+static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength,
+ u32 offset, u32* resourceSize) {
BOOL interrupts = OSDisableInterrupts();
if (s_is_decompress_mutex_initialized == false) {
OSInitMutex(&decompMutex);
@@ -357,15 +338,14 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32
OSLockMutex(&decompMutex);
u32 szsBufferSize = JKRAram::getSZSBufferSize();
- szpBuf = (u8 *)JKRAllocFromSysHeap(szsBufferSize, 32);
+ szpBuf = (u8*)JKRAllocFromSysHeap(szsBufferSize, 32);
szpEnd = szpBuf + szsBufferSize;
if (offset != 0) {
- refBuf = (u8 *)JKRAllocFromSysHeap(0x1120, 0);
+ refBuf = (u8*)JKRAllocFromSysHeap(0x1120, 0);
refEnd = refBuf + 0x1120;
refCurrent = refBuf;
- }
- else {
+ } else {
refBuf = NULL;
}
srcAddress = src;
@@ -377,7 +357,7 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32
tsPtr = (resourceSize != 0) ? resourceSize : &tsArea;
*tsPtr = 0;
- decompSZS_subroutine(firstSrcData(), (u8 *)dst);
+ decompSZS_subroutine(firstSrcData(), (u8*)dst);
i_JKRFree(szpBuf);
if (refBuf) {
i_JKRFree(refBuf);
@@ -390,8 +370,8 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32
}
/* 802D29A0-802D2C40 2CD2E0 02A0+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcPUc */
-int decompSZS_subroutine(u8 *src, u8 *dest) {
- u8 *endPtr;
+int decompSZS_subroutine(u8* src, u8* dest) {
+ u8* endPtr;
s32 validBitCount = 0;
s32 currCodeByte = 0;
u32 ts = 0;
@@ -400,7 +380,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) {
return -1;
}
- SYaz0Header *header = (SYaz0Header *)src;
+ SYaz0Header* header = (SYaz0Header*)src;
endPtr = dest + (header->length - fileOffset);
if (endPtr > dest + maxDest) {
endPtr = dest + maxDest;
@@ -422,8 +402,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) {
*dest = *src;
dest++;
ts++;
- if (dest == endPtr)
- {
+ if (dest == endPtr) {
break;
}
}
@@ -432,8 +411,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) {
refCurrent = refBuf;
}
src++;
- }
- else {
+ } else {
*dest = *src;
dest++;
src++;
@@ -443,26 +421,23 @@ int decompSZS_subroutine(u8 *src, u8 *dest) {
}
}
readCount++;
- }
- else {
+ } else {
u32 dist = ((src[0] & 0x0f) << 8) | src[1];
s32 numBytes = src[0] >> 4;
src += 2;
- u8 *copySource;
+ u8* copySource;
if (fileOffset != 0) {
copySource = refCurrent - dist - 1;
if (copySource < refBuf) {
copySource += refEnd - refBuf;
}
- }
- else {
+ } else {
copySource = dest - dist - 1;
}
if (numBytes == 0) {
numBytes = *src + 0x12;
src += 1;
- }
- else {
+ } else {
numBytes += 2;
}
if (fileOffset != 0) {
@@ -486,8 +461,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) {
readCount++;
numBytes--;
} while (numBytes != 0);
- }
- else {
+ } else {
do {
*dest = *copySource;
dest++;
@@ -536,8 +510,8 @@ static u8* firstSrcData() {
}
/* 802D2CE4-802D2DAC 2CD624 00C8+00 1/1 0/0 0/0 .text nextSrcData__FPUc */
-static u8 *nextSrcData(u8 *current) {
- u8 *dest;
+static u8* nextSrcData(u8* current) {
+ u8* dest;
u32 left = (u32)(szpEnd - current);
if (IS_NOT_ALIGNED(left, 0x20))
dest = szpBuf + 0x20 - (left & (0x20 - 1));