From 299c08af5be7abea6bd3eed053ce885f9dffaa3b Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Sun, 12 Dec 2021 17:06:19 +0100 Subject: [PATCH] fix isButtonTriggered in web runtime, release v0.1pre4 --- .../{font_palette.uw8 => font_palette.cwa} | 0 platform/bin/platform.uw8 | Bin 2347 -> 2397 bytes platform/src/platform.cwa | 16 ++++++++++++++++ site/content/_index.md | 14 ++++++++++---- site/static/v0.1pre4/index.html | 1 + site/templates/index.html | 2 +- web/src/main.js | 3 ++- 7 files changed, 30 insertions(+), 6 deletions(-) rename examples/curlywas/{font_palette.uw8 => font_palette.cwa} (100%) create mode 100644 site/static/v0.1pre4/index.html diff --git a/examples/curlywas/font_palette.uw8 b/examples/curlywas/font_palette.cwa similarity index 100% rename from examples/curlywas/font_palette.uw8 rename to examples/curlywas/font_palette.cwa diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index ae99f3645968481ba74a9a1e10a0dd37bc612ee0..550df6033e89fa36b51909a9cb90fc681456034f 100644 GIT binary patch literal 2397 zcmV-j38MA_kN$PHe5PC@p>|ut06U%@h8+?<<87W#8G|HSV)%|!4Lk6=nF77eF+Aw=lHT||^R_<|^A`3fmOQ`I z*uW!J6be$mY6L$&1q21~SMi$!=1qhuz6Ab@?~~3sdZ2Del1iKtw<+$JW|jUb6ru9Q zf8C1+C_d6wT|bAd6#HqjhP1L*TSTxQ%wy22+n1u%9w!`&?<$qj-J)u zM4P1TDBHo3Dx%pR@R3fp{3O{^OZr{j!e2l(#A{RC=ZA%NF(CSntt%4D+VU>K5EMSO zTp@ieGp-F$tfZz&a6bz$pX0D*GRc)?9RG0;okx$PGyit5E!(fLOJ!qYS6vvk7GFhT z=_GioD|n$A! z36wf4Ww5D{&8B8d*Wq!??2^i0V-1LJDWDrvV_sqsc0rqC?zva8+);k(2aQ21=JyQz=6wbuwMjX6h6L^<{Xn>zf!pfyQE&G?{9>(_7kgr;f+G1hDgJ zTqcDOU)%2s#PGtLm?|AyX5!PvGiLLev4+6@>hYM9@c=Nn$uQzNoT3^v90{~X^SG+` z8tcxO@pnS=yuX)@T`DU+<}AH+*^@G_ld#w_i$Q&AsLBUqt&DtpH@-tedb^M)KXn6A%Lu78AW=UBI;|9~EG7o-+o_ zvR`1K6Im2g+!Br#B|WUh^KRq39TBG9 zG-vbMw45%I6Zyg~FJp}F;WmBd_WGlUr#jA*_UraB+TTX^thk^2NPfw!S2}h`01P`1 z`mIayrO~VOu!A#9U(%VGv@<_jzrh`*j|t7Bz^Kdr3PX{vMF&!1ykJEM0vEP^ z7YVvEkbQ%aSk2=X?eNPQ`G^f?hp}GW1n}!We+ufoW~~9}s$x0uHpN5iGr=6}Ri+$I zyThMWk6>GH);i`?rJiGW%xtW|&IvBJq|UduWk5RYVyh)RCjFU_rPqugc2@7k(u#@|z*0tI zPkco1_cyaKSFMjgT9Egs-wX=yiz_Fel_-)-vHkWMwT2+{LXM&?PQ2T{nTFzXS$}X# zu83iS?Zismm8Uqr=l>0@Uqb%}!_%Lcq0UyXD-bD53!P|8Ljs1w^!#EYm(3=w`@yel zghu62p}=Viwn+U~9DeUO=OCyL0JON-W1oQB@%{ETs)wkP?vqXA?+QOlZntIizgt)^5an{50Ac@Jj|qCCbIW@y((P5TsPCTO{_^Q24S~zEx*Q@p zM0T?lv`L$;Cl)s-``PYzDJI2{yT;~=RM6RL)UQdWr_=` zIYCp<07nLi`|)JS?7%lq$DNxNSU{cO5lc>+9Bt@J04V zu5Q8GU7pKmgRg>sUOEW#yxMd2n;{7DyMi7UFSqI>U2O#)v2lg#F+>XSfMI9=#^TFp z%7IxL!<|=#Z^D~>q{d&k&Iq9ZJIO4tT-X(F)&`tzGo;NUBxz<0gIkk?O(=n>`D}@l zN2eu5ma(w-AXy>Vkyd^7>X^(PpU$r-d<}$qLY+MV#B>1HsQ&+M(;UwE;?}a`KHo!l zJbJbG=Dje$3r<3ewjl#p{`3SwKSVt&pr(uNw@B8b=ZFYx8G37B2u$5Xf#9I2`~G#~ zDlVQb8;;$!k!L#awSh67FYxvpWrLTeb^q43?7~MA8W?6i4Dl}Z@?yidKh4GPtRMW8 z+ZK#0s%`G)swi=Y$fDcXkmL}Nwv8g+>OLzmy%K0z-yZ}6aDR@jbQh_h5^>09JR98G z3+}t`Z&i7QWN{IPt5nhcCqVKER#^+EH6_~97rs;<-EZrj$h|XLe96549L~hB*ofWY PDm3a9-ap2Yxx_~R3xT@N literal 2347 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 RNP{;!ETS6H@IHo%!vGHipj7|> diff --git a/platform/src/platform.cwa b/platform/src/platform.cwa index 2b600cf..a7eb506 100644 --- a/platform/src/platform.cwa +++ b/platform/src/platform.cwa @@ -230,6 +230,13 @@ global mut bgColor = 0; global mut graphicsText = 0; 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 { graphicsText = char == 5; return; @@ -238,6 +245,15 @@ export fn printChar(char: i32) { if char == 10 | (!graphicsText & textCursorX >= 320) { textCursorX = 0; 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; } diff --git a/site/content/_index.md b/site/content/_index.md index c793f22..ccaf5b8 100644 --- a/site/content/_index.md +++ b/site/content/_index.md @@ -6,6 +6,7 @@ * [v0.1pre1](v0.1pre1) * [v0.1pre2](v0.1pre2) * [v0.1pre3](v0.1pre3) +* [v0.1pre4](v0.1pre4) ## 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 rectangle(x1: f32, y1: f32, x2: f32, y2: 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 isButtonPressed(btn: i32) -> i32` @@ -48,6 +50,9 @@ Other imports provided by the platform, also all in module `env`: * `fn printChar(char: i32)` * `fn printString(ptr: i32)` * `fn printInt(num: i32)` +* `fn setTextColor(color: i32)` +* `fn setBackgroundColor(color: i32)` +* `fn setCursorPosition(x: i32, y: i32)` ### Memory map @@ -85,7 +90,7 @@ types with up to 5 parameters (i32 or f32) where the `f32` parameters always preceed the `i32` parameters. Then it includes all imports that MicroW8 provides, 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`. #### 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. ## 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 -* [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 -* [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 +* [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.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.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) * [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. \ No newline at end of file diff --git a/site/static/v0.1pre4/index.html b/site/static/v0.1pre4/index.html new file mode 100644 index 0000000..2fda0e6 --- /dev/null +++ b/site/static/v0.1pre4/index.html @@ -0,0 +1 @@ +MicroW8
\ No newline at end of file diff --git a/site/templates/index.html b/site/templates/index.html index acfe2c5..c6cb0e6 100644 --- a/site/templates/index.html +++ b/site/templates/index.html @@ -4,7 +4,7 @@

A WebAssembly based sizecoding platform

- +
diff --git a/web/src/main.js b/web/src/main.js index dace381..270bc6c 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -117,7 +117,7 @@ async function runModule(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())); @@ -194,6 +194,7 @@ async function runModule(data) { u32Mem[16] = now - startTime; u32Mem[17] = pad | gamepad; instance.exports.upd(); + platform_instance.exports.endFrame(); let palette = U32(memory.buffer.slice(0x13000, 0x13000 + 1024)); for (let i = 0; i < 320 * 240; ++i) {