From 2d41edfc97784974dae8dd12f6fdb972592c28ff Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Fri, 28 Jan 2022 14:13:49 +0100 Subject: [PATCH] Fix byte limit in #embed --- include/c64/memmap.c | 2 +- oscar64/GlobalAnalyzer.cpp | 2 +- oscar64/NativeCodeGenerator.cpp | 24 ++++++++++++++++++++++-- oscar64/Preprocessor.cpp | 14 +++++++++----- oscar64/oscar64.cpp | 2 +- oscar64/oscar64.rc | 8 ++++---- oscar64setup/oscar64setup.vdproj | 26 ++++++++++++++++++++++++++ samples/memmap/easyflash.crt | Bin 114976 -> 114976 bytes 8 files changed, 64 insertions(+), 14 deletions(-) diff --git a/include/c64/memmap.c b/include/c64/memmap.c index feeb683..63756c2 100644 --- a/include/c64/memmap.c +++ b/include/c64/memmap.c @@ -1,6 +1,6 @@ #include "memmap.h" -char PLAShadow; +volatile char PLAShadow; __asm DoneTrampoline { diff --git a/oscar64/GlobalAnalyzer.cpp b/oscar64/GlobalAnalyzer.cpp index 5f48138..beb7857 100644 --- a/oscar64/GlobalAnalyzer.cpp +++ b/oscar64/GlobalAnalyzer.cpp @@ -159,7 +159,7 @@ void GlobalAnalyzer::AnalyzeProcedure(Expression* exp, Declaration* dec) mFunctions.Push(dec); dec->mFlags |= DTF_ANALYZED; - if (dec->mFlags & DTF_INTRINSIC) + if ((dec->mFlags & DTF_INTRINSIC) && !dec->mValue) dec->mFlags |= DTF_FUNC_CONSTEXPR; else if (dec->mFlags & DTF_DEFINED) { diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 49f4f4c..ae49e61 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -1987,6 +1987,12 @@ bool NativeCodeInstruction::ValueForwarding(NativeRegisterDataSet& data, AsmInsT changed = true; } + if (mMode == ASMIM_ABSOLUTE_X && data.mRegs[CPU_REG_X].SameData(data.mRegs[CPU_REG_Y]) && HasAsmInstructionMode(mType, ASMIM_ABSOLUTE_Y)) + { + mMode = ASMIM_ABSOLUTE_Y; + changed = true; + } + if (mMode == ASMIM_ZERO_PAGE) { switch (mType) @@ -12335,6 +12341,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) { if (!mIns[i].MayBeChangedOnAddress(mIns[i + 1])) { + if (mIns[i + 1].SameEffectiveAddress(mIns[i])) + mIns[i + 1].mLive |= LIVE_MEM; + NativeCodeInstruction ins = mIns[i]; mIns[i] = mIns[i + 1]; mIns[i + 1] = ins; @@ -12348,6 +12357,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) { if (!mIns[i].MayBeChangedOnAddress(mIns[i + 1])) { + if (mIns[i + 1].SameEffectiveAddress(mIns[i])) + mIns[i + 1].mLive |= LIVE_MEM; + NativeCodeInstruction ins = mIns[i]; mIns[i] = mIns[i + 1]; mIns[i + 1] = ins; @@ -12691,6 +12703,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) #endif } +#if 1 else if (FindGlobalAddressSumY(i, sreg, true, apos, ains, iins, flags, addr)) { if (iins || (flags & LIVE_CPU_REG_Y) || (flags & LIVE_CPU_REG_X)) //!(mIns[i + 1].mLive & LIVE_CPU_REG_X)) @@ -12782,6 +12795,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) progress = true; } } +#endif } #endif @@ -13175,6 +13189,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) mIns[i + 0].mAddress = iins->mAddress; mIns[i + 0].mLinkerObject = iins->mLinkerObject; mIns[i + 0].mFlags = iins->mFlags; + + if (!(flags & LIVE_CPU_REG_Y) && (flags & LIVE_CPU_REG_X)) + mIns[i + 0].mType == ASMIT_LDX; } else if (iins->mAddress == sreg) { @@ -13182,7 +13199,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) if (flags & LIVE_CPU_REG_Y) { mIns.Insert(apos, NativeCodeInstruction(ASMIT_LDY, ASMIM_ZERO_PAGE, iins->mAddress)); - mIns[apos].mLive = LIVE_CPU_REG_Y | LIVE_CPU_REG_A | LIVE_MEM; + mIns[apos].mLive = mIns[apos + 1].mLive | LIVE_CPU_REG_Y | LIVE_CPU_REG_A | LIVE_MEM; for (int j = apos; j < i + 2; j++) mIns[j].mLive |= LIVE_CPU_REG_Y; } @@ -13190,7 +13207,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) { PatchGlobalAdressSumYByX(i + 1, sreg, *ains, addr); mIns.Insert(apos, NativeCodeInstruction(ASMIT_LDX, ASMIM_ZERO_PAGE, iins->mAddress)); - mIns[apos].mLive = LIVE_CPU_REG_X | LIVE_CPU_REG_A | LIVE_MEM; + mIns[apos].mLive = mIns[apos + 1].mLive | LIVE_CPU_REG_X | LIVE_CPU_REG_A | LIVE_MEM; for (int j = apos; j < i + 2; j++) mIns[j].mLive |= LIVE_CPU_REG_X; } @@ -13199,6 +13216,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass) { mIns[i + 0].mMode = ASMIM_ZERO_PAGE; mIns[i + 0].mAddress = iins->mAddress; + + if (!(flags & LIVE_CPU_REG_Y) && (flags & LIVE_CPU_REG_X)) + mIns[i + 0].mType == ASMIT_LDX; } progress = true; diff --git a/oscar64/Preprocessor.cpp b/oscar64/Preprocessor.cpp index b885afd..096b4f3 100644 --- a/oscar64/Preprocessor.cpp +++ b/oscar64/Preprocessor.cpp @@ -26,14 +26,18 @@ bool SourceFile::ReadLine(char* line) if (mBinary) { if (mLimit) + { mLimit--; - int c = fgetc(mFile); - if (c >= 0) - { - sprintf_s(line, 1024, "0x%02x, ", c); - return true; + int c = fgetc(mFile); + if (c >= 0) + { + sprintf_s(line, 1024, "0x%02x, ", c); + return true; + } } + else + return false; } else { diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index 32b5b25..4354f8c 100644 --- a/oscar64/oscar64.cpp +++ b/oscar64/oscar64.cpp @@ -73,7 +73,7 @@ int main(int argc, const char** argv) #else strcpy(strProductName, "oscar64"); - strcpy(strProductVersion, "1.2.68"); + strcpy(strProductVersion, "1.2.69"); #ifdef __APPLE__ uint32_t length = sizeof(basePath); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index 65971cb..c3e134a 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,2,68,0 - PRODUCTVERSION 1,2,68,0 + FILEVERSION 1,2,69,0 + PRODUCTVERSION 1,2,69,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "oscar64" VALUE "FileDescription", "oscar64 compiler" - VALUE "FileVersion", "1.2.68.0" + VALUE "FileVersion", "1.2.69.0" VALUE "InternalName", "oscar64.exe" VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "OriginalFilename", "oscar64.exe" VALUE "ProductName", "oscar64" - VALUE "ProductVersion", "1.2.68.0" + VALUE "ProductVersion", "1.2.69.0" END END BLOCK "VarFileInfo" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index fe631b6..a89732d 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -124,6 +124,12 @@ } "Entry" { + "MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_343F58F80DF84D40AE23457288C5D7D5" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -1121,6 +1127,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF" + { + "SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c" + "TargetName" = "8:autocrawler.c" + "Tag" = "8:" + "Folder" = "8:_E925E579BC89433389A5D5B048CAA36A" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_343F58F80DF84D40AE23457288C5D7D5" { "SourcePath" = "8:..\\include\\c64\\keyboard.c" diff --git a/samples/memmap/easyflash.crt b/samples/memmap/easyflash.crt index 3001707616b9bd81404ae8be7f9ce5b68460ee76..dfdbe855c917cf94dd651292998b245aa5f441fe 100644 GIT binary patch delta 512 zcmZ3`#J-@3eL}O+%2vshJgrg|D|ue>eBfWTl3@YEM9C8uem|2sb>W-E$}KNfPF%W! zy>}%~E2Bc!Q~S$B9V# z(I5d1h`>r~1ZVPmCS|sKo>r!v1(Q!OMKL~}tjwG*Q^EZ#Kw@cNrbcVv1g2*}5=(BuXFiWaDnD4OF^fIlLY^hg6Frs+Pjq?a?87&?fkmG& zXY&S@xzd{h6pR!U5zb!eaAKnJ$_9`J`ncgfGvB<};lDi*$__UWrR?zmVw7!XW@IEv Pow6fw>YN)H@7eeBfWTl3@YEM9C8uem|2sb>W-E$_+1?*N&XbH6cvnjI3SL+# z(JOYr=PKt(rVH~|MuP-6AOb6`5uC}3n3UOacv_kE=1xA%6vg;pvKn)~Oey!X0Ewl6 znHsHu6PTU_Nh}S{)MyP}8j{K2BQ|*>b2#JG$($@IoH;xasr;=>J98(SvDov?<5}W7 z(POFbM3-mIKHQU=S@an*H*aQ{E4|rQ!BjyJ;p~+TCnhSdYyf$nn;Y&klg*1A{@W9w e>~I57${rseM%i{|Mn