JASSystemHeap

This commit is contained in:
Jcw87
2023-10-19 05:37:30 -07:00
parent 804c8ea82d
commit f0b6f0820c
5 changed files with 71 additions and 16 deletions
+1 -1
View File
@@ -660,7 +660,7 @@ config.libs = [
Object(NonMatching, "JSystem/JAudio/JASProbe.cpp"),
Object(NonMatching, "JSystem/JAudio/JASKernelDebug.cpp"),
Object(NonMatching, "JSystem/JAudio/JASCmdStack.cpp"),
Object(NonMatching, "JSystem/JAudio/JASSystemHeap.cpp"),
Object(Matching, "JSystem/JAudio/JASSystemHeap.cpp"),
Object(NonMatching, "JSystem/JAudio/JASNoteMgr.cpp"),
Object(NonMatching, "JSystem/JAudio/JASOuterParam.cpp"),
Object(NonMatching, "JSystem/JAudio/JASPlayer_impl.cpp"),
+27
View File
@@ -0,0 +1,27 @@
#ifndef JASSYSTEMHEAP_H
#define JASSYSTEMHEAP_H
#include "dolphin/types.h"
class JKRSolidHeap;
extern JKRSolidHeap* JASDram;
namespace JASystem {
namespace Kernel {
class TSolidHeap;
void sysDramSetup(JKRSolidHeap*);
void* allocFromSysDram(u32);
void sysAramSetup(u32);
void allocFromSysAramFull(u32*);
extern TSolidHeap audioAramHeap;
extern u32 audioDramSize;
extern u32 audioAramSize;
extern int audioAramTop;
extern int CARD_SECURITY_BUFFER;
}
}
#endif /* JASSYSTEMHEAP_H */
+2 -1
View File
@@ -5,6 +5,7 @@
#include "dolphin/os/OSAlloc.h"
class JKRStdHeap : public JKRHeap {
public:
static JKRStdHeap* create(u32, JKRHeap*, bool);
void do_destroy();
JKRStdHeap(void*, u32, JKRHeap*, bool);
@@ -31,4 +32,4 @@ class JKRStdHeap : public JKRHeap {
OSHeapHandle mHeapHandle;
};
#endif /* JKRSTDHEAP_H */
#endif /* JKRSTDHEAP_H */
+1
View File
@@ -14,6 +14,7 @@ u32 ARGetDMAStatus(void);
void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length);
u32 ARInit(u32* stack_index_addr, u32 num_entries);
u32 ARAlloc(u32 length);
u32 ARGetBaseAddress();
u32 ARGetSize(void);
#ifdef __cplusplus
+40 -14
View File
@@ -3,31 +3,57 @@
// Translation Unit: JASSystemHeap.cpp
//
#include "JASSystemHeap.h"
#include "dolphin/types.h"
#include "JSystem/JAudio/JASSystemHeap.h"
#include "JSystem/JAudio/JASHeapCtrl.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JKernel/JKRStdHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dolphin/ar/ar.h"
#include "dolphin/os/OS.h"
u32 JASystem::Kernel::audioDramSize = 0x000C8000;
JKRSolidHeap* JASDram;
/* 8027DB38-8027DB9C .text sysDramSetup__Q28JASystem6KernelFP12JKRSolidHeap */
void JASystem::Kernel::sysDramSetup(JKRSolidHeap*) {
void JASystem::Kernel::sysDramSetup(JKRSolidHeap* heap) {
/* Nonmatching */
if (heap) {
JASDram = heap;
return;
}
OSReport("[JASKernel::sysDramSetup] メモリ指定がありませんので、システムからオーディオヒープを取得します。\n");
JASDram = JKRSolidHeap::create(audioDramSize, JKRStdHeap::create(audioDramSize + 0x100, NULL, false), false);
}
/* 8027DB9C-8027DC30 .text allocFromSysDram__Q28JASystem6KernelFUl */
void JASystem::Kernel::allocFromSysDram(unsigned long) {
/* Nonmatching */
void* JASystem::Kernel::allocFromSysDram(u32 size) {
void* ptr;
BOOL enable = OSDisableInterrupts();
ptr = new (JASDram, 0x20) u8[size];
JUT_ASSERT(79, ptr != 0);
OSRestoreInterrupts(enable);
return ptr;
}
JASystem::Kernel::TSolidHeap JASystem::Kernel::audioAramHeap;
u32 JASystem::Kernel::audioAramSize = 0x00400000;
int JASystem::Kernel::audioAramTop;
int JASystem::Kernel::CARD_SECURITY_BUFFER;
/* 8027DC30-8027DC84 .text sysAramSetup__Q28JASystem6KernelFUl */
void JASystem::Kernel::sysAramSetup(unsigned long) {
void JASystem::Kernel::sysAramSetup(u32 param_1) {
/* Nonmatching */
if (!param_1) {
param_1 = audioAramSize;
}
audioAramTop = ARGetBaseAddress();
CARD_SECURITY_BUFFER = 0x40;
audioAramHeap.init((u8*)audioAramTop, param_1 - audioAramTop);
}
/* 8027DC84-8027DCDC .text allocFromSysAramFull__Q28JASystem6KernelFPUl */
void JASystem::Kernel::allocFromSysAramFull(unsigned long*) {
/* Nonmatching */
void JASystem::Kernel::allocFromSysAramFull(u32* param_1) {
u32 size = audioAramHeap.getRemain();
audioAramHeap.alloc(size - 0x20);
*param_1 = size - 0x20;
}
/* 8027DD18-8027DD54 .text __dt__Q38JASystem6Kernel10TSolidHeapFv */
JASystem::Kernel::TSolidHeap::~TSolidHeap() {
/* Nonmatching */
}