From 235437be561bce07f569771364c50d14d9ac435a Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 30 Sep 2023 22:22:33 +0200 Subject: [PATCH] Fix absolute address high byte propagation error --- oscar64/NativeCodeGenerator.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 59faa84..51a9911 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -23597,17 +23597,17 @@ bool NativeCodeBasicBlock::PatchGlobalAddressSumYPointer(const NativeCodeBasicBl int naddr = address + mIns[at + 2].mAddress + 256 * mIns[at + 5].mAddress; mIns[at + 2].mType = ASMIT_ADC; - mIns[at + 2].mMode = ASMIM_IMMEDIATE_ADDRESS; + mIns[at + 2].mMode = lobj ? ASMIM_IMMEDIATE_ADDRESS : ASMIM_IMMEDIATE; mIns[at + 2].mLinkerObject = lobj; - mIns[at + 2].mAddress = naddr; + mIns[at + 2].mAddress = lobj ? naddr : naddr & 0xff; mIns[at + 2].mFlags = NCIF_LOWER; mIns[at + 4].mMode = ASMIM_IMMEDIATE; mIns[at + 4].mAddress = 0; - mIns[at + 5].mMode = ASMIM_IMMEDIATE_ADDRESS; + mIns[at + 5].mMode = lobj ? ASMIM_IMMEDIATE_ADDRESS : ASMIM_IMMEDIATE;; mIns[at + 5].mLinkerObject = lobj; - mIns[at + 5].mAddress = naddr; + mIns[at + 5].mAddress = lobj ? naddr : naddr >> 8; mIns[at + 5].mFlags = NCIF_UPPER; at += 6; @@ -27746,6 +27746,11 @@ bool NativeCodeBasicBlock::MoveCLCLoadAddZPStoreDown(int at) mIns.Insert(j, mIns[at + 1]); // LDA mIns.Insert(j, mIns[at + 0]); // CLC + mIns[j + 0].mLive |= mIns[j - 1].mLive; + mIns[j + 1].mLive |= mIns[j - 1].mLive; + mIns[j + 2].mLive |= mIns[j - 1].mLive; + mIns[j + 3].mLive |= mIns[j - 1].mLive; + mIns[at + 0].mType = ASMIT_NOP; mIns[at + 0].mMode = ASMIM_IMPLIED; mIns[at + 1].mType = ASMIT_NOP; mIns[at + 1].mMode = ASMIM_IMPLIED; mIns[at + 2].mType = ASMIT_NOP; mIns[at + 2].mMode = ASMIM_IMPLIED; @@ -41269,7 +41274,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc) { mInterProc = proc; - CheckFunc = !strcmp(mInterProc->mIdent->mString, "main"); + CheckFunc = !strcmp(mInterProc->mIdent->mString, "dungeon_rand_path"); int nblocks = proc->mBlocks.Size(); tblocks = new NativeCodeBasicBlock * [nblocks]; @@ -41958,7 +41963,6 @@ void NativeCodeProcedure::Optimize(void) } #endif - int t = 0; #if 1 do