Add charpad and spritepad import
This commit is contained in:
parent
ff1377f7bb
commit
f0deaab394
42
README.md
42
README.md
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:"
|
||||
|
|
Loading…
Reference in New Issue