diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2026-08-17 15:06:39 -0400 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2026-08-17 15:06:39 -0400 |
| commit | ae817a97456b355dec6af53bdfe033784707b244 (patch) | |
| tree | b1a3f3bf5cffeadcf321178c8fdab9142449e7af /src | |
| parent | e3550e01e156a459b086f757fb50b0d31ef5de78 (diff) | |
Fix fakematches in JKRExpHeap and d_scope
Diffstat (limited to 'src')
| -rw-r--r-- | src/JSystem/JKernel/JKRExpHeap.cpp | 38 | ||||
| -rw-r--r-- | src/d/d_scope.cpp | 69 |
2 files changed, 41 insertions, 66 deletions
diff --git a/src/JSystem/JKernel/JKRExpHeap.cpp b/src/JSystem/JKernel/JKRExpHeap.cpp index 4b6097da..862a3de5 100644 --- a/src/JSystem/JKernel/JKRExpHeap.cpp +++ b/src/JSystem/JKernel/JKRExpHeap.cpp @@ -133,22 +133,17 @@ static JKRExpHeap::CMemBlock* DBnewFreeBlock; static JKRExpHeap::CMemBlock* DBnewUsedBlock; /* 802B192C-802B1B88 .text allocFromHead__10JKRExpHeapFUli */ -// wrong register at end void* JKRExpHeap::allocFromHead(u32 size, int align) { - u32 foundOffset; - int foundSize; - CMemBlock* newFreeBlock; - CMemBlock* newUsedBlock; - CMemBlock* foundBlock; - size = ALIGN_NEXT(size, 4); - foundSize = -1; - foundOffset = 0; - foundBlock = NULL; + int foundSize = -1; + u32 foundOffset = 0; + CMemBlock* foundBlock = NULL; + CMemBlock* newFreeBlock = NULL; + CMemBlock* newUsedBlock = NULL; for (CMemBlock* block = mHeadFreeList; block; block = block->mNext) { - u32 offset = - ALIGN_PREV(align - 1 + (u32)block->getContent(), align) - (u32)block->getContent(); + u32 alignedContent = ALIGN_NEXT((u32)block->getContent(), align); + u32 offset = alignedContent - (u32)block->getContent(); if (block->size < size + offset) { continue; } @@ -217,22 +212,11 @@ void* JKRExpHeap::allocFromHead(u32 size, int align) { } else { CMemBlock* prev = foundBlock->mPrev; CMemBlock* next = foundBlock->mNext; - // Regalloc doesn't match - /* newFreeBlock = foundBlock->allocFore(size, mCurrentGroupId, 0, 0, 0); removeFreeBlock(foundBlock); if (newFreeBlock) { setFreeBlock(newFreeBlock, prev, next); } - */ - // Works but very fake match - // /* - size = (u32)foundBlock->allocFore(size, mCurrentGroupId, 0, 0, 0); - removeFreeBlock(foundBlock); - if (size) { - setFreeBlock((CMemBlock*)size, prev, next); - } - // */ appendUsedList(foundBlock); return foundBlock->getContent(); } @@ -692,13 +676,15 @@ void JKRExpHeap::joinTwoBlocks(CMemBlock* block) { OSReport(":::joinTwoBlocks [%x %x %x][%x %x %x]\n", block, block->mFlags, block->size, block->mNext, block->mNext->mFlags, block->mNext->size); OSReport(":::: endAddr = %x\n", endAddr); OSReport(":::: nextAddr = %x\n", nextAddr); - JKRGetCurrentHeap()->dump(); + JKRHeap* heap = JKRGetCurrentHeap(); + heap->dump(); OSPanic(__FILE__, DEMO_SELECT(1710, 1718), ":::: Bad Block\n"); } if (endAddr == nextAddr) { - block->size = next->size + sizeof(CMemBlock) + next->getAlignment() + block->size; - setFreeBlock(block, block->mPrev, next->mNext); + block->size = next->size + sizeof(CMemBlock) + (next->mFlags & 0x7f) + block->size; + CMemBlock* local_30 = next->mNext; + setFreeBlock(block, block->mPrev, local_30); } } diff --git a/src/d/d_scope.cpp b/src/d/d_scope.cpp index 73af723d..dc11f321 100644 --- a/src/d/d_scope.cpp +++ b/src/d/d_scope.cpp @@ -87,7 +87,6 @@ void dDlst_2DSCP_c::outFontDraw() { if (icon_no != 0xFF) { int x = pos_x + mpScp->mpTextBox->getBounds().i.x; - // for some reason y computation only match if split in two int y = line * (VERSION_SELECT(1, 1, 2, 2) - mpScp->mLineCount + pos_y * 2); int y2 = y + mpScp->mpTextBox->getBounds().i.y; fopMsgM_outFontDraw(sbutton_icon[i], sbutton_kage[i], x, y2, scale, &sbuttonTimer[i], 0xFF, icon_no); @@ -464,25 +463,20 @@ void dScp_wipeMove(sub_scp_class* i_Scp, f32 i_rate) { fopMsgM_paneScaleXY(&i_Scp->mWipePanel[i], i_rate); } - f32 px0 = i_Scp->mWipePanel[0].mSizeOrig.x / 2.0f * t; - f32 py0 = i_Scp->mWipePanel[0].mSizeOrig.y / 2.0f * t; - // self assign fake match reused from TP - px0 = px0; - py0 = py0; - fopMsgM_paneTrans(&i_Scp->mWipePanel[0], -px0, -py0); - f32 px1 = i_Scp->mWipePanel[1].mSizeOrig.x / 2.0f * t; - f32 py1 = i_Scp->mWipePanel[1].mSizeOrig.y / 2.0f * t; - px1 = px1; - py1 = py1; - fopMsgM_paneTrans(&i_Scp->mWipePanel[1], px1, -py1); - f32 px2 = i_Scp->mWipePanel[2].mSizeOrig.x / 2.0f * t; - f32 py2 = i_Scp->mWipePanel[2].mSizeOrig.y / 2.0f * t; - px2 = px2; - py2 = py2; - fopMsgM_paneTrans(&i_Scp->mWipePanel[2], -px2, py2); - f32 px3 = i_Scp->mWipePanel[3].mSizeOrig.x / 2.0f * t; - f32 py3 = i_Scp->mWipePanel[3].mSizeOrig.y / 2.0f * t; - fopMsgM_paneTrans(&i_Scp->mWipePanel[3], px3, py3); + f32 px; + f32 py; + px = i_Scp->mWipePanel[0].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[0].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[0], -px, -py); + px = i_Scp->mWipePanel[1].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[1].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[1], px, -py); + px = i_Scp->mWipePanel[2].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[2].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[2], -px, py); + px = i_Scp->mWipePanel[3].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[3].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[3], px, py); i_Scp->mWipePanel[4].mPosCenter.y = i_Scp->mWipePanel[0].mPosTopLeft.y - i_Scp->mWipePanel[4].mSize.y / 2.0f; i_Scp->mWipePanel[5].mPosCenter.y = i_Scp->mWipePanel[5].mSize.y / 2.0f + (i_Scp->mWipePanel[3].mPosTopLeft.y + i_Scp->mWipePanel[3].mSize.y); @@ -504,25 +498,20 @@ void dScp_wipeMove2(sub_scp_class* i_Scp, f32 i_rate) { fopMsgM_paneScaleXY(&i_Scp->mWipePanel[i], i_rate); } - // Same self-assigned temps trick as dScp_wipeMove. - f32 px0 = i_Scp->mWipePanel[0].mSizeOrig.x / 2.0f * t; - f32 py0 = i_Scp->mWipePanel[0].mSizeOrig.y / 2.0f * t; - px0 = px0; - py0 = py0; - fopMsgM_paneTrans(&i_Scp->mWipePanel[0], -px0, -py0); - f32 px1 = i_Scp->mWipePanel[1].mSizeOrig.x / 2.0f * t; - f32 py1 = i_Scp->mWipePanel[1].mSizeOrig.y / 2.0f * t; - px1 = px1; - py1 = py1; - fopMsgM_paneTrans(&i_Scp->mWipePanel[1], px1, -py1); - f32 px2 = i_Scp->mWipePanel[2].mSizeOrig.x / 2.0f * t; - f32 py2 = i_Scp->mWipePanel[2].mSizeOrig.y / 2.0f * t; - px2 = px2; - py2 = py2; - fopMsgM_paneTrans(&i_Scp->mWipePanel[2], -px2, py2); - f32 px3 = i_Scp->mWipePanel[3].mSizeOrig.x / 2.0f * t; - f32 py3 = i_Scp->mWipePanel[3].mSizeOrig.y / 2.0f * t; - fopMsgM_paneTrans(&i_Scp->mWipePanel[3], px3, py3); + f32 px; + f32 py; + px = i_Scp->mWipePanel[0].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[0].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[0], -px, -py); + px = i_Scp->mWipePanel[1].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[1].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[1], px, -py); + px = i_Scp->mWipePanel[2].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[2].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[2], -px, py); + px = i_Scp->mWipePanel[3].mSizeOrig.x / 2.0f * t; + py = i_Scp->mWipePanel[3].mSizeOrig.y / 2.0f * t; + fopMsgM_paneTrans(&i_Scp->mWipePanel[3], px, py); if (i_rate >= 1.f) { for (int i = 4; i < 8; i++) { @@ -1385,7 +1374,7 @@ static cPhs_State dScp_Create(msg_class* i_this) { dDlst_2DSCP_c::~dDlst_2DSCP_c() { } -msg_method_class l_dScp_Method = { +static msg_method_class l_dScp_Method = { (process_method_func)dScp_Create, (process_method_func)dScp_Delete, (process_method_func)dScp_Execute, |
