mirror of
https://github.com/exoticorn/microw8.git
synced 2026-11-13 23:17:19 +01:00
add support for load from url
This commit is contained in:
1 parent
0d0ecdc344
commit
a41f9ebe4d
2 files changed
+15
-11
No files matched your search
@@ -1 +1 @@
|
|||||||
<!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,B,a=document.getElementById("screen"),n=a.getContext("2d"),r=n.createImageData(320,240),o=A=>new Uint8Array(A),i=A=>new Uint32Array(A),s=0,Q=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&&F(B)}t?s|=e:s&=~e};async function F(Q){t&&(t(),t=null);let E=Q.byteLength;if(e(E),0==E)return;B=Q;let I=window.location.pathname;if(E<=1024){let A="";for(let e of o(Q))A+=String.fromCharCode(e);I+="#"+btoa(A)}I!=window.location.pathname+window.location.hash&&history.pushState(null,null,I),a.width=a.width;try{let a,I=new WebAssembly.Memory({initial:4,maximum:4}),w=o(I.buffer),g={env:{memory:I}},c=A=>{if(0!=o(A)[0]){w.set(o(A));let e=a.exports.load_uw8(A.byteLength);A=new ArrayBuffer(e),o(A).set(w.slice(0,e))}return A},l=async A=>(await WebAssembly.instantiate(A,g)).instance,f=async A=>l(c(await(await fetch(A)).arrayBuffer()));a=await f(A("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKxwUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAkA9BCBADQYiQDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLRwEEfyAAQQFqIQFBACECQQAhAwNAIAIgAS0AACIEQf8AcSADdHIhAiADQQdqIQMgAUEBaiEBIARBgAFxDQALIAEgAGsgAmoLEgEBfyAAIAEgARABIgIQAyACCyYAIAJBAEoEQANAIAAgAkEBayICaiABIAJqLQAAOgAAIAINAAsLC6cBAQR%2FIAAkAUEAJAIDQCAEQYAQNgKAgA8gBEEEaiIEQYQMSA0ACwJAA0BBABAGBEBBgAIQBgRAQYECEAVBAWshAiACRQ0DC0HBAhAFIQUDQCABIAEgAmstAAA6AAAgAUEBaiEBIAVBAWsiBQ0ACwVBACEEQQEhAwNAIANBAXQgAxAGciEDIARBAWoiBEEISA0ACyABIAM6AAAgAUEBaiEBCwwACwsgAQs1AQJ%2FA0AgABAGBEAgASAAQQFqEAYgAnRyIQEgAEECaiEAIAJBAWohAgwBCwsgAUEBIAJ0cguNAQEDfyAAQQRsKAKAgA8hAQNAIwJBgIAESARAIwJBCHQjAS0AAHIkAiMBQQFqJAEMAQsLIwJB%2Fx9xIgIgAUghAyADBEAgASMCQQx1bCACaiQCIAFBgCAgAWtBBHVqIQEFQYAgIAFrIwJBDHVsIAJqIAFrJAIgASABQQR1ayEBCyAAQQRsIAE2AoCADyADCwwAQQBBgJAPEAQkAAsLyQMBAEEAC8IDDHv5cfxDkQZPMZ0qYoDDwomVtSyGbGyuB%2FKWoshno8d0Cmh2T47oGnqa5kocJi625HViLA33CV08eLEanmEBSANK1E2c%2B%2B77Ps4ym0%2B7RYcaTUUBO6xo%2BZM%2FWf63IrO3%2F%2Bwvx0QmFo8WfZDwu3yZ1pVEakQ%2F1ciIawB85zOzqABr8W%2FL%2BoCsX0ntIPWERoF9Bx9XcNiNYSPx3zo5APCdyMwL%2FCQ2T4H6S%2BxRHH1z9hZny24zsMlUCG4Wiq4IXW8HsLBj%2Ffp6Ul9afiYz75R00uyK0jz3f5QhS5uU2tvBzNIptZOl5gDEkl6rNiDJaw%2FvwEloV%2By5TrhG2OeGaH%2B0B8DmaUTTRCtqE%2BUR14QxTogZ2hVf1CpWAgSKDfgTVkcR7CTk8jkVZe%2BHdo779JzS81sNtgBDZ9pRrEztp8y9XcPKF24oPS9iodaLB5wqoPS8QO7oG91NBJHLgps824gfyhdoECWKDb1zu011MQKUmDvcRPMXFNryQyJFLjZKc9YsixF7YRxjth0bhydNfEXbLeNxEttYaumHmvTDZET1kIKd1YuXOS48ajeQQsYPqRtCpP2W46wXR%2B6rzJHrCNj6cire"));for(let A of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])g.env[A]=Math[A];for(let A=9;A<64;++A)g.env["reserved"+A]=()=>{};for(let A=0;A<16;++A)g.env["g_reserved"+A]=0;Q=c(Q);let C=await f(A("data:;base64,Ao%2F%2Bdbd8plwjoXZbwwA7nh6GHRI%2B422eTxmDJFti%2BI5UDTvwu5kCvc4xQ9Jb%2FwOW3z1vJ%2FTGakG8XecB0dCEqpx6dlihCpvqcP4jrQLQGjLXkt74PfO2PxPzFvYoljy%2F1NjAI1YUClK%2FagQ%2FPwUEBfBX8ZsE5k2EKr4E%2Fovvk845eqBuSZJKnBO3Ke6YZpX%2BKhSh8sZ%2F3YsIKD7SVl0%2Fh60U%2B2mzhrSyV1tEsB%2FMY9Cr25ei1R4nHIvjmjp59Suh9ewrL%2ByOntXfRJuk7SjbwZIqotkf8JFOt%2Fwk2VNL%2Bl3ewl9ANsRrU93nh4V3MSD6j60rEsza8i7CEBQLine truncated
|
<!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,B,a=document.getElementById("screen"),n=a.getContext("2d"),r=n.createImageData(320,240),o=A=>new Uint8Array(A),s=A=>new Uint32Array(A),i=0,Q=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&&F(B)}t?i|=e:i&=~e};async function F(Q,E){t&&(t(),t=null);let I=Q.byteLength;if(e(I),0==I)return;B=Q;let w=window.location.pathname;if(I<=1024&&!E){let A="";for(let e of o(Q))A+=String.fromCharCode(e);w+="#"+btoa(A),w!=window.location.pathname+window.location.hash&&history.pushState(null,null,w)}a.width=a.width;try{let a,E=new WebAssembly.Memory({initial:4,maximum:4}),w=o(E.buffer),g={env:{memory:E}},c=A=>{if(0!=o(A)[0]){w.set(o(A));let e=a.exports.load_uw8(A.byteLength);A=new ArrayBuffer(e),o(A).set(w.slice(0,e))}return A},l=async A=>(await WebAssembly.instantiate(A,g)).instance,f=async A=>l(c(await(await fetch(A)).arrayBuffer()));a=await f(A("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKxwUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAkA9BCBADQYiQDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLRwEEfyAAQQFqIQFBACECQQAhAwNAIAIgAS0AACIEQf8AcSADdHIhAiADQQdqIQMgAUEBaiEBIARBgAFxDQALIAEgAGsgAmoLEgEBfyAAIAEgARABIgIQAyACCyYAIAJBAEoEQANAIAAgAkEBayICaiABIAJqLQAAOgAAIAINAAsLC6cBAQR%2FIAAkAUEAJAIDQCAEQYAQNgKAgA8gBEEEaiIEQYQMSA0ACwJAA0BBABAGBEBBgAIQBgRAQYECEAVBAWshAiACRQ0DC0HBAhAFIQUDQCABIAEgAmstAAA6AAAgAUEBaiEBIAVBAWsiBQ0ACwVBACEEQQEhAwNAIANBAXQgAxAGciEDIARBAWoiBEEISA0ACyABIAM6AAAgAUEBaiEBCwwACwsgAQs1AQJ%2FA0AgABAGBEAgASAAQQFqEAYgAnRyIQEgAEECaiEAIAJBAWohAgwBCwsgAUEBIAJ0cguNAQEDfyAAQQRsKAKAgA8hAQNAIwJBgIAESARAIwJBCHQjAS0AAHIkAiMBQQFqJAEMAQsLIwJB%2Fx9xIgIgAUghAyADBEAgASMCQQx1bCACaiQCIAFBgCAgAWtBBHVqIQEFQYAgIAFrIwJBDHVsIAJqIAFrJAIgASABQQR1ayEBCyAAQQRsIAE2AoCADyADCwwAQQBBgJAPEAQkAAsLyQMBAEEAC8IDDHv5cfxDkQZPMZ0qYoDDwomVtSyGbGyuB%2FKWoshno8d0Cmh2T47oGnqa5kocJi625HViLA33CV08eLEanmEBSANK1E2c%2B%2B77Ps4ym0%2B7RYcaTUUBO6xo%2BZM%2FWf63IrO3%2F%2Bwvx0QmFo8WfZDwu3yZ1pVEakQ%2F1ciIawB85zOzqABr8W%2FL%2BoCsX0ntIPWERoF9Bx9XcNiNYSPx3zo5APCdyMwL%2FCQ2T4H6S%2BxRHH1z9hZny24zsMlUCG4Wiq4IXW8HsLBj%2Ffp6Ul9afiYz75R00uyK0jz3f5QhS5uU2tvBzNIptZOl5gDEkl6rNiDJaw%2FvwEloV%2By5TrhG2OeGaH%2B0B8DmaUTTRCtqE%2BUR14QxTogZ2hVf1CpWAgSKDfgTVkcR7CTk8jkVZe%2BHdo779JzS81sNtgBDZ9pRrEztp8y9XcPKF24oPS9iodaLB5wqoPS8QO7oG91NBJHLgps824gfyhdoECWKDb1zu011MQKUmDvcRPMXFNryQyJFLjZKc9YsixF7YRxjth0bhydNfEXbLeNxEttYaumHmvTDZET1kIKd1YuXOS48ajeQQsYPqRtCpP2W46wXR%2B6rzJHrCNj6cire"));for(let A of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])g.env[A]=Math[A];for(let A=9;A<64;++A)g.env["reserved"+A]=()=>{};for(let A=0;A<16;++A)g.env["g_reserved"+A]=0;Q=c(Q);let C=await f(A("data:;base64,Ao%2F%2Bdbd8plwjoXZbwwA7nh6GHRI%2B422eTxmDJFti%2BI5UDTvwu5kCvc4xQ9Jb%2FwOW3z1vJ%2FTGakG8XecB0dCEqpx6dlihCpvqcP4jrQLQGjLXkt74PfO2PxPzFvYoljy%2F1NjAI1YUClK%2FagQ%2FPwUEBfBX8ZsE5k2EKr4E%2Fovvk845eqBuSZJKnBO3Ke6YZpX%2BKhSh8sZ%2F3YsIKD7SVl0%2Fh60U%2B2mzhrSyV1tEsB%2FMY9Cr25ei1R4nHIvjmjp59Suh9ewrL%2ByOntXfRJuk7SjbwZIqotkf8JFOt%2Fwk2VNL%2Bl3ewl9ANsRrU93nh4V3MSD6j60rEsza8Line truncated
|
||||||
+14
-10
@@ -50,8 +50,7 @@ let keyHandler = (e) => {
|
|||||||
mask = 128;
|
mask = 128;
|
||||||
break;
|
break;
|
||||||
case 'KeyR':
|
case 'KeyR':
|
||||||
if(isKeyDown)
|
if (isKeyDown) {
|
||||||
{
|
|
||||||
runModule(currentData);
|
runModule(currentData);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -66,7 +65,7 @@ let keyHandler = (e) => {
|
|||||||
window.onkeydown = keyHandler;
|
window.onkeydown = keyHandler;
|
||||||
window.onkeyup = keyHandler;
|
window.onkeyup = keyHandler;
|
||||||
|
|
||||||
async function runModule(data) {
|
async function runModule(data, keepUrl) {
|
||||||
if (cancelFunction) {
|
if (cancelFunction) {
|
||||||
cancelFunction();
|
cancelFunction();
|
||||||
cancelFunction = null;
|
cancelFunction = null;
|
||||||
@@ -82,16 +81,17 @@ async function runModule(data) {
|
|||||||
currentData = data;
|
currentData = data;
|
||||||
|
|
||||||
let newURL = window.location.pathname;
|
let newURL = window.location.pathname;
|
||||||
if (cartridgeSize <= 1024) {
|
if (cartridgeSize <= 1024 && !keepUrl) {
|
||||||
let dataString = '';
|
let dataString = '';
|
||||||
for (let byte of U8(data)) {
|
for (let byte of U8(data)) {
|
||||||
dataString += String.fromCharCode(byte);
|
dataString += String.fromCharCode(byte);
|
||||||
}
|
}
|
||||||
newURL += '#' + btoa(dataString);
|
newURL += '#' + btoa(dataString);
|
||||||
}
|
|
||||||
if (newURL != window.location.pathname + window.location.hash) {
|
if (newURL != window.location.pathname + window.location.hash) {
|
||||||
history.pushState(null, null, newURL);
|
history.pushState(null, null, newURL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
screen.width = screen.width;
|
screen.width = screen.width;
|
||||||
|
|
||||||
@@ -220,14 +220,18 @@ async function runModule(data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function runModuleFromURL(url) {
|
async function runModuleFromURL(url, keepUrl) {
|
||||||
runModule(await (await fetch(url)).arrayBuffer());
|
runModule(await (await fetch(url)).arrayBuffer(), keepUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
function runModuleFromHash() {
|
function runModuleFromHash() {
|
||||||
let base64Data = window.location.hash.slice(1);
|
let hash = window.location.hash.slice(1);
|
||||||
if (base64Data.length > 0) {
|
if (hash.length > 0) {
|
||||||
runModuleFromURL('data:;base64,' + base64Data);
|
if (hash.startsWith("url=")) {
|
||||||
|
runModuleFromURL(hash.slice(4), true);
|
||||||
|
} else {
|
||||||
|
runModuleFromURL('data:;base64,' + hash);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
runModule(new ArrayBuffer(0));
|
runModule(new ArrayBuffer(0));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user