From 5852ca5aea6149dae1814fe6a0b79a9a37b75b2a Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Wed, 8 Feb 2023 08:51:58 +0100 Subject: [PATCH] Shortcut conditional branch blocks in intermediate code --- oscar64/InterCode.cpp | 53 +++++++ oscar64/NativeCodeGenerator.cpp | 58 ++++++-- oscar64/oscar64.cpp | 2 +- oscar64/oscar64.rc | 8 +- oscar64setup/oscar64setup.vdproj | 240 ++++++++++++++++++++++++++++++- samples/memmap/charsetload.d64 | Bin 174848 -> 174848 bytes 6 files changed, 340 insertions(+), 21 deletions(-) diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index a39f2f1..2fc7bc3 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -10381,6 +10381,23 @@ bool InterCodeBasicBlock::OptimizeIntervalCompare(void) return changed; } +static bool BlockSameCondition(InterCodeBasicBlock* b, InterCodeBasicBlock* s) +{ + int nb = b->mInstructions.Size(); + if (s->mInstructions.Size() == 2 && + s->mInstructions[0]->mCode == IC_RELATIONAL_OPERATOR && + s->mInstructions[0]->mOperator == b->mInstructions[nb - 2]->mOperator && + s->mInstructions[1]->mCode == IC_BRANCH && + s->mInstructions[1]->mSrc[0].mTemp == s->mInstructions[0]->mDst.mTemp && + s->mInstructions[1]->mSrc[0].mFinal && + s->mInstructions[0]->IsEqualSource(b->mInstructions[nb - 2])) + { + return true; + } + + return false; +} + void InterCodeBasicBlock::FollowJumps(void) { if (!mVisited) @@ -10400,6 +10417,32 @@ void InterCodeBasicBlock::FollowJumps(void) mFalseJump = block->mFalseJump; } + int sz = mInstructions.Size(); + if (sz > 1 && mInstructions[sz - 1]->mCode == IC_BRANCH && mInstructions[sz - 2]->mCode == IC_RELATIONAL_OPERATOR && + mInstructions[sz - 1]->mSrc[0].mTemp == mInstructions[sz - 2]->mDst.mTemp && + mInstructions[sz - 2]->mSrc[0].mTemp != mInstructions[sz - 2]->mDst.mTemp && + mInstructions[sz - 2]->mSrc[1].mTemp != mInstructions[sz - 2]->mDst.mTemp) + { + if (mTrueJump && BlockSameCondition(this, mTrueJump)) + { + InterCodeBasicBlock* target = mTrueJump->mTrueJump; + mTrueJump->mNumEntries--; + mTrueJump->mEntryBlocks.RemoveAll(this); + target->mNumEntries++; + target->mEntryBlocks.Push(this); + mTrueJump = target; + } + else if (mFalseJump && BlockSameCondition(this, mFalseJump)) + { + InterCodeBasicBlock* target = mFalseJump->mFalseJump; + mFalseJump->mNumEntries--; + mFalseJump->mEntryBlocks.RemoveAll(this); + target->mNumEntries++; + target->mEntryBlocks.Push(this); + mFalseJump = target; + } + } + if (mTrueJump) mTrueJump->FollowJumps(); if (mFalseJump) @@ -14264,6 +14307,11 @@ void InterCodeProcedure::Close(void) LoadStoreForwarding(paramMemory); + ResetVisited(); + mEntryBlock->FollowJumps(); + + DisassembleDebug("Followed Jumps"); + FastNumberSet activeSet(numTemps); // @@ -14325,6 +14373,11 @@ void InterCodeProcedure::Close(void) BuildDataFlowSets(); + ResetVisited(); + mEntryBlock->FollowJumps(); + + DisassembleDebug("Followed Jumps 2"); + RebuildIntegerRangeSet(); EliminateAliasValues(); diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 794e6f5..599b63b 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -2356,6 +2356,26 @@ bool NativeCodeInstruction::BitFieldForwarding(NativeRegisterDataSet& data, AsmI data.mRegs[CPU_REG_A].mMask = 0; } } + else if (mMode == ASMIM_IMMEDIATE && mAddress == 0) + { + int zeros = data.mRegs[CPU_REG_A].mMask & ~data.mRegs[CPU_REG_A].mValue; + + int fzero = 0x01; + while (fzero < 0x100 && (fzero & zeros) == 0) + fzero <<= 1; + + fzero |= (fzero - 1); + + data.mRegs[CPU_REG_A].mMask &= ~fzero; + + if (fzero >= 0x100) + data.mRegs[CPU_REG_C].mMask = 0; + else + { + data.mRegs[CPU_REG_C].mMask = 1; + data.mRegs[CPU_REG_C].mValue = 0; + } + } else { data.mRegs[CPU_REG_C].mMask = 0; @@ -2629,24 +2649,36 @@ bool NativeCodeInstruction::BitFieldForwarding(NativeRegisterDataSet& data, AsmI { int mask = data.mRegs[iaddr].mMask, value = data.mRegs[iaddr].mValue; - data.mRegs[iaddr].mMask = ((mask >> 1) & 0xff) | 0x80; - data.mRegs[iaddr].mValue = ((value >> 1) & 0x7f); - - if (mask & 0x01) + if (mask == 0xff && value == 0x00) { + mType = ASMIT_CLC; + mMode = ASMIM_IMPLIED; data.mRegs[CPU_REG_C].mMask = 1; - data.mRegs[CPU_REG_C].mValue = value & 1; + data.mRegs[CPU_REG_C].mValue = 0; + + changed = true; } else - data.mRegs[CPU_REG_C].mMask = 0; - - if (mMode == ASMIM_IMPLIED && data.mRegs[CPU_REG_A].mMask == 0xff && data.mRegs[CPU_REG_C].mMask) { - carryop = data.mRegs[CPU_REG_C].mValue ? ASMIT_SEC : ASMIT_CLC; - mType = ASMIT_LDA; - mMode = ASMIM_IMMEDIATE; - mAddress = data.mRegs[CPU_REG_A].mValue; - changed = true; + data.mRegs[iaddr].mMask = ((mask >> 1) & 0xff) | 0x80; + data.mRegs[iaddr].mValue = ((value >> 1) & 0x7f); + + if (mask & 0x01) + { + data.mRegs[CPU_REG_C].mMask = 1; + data.mRegs[CPU_REG_C].mValue = value & 1; + } + else + data.mRegs[CPU_REG_C].mMask = 0; + + if (mMode == ASMIM_IMPLIED && data.mRegs[CPU_REG_A].mMask == 0xff && data.mRegs[CPU_REG_C].mMask) + { + carryop = data.mRegs[CPU_REG_C].mValue ? ASMIT_SEC : ASMIT_CLC; + mType = ASMIT_LDA; + mMode = ASMIM_IMMEDIATE; + mAddress = data.mRegs[CPU_REG_A].mValue; + changed = true; + } } } else diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index daa52f9..fe8ba06 100644 --- a/oscar64/oscar64.cpp +++ b/oscar64/oscar64.cpp @@ -74,7 +74,7 @@ int main2(int argc, const char** argv) #else strcpy(strProductName, "oscar64"); - strcpy(strProductVersion, "1.15.183"); + strcpy(strProductVersion, "1.15.184"); #ifdef __APPLE__ uint32_t length = sizeof(basePath); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index 5e77c19..91c1366 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,15,183,0 - PRODUCTVERSION 1,15,183,0 + FILEVERSION 1,15,184,0 + PRODUCTVERSION 1,15,184,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "oscar64" VALUE "FileDescription", "oscar64 compiler" - VALUE "FileVersion", "1.15.183.0" + VALUE "FileVersion", "1.15.184.0" VALUE "InternalName", "oscar64.exe" VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "OriginalFilename", "oscar64.exe" VALUE "ProductName", "oscar64" - VALUE "ProductVersion", "1.15.183.0" + VALUE "ProductVersion", "1.15.184.0" END END BLOCK "VarFileInfo" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index 9b5f2f3..12a36ce 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -34,6 +34,12 @@ } "Entry" { + "MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_04ABABC55200450383686DD782DD1548" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -190,6 +196,12 @@ } "Entry" { + "MsmKey" = "8:_326B44043E3720E0A341FB5627DA8873" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -202,6 +214,12 @@ } "Entry" { + "MsmKey" = "8:_36B4A1247BFCE001E1BAE7560E9CFEEA" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -274,6 +292,12 @@ } "Entry" { + "MsmKey" = "8:_458189403F0009BC49371204B74F3BD3" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -412,6 +436,12 @@ } "Entry" { + "MsmKey" = "8:_749A2BA18335F50EB53CCE7029861FBC" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_749F54DFBD4D404DA9C2E2D5BA7CDDBF" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -472,6 +502,12 @@ } "Entry" { + "MsmKey" = "8:_8667075410229C38BF63AC1CC776055E" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_8827B6B07A1C4B32B08DF784E090381D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -838,6 +874,12 @@ } "Entry" { + "MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_DE1058FFA9E149D1909C819592A12273" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -910,6 +952,12 @@ } "Entry" { + "MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -940,6 +988,12 @@ } "Entry" { + "MsmKey" = "8:_F20F5618C7576D758C01D89C87469AF8" + "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -1127,6 +1181,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03D7013B0D39A89CEA9D267005ADCE39" + { + "SourcePath" = "8:VCRUNTIME140.dll" + "TargetName" = "8:VCRUNTIME140.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_04ABABC55200450383686DD782DD1548" { "SourcePath" = "8:..\\samples\\games\\lander.c" @@ -1647,6 +1721,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_326B44043E3720E0A341FB5627DA8873" + { + "SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF" { "SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c" @@ -1687,6 +1781,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36B4A1247BFCE001E1BAE7560E9CFEEA" + { + "SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4" { "SourcePath" = "8:..\\samples\\memmap\\easyflash.c" @@ -1927,6 +2041,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_458189403F0009BC49371204B74F3BD3" + { + "SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4" { "SourcePath" = "8:..\\samples\\memmap\\largemem.c" @@ -2387,6 +2521,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749A2BA18335F50EB53CCE7029861FBC" + { + "SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF" { "SourcePath" = "8:..\\samples\\resources\\breakoutchars.bin" @@ -2587,6 +2741,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8667075410229C38BF63AC1CC776055E" + { + "SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D" { "SourcePath" = "8:..\\samples\\memmap\\tsr.c" @@ -3807,6 +3981,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DD5A4DD822437085CD584319732F2D4D" + { + "SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE1058FFA9E149D1909C819592A12273" { "SourcePath" = "8:..\\samples\\particles\\fireworks_stripe.c" @@ -4047,6 +4241,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA3C0BCB01F2639DFA2E37EC8436E5F6" + { + "SourcePath" = "8:VERSION.dll" + "TargetName" = "8:VERSION.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED872D39D58443D590B7C80604BC0FF4" { "SourcePath" = "8:..\\samples\\kernalio\\fileread.c" @@ -4147,6 +4361,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F20F5618C7576D758C01D89C87469AF8" + { + "SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll" + "TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll" + "Tag" = "8:" + "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "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:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA" { "SourcePath" = "8:..\\include\\c64\\charwin.h" @@ -4554,15 +4788,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:oscar64" - "ProductCode" = "8:{0316346F-2B7D-478A-BD0C-8AAF6E0371EA}" - "PackageCode" = "8:{BAD074A9-2FC1-4FF7-B987-B330F1B645A2}" + "ProductCode" = "8:{0B2C24E0-E365-4DF4-B4C3-A70C74E108CB}" + "PackageCode" = "8:{AD71C3CB-743B-4DA7-A102-D029443862BB}" "UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}" "AspNetVersion" = "8:2.0.50727.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" - "ProductVersion" = "8:1.15.183" + "ProductVersion" = "8:1.15.184" "Manufacturer" = "8:oscar64" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" diff --git a/samples/memmap/charsetload.d64 b/samples/memmap/charsetload.d64 index 32a52f357ed0a0c78817f71ceb9bb9f0fe7c0b6e..c49efc336aebf24d3f81ec7ac1c0636c5937dfaf 100644 GIT binary patch delta 38 ucmZp;#?^3*t6>Y{=@@}!e0%%&PdZ#+S;_E$x6P%k{dNrF_S-Q`s(t`Q+Ym4S delta 38 ucmZp;#?^3*t6>Y{=@@|}d@U|J`}j{fTwqzr@PWIf{dNrF_S-Q`s(t`O