From c5fc1863360d1a4be6b1069ce84ef56bfc29f1c0 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 6 Mar 2022 21:49:10 +0100 Subject: [PATCH] Add horizontal scroll shmup sample game --- include/audio/sidfx.c | 131 +++++ include/audio/sidfx.h | 24 + oscar64/NativeCodeGenerator.cpp | 89 +++- oscar64/NativeCodeGenerator.h | 1 + oscar64/oscar64.cpp | 2 +- oscar64/oscar64.rc | 8 +- oscar64setup/oscar64setup.vdproj | 357 ++++++------- samples/games/build.sh | 1 + samples/games/hscrollshmup.c | 595 +++++++++++++++++----- samples/games/make.bat | 1 + samples/resources/breakoutchars.bin | Bin 1224 -> 1224 bytes samples/resources/hscrollshmupchars.bin | Bin 0 -> 1328 bytes samples/resources/hscrollshmupmap.bin | Bin 0 -> 640 bytes samples/resources/hscrollshmupsprites.bin | Bin 0 -> 4096 bytes samples/resources/hscrollshmuptiles.bin | Bin 0 -> 1024 bytes samples/sprites/multiplexer.c | 4 +- 16 files changed, 867 insertions(+), 346 deletions(-) create mode 100644 include/audio/sidfx.c create mode 100644 include/audio/sidfx.h create mode 100644 samples/resources/hscrollshmupchars.bin create mode 100644 samples/resources/hscrollshmupmap.bin create mode 100644 samples/resources/hscrollshmupsprites.bin create mode 100644 samples/resources/hscrollshmuptiles.bin diff --git a/include/audio/sidfx.c b/include/audio/sidfx.c new file mode 100644 index 0000000..1434b08 --- /dev/null +++ b/include/audio/sidfx.c @@ -0,0 +1,131 @@ +#include "sidfx.h" + +enum SIDFXState +{ + SIDFX_IDLE, + SIDFX_RESET_0, + SIDFX_RESET_1, + SIDFX_READY, + SIDFX_PLAY, + SIDFX_WAIT +}; + +static struct SIDFXChannel +{ + SIDFX * com; + byte delay, cnt; + SIDFXState state; + unsigned freq; + +} channels[3]; + +void sidfx_init(void) +{ + for(char i=0; i<3; i++) + { + channels[i].com = nullptr; + channels[i].state = SIDFX_IDLE; + } +} + +void sidfx_play(byte chn, SIDFX * fx, byte cnt) +{ + if (channels[chn].state == SIDFX_IDLE) + channels[chn].state = SIDFX_READY; + else + channels[chn].state = SIDFX_RESET_0; + + channels[chn].com = fx; + channels[chn].cnt = cnt - 1; +} + +void sidfx_stop(byte chn) +{ + channels[chn].com = nullptr; + if (channels[chn].state != SIDFX_IDLE) + channels[chn].state = SIDFX_RESET_0; +} + +void sidfx_loop(void) +{ + for(byte ch=0; ch<3; ch++) + { + switch (channels[ch].state) + { + case SIDFX_IDLE: + break; + case SIDFX_RESET_0: + sid.voices[ch].ctrl = 0; + sid.voices[ch].attdec = 0; + sid.voices[ch].susrel = 0; + channels[ch].state = SIDFX_RESET_1; + break; + case SIDFX_RESET_1: + sid.voices[ch].ctrl = SID_CTRL_TEST; + channels[ch].state = SIDFX_READY; + break; + case SIDFX_READY: + if (channels[ch].com) + { + channels[ch].freq = channels[ch].com->freq; + sid.voices[ch].freq = channels[ch].com->freq; + sid.voices[ch].pwm = channels[ch].com->pwm; + sid.voices[ch].attdec = channels[ch].com->attdec; + sid.voices[ch].susrel = channels[ch].com->susrel; + sid.voices[ch].ctrl = channels[ch].com->ctrl; + channels[ch].delay = channels[ch].com->time1; + channels[ch].state = SIDFX_PLAY; + } + else + channels[ch].state = SIDFX_IDLE; + break; + case SIDFX_PLAY: + if (channels[ch].com->dfreq) + { + channels[ch].freq += channels[ch].com->dfreq; + sid.voices[ch].freq = channels[ch].freq; + } + if (channels[ch].delay) + channels[ch].delay--; + else if (channels[ch].com->time0) + { + sid.voices[ch].ctrl = channels[ch].com->ctrl & ~SID_CTRL_GATE; + channels[ch].delay = channels[ch].com->time0; + channels[ch].state = SIDFX_WAIT; + } + else if (channels[ch].cnt) + { + channels[ch].cnt--; + channels[ch].com++; + channels[ch].state = SIDFX_READY; + } + else + { + channels[ch].com = nullptr; + channels[ch].state = SIDFX_RESET_0; + } + break; + case SIDFX_WAIT: + if (channels[ch].com->dfreq) + { + channels[ch].freq += channels[ch].com->dfreq; + sid.voices[ch].freq = channels[ch].freq; + } + + if (channels[ch].delay) + channels[ch].delay--; + else if (channels[ch].cnt) + { + channels[ch].cnt--; + channels[ch].com++; + channels[ch].state = SIDFX_RESET_0; + } + else + { + channels[ch].com = nullptr; + channels[ch].state = SIDFX_RESET_0; + } + break; + } + } +} diff --git a/include/audio/sidfx.h b/include/audio/sidfx.h new file mode 100644 index 0000000..4b615d5 --- /dev/null +++ b/include/audio/sidfx.h @@ -0,0 +1,24 @@ +#ifndef SIDFX_H +#define SIDFX_H + +#include + +struct SIDFX +{ + unsigned freq, pwm; + byte ctrl, attdec, susrel; + sbyte dfreq, dpwm; + byte time1, time0; +}; + +void sidfx_init(void); + +void sidfx_play(byte chn, SIDFX * fx, byte cnt); + +void sidfx_stop(byte chn); + +void sidfx_loop(void); + +#pragma compile("sidfx.c") + +#endif diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 89ddf86..0e21df5 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -728,6 +728,23 @@ bool NativeCodeInstruction::ChangesZeroPage(int address) const { if (mMode == ASMIM_ZERO_PAGE && mAddress == address) return mType == ASMIT_INC || mType == ASMIT_DEC || mType == ASMIT_ASL || mType == ASMIT_LSR || mType == ASMIT_ROL || mType == ASMIT_ROR || mType == ASMIT_STA || mType == ASMIT_STX || mType == ASMIT_STY; + else if (mType == ASMIT_JSR) + { + if (address >= BC_REG_ACCU && address < BC_REG_ACCU + 4) + return true; + if (address >= BC_REG_WORK && address < BC_REG_WORK + 8) + return true; + + if (!(mFlags & NCIF_RUNTIME) || (mFlags & NCIF_FEXEC)) + { + if (address >= BC_REG_FPARAMS && address < BC_REG_FPARAMS_END) + return true; + if (address >= BC_REG_TMP && address < BC_REG_TMP_SAVED) + return true; + } + + return false; + } else return false; } @@ -924,6 +941,41 @@ bool NativeCodeInstruction::IsSame(const NativeCodeInstruction& ins) const return false; } +bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins) const +{ + if (ins.mMode == ASMIM_ZERO_PAGE) + { + if (mMode == ASMIM_ZERO_PAGE) + return mAddress == ins.mAddress; + else + return false; + } + else if (ins.mMode == ASMIM_ZERO_PAGE_X || ins.mMode == ASMIM_ZERO_PAGE_Y) + { + return mMode == ASMIM_ZERO_PAGE || mMode == ASMIM_INDIRECT_X || mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_ZERO_PAGE_X || mMode == ASMIM_ZERO_PAGE_Y; + } + else if (ins.mMode == ASMIM_ABSOLUTE) + { + if (mMode == ASMIM_ABSOLUTE) + return mLinkerObject == ins.mLinkerObject && mAddress == ins.mAddress; + else if (mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y) + return mLinkerObject == ins.mLinkerObject; + else + return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X; + } + else if (ins.mMode == ASMIM_ABSOLUTE_X || ins.mMode == ASMIM_ABSOLUTE_Y) + { + if (mMode == ASMIM_ABSOLUTE || mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y) + return mLinkerObject == ins.mLinkerObject; + else + return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X; + } + else if (ins.mMode == ASMIM_INDIRECT_Y || ins.mMode == ASMIM_INDIRECT_X) + return mMode == ASMIM_ABSOLUTE || mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y || mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X; + else + return false; +} + bool NativeCodeInstruction::MayBeChangedOnAddress(const NativeCodeInstruction& ins) const { if (!ins.ChangesAddress()) @@ -9937,6 +9989,27 @@ bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc) } } #endif +#if 1 + if (mIns.Size() >= 1 && mIns.Last().mType == ASMIT_STA && mIns.Last().mMode == ASMIM_ZERO_PAGE && mTrueJump && mFalseJump) + { + const NativeCodeInstruction& ins(mIns.Last()); + + if (mTrueJump->mEntryRequiredRegs[ins.mAddress] && !mFalseJump->mEntryRequiredRegs[ins.mAddress] && mTrueJump->mEntryBlocks.Size() == 1) + { + mTrueJump->mIns.Insert(0, ins); + mIns.Remove(mIns.Size() - 1); + mTrueJump->mEntryRequiredRegs += CPU_REG_A; + changed = true; + } + else if (mFalseJump->mEntryRequiredRegs[ins.mAddress] && !mTrueJump->mEntryRequiredRegs[ins.mAddress] && mFalseJump->mEntryBlocks.Size() == 1) + { + mFalseJump->mIns.Insert(0, ins); + mIns.Remove(mIns.Size() - 1); + mFalseJump->mEntryRequiredRegs += CPU_REG_A; + changed = true; + } + } +#endif #if 1 if (mTrueJump && mFalseJump && !mTrueJump->mFalseJump && !mFalseJump->mFalseJump && mTrueJump->mTrueJump == mFalseJump->mTrueJump) { @@ -10113,10 +10186,10 @@ bool NativeCodeBasicBlock::CheckSingleUseGlobalLoad(int reg, int at, const Nativ { if (!mPatched) { - mPatched = true; - if (at == 0) { + mPatched = true; + if (!mEntryRequiredRegs[reg]) return true; @@ -11501,9 +11574,11 @@ bool NativeCodeBasicBlock::MoveAbsoluteLoadStoreUp(int at) } if (mIns[j].ChangesZeroPage(mIns[at].mAddress)) return false; - if (mIns[j].ChangesGlobalMemory()) + if (mIns[j].MayBeSameAddress(mIns[at + 1])) return false; - if (mIns[j].SameEffectiveAddress(mIns[at + 1])) + if (mIns[at + 1].mMode == ASMIM_ABSOLUTE_X && mIns[j].ChangesXReg()) + return false; + if (mIns[at + 1].mMode == ASMIM_ABSOLUTE_Y && mIns[j].ChangesYReg()) return false; j--; @@ -14260,7 +14335,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass #if 1 // move load (),y store zp down to potential user - for (int i = 2; i + 2 < mIns.Size(); i++) + for (int i = 2; i + 1 < mIns.Size(); i++) { if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_INDIRECT_Y && mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z))) { @@ -14277,7 +14352,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass for (int i = 2; i + 1 < mIns.Size(); i++) { - if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ABSOLUTE && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z))) + if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mType == ASMIT_STA && + (mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ABSOLUTE_X || mIns[i + 1].mMode == ASMIM_ABSOLUTE_Y) && + !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z))) { if (MoveAbsoluteLoadStoreUp(i)) changed = true; diff --git a/oscar64/NativeCodeGenerator.h b/oscar64/NativeCodeGenerator.h index 49b03a6..c1c5e72 100644 --- a/oscar64/NativeCodeGenerator.h +++ b/oscar64/NativeCodeGenerator.h @@ -106,6 +106,7 @@ public: bool ChangesGlobalMemory(void) const; bool SameEffectiveAddress(const NativeCodeInstruction& ins) const; bool MayBeChangedOnAddress(const NativeCodeInstruction& ins) const; + bool MayBeSameAddress(const NativeCodeInstruction& ins) const; bool IsSame(const NativeCodeInstruction& ins) const; bool IsCommutative(void) const; bool IsShift(void) const; diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index cc3dbad..8935822 100644 --- a/oscar64/oscar64.cpp +++ b/oscar64/oscar64.cpp @@ -73,7 +73,7 @@ int main2(int argc, const char** argv) #else strcpy(strProductName, "oscar64"); - strcpy(strProductVersion, "1.4.98"); + strcpy(strProductVersion, "1.4.99"); #ifdef __APPLE__ uint32_t length = sizeof(basePath); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index 7566a87..a63f92a 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,4,98,0 - PRODUCTVERSION 1,4,98,0 + FILEVERSION 1,4,99,0 + PRODUCTVERSION 1,4,99,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "oscar64" VALUE "FileDescription", "oscar64 compiler" - VALUE "FileVersion", "1.4.98.0" + VALUE "FileVersion", "1.4.99.0" VALUE "InternalName", "oscar64.exe" VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "OriginalFilename", "oscar64.exe" VALUE "ProductName", "oscar64" - VALUE "ProductVersion", "1.4.98.0" + VALUE "ProductVersion", "1.4.99.0" END END BLOCK "VarFileInfo" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index 2321e7d..5726d4f 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -34,12 +34,6 @@ } "Entry" { - "MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_04ABABC55200450383686DD782DD1548" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -64,6 +58,12 @@ } "Entry" { + "MsmKey" = "8:_0CC2E11595B34DF0A003DF534A5AADF5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -154,12 +154,6 @@ } "Entry" { - "MsmKey" = "8:_326B44043E3720E0A341FB5627DA8873" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -172,12 +166,6 @@ } "Entry" { - "MsmKey" = "8:_36B4A1247BFCE001E1BAE7560E9CFEEA" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -250,12 +238,6 @@ } "Entry" { - "MsmKey" = "8:_458189403F0009BC49371204B74F3BD3" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -274,6 +256,12 @@ } "Entry" { + "MsmKey" = "8:_4CAC4169D7CC4A2099042927E32B2184" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_539501D7FC4941B8AEE943A2D5C74703" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -322,6 +310,12 @@ } "Entry" { + "MsmKey" = "8:_652D33F4F54F4974AA6C4CD23A323FD1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_67C8F824E02B4211B315AB32AB7ABBB1" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -358,8 +352,8 @@ } "Entry" { - "MsmKey" = "8:_749A2BA18335F50EB53CCE7029861FBC" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmKey" = "8:_7393641DDDD742BCA845F192181E1294" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -418,8 +412,8 @@ } "Entry" { - "MsmKey" = "8:_8667075410229C38BF63AC1CC776055E" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" + "MsmKey" = "8:_814F6BFC9788449DB259F99386D39AFD" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -586,6 +580,12 @@ } "Entry" { + "MsmKey" = "8:_B59AF91A39B749DF9E6B95CD35C5C6AC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_B85448D515F0487FB6845119AE346F1D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -694,6 +694,12 @@ } "Entry" { + "MsmKey" = "8:_D2CCF52F2336415EAD896A2C5410D5E8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -718,12 +724,6 @@ } "Entry" { - "MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_DEADBEA270134B77800770802B21859C" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -784,12 +784,6 @@ } "Entry" { - "MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -820,12 +814,6 @@ } "Entry" { - "MsmKey" = "8:_F20F5618C7576D758C01D89C87469AF8" - "OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -1001,26 +989,6 @@ "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" @@ -1101,6 +1069,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0CC2E11595B34DF0A003DF534A5AADF5" + { + "SourcePath" = "8:..\\include\\audio\\sidfx.h" + "TargetName" = "8:sidfx.h" + "Tag" = "8:" + "Folder" = "8:_A4C8078BC7A74CCABB1050E80BC79950" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C" { "SourcePath" = "8:..\\include\\crt.c" @@ -1401,26 +1389,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_326B44043E3720E0A341FB5627DA8873" - { - "SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll" - "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF" { "SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c" @@ -1461,26 +1429,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36B4A1247BFCE001E1BAE7560E9CFEEA" - { - "SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll" - "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4" { "SourcePath" = "8:..\\samples\\memmap\\easyflash.c" @@ -1721,26 +1669,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_458189403F0009BC49371204B74F3BD3" - { - "SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll" - "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4" { "SourcePath" = "8:..\\samples\\memmap\\largemem.c" @@ -1801,6 +1729,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4CAC4169D7CC4A2099042927E32B2184" + { + "SourcePath" = "8:..\\samples\\resources\\hscrollshmupsprites.bin" + "TargetName" = "8:hscrollshmupsprites.bin" + "Tag" = "8:" + "Folder" = "8:_758C6547998745659548D0656D380FEA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_539501D7FC4941B8AEE943A2D5C74703" { "SourcePath" = "8:..\\samples\\games\\snake.c" @@ -1961,6 +1909,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_652D33F4F54F4974AA6C4CD23A323FD1" + { + "SourcePath" = "8:..\\samples\\resources\\hscrollshmuptiles.bin" + "TargetName" = "8:hscrollshmuptiles.bin" + "Tag" = "8:" + "Folder" = "8:_758C6547998745659548D0656D380FEA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67C8F824E02B4211B315AB32AB7ABBB1" { "SourcePath" = "8:..\\samples\\games\\breakout.c" @@ -2081,12 +2049,12 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749A2BA18335F50EB53CCE7029861FBC" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7393641DDDD742BCA845F192181E1294" { - "SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll" + "SourcePath" = "8:..\\samples\\games\\hscrollshmup.c" + "TargetName" = "8:hscrollshmup.c" "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "Folder" = "8:_BC04C0DDE264410096618981E4E890DA" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -2098,7 +2066,7 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" + "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF" @@ -2281,12 +2249,12 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8667075410229C38BF63AC1CC776055E" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_814F6BFC9788449DB259F99386D39AFD" { - "SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll" + "SourcePath" = "8:..\\include\\audio\\sidfx.c" + "TargetName" = "8:sidfx.c" "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" + "Folder" = "8:_A4C8078BC7A74CCABB1050E80BC79950" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -2298,7 +2266,7 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" + "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D" @@ -2841,6 +2809,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B59AF91A39B749DF9E6B95CD35C5C6AC" + { + "SourcePath" = "8:..\\samples\\resources\\hscrollshmupmap.bin" + "TargetName" = "8:hscrollshmupmap.bin" + "Tag" = "8:" + "Folder" = "8:_758C6547998745659548D0656D380FEA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B85448D515F0487FB6845119AE346F1D" { "SourcePath" = "8:..\\samples\\resources\\landersprites.bin" @@ -3201,6 +3189,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D2CCF52F2336415EAD896A2C5410D5E8" + { + "SourcePath" = "8:..\\samples\\resources\\hscrollshmupchars.bin" + "TargetName" = "8:hscrollshmupchars.bin" + "Tag" = "8:" + "Folder" = "8:_758C6547998745659548D0656D380FEA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7" { "SourcePath" = "8:..\\samples\\games\\maze3d.c" @@ -3281,26 +3289,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DD5A4DD822437085CD584319732F2D4D" - { - "SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll" - "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEADBEA270134B77800770802B21859C" { "SourcePath" = "8:..\\samples\\games\\connectfour.c" @@ -3501,26 +3489,6 @@ "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" @@ -3621,26 +3589,6 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F20F5618C7576D758C01D89C87469AF8" - { - "SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll" - "TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll" - "Tag" = "8:" - "Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA" { "SourcePath" = "8:..\\include\\c64\\charwin.h" @@ -3955,6 +3903,17 @@ { } } + "{9EF0B969-E518-4E46-987F-47570745A589}:_A4C8078BC7A74CCABB1050E80BC79950" + { + "Name" = "8:audio" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_D9D33FD9864B40ECADCC2496B1BA18F8" + "Folders" + { + } + } "{9EF0B969-E518-4E46-987F-47570745A589}:_E0C7A8689A4144D0842BCEDA85A07B5D" { "Name" = "8:gfx" @@ -3986,15 +3945,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:oscar64" - "ProductCode" = "8:{45230711-622D-4FA7-BB9C-5357A3B7B1D0}" - "PackageCode" = "8:{5E1C7EF9-3CBE-4341-9696-4E6823EB2A83}" + "ProductCode" = "8:{39622A78-2972-4EF3-9E08-A2E1ECE24245}" + "PackageCode" = "8:{0520CCC0-4961-4AC1-AABA-1471E1EC2D80}" "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.4.98" + "ProductVersion" = "8:1.4.99" "Manufacturer" = "8:oscar64" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" diff --git a/samples/games/build.sh b/samples/games/build.sh index 3306af4..56b0821 100644 --- a/samples/games/build.sh +++ b/samples/games/build.sh @@ -5,4 +5,5 @@ ../../bin/oscar64 missile.c -O3 -n ../../bin/oscar64 breakout.c -n ../../bin/oscar64 connectfour.c -n +../../bin/oscar64 hscrollshmup.c -O2 -n diff --git a/samples/games/hscrollshmup.c b/samples/games/hscrollshmup.c index 67fb800..534660d 100644 --- a/samples/games/hscrollshmup.c +++ b/samples/games/hscrollshmup.c @@ -4,29 +4,35 @@ #include #include #include +#include