mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 19:26:43 +01:00
1 line
9.4 KiB
HTML
1 line
9.4 KiB
HTML
<!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>body,canvas,html{margin:0;padding:0}html{background-color:#202024;color:#808070;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body,html{height:100%}body{display:grid;grid-template-rows:1fr 0fr}#centered{align-self:center;justify-self:center}.footer{color:#202420}a{color:#303630}a:hover{color:#405040}#screen{background-color:#202428;border:4px solid #303040;box-shadow:5px 5px 20px #000;cursor:none;height:240px;image-rendering:pixelated;width:320px}#message,#screen{margin-bottom:8px}.error{color:#e04030}button{background-color:#303440;border:1px solid #404040;border-radius:4px;color:#808070;font-family:inherit;padding:4px}button:hover{background-color:#202010}button:active{background-color:#504450}@media (min-width:680px) and (min-height:560px){#screen{height:480px;width:640px}}@media (min-width:1000px) and (min-height:800px){#screen{height:720px;width:960px}}</style></head><body> <div id="centered"> <canvas id="screen" width="320" height="240"></canvas> <div id="message"></div> <button id="cartButton">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function A(A){return A&&A.__esModule?A.default:A}function e(A,e){let t=A?`${A} bytes`:"Insert cart";e&&(t+=` - <span class="error">${e.replaceAll("<","<")}</span>`),document.getElementById("message").innerHTML=t}let t,a,B=document.getElementById("screen"),n=B.getContext("2d"),s=n.createImageData(320,240),r=A=>new Uint8Array(A),g=A=>new Uint32Array(A),i=0,o=A=>{let e,t="keydown"==A.type;switch(A.code){case"ArrowUp":e=1;break;case"ArrowDown":e=2;break;case"ArrowLeft":e=4;break;case"ArrowRight":e=8;break;case"KeyZ":e=16;break;case"KeyX":e=32;break;case"KeyA":e=64;break;case"KeyS":e=128;break;case"KeyR":t&&Q(a)}t?i|=e:i&=~e};async function Q(o,I){t&&(t(),t=null);let E=o.byteLength;if(e(E),0==E)return;a=o;let f=window.location.pathname;if(E<=1024&&!I){let A="";for(let e of r(o))A+=String.fromCharCode(e);f+="#"+btoa(A),f!=window.location.pathname+window.location.hash&&history.pushState(null,null,f)}B.width=B.width;try{let B,I=new WebAssembly.Memory({initial:4,maximum:4}),f=r(I.buffer),l={env:{memory:I}},c=A=>{if(0!=r(A)[0]){f.set(r(A));let e=B.exports.load_uw8(A.byteLength);A=new ArrayBuffer(e),r(A).set(f.slice(0,e))}return A},w=async A=>(await WebAssembly.instantiate(A,l)).instance,C=async A=>w(c(await(await fetch(A)).arrayBuffer()));B=await C(A("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC9IDAQBBAAvLA6eP%2Fw9olPgPXPcNZ6GH4sK0YVAeGZhY8FzSxDxK%2Fvv32QOMdeZ4QLHNI9NAW9hr%2B1lpXqgkXw%2FZJ2xueSKrTWbsgq9bIaIhjByG5VC2EE%2Bp0mUsRwQzi7oRDC02b4ywHappXJZHhDLuZKhnjylLE4X%2F9%2FZ66bwxYl1h%2BNAL%2BQh0zt3iSqNerI7l0QMOySt%2FPOFO3hXwdaMgxln646dVGVLPhHQbMoREgNzLIYMv4gBUU6Cr%2BR0QYi3tDAXJ4SoSxKCyLsv7cfb5Cl%2BYC5Jus5xElZgiDlIIHBqFDldTRQ5nBJl5es0ZDmEl3WiHmM1UA8QeePxqNrYic7ifdP3EBFW5S6xR2jJ3ck%2BXX1DdwcNjNkIkxbPKNFOeqWZ%2FJ72Bz14fhYzfrX%2FfCvJQ2mBNrPbSIjF%2B6V1RUKuyzvSVyFXaomCpe3Y3V7yP5iFDf7QCB30gL0F9spf8BoPYv9hjE6Q3ZkqKBvEmZicrDv16JtFEfFeGz74RiGn3in3LRJfDC6flml3%2F7XqPZEDOkp7EYlesgbP3QvOHwrGA75RCRmGCkYt5vQiaDM%2F6Ya1SMp%2B0hSKoL1CaVam1YNyC2eUiph32Ag6cicueJ5xp%2Bg%3D%3D"));for(let A of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])l.env[A]=Math[A];for(let A=9;A<64;++A)l.env["reserved"+A]=()=>{};for(let A=0;A<16;++A)l.env["g_reserved"+A]=0;o=c(o);let F=await C(A("data:;base64,AgFf66NqjQm1RVA7%2FWfb4C0%2BTA8LutuPaAHz4fa5oCzbkHhWsZUVePi8p20pjRHxmDqBeUOdUnmHX83Xxgm9rht1GyuBT3N4l%2BgGrbeXBp70xTvMpXc8lgT%2FVKybwLspVjaUPL%2BpZdeFBlaL5aubw7XIK26IrZLLKYfvEi6NGr7whGnp0IVuNcEOqNgM8EAxp5O6ADjHuESbFE6vurZab%2FlfpAspg6l9o4kGHKaKaqfMnBP4a%2Bl0BCDLUb3GO6Pw7x1Lip6pfVMGv7%2BVJtQCHbZ9cmjISnoIGulDmsO1OieU7OJakcZU2rR%2FVWqITAAFdxA2A%2FvpYZyLbzHnyPhQR64Mj%2FzRbxt0pfAnakTQCff31vGt2ZCAOJDwFGhasayCyhWfuAsSNyNhhLd8ZhHZsEEjYLPXKc%2BM1eivnruUQm4GweO3JRqs1Y6jcuaGIenCQWqKU1%2FE3pDL%2FnoZQWx1%2Bi5h1Sk53y3nLa8fXkpY8%2BxgUoEYntcRc7SeSgD2yOZ0hrz7YaecIVpYqzCEJdRlyOffKLmeEPThRHVZCM%2FxrRp%2BIuH2lUgUW2Q6%2BDoM5%2BUFgeq30dYeqeW5KY6%2FsICvNGNlnne6%2BKRHFPuMILJSq40iH52gesu6g3fuCf7fMxHunknYvcbyVq50XaDRIgw2UtziPuqMD5YaeO3O1E%2BdnHVRCGeiDsc5CGZ15JVTcga1u%2B4Ir9gQq7Q7YDG9Oju5IUO69fgCZX33gfuK9Kt3%2BZCC5V6oU1FVPD8jqXAds1a5FVpROTGZeInisX2mPQlPtAUoCJcL8UEgbS7JXxZGquBqJheqXyEFjhevHftNsZOewOJ2pPv35OvRNZIgwHEsBV8AcGewgmzdZxEgdLOGW9v%2BO1SAMsp5hbm36dV%2BTDOVjN2ZR%2FKhY9ilfY7XMl8A5%2BAPoFJrQH8BtaY42vmHDJ%2Bb%2B3lzTy7fRWUsEUUAAmMh61BL7%2BdhVzOaaXG5MeAeYvImllQwCWx5PzUuIUbjap5AKlJGkX1p7k3JTueV9%2FFr0CNX1KAoE5kQE1ZP7%2BPSTXKJt2qaq12gBQVWBXbVSMamdTOsZSWKA551dWoUPJMCQ0Cr%2FCyau9K6Yw2cvebIYL0mJIW8myMhZD3uY9vSsonMoa9m6XxkrUOmbGU04RnexspgSo8GlZL3sh070nfzUl5PB99qzjbWP3agq8MFxnnqWbdoPk9whdAJbcy2TGPQoAZSnYB7EKvq3VK7O8S2aEl45aT7cvfioTk9o%2FZd%2F0YqRVMCTmHDTq%2BjmKYG9eEDQ2x1HUnef7XVvahODig6wYTzHozxsks3fGapTgbe3Z5LeogDcmrOX70JILG2khSEofUySWnBafqyx0Kh2oXyZzcgd8yY9brKfDROqYL0nfA%2FMQm8hQcKVe0aC5Pum%2B5Pbsj38Qce0t6Y6sdMgFmGxc0KKU3AC32ZsIl0L3IjDE%2BcrMOeHHaEjX0iPWSvISgq9SC5DscznDN88tPrWHUNgzScgBMnCUJc85EksSDY8LMNHyk%2Ba7puOmRtx%2FuRXuv5n8ZdWEI80nYJhtlwHOT7gqaRaOxmeWPDhhNJw9LZ%2FwK9aagoQBvUUfaYeGOl5%2BymEUvN1x5iOwMvkfhzsE%2FefqP4968YoviqI8v0wapYlkvatohQ4EOj9UWrm4r3NRJOvIB%2BKsFqdfwGMyFHxK6hcnUVbvOgWq9MOhmW3Bg8AxCpkuTQIR3N7BW2cqUBYHBBOrjFS3dCNZO%2FJhAgCIsPPhuvOkmOWMGesgJenCgGSifH3jYqxxRTIoDVCIHOEIaJWrJxBLXarQ%2B5bdS0fhSVKSnZQdyf2Z6q1ForhMmxLeaBvEawME888rfn0dyWFIKdzbSRyxw9X%2FDhsiPnsBSQbcNyml5uofzCixbM9PBZuNd4tgnEY0noQGMCY4l0qzSuIxC%2FmjZJ1niZkdTVjyckecmQQ6%2B7W1PGp1jg1ZcBtSXslYSypQdX9IEz4Qv%2FNxT5YxS3rwp1QGQPdfw0tK9gIppyASF10iRpQp685LLvPtfWvSvrfiF89IT%2Bt%2BvwrLWH9dY2IwVbfdNyl%2FsY6mYi3lTqkQ9%2Bt9Q8BCyIAYE%2BaM6YIZwJaDlibikdEexiUT6duBkamQrdKnTs7ptxIC2pTQxomL2B9%2B5PZy%2BEbiA3yG4rAOamiu4lGBFNV35jomVgXxOEapAVFSOs6vvRAQ7JBlZroCah%2Bm9Jf3WTMMZqMvgaT8JwfMq6YYhoytjvWklUiKarEmda8QQgre2eHt4eXAkGC%2Bg4iChV3Us5ZJZ6x6r1e715aUpheS9xV6ASCHZTfz2sg97miwgvoXb07Av3w8n1Gx9GT%2B2KcszuLyWY6eBnqbeu%2Fs9KMqXIknvtpBWtOsT77Up378TTRPxnp0MvEKtti4VkLJYI4H441acbtaFQ1ewT24r6HUen0iE66OhId3AiTJTzKP8wbcnjSxKN5mj89CHS9cUyrOzuvmuXuTwyh4JQE7JpW%2BqvqcvXfCmHOThSw72mz0DyjieGKw1EaDgcCIvdCdqCq0ZW5kD3OkwsOSH0RCkn8CVGo4ZpLu%2BHC%2BUbjpAHcMQEzTSPqgBCFqkQlEi%2BuY4dXtQPbnRVR65GJWu4fFS5zQWPHXe6OJbBJ8hh90D%2BbTsoPLa58Gx4d5XDiYeQK789OxEASpt9gNkLTlbNp3YYAtHUFME7p7tMDiNtgNHdNGgVoWLJmhoOhfTje%2FtL813w49wD3MGOR%2BKH8FSJYOPw8PfSNPfSvPrvxmgyh89Zv%2BOu1odkey38XI7uybEY6QI8wt8n3%2FdkVCs%2FE7YGjqGHbqfLXAo9uXBl3tGSViZJz%2B01D3PVCcfIa8r6tPBDZ3wHNzeOa7BWNCFfTTAemgNs7Igf8mXPIyIQXuTUMKDZtn9q3FDyWpmBHU7C7y6x17pm5vgjyubUtVBgksaEAtxMuk1cY2p1%2Fu%2BKwaPzpqw1ORBQYSeGd2uBT%2BgAwVaq%2BZrNyaOjrgG%2F7BhJeewzovp3m2eXX%2FsvCeXQAGPOrsbULHaWwc66GsE%2F4H5s5wwEItAl1sE3CDXMwARNP8%2FyuuMqa6If0aIY9%2FtcfW4ezx02j4kTpOXfEmR3mhJnUJzlptGgIy42pnO%2F6xeNYJs998Bq9knstFdNr2VGiCGNIHNWd5NDZnQ9Fj8S8gnPsH5e0krD8IGozgQeBaDCamr4WMpkDFHxlbx1C3rNWnUMnIS8s3jfpyX8%2F5W73JeBv%2FN5uDi2quv34wx2tCBsyxDvVXsHVet8hw70B2iihy5nh04UTTvRlR0QOR0IBLG8Tks%2FVtKzOs86L%2Fb8xRUCYHuxRTt07YHeKky95rT4PpLNbRZAUgkvRbhTo%2FFTO2BEyp2e%2BTTyhuyBp9GWw%2FjBYQnvRp%2B4YNzHsjo%3D"));for(let A in F.exports)l.env[A]=F.exports[A];let y=await w(o),h=g(s.data.buffer),u=Date.now(),p=!0;t=()=>p=!1;const d=1e3/60;let m=u;!function A(){if(p)try{let e=Date.now(),t=!1;if(e>=m){let A=navigator.getGamepads(),a=0;for(let e=0;e<4;++e){let B=A[e];if(B){for(let A=0;A<8;++A){let t=(A+12)%16;B.buttons.length>t&&B.buttons[t].pressed&&(a|=1<<8*e+A)}if(B.axes.length>1)for(let A=0;A<4;++A){let t=B.axes[1-(A>>1)];(1&A?t:-t)>.5&&(a|=1<<8*e+A)}B.buttons.length>9&&B.buttons[9].pressed&&(t=!0)}}let B=g(I.buffer);B[16]=e-u,B[17]=i|a,y.exports.upd(),F.exports.endFrame();let r=g(I.buffer.slice(77824,78848));for(let A=0;A<76800;++A)h[A]=4278190080|r[f[A+120]];n.putImageData(s,0,0),m=Math.max(m+d,e)}t?Q(a):window.requestAnimationFrame(A)}catch(A){e(E,A.toString())}}()}catch(A){e(E,A.toString())}}async function I(A,e){Q(await(await fetch(A)).arrayBuffer(),e)}function E(){let A=window.location.hash.slice(1);A.length>0?A.startsWith("url=")?I(A.slice(4),!0):I("data:;base64,"+A):Q(new ArrayBuffer(0))}window.onkeydown=o,window.onkeyup=o,window.onhashchange=E,E(),document.getElementById("cartButton").onclick=()=>{let A=document.createElement("input");A.type="file",A.accept=".wasm,.uw8,application/wasm",A.onchange=()=>{A.files.length>0&&I(URL.createObjectURL(A.files[0]))},A.click()},B.ondragover=A=>{A.preventDefault()},B.ondrop=A=>{let e=A.dataTransfer&&A.dataTransfer.files;e&&1==e.length&&(A.preventDefault(),I(URL.createObjectURL(A.dataTransfer.files[0])))};</script></html> |