mirror of
https://github.com/exoticorn/microw8.git
synced 2026-11-14 07:17:19 +01:00
fix isButtonTriggered in web runtime, release v0.1pre4
This commit is contained in:
1 parent
00cbe656cf
commit
299c08af5b
7 files changed
+30
-6
No files matched your search
File renamed without changes.
Binary file not shown.
@@ -230,6 +230,13 @@ global mut bgColor = 0;
|
|||||||
global mut graphicsText = 0;
|
global mut graphicsText = 0;
|
||||||
|
|
||||||
export fn printChar(char: i32) {
|
export fn printChar(char: i32) {
|
||||||
|
loop chars {
|
||||||
|
printSingleChar(char & 255);
|
||||||
|
branch_if (char := char #>> 8): chars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn printSingleChar(char: i32) {
|
||||||
if char == 4 | char == 5 {
|
if char == 4 | char == 5 {
|
||||||
graphicsText = char == 5;
|
graphicsText = char == 5;
|
||||||
return;
|
return;
|
||||||
@@ -238,6 +245,15 @@ export fn printChar(char: i32) {
|
|||||||
if char == 10 | (!graphicsText & textCursorX >= 320) {
|
if char == 10 | (!graphicsText & textCursorX >= 320) {
|
||||||
textCursorX = 0;
|
textCursorX = 0;
|
||||||
textCursorY = textCursorY + 8;
|
textCursorY = textCursorY + 8;
|
||||||
|
if !graphicsText & textCursorY >= 240 {
|
||||||
|
textCursorY = 240 - 8;
|
||||||
|
let i: i32;
|
||||||
|
loop scroll_copy {
|
||||||
|
i!120 = i!(120 + 320 * 8);
|
||||||
|
branch_if (i := i + 4) < 320 * (240 - 8): scroll_copy;
|
||||||
|
}
|
||||||
|
rectangle(0 as f32, (240 - 8) as f32, 320 as f32, 8 as f32, bgColor);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -6,6 +6,7 @@
|
|||||||
* [v0.1pre1](v0.1pre1)
|
* [v0.1pre1](v0.1pre1)
|
||||||
* [v0.1pre2](v0.1pre2)
|
* [v0.1pre2](v0.1pre2)
|
||||||
* [v0.1pre3](v0.1pre3)
|
* [v0.1pre3](v0.1pre3)
|
||||||
|
* [v0.1pre4](v0.1pre4)
|
||||||
|
|
||||||
## Spec
|
## Spec
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ Other imports provided by the platform, also all in module `env`:
|
|||||||
* `fn hline(left: i32, right: i32, y: i32, color: i32)`
|
* `fn hline(left: i32, right: i32, y: i32, color: i32)`
|
||||||
* `fn rectangle(x1: f32, y1: f32, x2: f32, y2: f32, color: i32)`
|
* `fn rectangle(x1: f32, y1: f32, x2: f32, y2: f32, color: i32)`
|
||||||
* `fn circle(cx: f32, cy: f32, radius: f32, color: i32)`
|
* `fn circle(cx: f32, cy: f32, radius: f32, color: i32)`
|
||||||
|
* `fn line(x1: f32, y1: f32, x2: f32, y2: f32, color: i32)`
|
||||||
|
|
||||||
* `fn time() -> f32`
|
* `fn time() -> f32`
|
||||||
* `fn isButtonPressed(btn: i32) -> i32`
|
* `fn isButtonPressed(btn: i32) -> i32`
|
||||||
@@ -48,6 +50,9 @@ Other imports provided by the platform, also all in module `env`:
|
|||||||
* `fn printChar(char: i32)`
|
* `fn printChar(char: i32)`
|
||||||
* `fn printString(ptr: i32)`
|
* `fn printString(ptr: i32)`
|
||||||
* `fn printInt(num: i32)`
|
* `fn printInt(num: i32)`
|
||||||
|
* `fn setTextColor(color: i32)`
|
||||||
|
* `fn setBackgroundColor(color: i32)`
|
||||||
|
* `fn setCursorPosition(x: i32, y: i32)`
|
||||||
|
|
||||||
### Memory map
|
### Memory map
|
||||||
|
|
||||||
@@ -85,7 +90,7 @@ types with up to 5 parameters (i32 or f32) where the
|
|||||||
`f32` parameters always preceed the `i32` parameters.
|
`f32` parameters always preceed the `i32` parameters.
|
||||||
Then it includes all imports that MicroW8 provides,
|
Then it includes all imports that MicroW8 provides,
|
||||||
a function section with a single function of type
|
a function section with a single function of type
|
||||||
`(i32) -> void` and an export section that exports
|
`() -> void` and an export section that exports
|
||||||
the first function in the file under the name `upd`.
|
the first function in the file under the name `upd`.
|
||||||
|
|
||||||
#### Format version `02`:
|
#### Format version `02`:
|
||||||
@@ -111,9 +116,10 @@ Writing code for MicroW8 in C, Rust, AssemblyScript etc. should absolutely
|
|||||||
possible but no examples are provided, yet.
|
possible but no examples are provided, yet.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
* [Skip Ahead](v0.1pre3#Agj9nQYWw+yYP6xi7SUL2urlNtvh2dOZFuYL4PUxAUz5qqATDey0JsAVat2VQKEOyXK1bE+3WiFK0GGhdi4VAd8Tlf3YuU7xfvvBwN4oNuIoY29jbbuEnEnPZFjC4ym9L2QDUmig+RsF++FubWcyqOt7CAFGNEaAiMISCIM43bfPQriE6sD3orstkMjH3LPOqeuUPpitgzaIsAf860CYHlrAG2t5CSjRGobcPLJ+CSeYjzZSLYs7+u2xpthsfoIvBnk1+xxwEWYfZOJ3Madfo5BME5nceVCQVOEBMCTLSE+xVCkyelOW) (231 bytes): A port of my [TIC-80 256byte game](http://tic80.com/play?cart=1735) from LoveByte'21
|
* [Skip Ahead](v0.1pre4#AiP94km33q5hBFbBcKl2W1ZMY67wHByUz15/qRHIr71Dvq8bTVux/DXZzSTKU5MufRXxnGEn6mOul4dil/5WLT1Y+Y/4TGd1E3U4rQaxlpcKObxc5YLdr4xo6jyBND96a569LoECv6Q4EIqxJi+3QPE21r/++js41XsBLr44X/O2XpP3kHQva3B8o6duD5WkLCf7PhsxjTBeND1ADIaJe05JCrBim18RPY9VYFmltqQ9gVzbxE/ZpojR/GJ4aCbx0hRn73RPhpA7Cd4jk0AVSOeRx+7kuHrLzpaeqeYWK5pYd/4Rv+8=) (230 bytes): A port of my [TIC-80 256byte game](http://tic80.com/play?cart=1735) from LoveByte'21
|
||||||
* [OhNoAnotherTunnel](v0.1pre3#Apr9u4e6Rsy7tRABjq4o7dCGPLQR9dVTSGK9FWXemB7tybsZHT+TxtfHlarRbcekGcg7qZY/eK6/VVCp9ceNBXlh4v0QGS63LTzfEjb8XC4jg5KifbYBodSIS0DPVjwq32PbgjL2+C+QOCx6ZxqRYP0KQpcTxuBUKx1NXVM2EV4l0rEWBQW9SjLcbURKHYaRLcI4FOcLOfASFiQ4wFWgEBA0VD6hGdemN0tPYp9BfUaN) (177 bytes): A port of my [entry](http://tic80.com/play?cart=1871) in the Outline'21 bytebattle final
|
* [OhNoAnotherTunnel](v0.1pre4#Ag95rdCB5Ww5NofyQaKF4P1mrNRso4azgiem4hK99Gh8OMzSpFq3NsNDo7O7pqln10D11l9uXr/ritw7OEzKwbEfCdvaRnS2Z0Kz0iDEZt/gIqOdvFmxsL1MjPQ4XInPbUJpQUonhQq29oP2omFabnQxn0bzoK7mZjcwc5GetHG+hGajkJcRr8oOnjfCol8RD+ha33GYtPnut+GLe4ktzf5UxZwGs6oT9qqC61lRDakN) (177 bytes): A port of my [entry](http://tic80.com/play?cart=1871) in the Outline'21 bytebattle final
|
||||||
* [Technotunnel](v0.1pre3#AkL/tETJ+XRrvcB8gD9brftZ26zjwEsiATnAd+szCtw3Haq41srEMFO8aDS71c2CX8W87RQ9EY3V+YuTn/2CPRfn6CpgxMHUnIxOEWhVDRULXeYGP70dTiL8tYLAc8LrBWay9h8jCX/4Jbb39XVnISlZNd7In4Mts9LvSkSIz/E0sBfhjwp65aeoSU8BNFZpyKlxU+u5DdBtuxx3bFE=) (158 bytes): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final
|
* [Technotunnel](v0.1pre4#AqL8HeK1M9dn2nWNIF5vaq/Vh64pMt5nJIFoFKpBMPUsGtDtpqjo1JbT9LzPhAxCqJ7Yh4TA6oTGd4xhLowf+cWZMY73+7AZmfXJJsBi4cej/hH+4wlAgxFIrnOYnr/18IpnZbsHf0eGm1BhahX74+cVR0TRmNQmYC7GhCNS3mv/3MJn74lCj7t28aBJPjEZhP9fGXdG2u5Egh/Tjdg=) (158 bytes): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final
|
||||||
|
* [Font & Palette](v0.1pre4#AgKaeeOuwg5gCKvFIeiitEwMpUI2rymEcu+DDB1vMu9uBoufvUxIr4Y5p4Jj2ukoNO4PE7QS5cN1ZyDMCRfSzYIGZxKlN2J6NKEWK7KVPk9wVUgn1Ip+hsMinWgEO8ETKfPuHoIa4kjI+ULFOMad7vd3rt/lh1Vy9w+R2MXG/7T61d3c7C6KY+eQNS0eW3ys4iU8R6SycuWZuuZ2Sg3Qxp826s+Kt+2qBojpzNOSoyFqyrVyYMTKEkSl0BZOj59Cs1hPm5bq0F1MmVhGAzMhW9V4YeAe): Just a simple viewer for the default font and palette.
|
||||||
* [Technotunnel B/W](v0.1pre2#AQrDAQHAAQIBfwp9A0AgAUEAsiABQcACb7JDmhkgQ5MiBCAEIASUIAFBwAJtQfgAa7IiBSAFlJKRIgaVIgcgByAAskHQD7KVIgIQAEPNzEw/lCIDlCAHIAeUIAOUIAOUQQGykiADIAOUk5GSIgiUIAOTQQqylCACkiIJqCAFIAaVIAiUQQqylCACkiIKqHMgCEEyspQgBpUiCyACkkEUspSocUEFcbJBArIgC5OUQRaylJeoOgB4IAFBAWoiAUGA2ARIDQALCw==) (199 bytes uncompressed): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final (older MicroW8 version with monochrome palette)
|
* [Technotunnel B/W](v0.1pre2#AQrDAQHAAQIBfwp9A0AgAUEAsiABQcACb7JDmhkgQ5MiBCAEIASUIAFBwAJtQfgAa7IiBSAFlJKRIgaVIgcgByAAskHQD7KVIgIQAEPNzEw/lCIDlCAHIAeUIAOUIAOUQQGykiADIAOUk5GSIgiUIAOTQQqylCACkiIJqCAFIAaVIAiUQQqylCACkiIKqHMgCEEyspQgBpUiCyACkkEUspSocUEFcbJBArIgC5OUQRaylJeoOgB4IAFBAWoiAUGA2ARIDQALCw==) (199 bytes uncompressed): A port of my [entry](https://tic80.com/play?cart=1873) in the Outline'21 bytebattle quater final (older MicroW8 version with monochrome palette)
|
||||||
* [XorScroll](v0.1pre2#AQovAS0BAX8DQCABIAFBwAJvIABBCm1qIAFBwAJtczoAeCABQQFqIgFBgNgESA0ACws=) (50 bytes uncompressed): A simple scrolling XOR pattern. Fun fact: This is the pre-loaded effect when entering a bytebattle.
|
* [XorScroll](v0.1pre2#AQovAS0BAX8DQCABIAFBwAJvIABBCm1qIAFBwAJtczoAeCABQQFqIgFBgNgESA0ACws=) (50 bytes uncompressed): A simple scrolling XOR pattern. Fun fact: This is the pre-loaded effect when entering a bytebattle.
|
||||||
* [CircleWorm](v0.1pre2#AQp7AXkCAX8CfUEgEA0DQCABskEEspUiAkECspUgALJBiCeylSIDQQWylJIQAEEBspJBoAGylCACQQOylSADQQSylJIQAEEBspJB+ACylCADQRGylCACQQKylJIQAEECspJBELKUIAFBAmxBP2oQEiABQQFqIgFBP0gNAAsL) (126 bytes uncompressed): Just a test for the circle fill function.
|
* [CircleWorm](v0.1pre2#AQp7AXkCAX8CfUEgEA0DQCABskEEspUiAkECspUgALJBiCeylSIDQQWylJIQAEEBspJBoAGylCACQQOylSADQQSylJIQAEEBspJB+ACylCADQRGylCACQQKylJIQAEECspJBELKUIAFBAmxBP2oQEiABQQFqIgFBP0gNAAsL) (126 bytes uncompressed): Just a test for the circle fill function.
|
||||||
@@ -0,0 +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
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<section>
|
<section>
|
||||||
<h1 class="text-center heading-text">A WebAssembly based sizecoding platform</h1>
|
<h1 class="text-center heading-text">A WebAssembly based sizecoding platform</h1>
|
||||||
</section>
|
</section>
|
||||||
<a href="v0.1pre3">
|
<a href="v0.1pre4">
|
||||||
<div class="demonstration-gif" style="width:640px;height:512px;background-color:black"></div>
|
<div class="demonstration-gif" style="width:640px;height:512px;background-color:black"></div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+2
-1
@@ -117,7 +117,7 @@ async function runModule(data) {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
let instantiate = async (data) => new WebAssembly.Instance(await WebAssembly.compile(data), importObject);
|
let instantiate = async (data) => (await WebAssembly.instantiate(data, importObject)).instance;
|
||||||
|
|
||||||
let loadModuleURL = async (url) => instantiate(loadModuleData(await (await fetch(url)).arrayBuffer()));
|
let loadModuleURL = async (url) => instantiate(loadModuleData(await (await fetch(url)).arrayBuffer()));
|
||||||
|
|
||||||
@@ -194,6 +194,7 @@ async function runModule(data) {
|
|||||||
u32Mem[16] = now - startTime;
|
u32Mem[16] = now - startTime;
|
||||||
u32Mem[17] = pad | gamepad;
|
u32Mem[17] = pad | gamepad;
|
||||||
instance.exports.upd();
|
instance.exports.upd();
|
||||||
|
platform_instance.exports.endFrame();
|
||||||
|
|
||||||
let palette = U32(memory.buffer.slice(0x13000, 0x13000 + 1024));
|
let palette = U32(memory.buffer.slice(0x13000, 0x13000 + 1024));
|
||||||
for (let i = 0; i < 320 * 240; ++i) {
|
for (let i = 0; i < 320 * 240; ++i) {
|
||||||
|
|||||||
Reference in new issue
Block a user