mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-12 19:52:52 -04:00
JASSystemHeap
This commit is contained in:
+1
-1
@@ -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"),
|
||||
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user