61 lines
13 KiB
HTML
61 lines
13 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>C64 BASIC Collection</title>
|
|
<style>
|
|
:root { color-scheme: dark; font-family: system-ui, sans-serif; }
|
|
body { margin: 0; background: #18152d; color: #f7f3ff; text-align: center; }
|
|
header { padding: 1rem; }
|
|
h1 { margin: 0 0 .25rem; font-size: 1.4rem; }
|
|
p { margin: .25rem; color: #cbc5e8; }
|
|
#game { width: min(100vw, 960px); height: min(75vw, 720px); margin: auto; }
|
|
#error { max-width: 42rem; margin: 3rem auto; padding: 1rem; color: #ffb4ab; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1 id="title">C64 BASIC Collection</h1>
|
|
<p>Click the emulator to enable keyboard input and sound.</p>
|
|
</header>
|
|
<main id="game"></main>
|
|
<p id="error" hidden></p>
|
|
<script>
|
|
(() => {
|
|
const programs = {"code-breaker":{"title":"Code Breaker","data":"AQgrCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgIENPREUgQlJFQUtFUiI6mQCACBQAmSAiR1VFU1MgVEhFIEZPVVIgRElGRkVSRU5UIERJR0lUUy4iOpkgIlJJR0hUIFBMQUNFID0gSElULCBXUk9ORyBQTEFDRSA9IE5FQVIiOpkAqAgeAJkgIlBSRVNTIEFOWSBLRVkiOqEgQSQ6iyBBJLIiIiCnIDMwALUIIwBSsrsoq1RJKQDUCCgAhiBDKDQpLEcoNCksVSg5KTqBIEmyMSCkIDQA9wgyAEMoSSmytSi7KDEprDEwKTqLIFUoQyhJKSkgpyA1MAAQCTwAVShDKEkpKbIxOoI6mSDHKDE0NykAQAlGAIEgVLIxIKQgMTA6mSAiR1VFU1MiO1Q7Ik9GIDEwIChPUiBRKSI7OoUgRyQAUwlQAIsgRySyIlEiIKcgMTkwAIAJWgCLIMMoRyQps7E0IKcgmSAiRU5URVIgRk9VUiBESUdJVFMuIjqJIDcwAM0JZACBIEmyMSCkIDQ6RyhJKbLGKMooRyQsSSwxKSmrNDg6iyBHKEkpszAgsCBHKEkpsTkgpyCZICJESUdJVFMgT05MWS4iOokgNzAA2wluAII6SLIwOk6yMAD9CXgAgSBJsjEgpCA0OosgRyhJKbJDKEkpIKcgSLJIqjEAJgqCAIEgSrIxIKQgNDqLIEmzsUogryBHKEkpskMoSikgpyBOsk6qMQBGCowAgiBKLEk6mSBIOyJISVQgIjtOOyJORUFSIjqZAHgKlgCLIEiyNCCnIJkgIkNPREUgQlJPS0VOIElOIjtUOyJHVUVTU0VTISI6iSAxODAAfgqgAIIAqgqqAJkgIlRIRSBDT0RFIFdBUyI7OoEgSbIxIKQgNDqZIEMoSSk7OoI6mQDFCrQAmTqZICJSPVJFUExBWSAgUT1RVUlUIgDbCr4AoSBBJDqLIEEksiJSIiCnIIoA7wrIAIsgQSSzsSJRIiCnIDE5MAD+CtIAmSDHKDE0Nyk6gAAAAA=="},"lunar-lander":{"title":"Lunar Lander","data":"AQgrCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgIExVTkFSIExBTkRFUiI6mQCCCBQAmSAiRUFDSCBUVVJOIENIT09TRSBCVVJOIDAgVE8gOS4iOpkgIkxBTkQgQVQgU1BFRUQgMyBPUiBMRVNTLiI6mTqZICJQUkVTUyBBTlkgS0VZIgCYCB4AoSBBJDqLIEEksiIiIKcgMzAArwgoAEiyMTAwOlayMDpGsjUwOlSyMAD3CDIAmSDHKDE0Nyk6mSAiQUxUSVRVREUiO7UoSCk6mSAiU1BFRUQgICAiO7UoVqwxMCmtMTA6mSAiRlVFTCAgICAiO0Y6mQAeCTwAmSAiQlVSTiAoMC05LCBPUiAtMSBUTyBRVUlUKSI7OoUgQgAvCUYAiyBCsqsxIKcgMTgwAF4JUACLIEKzMCCwIEKxOSCwIEKxRiCnIJkgIklOVkFMSUQgQlVSTi4iOokgNjAAgAlaAEayRqtCOlayVqoyq0KsLjQ1OkiySKtWOlSyVKoxAJ4JZACBIEmyMSCkIDEyOpk6mSCjMTkpOyIqIjqCAK0JbgCLIEixMCCnIDUwAN4JeACZIMcoMTQ3KTqZICJUT1VDSERPV04gU1BFRUQiO7UotihWKawxMCmtMTA6mQAUCoIAiyC2KFYps7IzIKcgmSAiUEVSRkVDVCBMQU5ESU5HLCBDT01NQU5ERVIhIjqJIDE3MABPCowAiyC2KFYps7I2IKcgmSAiUk9VR0ggTEFORElORy4gVEhFIENSRVcgSVMgU0FGRS4iOokgMTcwAHQKlgCZICJDUkFTSCEgQSBORVcgQ1JBVEVSIEFQUEVBUlMuIgCPCqoAmTqZICJSPVJFUExBWSAgUT1RVUlUIgClCrQAoSBBJDqLIEEksiJSIiCnIIoAuQq+AIsgQSSzsSJRIiCnIDE4MADICsgAmSDHKDE0Nyk6gAAAAA=="},"memory-matrix":{"title":"Memory Matrix","data":"AQgrCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgTUVNT1JZIE1BVFJJWCI6mQB7CBQAmSAiV0FUQ0ggVEhFIE5VTUJFUlMsIFRIRU4gUkVQRUFUIFRIRU0uIjqZICJUSEUgUEFUVEVSTiBHUk9XUyBFVkVSWSBST1VORC4iAJMIGQCZOpkgIlBSRVNTIEFOWSBLRVkiAKkIHgChIEEkOosgQSSyIiIgpyAzMAC2CCMAUrK7KKtUSSkA5AgoAIYgUygzMCk6TLIxOoEgSbIxIKQgMzA6UyhJKbK1KLsoMSmsNCmqMTqCAA8JMgCZIMcoMTQ3KTqZICJST1VORCI7TDqBIEmyMSCkIEw6jSAxMzA6ggAqCTwAgSBEsjEgpCAyNTA6gjqZIMcoMTQ3KQBWCUYAgSBJsjEgpCBMOpkgIlNURVAiO0k7IiAoMS00LCBRIFFVSVRTKSI7AGwJUAChIEEkOosgQSSyIiIgpyA4MAB/CVoAiyBBJLIiUSIgpyAxODAAsAlkAIsgxShBJCmzsVMoSSkgpyCZOpkgIldST05HISBTQ09SRSI7TKsxOokgMTcwAM4JbgCZIEEkOoI6TLJMqjE6iyBMs7IzMCCnIDUwAPsJeACZICJBTUFaSU5HISBZT1UgQ09NUExFVEVEIEFMTCAzMC4iOokgMTcwAA4KggCZIMcoMTQ3KTqZOpk6mQA/CowAiyBTKEkpsjEgpyCZICIgICAgICAgIDExMTEiOpkgIiAgICAgICAgMTExMSIAkAqRAIsgUyhJKbIyIKcgmSAiICAgICAgICAgICAgICAgICAgICAgICAgMjIyMiI6mSAiICAgICAgICAgICAgICAgICAgICAgICAgMjIyMiIAxQqWAIsgUyhJKbIzIKcgmTqZOpkgIiAgICAgICAgMzMzMyI6mSAiICAgICAgICAzMzMzIgAaC5sAiyBTKEkpsjQgpyCZOpk6mSAiICAgICAgICAgICAgICAgICAgICAgICAgNDQ0NCI6mSAiICAgICAgICAgICAgICAgICAgICAgICAgNDQ0NCIARAugAIEgRLIxIKQgMjIwOoI6mSDHKDE0Nyk6gSBEsjEgpCA2MDqCOo4AXwuqAJk6mSAiUj1SRVBMQVkgIFE9UVVJVCIAdQu0AKEgQSQ6iyBBJLIiUiIgpyCKAIkLvgCLIEEks7EiUSIgpyAxODAAmAvIAJkgxygxNDcpOoAAAAA="},"meteor-dodge":{"title":"Meteor Dodge","data":"AQgiCAoAmSDHKDE0Nyk6lyA1MzI4MCwwOpcgNTMyODEsMABeCBQAmSAiICAgICAgICBNRVRFT1IgRE9ER0UiOpk6mSAiIEE9TEVGVCAgRD1SSUdIVCAgUT1RVUlUIgB3CBkAmTqZICIgUFJFU1MgQU5ZIEtFWSIAjQgeAKEgQSQ6iyBBJLIiIiCnIDMwAJoIIwBSsrsoq1RJKQDSCCgAhiBYKDUpLFkoNSk6gSBJsjEgpCA1OlgoSSmytSi7KDEprDM4KaoxOlkoSSmyq0msNDqCAOwIMgBQsjIwOlOyMDpMsjM6mSDHKDE0NykADAk8AKEgQSQ6iyBBJLIiQSIgryBQsTEgpyBQslCrMQAoCUYAiyBBJLIiRCIgryBQszM4IKcgULJQqjEAOwlQAIsgQSSyIlEiIKcgMTkwAGwJWgCBIEmyMSCkIDU6iyBZKEkpsbIwIKcglyAxMDI0qlkoSSmsNDCqWChJKSwzMgCnCWQAWShJKbJZKEkpqjE6iyBZKEkpsTIyIKcgWShJKbIwOlgoSSmytSi7KDEprDM4KaoxOlOyU6oxAOQJbgCLIFkoSSmyMjIgryC2KFgoSSmrUCmzMiCnIEyyTKsxOlkoSSmyMDpYKEkpsrUouygxKawzOCmqMQAiCngAiyBZKEkpsbIwIKcglyAxMDI0qlkoSSmsNDCqWChJKSw0MjqXIDU1Mjk2qlkoSSmsNDCqWChJKSw4ACgKfQCCAE8KggCXIDEwMjSqMjKsNDCqUCwxOpcgNTUyOTaqMjKsNDCqUCwxAHoKjACZIMcoMTkpOyIgU0NPUkUiO1M7IiAgU0hJRUxEUyI7TDsiICAgIgCdCpYAgSBEsjEgpCA1NTqCOpcgMTAyNKoyMqw0MKpQLDMyAKwKoACLIEyxMCCnIDYwAM4KqgCZIMcoMTQ3KTqZICJGSU5BTCBTQ09SRToiO1M6mQDnCrQAmSAiUj1SRVBMQVkgIFE9UVVJVCIA/Qq+AKEgQSQ6iyBBJLIiUiIgpyCKABELyACLIEEks7EiUSIgpyAxOTAANQvSAJcgNTMyODAsMTQ6lyA1MzI4MSw2OpkgxygxNDcpOoAAAAA="},"music-box":{"title":"Music Box","data":"AQgqCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgICAgTVVTSUMgQk9YIjqZAHoIFACZICJQTEFZIE5PVEVTIFdJVEggQSBTIEQgRiBHIEggSiBLIjqZICIxPVNRVUFSRSAyPVNBVyAzPVRSSUFOR0xFICBRPVFVSVQiOpkAtwgeAFOyNTQyNzI6gSBJsjAgpCAyNDqXIFOqSSwwOoI6lyBTqjUsOTqXIFOqNiwyNDA6lyBTqjI0LDE1AO8IKABXsjY1OoYgRig4KTpGKDEpsjQyOTE6RigyKbI0ODE3OkYoMymyNTQwNzpGKDQpsjU3MzAAGwktAEYoNSmyNjQzNDpGKDYpsjcyMTc6Rig3KbI4MTAzOkYoOCmyODU4MQAxCTIAoSBBJDqLIEEksiIiIKcgNTAARAk8AIsgQSSyIlEiIKcgMTYwAG0JRgCLIEEksiIxIiCnIFeyNjU6mSAiU1FVQVJFIFdBVkUiOokgNTAAkwlQAIsgQSSyIjIiIKcgV7IzMzqZICJTQVcgV0FWRSI6iSA1MAC+CVoAiyBBJLIiMyIgpyBXsjE3OpkgIlRSSUFOR0xFIFdBVkUiOokgNTAA1QlkAE6yMDqLIEEksiJBIiCnIE6yMQDoCWkAiyBBJLIiUyIgpyBOsjIA+wluAIsgQSSyIkQiIKcgTrIzAA4KcwCLIEEksiJGIiCnIE6yNAAhCngAiyBBJLIiRyIgpyBOsjUANAp9AIsgQSSyIkgiIKcgTrI2AEcKggCLIEEksiJKIiCnIE6yNwBaCocAiyBBJLIiSyIgpyBOsjgAaQqMAIsgTrIwIKcgNTAAoAqRAJcgUyxGKE4pq7UoRihOKa0yNTYprDI1NjqXIFOqMSy1KEYoTimtMjU2KTqXIFOqNCxXAMAKlgCBIESyMSCkIDgwOoI6lyBTqjQsV6sxOokgNTAA5AqgAIEgSbIwIKQgMjQ6lyBTqkksMDqCOpkgxygxNDcpOoAAAAA="},"pixel-painter":{"title":"Pixel Painter","data":"AQgjCAoAmSDHKDE0Nyk6lyA1MzI4MCwxMTqXIDUzMjgxLDAAewgUAJkgIlBJWEVMIFBBSU5URVIgLSBDVVJTT1JTIE1PVkUsIFNQQUNFIERSQVdTIjqZICJDPUNMRUFSICBRPVFVSVQiOpkgIlBSRVNTIEFOWSBLRVkiAJEIHgChIEEkOosgQSSyIiIgpyAzMACsCCgAmSDHKDE0Nyk6WLIyMDpZsjEyOkSyMQDeCDIAULIxMDI0qlmsNDCqWDpPssIoUCk6lyBQLDE2MDqXIDU1Mjk2qlmsNDCqWCwxAPQIPAChIEEkOosgQSSyIiIgpyA2MAAICUYAlyBQLE86TliyWDpOWbJZACcJUACLIMYoQSQpsjE0NSCvIFmxMCCnIE5ZslmrMQBGCVoAiyDGKEEkKbIxNyCvIFmzMjQgpyBOWbJZqjEAZQlkAIsgxihBJCmyMTU3IK8gWLEwIKcgTliyWKsxAIQJbgCLIMYoQSQpsjI5IK8gWLMzOSCnIE5YsliqMQCnCXgAiyBBJLIiICIgpyCXIFAsMTYwOk+yMTYwOokgMTUwAMkJggCLIEEksiJDIiCnIJkgxygxNDcpOk+yMzI6iSA1MADcCYwAiyBBJLIiUSIgpyAxODAA7wmWAFiyTlg6WbJOWTqJIDUwABMKtACXIDUzMjgwLDE0OpcgNTMyODEsNjqZIMcoMTQ3KTqAAAAA"},"robot-maze":{"title":"Robot Maze","data":"AQgqCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgICBST0JPVCBNQVpFIjqZAG8IFACZICJSRUFDSCBFLiBNT1ZFIFdJVEggVyBBIFMgRC4iOpkgIlRIRSBNQVpFIENIQU5HRVMgRVZFUlkgR0FNRS4iAIcIGQCZOpkgIlBSRVNTIEFOWSBLRVkiAJ0IHgChIEEkOosgQSSyIiIgpyAzMACqCCMAUrK7KKtUSSkA3ggoAIYgTSgxOSwxOSk6gSBZsjEgpCAxOTqBIFiyMSCkIDE5Ok0oWCxZKbIxOoIgWCxZABUJMgBYsjI6WbIyOk0oWCxZKbIwOoEgSbIxIKQgMTYwOkSytSi7KDEprDQpOk5Yslg6TlmyWQAoCTwAiyBEsjAgpyBOWLJYqjEAOwlGAIsgRLIxIKcgTliyWKsxAE4JUACLIESyMiCnIE5ZslmqMQBhCVoAiyBEsjMgpyBOWbJZqzEAiAlkAIsgTlizMiCwIE5YsTE4ILAgTlmzMiCwIE5ZsTE4IKcgNTAAyQluAFiyTlg6WbJOWTpNKFgsWSmyMDqCOoEgSbIyIKQgMTg6TShJLDIpsjA6TSgxOCxJKbIwOoI6WLIyOlmyMgDsCXgAmSDHKDE0Nyk6gSBKsjEgpCAxOTqBIEmyMSCkIDE5AAsKggCLIEmyWCCvIEqyWSCnIJkgIlIiOzqJIDE2MAAsCowAiyBJsjE4IK8gSrIxOCCnIJkgIkUiOzqJIDE2MABICpYAiyBNKEksSikgpyCZICIjIjs6iSAxNjAAUwqbAJkgIiAiOwB0CqAAgjqZOoI6mSAiV0FTRCBNT1ZFLCBRIFFVSVRTIgCLCqoAoSBBJDqLIEEksiIiIKcgMTcwAKsKtABOWLJYOk5Zslk6iyBBJLIiVyIgpyBOWbJZqzEAwQq+AIsgQSSyIlMiIKcgTlmyWaoxANcKyACLIEEksiJBIiCnIE5YslirMQDtCtIAiyBBJLIiRCIgpyBOWLJYqjEAAAvcAIsgQSSyIlEiIKcgMjgwAB0L5gCLIE0oTlgsTlkpsjAgpyBYsk5YOlmyTlkANwvwAIsgWLOxMTggsCBZs7ExOCCnIDEyMABkC/oAmSDHKDE0Nyk6mSAiVEhFIFJPQk9UIEZPVU5EIFRIRSBFWElUISI6mQB9CwQBmSAiUj1SRVBMQVkgIFE9UVVJVCIAkwsYAaEgQSQ6iyBBJLIiUiIgpyCKAKcLIgGLIEEks7EiUSIgpyAyODAAtgssAZkgxygxNDcpOoAAAAA="},"starfield":{"title":"Starfield","data":"AQgiCAoAmSDHKDE0Nyk6lyA1MzI4MCwwOpcgNTMyODEsMABnCBQAmSAiICAgICAgICAgICAgU1RBUkZJRUxEIjqZOpkgIjE9U0xPVyAgMj1NRURJVU0gIDM9RkFTVCAgUT1RVUlUIgB/CBkAmTqZICJQUkVTUyBBTlkgS0VZIgCVCB4AoSBBJDqLIEEksiIiIKcgMzAAoggjAFKyuyirVEkpANUIKACGIFgoMzApLFkoMzApLFooMzApOoEgSbIxIKQgMzA6WChJKbK1KLsoMSmsNDApAAkJLQBZKEkpsrUouygxKawyNCk6WihJKbK1KLsoMSmsMymqMTqCOlayMjqZIMcoMTQ3KQAzCTIAgSBJsjEgpCAzMDpQsjEwMjSqWShJKaw0MKpYKEkpOpcgUCwzMgB8CTwAWChJKbJYKEkpqlooSSmsVjqLIFgoSSmxMzkgpyBYKEkpsjA6WShJKbK1KLsoMSmsMjQpOlooSSmytSi7KDEprDMpqjEAuAlGAFCyMTAyNKpZKEkprDQwqlgoSSk6lyBQLDQ2OpcgNTUyOTaqWShJKaw0MKpYKEkpLFooSSmqMTAAvglQAIIA1glaAKEgQSQ6iyBBJLIiMSIgpyBWsjEA6QlkAIsgQSSyIjIiIKcgVrIyAPwJbgCLIEEksiIzIiCnIFayMwAPCngAiyBBJLOxIlEiIKcgNTAAMwqCAJcgNTMyODAsMTQ6lyA1MzI4MSw2OpkgxygxNDcpOoAAAAA="},"stock-trader":{"title":"Stock Trader","data":"AQgrCAoAmSDHKDE0Nyk6mSAiICAgICAgICAgIFNUT0NLIFRSQURFUiI6mQByCBQAmSAiTUFLRSBUSEUgTU9TVCBNT05FWSBJTiAyMCBEQVlTLiI6mSAiQj1CVVkgUz1TRUxMIFc9V0FJVCBRPVFVSVQiAIoIGQCZOpkgIlBSRVNTIEFOWSBLRVkiAKAIHgChIEEkOosgQSSyIiIgpyAzMACtCCMAUrK7KKtUSSkAzAgoAEOyMTAwMDpOsjA6ULI1MDqBIESyMSCkIDIwAO4IMgBQslCqtSi7KDEprDIxKasxMDqLIFCzNSCnIFCyNQApCTwAmSDHKDE0Nyk6mSAiREFZIjtEOyJPRiAyMCI6mSAiUFJJQ0UgJCI7UDqZICJDQVNIICAkIjtDAE0JQQCZICJTSEFSRVMgIjtOOpkgIlZBTFVFICQiO0OqTqxQAGYJRgCZOpkgIkIsIFMsIFcsIE9SIFE/IgB8CVAAoSBBJDqLIEEksiIiIKcgODAAjwlaAIsgQSSyIlEiIKcgMTgwAKIJZACLIEEksiJXIiCnIDE1MADpCW4AiyBBJLIiQiIgpyCZICJIT1cgTUFOWSI7OoUgUTqLIFGxsjAgryBRrFCzskMgpyBDskOrUaxQOk6yTqpROokgMTUwAC4KeACLIEEksiJTIiCnIJkgIkhPVyBNQU5ZIjs6hSBROosgUbGyMCCvIFGzsk4gpyBDskOqUaxQOk6yTqtROokgMTUwAF0KggCZICJUUkFERSBOT1QgUE9TU0lCTEUuIjqBIFSyMSCkIDUwMDqCOokgNzAAoAqWAII6Q7JDqk6sUDpOsjA6mSDHKDE0Nyk6mSAiTUFSS0VUIENMT1NFRC4iOpkgIkZJTkFMIFdFQUxUSCAkIjtDAMgKoACLIEOxsjE1MDAgpyCZICJXQUxMIFNUUkVFVCBMRUdFTkQhIgD1CqUAiyBDsbIxMDAwIK8gQ7MxNTAwIKcgmSAiQSBTT0xJRCBQUk9GSVQuIgAhC6oAiyBDszEwMDAgpyCZICJCRVRURVIgTFVDSyBORVhUIE1BUktFVC4iADwLrwCZOpkgIlI9UkVQTEFZICBRPVFVSVQiAFILtAChIEEkOosgQSSyIlIiIKcgigBmC74AiyBBJLOxIlEiIKcgMTgwAHULyACZIMcoMTQ3KTqAAAAA"},"submarine-hunt":{"title":"Submarine Hunt","data":"AQgrCAoAmSDHKDE0Nyk6mSAiICAgICAgICBTVUJNQVJJTkUgSFVOVCI6mQCACBQAmSAiVEhSRUUgU1VCUyBISURFIElOIEFOIDggQlkgOCBTRUEuIjqZICJFTlRFUiBST1csQ09MVU1OLiBZT1UgSEFWRSAxNSBTSE9UUy4iOpkAjQgZAFKyuyirVEkpAKsIHgCGIFMoOCw4KSxGKDgsOCk6gSBJsjEgpCAzANkIKABSsrUouygxKaw4KaoxOkOytSi7KDEprDgpqjE6iyBTKFIsQykgpyA0MADsCDIAUyhSLEMpsjE6gjpIsjAALQk8AIEgVLIxIKQgMTU6jSAxNTA6mSAiU0hPVCI7VDsiIFJPVyxDT0xVTU4gKDAsMCBRVUlUUykiOzqFIFIsQwBDCUYAiyBSsjAgryBDsjAgpyAyMTAAewlQAIsgUrMxILAgUrE4ILAgQ7MxILAgQ7E4IKcgmSAiT1VUU0lERSBUSEUgU0VBLiI6iSA2MACkCVoAiyBGKFIsQykgpyCZICJBTFJFQURZIENIRUNLRUQuIjqJIDYwANgJZABGKFIsQymyMTqLIFMoUixDKSCnIEiySKoxOpkgIkRJUkVDVCBISVQhIjqJIDEyMAD9CW4AmSAiTUlTUy4gU09OQVIgUkFOR0UiOzqNIDE5MDqZIEQAKQp4AIsgSLIzIKcgmSAiQUxMIFNVQk1BUklORVMgRk9VTkQhIjqJIDIwMABUCoIAgjqZICJPVVQgT0YgU0hPVFMuIFRIRSBGTEVFVCBFU0NBUEVELiIAXgqMAIkgMjAwAJUKlgCZIMcoMTQ3KTqZICIgICAxIDIgMyA0IDUgNiA3IDgiOoEgWbIxIKQgODqZIFk7IiAiOwC4CqAAgSBYsjEgpCA4OosgRihZLFgpsjAgpyCZICIuICI7ANwKqgCLIEYoWSxYKbIxIK8gUyhZLFgpsjAgpyCZICJPICI7AAALtACLIEYoWSxYKbIxIK8gUyhZLFgpsjEgpyCZICJYICI7ABwLuQCCOpk6gjqZICJTVUJTIjtIOyIvMyI6jgBsC74ARLI5OoEgWbIxIKQgODqBIFiyMSCkIDg6iyBTKFksWCmyMSCvIEYoWSxYKbIwIKcgUbK2KFmrUimqtihYq0MpOosgUbNEIKcgRLJRAHgLwwCCIFgsWTqOAJMLyACZOpkgIlI9UkVQTEFZICBRPVFVSVQiAKkL0gChIEEkOosgQSSyIlIiIKcgigC9C9wAiyBBJLOxIlEiIKcgMjEwAMwL5gCZIMcoMTQ3KTqAAAAA"}};
|
|
const id = decodeURIComponent(location.hash.slice(1));
|
|
const entry = programs[id];
|
|
if (!entry) {
|
|
const error = document.getElementById('error');
|
|
error.hidden = false;
|
|
error.textContent = 'Unknown program. Open this runner from a Run program link in the README.';
|
|
document.getElementById('game').hidden = true;
|
|
return;
|
|
}
|
|
|
|
const bytes = Uint8Array.from(atob(entry.data), character => character.charCodeAt(0));
|
|
const file = new File([bytes], `${id}.prg`, { type: 'application/octet-stream' });
|
|
document.title = `${entry.title} — C64 BASIC Collection`;
|
|
document.getElementById('title').textContent = entry.title;
|
|
|
|
window.EJS_player = '#game';
|
|
window.EJS_core = 'vice_x64sc';
|
|
window.EJS_gameUrl = file;
|
|
window.EJS_gameName = id;
|
|
window.EJS_pathtodata = 'https://cdn.emulatorjs.org/stable/data/';
|
|
window.EJS_startOnLoaded = true;
|
|
window.EJS_language = 'en-US';
|
|
|
|
const loader = document.createElement('script');
|
|
loader.src = `${window.EJS_pathtodata}loader.js`;
|
|
loader.onerror = () => {
|
|
const error = document.getElementById('error');
|
|
error.hidden = false;
|
|
error.textContent = 'The VICE WebAssembly emulator could not be downloaded. Check your connection and try again.';
|
|
};
|
|
document.body.appendChild(loader);
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|