Add charpad and spritepad import

This commit is contained in:
drmortalwombat 2022-08-05 18:08:10 +02:00
parent ff1377f7bb
commit f0deaab394
13 changed files with 742 additions and 102 deletions

View File

@ -165,6 +165,48 @@ Embedded data can be compressed during compile time and expanded at runtime usin
Compression algorithms so far are LZ (lzo) and run length (rle).
### Embedding sprite and graphics data
The #embed preprocessor can also import components from spritepad and charpad files (.spd version 5 and .ctm version 8).
The component to extract (e.g. chars or tiles) is added as a further specifier.
const char FloorChars[] = {
#embed ctm_chars lzo "floortiles.ctm"
};
Imports the character data and compresses it using lzo compression.
const char CardsTiles[] = {
#embed ctm_tiles8 "cards.ctm"
};
Imports the tiles in 8 bit form and builds word constants
const unsigned CardsTiles[] = {
#embed ctm_tiles16 word "cards.ctm"
};
Imports the tiles in 16 bit form and builds word constants
const char CardsAttrib1[] = {
#embed ctm_attr1 "cards.ctm"
};
const char CardsAttrib2[] = {
#embed ctm_attr2 "cards.ctm"
};
Imports the attribute data
const char SpriteData[] = {
#embed spd_sprites lzo "sprites.spd"
};
Imports the sprite data and compresses it using lzo compression
### Console input and output
The C64 does not use ASCII it uses a derivative called PETSCII. There are two fonts, one with uppercase and one with uppercase and lowercase characters. It also used CR (13) as line terminator instead of LF (10). The stdio and conio libaries can perform translations.

View File

@ -438,7 +438,7 @@ bool Compiler::BuildLZO(const char* targetPath)
while (mErrors->mErrorCount == 0 && (cunit = mCompilationUnits->PendingUnit()))
{
if (mPreprocessor->EmbedData("Compressing", cunit->mFileName, true, 0, 65536, SFM_BINARY_LZO))
if (mPreprocessor->EmbedData("Compressing", cunit->mFileName, true, 0, 65536, SFM_BINARY_LZO, SFD_NONE))
{
Scanner* scanner = new Scanner(mErrors, mPreprocessor);
while (scanner->mToken == TK_INTEGER)

View File

@ -45,6 +45,13 @@ const Ident* Ident::Unique(const char* str)
}
const Ident* Ident::Mangle(const char* str) const
{
char buffer[100];
strcpy_s(buffer, mString);
strcat_s(buffer, str);
return Unique(buffer);
}
IdentDict::IdentDict(void)
{

View File

@ -9,6 +9,7 @@ public:
unsigned int mHash;
static const Ident* Unique(const char* str);
const Ident* Mangle(const char* str) const;
protected:
Ident(const char* str, unsigned int hash);
};

View File

@ -12847,7 +12847,7 @@ void InterCodeProcedure::Close(void)
if (!mInterruptCalled && mEntryBlock->CheckStaticStack())
{
mLinkerObject->mFlags |= LOBJF_STATIC_STACK;
mLinkerObject->mStackSection = mModule->mLinker->AddSection(mIdent, LST_STATIC_STACK);
mLinkerObject->mStackSection = mModule->mLinker->AddSection(mIdent->Mangle("@stack"), LST_STATIC_STACK);
for (int i = 0; i < mLocalVars.Size(); i++)
{
@ -12861,7 +12861,7 @@ void InterCodeProcedure::Close(void)
}
}
mSaveTempsLinkerObject = mModule->mLinker->AddObject(mLocation, mIdent, mLinkerObject->mStackSection, LOT_BSS);
mSaveTempsLinkerObject = mModule->mLinker->AddObject(mLocation, mIdent->Mangle("@stack"), mLinkerObject->mStackSection, LOT_BSS);
ResetVisited();
mEntryBlock->CollectStaticStack(mLinkerObject, mLocalVars);

View File

@ -111,14 +111,18 @@ void NativeRegisterDataSet::ResetY(void)
}
}
void NativeRegisterDataSet::ResetIndirect(void)
void NativeRegisterDataSet::ResetIndirect(int reg)
{
for (int i = 0; i < NUM_REGS; i++)
{
if (mRegs[i].mMode == NRDM_ABSOLUTE ||
mRegs[i].mMode == NRDM_ABSOLUTE_X ||
mRegs[i].mMode == NRDM_ABSOLUTE_Y ||
mRegs[i].mMode == NRDM_INDIRECT_Y )
mRegs[i].mMode == NRDM_ABSOLUTE_Y)
{
if (reg != BC_REG_STACK || !mRegs[i].mLinkerObject)
mRegs[i].Reset();
}
else if (mRegs[i].mMode == NRDM_INDIRECT_Y )
{
mRegs[i].Reset();
}
@ -2334,7 +2338,7 @@ bool NativeCodeInstruction::ValueForwarding(NativeRegisterDataSet& data, AsmInsT
data.mRegs[CPU_REG_X].Reset();
data.mRegs[CPU_REG_Y].Reset();
data.ResetIndirect();
data.ResetIndirect(0);
for (int i = 0; i < 4; i++)
{
@ -3181,7 +3185,7 @@ bool NativeCodeInstruction::ValueForwarding(NativeRegisterDataSet& data, AsmInsT
}
if (ChangesAddress())
data.ResetIndirect();
data.ResetIndirect(mAddress);
}
else if (mMode == ASMIM_ABSOLUTE)
{
@ -6515,14 +6519,21 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
return dreg;
}
int dreg = BC_REG_ACCU;
if (sins)
LoadValueToReg(proc, sins, BC_REG_ACCU, nullptr, nullptr);
else if (ins->mSrc[index].mTemp == ins->mDst.mTemp)
dreg = BC_REG_TMP + proc->mTempOffset[ins->mDst.mTemp];
else
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins->mSrc[index].mTemp]));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_TMP + proc->mTempOffset[ins->mSrc[index].mTemp] + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
int sreg = BC_REG_TMP + proc->mTempOffset[ins->mSrc[index].mTemp];
dreg = BC_REG_TMP + proc->mTempOffset[ins->mDst.mTemp];
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, sreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
switch (lmul)
@ -6531,87 +6542,87 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
case 1:
if (ins->mDst.IsUByte())
{
ShiftRegisterLeftByte(proc, BC_REG_ACCU, lshift);
ShiftRegisterLeftByte(proc, dreg, lshift);
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
else
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
case 3:
if (ins->mSrc[index].IsUByte() && ins->mSrc[index].mRange.mMaxValue <= 85)
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
}
else
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_CLC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
if (ins->mDst.IsUByte())
{
ShiftRegisterLeftByte(proc, BC_REG_ACCU, lshift);
ShiftRegisterLeftByte(proc, dreg, lshift);
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
else
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
case 5:
if (ins->mSrc[index].IsUByte() && ins->mSrc[index].mRange.mMaxValue <= 51)
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
}
else
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_CLC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
if (ins->mDst.IsUByte())
{
ShiftRegisterLeftByte(proc, BC_REG_ACCU, lshift);
ShiftRegisterLeftByte(proc, dreg, lshift);
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
else
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
case 7:
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
@ -6620,25 +6631,25 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_SEC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_SBC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_SBC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_SBC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_SBC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
if (ins->mDst.IsUByte())
{
ShiftRegisterLeftByte(proc, BC_REG_ACCU, lshift);
ShiftRegisterLeftByte(proc, dreg, lshift);
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
else
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
case 9:
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
@ -6647,34 +6658,34 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_CLC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 4));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 5));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
if (ins->mDst.IsUByte())
{
ShiftRegisterLeftByte(proc, BC_REG_ACCU, lshift);
ShiftRegisterLeftByte(proc, dreg, lshift);
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
}
else
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
#if 1
case 25:
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_TAX, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_TAY, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_CLC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_TXA, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_TAX, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_TYA, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
mIns.Push(NativeCodeInstruction(ASMIT_TXA, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
@ -6684,13 +6695,13 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
mIns.Push(NativeCodeInstruction(ASMIT_ASL, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ROL, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
mIns.Push(NativeCodeInstruction(ASMIT_CLC, ASMIM_IMPLIED));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
ShiftRegisterLeft(proc, BC_REG_ACCU, lshift);
return BC_REG_ACCU;
mIns.Push(NativeCodeInstruction(ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
ShiftRegisterLeft(proc, dreg, lshift);
return dreg;
#endif
#endif
default:
@ -6698,7 +6709,8 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
{
if (ins->mSrc[index].IsUByte())
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, BC_REG_ACCU));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg));
mIns.Push(NativeCodeInstruction(ASMIT_LDX, ASMIM_IMMEDIATE, mul & 0xff));
mIns.Push(NativeCodeInstruction(ASMIT_STX, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDX, ASMIM_IMMEDIATE, mul >> 8));
@ -6709,6 +6721,14 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
}
else
{
if (dreg != BC_REG_ACCU)
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
}
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, mul & 0xff));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, mul >> 8));
@ -6720,6 +6740,14 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
}
else
{
if (dreg != BC_REG_ACCU)
{
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 0));
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 1));
mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_ACCU + 1));
}
mIns.Push(NativeCodeInstruction(ASMIT_LDA, ASMIM_IMMEDIATE, mul));
// mIns.Push(NativeCodeInstruction(ASMIT_STA, ASMIM_ZERO_PAGE, BC_REG_WORK + 0));
@ -24566,6 +24594,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
mIns[i + 3].mMode = ASMIM_IMPLIED;
progress = true;
}
#if 1
else if (
mIns[i + 0].mType == ASMIT_TXA &&
mIns[i + 1].mType == ASMIT_CLC &&
@ -24581,8 +24610,11 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
mIns[i + 2].mMode = ASMIM_IMPLIED; mIns[i + 2].mLive |= LIVE_CPU_REG_X;
if (mIns[i + 3].mLive & LIVE_CPU_REG_A)
mIns[i + 3].mType = ASMIT_TXA;
else
mIns[i + 3].mType = ASMIT_NOP;
progress = true;
}
#endif
else if (
mIns[i + 0].mType == ASMIT_TXA &&
mIns[i + 1].mType == ASMIT_SEC &&
@ -27493,6 +27525,7 @@ void NativeCodeProcedure::Optimize(void)
}
#endif
#if 1
if (step == 4 || step == 5)
{
@ -27544,7 +27577,7 @@ void NativeCodeProcedure::Optimize(void)
continue;
}
}
if (!changed && yregs[0] >= 0)
{
int j = 1;
@ -27560,7 +27593,7 @@ void NativeCodeProcedure::Optimize(void)
changed = true;
ymapped = true;
continue;
}
}
}
#endif
if (!changed)
@ -27631,6 +27664,7 @@ void NativeCodeProcedure::Optimize(void)
changed = true;
#endif
#if 1
ResetVisited();
if (mEntryBlock->ForwardZpXIndex(step >= 4))
@ -27642,7 +27676,6 @@ void NativeCodeProcedure::Optimize(void)
mEntryBlock->CheckBlocks();
#endif
if (step == 5)
{
ResetVisited();

View File

@ -45,7 +45,7 @@ struct NativeRegisterDataSet
void ResetZeroPage(int addr);
void ResetAbsolute(LinkerObject * linkerObject, int addr);
void ResetIndirect(void);
void ResetIndirect(int reg);
void ResetX(void);
void ResetY(void);
void Intersect(const NativeRegisterDataSet& set);

View File

@ -32,7 +32,7 @@ bool SourceFile::ReadLineLZO(char* line)
assert(mFill >= 0 && mFill - mPos < 384 && mPos <= mFill);
int c;
while (mLimit && mFill < 384 && (c = fgetc(mFile)) >= 0)
while (mLimit && mFill < 384 && (c = ReadChar()) >= 0)
{
mLimit--;
mBuffer[mFill++] = c;
@ -115,7 +115,7 @@ bool SourceFile::ReadLineRLE(char* line)
assert(mFill >= 0 && mFill < 256);
int c;
while (mLimit && mFill < 256 && (c = fgetc(mFile)) >= 0)
while (mLimit && mFill < 256 && (c = ReadChar()) >= 0)
{
mLimit--;
mBuffer[mFill++] = c;
@ -234,6 +234,19 @@ bool SourceFile::ReadLineRLE(char* line)
return false;
}
int SourceFile::ReadChar(void)
{
if (mMemData)
{
if (mMemPos < mMemSize)
return mMemData[mMemPos++];
else
return -1;
}
else
return fgetc(mFile);
}
bool SourceFile::ReadLine(char* line)
{
if (mFile)
@ -249,7 +262,7 @@ bool SourceFile::ReadLine(char* line)
{
mLimit--;
int c = fgetc(mFile);
int c = ReadChar();
if (c >= 0)
{
sprintf_s(line, 1024, "0x%02x, ", c);
@ -257,6 +270,22 @@ bool SourceFile::ReadLine(char* line)
}
}
break;
case SFM_BINARY_WORD:
if (mLimit >= 2)
{
mLimit -= 2;
int c = ReadChar();
if (c >= 0)
{
int d = ReadChar();
if (d >= 0)
sprintf_s(line, 1024, "0x%04x, ", c + 256 * d);
return true;
}
}
break;
case SFM_BINARY_RLE:
if (ReadLineRLE(line))
return true;
@ -274,15 +303,265 @@ bool SourceFile::ReadLine(char* line)
return false;
}
void SourceFile::Limit(int skip, int limit)
struct CTMHeader8
{
mLimit = limit;
if (mFile)
fseek(mFile, skip, SEEK_SET);
uint8 mID[3];
uint8 mVersion[1];
uint8 mDispMode;
uint8 mColorMethod;
uint8 mFlags;
uint8 mColors[7];
};
#pragma pack(push, 1)
struct SPDHeader5
{
uint8 mID[3];
uint8 mVersion[1];
uint8 mFlags;
uint16 mNumSprites, mNumTiles;
uint8 mNumSpriteAnmis, mNumTileAnims;
uint8 mTileWidth, mTileHeight;
uint8 mColors[3];
int16 mSpriteOverlayDist, mTileOverlayDist;
};
#pragma pack(pop)
void SourceFile::ReadSpritePad(SourceFileDecoder decoder)
{
SPDHeader5 spdHeader;
fread(&spdHeader, sizeof(SPDHeader5), 1, mFile);
if (decoder == SFD_SPD_SPRITES)
{
mLimit = 64 * spdHeader.mNumSprites;
return;
}
mLimit = 0;
}
void SourceFile::ReadCharPad(SourceFileDecoder decoder)
{
CTMHeader8 ctmHeader;
uint16 ctmMarker, numChars, numTiles;
char tileWidth, tileHeight;
fread(&ctmHeader, sizeof(CTMHeader8), 1, mFile);
fread(&ctmMarker, 2, 1, mFile);
fread(&numChars, 2, 1, mFile);
numChars++;
if (decoder == SFD_CTM_CHARS)
{
mLimit = 8 * numChars;
return;
}
// Skip chars
fseek(mFile, 8 * numChars, SEEK_CUR);
fread(&ctmMarker, 2, 1, mFile);
if (ctmHeader.mColorMethod == 2 && (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2))
{
mMemSize = numChars;
mLimit = mMemSize;
mMemPos = 0;
mMemData = new uint8[mMemSize];
}
if (ctmHeader.mColorMethod == 2 && decoder == SFD_CTM_CHAR_ATTRIB_1)
{
for (int i = 0; i < mMemSize; i++)
{
uint8 fd;
fread(&fd, 1, 1, mFile);
mMemData[i] = fd << 4;
}
}
else
{
// Skip material
fseek(mFile, 1 * numChars, SEEK_CUR);
}
if (ctmHeader.mColorMethod == 2)
{
fread(&ctmMarker, 2, 1, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
{
if (ctmHeader.mDispMode == 4)
{
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(fd, 1, 3, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1)
mMemData[i] |= fd[0];
else
mMemData[i] = (fd[2] << 4) | fd[1];
}
}
else
{
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(fd, 1, 1, mFile);
mMemData[i] |= fd[0];
}
}
return;
}
else
{
// Skip colors
if (ctmHeader.mDispMode == 3)
fseek(mFile, 2 * numChars, SEEK_CUR);
else if (ctmHeader.mDispMode == 4)
fseek(mFile, 3 * numChars, SEEK_CUR);
else
fseek(mFile, numChars, SEEK_CUR);
}
}
if (ctmHeader.mFlags & 1)
{
fread(&ctmMarker, 2, 1, mFile);
fread(&numTiles, 2, 1, mFile);
numTiles++;
fread(&tileWidth, 1, 1, mFile);
fread(&tileHeight, 1, 1, mFile);
if (decoder == SFD_CTM_TILES_16)
{
mLimit = 2 * numTiles * tileWidth * tileHeight;
return;
}
else if (decoder == SFD_CTM_TILES_8)
{
mMemSize = numTiles * tileWidth * tileHeight;
mLimit = mMemSize;
mMemPos = 0;
mMemData = new uint8[mMemSize];
for (int i = 0; i < mMemSize; i++)
{
int16 d;
fread(&d, 2, 1, mFile);
mMemData[i] = d;
}
return;
}
else
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
fread(&ctmMarker, 2, 1, mFile);
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
{
mMemSize = numTiles;
mLimit = mMemSize;
mMemPos = 0;
mMemData = new uint8[mMemSize];
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(&fd, 1, 1, mFile);
mMemData[i] = fd[0];
}
fread(&ctmMarker, 2, 1, mFile);
for (int i = 0; i < mMemSize; i++)
{
uint8 fd[3];
fread(&fd, 1, 1, mFile);
mMemData[i] |= fd[0] << 4;
}
return;
}
else
{
// Skip material
fseek(mFile, 1 * numTiles, SEEK_CUR);
}
// Skip tile names
fread(&ctmMarker, 2, 1, mFile);
for (int i = 0; i < numTiles; i++)
{
while (fgetc(mFile) > 0)
;
}
}
fread(&ctmMarker, 2, 1, mFile);
int16 mapWidth, mapHeight;
fread(&mapWidth, 2, 1, mFile);
fread(&mapHeight, 2, 1, mFile);
if (decoder == SFD_CTM_MAP_16)
{
mLimit = 2 * mapWidth * mapHeight;
return;
}
else if (decoder == SFD_CTM_MAP_8)
{
mMemSize = mapWidth * mapHeight;
mLimit = mMemSize;
mMemPos = 0;
mMemData = new uint8[mMemSize];
for (int i = 0; i < mMemSize; i++)
{
int16 d;
fread(&d, 2, 1, mFile);
mMemData[i] = d;
}
return;
}
else
fseek(mFile, 2 * mapWidth * mapHeight, SEEK_CUR);
mLimit = 0;
}
void SourceFile::Limit(SourceFileDecoder decoder, int skip, int limit)
{
switch (decoder)
{
case SFD_CTM_CHARS:
case SFD_CTM_CHAR_ATTRIB_1:
case SFD_CTM_CHAR_ATTRIB_2:
case SFD_CTM_TILES_8:
case SFD_CTM_TILES_16:
case SFD_CTM_MAP_8:
case SFD_CTM_MAP_16:
ReadCharPad(decoder);
break;
case SFD_SPD_SPRITES:
ReadSpritePad(decoder);
break;
default:
mLimit = limit;
if (mFile)
fseek(mFile, skip, SEEK_SET);
}
}
SourceFile::SourceFile(void)
: mFile(nullptr), mFileName{ 0 }, mStack(nullptr)
: mFile(nullptr), mFileName{ 0 }, mStack(nullptr), mMemData(nullptr)
{
}
@ -294,6 +573,11 @@ SourceFile::~SourceFile(void)
fclose(mFile);
mFile = nullptr;
}
if (mMemData)
{
delete[] mMemData;
}
}
bool SourceFile::Open(const char* name, const char* path, SourceFileMode mode)
@ -398,7 +682,7 @@ bool Preprocessor::NextLine(void)
return false;
}
bool Preprocessor::EmbedData(const char* reason, const char* name, bool local, int skip, int limit, SourceFileMode mode)
bool Preprocessor::EmbedData(const char* reason, const char* name, bool local, int skip, int limit, SourceFileMode mode, SourceFileDecoder decoder)
{
if (strlen(name) > 200)
{
@ -443,7 +727,7 @@ bool Preprocessor::EmbedData(const char* reason, const char* name, bool local, i
if (mCompilerOptions & COPT_VERBOSE)
printf("%s \"%s\"\n", reason, source->mFileName);
source->Limit(skip, limit);
source->Limit(decoder, skip, limit);
source->mUp = mSource;
mSource = source;

View File

@ -18,9 +18,24 @@ enum SourceFileMode
{
SFM_TEXT,
SFM_BINARY,
SFM_BINARY_WORD,
SFM_BINARY_RLE,
SFM_BINARY_LZO
};
enum SourceFileDecoder
{
SFD_NONE,
SFD_CTM_CHARS,
SFD_CTM_CHAR_ATTRIB_1,
SFD_CTM_CHAR_ATTRIB_2,
SFD_CTM_TILES_8,
SFD_CTM_TILES_16,
SFD_CTM_MAP_8,
SFD_CTM_MAP_16,
SFD_SPD_SPRITES
};
class SourceFile
{
public:
@ -32,8 +47,9 @@ public:
SourceFileMode mMode;
int mLimit;
char mBuffer[512];
int mFill, mPos;
uint8 mBuffer[512];
int mFill, mPos, mMemPos, mMemSize;
uint8 * mMemData;
bool ReadLine(char* line);
@ -46,7 +62,7 @@ public:
bool Open(const char* name, const char * path, SourceFileMode mode = SFM_TEXT);
void Close(void);
void Limit(int skip, int limit);
void Limit(SourceFileDecoder decoder, int skip, int limit);
bool PushSource(void);
bool PopSource(void);
@ -54,6 +70,10 @@ public:
protected:
FILE* mFile;
void ReadCharPad(SourceFileDecoder decoder);
void ReadSpritePad(SourceFileDecoder decoder);
int ReadChar(void);
};
class SourcePath
@ -90,7 +110,7 @@ public:
bool PopSource(void);
bool DropSource(void);
bool EmbedData(const char* reason, const char* name, bool local, int skip, int limit, SourceFileMode mode);
bool EmbedData(const char* reason, const char* name, bool local, int skip, int limit, SourceFileMode mode, SourceFileDecoder decoder);
Preprocessor(Errors * errors);
~Preprocessor(void);

View File

@ -651,6 +651,7 @@ void Scanner::NextToken(void)
{
int limit = 65536, skip = 0;
SourceFileMode mode = SFM_BINARY;
SourceFileDecoder decoder = SFD_NONE;
NextRawToken();
if (mToken == TK_INTEGER)
@ -665,12 +666,30 @@ void Scanner::NextToken(void)
}
}
if (mToken == TK_IDENT)
while (mToken == TK_IDENT)
{
if (!strcmp(mTokenIdent->mString, "rle"))
mode = SFM_BINARY_RLE;
else if (!strcmp(mTokenIdent->mString, "lzo"))
mode = SFM_BINARY_LZO;
else if (!strcmp(mTokenIdent->mString, "word"))
mode = SFM_BINARY_WORD;
else if (!strcmp(mTokenIdent->mString, "ctm_chars"))
decoder = SFD_CTM_CHARS;
else if (!strcmp(mTokenIdent->mString, "ctm_attr1"))
decoder = SFD_CTM_CHAR_ATTRIB_1;
else if (!strcmp(mTokenIdent->mString, "ctm_attr2"))
decoder = SFD_CTM_CHAR_ATTRIB_2;
else if (!strcmp(mTokenIdent->mString, "ctm_tiles8"))
decoder = SFD_CTM_TILES_8;
else if (!strcmp(mTokenIdent->mString, "ctm_tiles16"))
decoder = SFD_CTM_TILES_16;
else if (!strcmp(mTokenIdent->mString, "ctm_map8"))
decoder = SFD_CTM_MAP_8;
else if (!strcmp(mTokenIdent->mString, "ctm_map16"))
decoder = SFD_CTM_MAP_16;
else if (!strcmp(mTokenIdent->mString, "spd_sprites"))
decoder = SFD_SPD_SPRITES;
else
mErrors->Error(mLocation, EERR_FILE_NOT_FOUND, "Invalid embed compression mode", mTokenIdent);
@ -679,14 +698,14 @@ void Scanner::NextToken(void)
if (mToken == TK_STRING)
{
if (!mPreprocessor->EmbedData("Embedding", mTokenString, true, skip, limit, mode))
if (!mPreprocessor->EmbedData("Embedding", mTokenString, true, skip, limit, mode, decoder))
mErrors->Error(mLocation, EERR_FILE_NOT_FOUND, "Could not open source file", mTokenString);
}
else if (mToken == TK_LESS_THAN)
{
mOffset--;
StringToken('>', 'a');
if (!mPreprocessor->EmbedData("Embedding", mTokenString, false, skip, limit, mode))
if (!mPreprocessor->EmbedData("Embedding", mTokenString, false, skip, limit, mode, decoder))
mErrors->Error(mLocation, EERR_FILE_NOT_FOUND, "Could not open source file", mTokenString);
}
}

View File

@ -74,7 +74,7 @@ int main2(int argc, const char** argv)
#else
strcpy(strProductName, "oscar64");
strcpy(strProductVersion, "1.7.150");
strcpy(strProductVersion, "1.8.151");
#ifdef __APPLE__
uint32_t length = sizeof(basePath);

View File

@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,7,150,0
PRODUCTVERSION 1,7,150,0
FILEVERSION 1,8,151,0
PRODUCTVERSION 1,8,151,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -43,12 +43,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "oscar64"
VALUE "FileDescription", "oscar64 compiler"
VALUE "FileVersion", "1.7.150.0"
VALUE "FileVersion", "1.8.151.0"
VALUE "InternalName", "oscar64.exe"
VALUE "LegalCopyright", "Copyright (C) 2021"
VALUE "OriginalFilename", "oscar64.exe"
VALUE "ProductName", "oscar64"
VALUE "ProductVersion", "1.7.150.0"
VALUE "ProductVersion", "1.8.151.0"
END
END
BLOCK "VarFileInfo"

View File

@ -34,6 +34,12 @@
}
"Entry"
{
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -154,6 +160,12 @@
}
"Entry"
{
"MsmKey" = "8:_2CA3A525072974368303677563606FFE"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_2D828D0247F144CDB0112B2AD4004C2C"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -214,6 +226,12 @@
}
"Entry"
{
"MsmKey" = "8:_3FA71395262A4AB4A1C2839FD6B91190"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3FFD08277B804985BDF072C0C1877287"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -388,12 +406,24 @@
}
"Entry"
{
"MsmKey" = "8:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_79985361F09A43299E258E1A8E5ED934"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7A40466D5E5D2D3FD71213A0C0AA5075"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7A9E700FC438425580655F7C1BC07FD3"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -604,6 +634,12 @@
}
"Entry"
{
"MsmKey" = "8:_B2B920A649CF4027457BBAB004078A03"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_B2F1B217D45A434DBA8EC21095F4D717"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -784,6 +820,18 @@
}
"Entry"
{
"MsmKey" = "8:_DC9FDF52011EB7C47318682BA0B3F26F"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DE2BF7C92569053E7C3DCE88AB7E2566"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DEADBEA270134B77800770802B21859C"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -844,6 +892,12 @@
}
"Entry"
{
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -1055,6 +1109,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"
@ -1455,6 +1529,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2CA3A525072974368303677563606FFE"
{
"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}:_2D828D0247F144CDB0112B2AD4004C2C"
{
"SourcePath" = "8:..\\samples\\scrolling\\tunnel.c"
@ -1655,6 +1749,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FA71395262A4AB4A1C2839FD6B91190"
{
"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}:_3FFD08277B804985BDF072C0C1877287"
{
"SourcePath" = "8:..\\include\\assert.c"
@ -2235,6 +2349,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
{
"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}:_79985361F09A43299E258E1A8E5ED934"
{
"SourcePath" = "8:..\\include\\gfx\\mcbitmap.c"
@ -2255,6 +2389,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7A40466D5E5D2D3FD71213A0C0AA5075"
{
"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}:_7A9E700FC438425580655F7C1BC07FD3"
{
"SourcePath" = "8:..\\samples\\rasterirq\\textcrawler.c"
@ -2955,6 +3109,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B2B920A649CF4027457BBAB004078A03"
{
"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}:_B2F1B217D45A434DBA8EC21095F4D717"
{
"SourcePath" = "8:..\\samples\\memmap\\charsetload.c"
@ -3555,6 +3729,46 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DC9FDF52011EB7C47318682BA0B3F26F"
{
"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}:_DE2BF7C92569053E7C3DCE88AB7E2566"
{
"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}:_DEADBEA270134B77800770802B21859C"
{
"SourcePath" = "8:..\\samples\\games\\connectfour.c"
@ -3755,6 +3969,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"
@ -4231,15 +4465,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:oscar64"
"ProductCode" = "8:{CC0139D2-24F8-4A28-B4B8-E9FA10C912BF}"
"PackageCode" = "8:{0F10381E-B5C0-4E70-B759-DEED3A7827B8}"
"ProductCode" = "8:{60655505-5C36-4E87-9F18-A96853C16275}"
"PackageCode" = "8:{030FE9E0-9DAD-4D51-BE92-E5CF0A3CE014}"
"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.7.150"
"ProductVersion" = "8:1.8.151"
"Manufacturer" = "8:oscar64"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"