JKRAramBlock

This commit is contained in:
Jcw87
2023-09-22 16:40:03 -07:00
parent cdbe2b5174
commit 183474b9f1
2 changed files with 48 additions and 8 deletions
+1 -1
View File
@@ -763,7 +763,7 @@ config.libs = [
Object(Matching, "JSystem/JKernel/JKRThread.cpp"),
Object(Matching, "JSystem/JKernel/JKRAram.cpp"),
Object(Matching, "JSystem/JKernel/JKRAramHeap.cpp"),
Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"),
Object(Matching, "JSystem/JKernel/JKRAramBlock.cpp"),
Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"),
Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"),
Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"),
+47 -7
View File
@@ -4,24 +4,64 @@
//
#include "JSystem/JKernel/JKRAramBlock.h"
#include "JSystem/JKernel/JKRAramHeap.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dolphin/types.h"
/* 802B59A4-802B5A18 .text __ct__12JKRAramBlockFUlUlUlUcb */
JKRAramBlock::JKRAramBlock(unsigned long, unsigned long, unsigned long, unsigned char, bool) {
/* Nonmatching */
JKRAramBlock::JKRAramBlock(u32 address, u32 size, u32 freeSize, u8 groupId, bool isTempMemory) : mBlockLink(this) {
mAddress = address;
mSize = size;
mFreeSize = freeSize;
mGroupId = groupId;
mIsTempMemory = isTempMemory;
}
/* 802B5A18-802B5AD4 .text __dt__12JKRAramBlockFv */
JKRAramBlock::~JKRAramBlock() {
/* Nonmatching */
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
JSULink<JKRAramBlock>* prev = mBlockLink.getPrev();
if (prev) {
JKRAramBlock* block = prev->getObject();
block->mFreeSize = mSize + mFreeSize + block->mFreeSize;
list->remove(&mBlockLink);
} else {
mFreeSize = mFreeSize + mSize;
mSize = 0;
}
}
/* 802B5AD4-802B5B70 .text allocHead__12JKRAramBlockFUlUcP11JKRAramHeap */
void JKRAramBlock::allocHead(unsigned long, unsigned char, JKRAramHeap*) {
/* Nonmatching */
JKRAramBlock* JKRAramBlock::allocHead(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
u32 address = mAddress;
u32 usedSize = mSize;
u32 nextAddress = address + usedSize;
u32 freeSize = mFreeSize;
u32 nextFreeSize = freeSize - size;
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(nextAddress, size, nextFreeSize, groupId, false);
mFreeSize = 0;
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
list->insert(next, &block->mBlockLink);
return block;
}
/* 802B5B70-802B5C14 .text allocTail__12JKRAramBlockFUlUcP11JKRAramHeap */
void JKRAramBlock::allocTail(unsigned long, unsigned char, JKRAramHeap*) {
/* Nonmatching */
JKRAramBlock* JKRAramBlock::allocTail(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
u32 freeSize = mFreeSize;
u32 address = mAddress;
u32 usedSize = mSize;
u32 endAddress = address + usedSize + freeSize;
u32 tailAddress = endAddress - size;
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(tailAddress, size, 0, groupId, true);
mFreeSize -= size;
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
list->insert(next, &block->mBlockLink);
return block;
}