From fcf24110c586c8b95b4b34f1284fa20652ee455c Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Wed, 24 Nov 2021 22:51:27 +0100 Subject: [PATCH] update to new upkr version, use css to scale canvas --- platform/Cargo.lock | 4 +++- platform/bin/loader.wasm | Bin 1385 -> 1192 bytes platform/bin/platform.uw8 | Bin 558 -> 522 bytes platform/src/loader.cwa | 47 ++++++++++++-------------------------- uw8-tool/Cargo.lock | 4 +++- uw8-tool/Cargo.toml | 2 +- web/src/index.html | 2 +- web/src/main.js | 10 ++------ web/src/style.css | 19 ++++++++++++++- 9 files changed, 42 insertions(+), 46 deletions(-) diff --git a/platform/Cargo.lock b/platform/Cargo.lock index 163ab65..2f5a050 100644 --- a/platform/Cargo.lock +++ b/platform/Cargo.lock @@ -183,9 +183,11 @@ dependencies = [ [[package]] name = "upkr" version = "0.1.0" -source = "git+https://github.com/exoticorn/upkr.git?rev=479a2e2#479a2e2c899a7aa24fa1fd9b4ebd371f8bc39f8e" +source = "git+https://github.com/exoticorn/upkr.git?rev=5e82c65#5e82c65c1821fcf85b97dd9f71e8fce7cddc93c3" dependencies = [ + "anyhow", "cdivsufsort", + "pico-args", ] [[package]] diff --git a/platform/bin/loader.wasm b/platform/bin/loader.wasm index 5ac1305d1200ae8ba0e953fa870f2ba927254445..9aa75a5fcf58b977c491043af33decf780239a55 100644 GIT binary patch delta 607 zcmaFKwSsekp%fM}4CsW2%sIx=RdF!C^Ra|6Zy%NHs!DKL5{GAl5%I4Cdzg?LJH6qvG9fTE5K3JQ$b zjx42Fij1rf4qP560a5}~#8R5A$XL$}wp)SG3}m|kGdB-|BZFhZ1bzV)6$WnZ4?yn$ z{q>Sb_jkSBe4VSGGb`GTKT&zJvA3aI{`!xZZE@0e%bT*~ZI8PAs25bM-@Lv-?U3@L z9j*#lB{Qz%t`zrQB4l9y`tUD_b#7JMOg|t}l?hsH-RK zX1I4>(|w^MzqZ;&w<$6*@@?oiZ&}FjK&j^1ue*Vl)q+h^47^)5We3?GHo7Yz`c->H z(VfdXpE$mHo#`Jk>p{u3=W8=B{HYZ3?chwc3|V0s+&V9+DEU*v3Vq4{t`nrcK0ll% zv9uwf!|Sr;1(rh|gzAg0b&#*A_qVqr6tRHYiSRS7)QWROPv_wwfj%=j&W~&)j%+owxO;{d2$#Z5E z>vy;6Iq7@v^+ZN&$*Vrj2YWMWlj z1}mzoQ2{cbQeb63g)Hs0icH*KS1B+pH)8@iOo5SGmqD4yv3_l{6Gxjeqb>u(nidr% zWkyHFEEPs&W~hV;(A7YBpo4gT;o;aYfnR_{g@K#<2s0y)&%KxV{}YDkeY!L3(sOvN zqU!e)=tZ8}d~LmvyTyD7-sjUh&m81=6YYZh5t56;efv1ea>-XGyDXW?3Dy+_PWYJM$;To^g zyc-U!J5W=$$eW*KzCZ7W^E)MLUidh8T0AUktx~BdxEcQG!>4nHKCR$Br7%^EHPEqi zQFp~-McJjbE55L@O5SWSmB=ms8+d8GgY@dJhwsL2kGOB?q}6(DZN;4#E6nFUs_;z- z@pV{uXak>{YUb|xMfRJfc*(_7JnC+;Tj|BNS4;oJ&Ru~!?!~BmS9i5p*|7Fg!xD+G z)jF${mr0zwdGHj+vgKu4c2&Ll+rI5cK=hOQ1w1RK?Tr!m-2UqhyF@e3mpe^T#xt%S zXweeNI-DW9rmElZjrn)Zsx9Y2j(Hz<2|8Y~xbBA9>`<%who-7Kok=jB-c@PFl$Dkm x6dBXI#E73lt6bZ@h5fTJZekMZ?#xDlcaqVe&X?ZMf+QciisdWdKS7A)5dI diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index c848c7640b51dda44d68f7cf2a7237d23e2a853e..1bbd0f7612c4bce6d00a10d5bc33274cb2bf7f02 100644 GIT binary patch literal 522 zcmV+l0`>g@2YUH_4Ky3S9;`4P1u>jC3DCgXfk1+5QNRN`HMCNl5PyG%=H4y#N~-JH z1jGlvO~Kdb)pwF)Jh8wO&ty1wqE1(o3I-fcMG@g{X9-f<_B_k~^1<5IV^xn5N%3^r z40zpuvUy(&3?HL-^iJ6>;4^AuOp+L@1c$;2gmLePezE^LZ;r*HSt9_>!C;#;rz$C6 zdwPb?aHn44zHQ=OVRJf_Zi zqp~8nfVJ$>*qK1V5Kxl_$E-tTf%zg=hD`dF%;(%BbN zsFP%-u`z1JxQGB>js-!pVi2}dG_BZbUFUg{L3I{C7<^4lq3Q;b!IrFWtkRt5dp?Wr zX4ij4u{k#wFL{q+R{U#vLnj%i|`v4xe+K_K_0#4L0dy6nMtuG zgp)&OqMjM@+j>t6a~+teM^2T8WZA=!b)tJdG}bpG;uH$^*XV4?;ow;^a=PS@HYQ%; zbUB{Cuv4eu)-H%Z2PmME6?H-{K}80=64 McS)$7Q@lqr02YY;p8x;= literal 558 zcmV+}0@3{f|7-zr#F$18U$h%-V0+!CLk__5t~lj?p#;~num00UlXhQ@dS-*Ig}m|~ z;h&`KWY9QWxprlbp6f@DFL{J~nCD+zhgPiQm=mcHM%W-o+Rie%nW71)={>^?Bdxb5 z)pJKuzd%Y%sPF+`uyWk6>{BhQzC0oHveiqogugvX{}q(oT1T@O&;6`;+1ip?iG0Xq z$ax>8N$dIfPbt!nN`~5YQ$?)%VD_8JwXh~Z`CD}MEn~DQ6_<|e>^bO)&7TWcouF}V z9jfBtu|;#s@M#To<^{2k-rg&N`36J6an4r&9FFh*|Kbh-LV>wJvZ&G+39=%mBKOK& zdNpYJOqx8}+i^4mtL1SzDkUuBS%g6H#Xfv)ojTs1I~`bKBRTB=)DiL0MrYy}rHfrl zWNu!rC&kVsjM8>U*tDS-JJ2982UK(Bf8T@Ev2K&`b5n7k2RK~`O;ywya z`+CA&9Ylb^-PR`-gw=yR+R1leS(JTk+u8PMP_NP9GK*&WHd?=lr)Ee}I63wi%1JFZ z>GN2#LY07@h?rk=)%KT-T7N^!w!AlqE-OT>Er{hPByS$K$rW;JA i32 { let module_end = 0x1e000 + module_size; if version & 1 { - module_size?0 = 0; - module_size?1 = 0; module_end = uncompress(1, 0x1e001); } else { copy(0x1e000, 0, module_size); @@ -76,17 +74,13 @@ fn copy(dest: i32, src: i32, len: i32) { // upkr unpacker global mut upkr_src_ptr: i32 = 0; -global mut upkr_code: i64 = 0i64; -global mut upkr_low: i64 = 0i64; -global mut upkr_range: i64 = 0i64; +global mut upkr_state: i32 = 0; // uncompress upkr compressed data at `src` into the buffer at `dest` // returns the end of the uncompressed data export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 { upkr_src_ptr = src_ptr; - upkr_code = 0i64; - upkr_low = 0i64; - upkr_range = 1i64; + upkr_state = 0; let offset: i32; @@ -94,7 +88,7 @@ export fn uncompress(src_ptr: i32, dest_ptr: i32) -> i32 { let i: i32; loop init_contexts { - i!0x3c000 = 0x8000; + i!0x3c000 = 0x800; branch_if (i := i + 4) < (256 + 1 + 128) * 4: init_contexts } @@ -144,45 +138,32 @@ fn upkr_length(context_index: i32) -> i32 { } fn upkr_bit(context_index: i32) -> i32 { - let prob = ((context_index * 4)!0x3c000) as i64; + let prob = (context_index * 4)!0x3c000; loop refill { - if upkr_low >> 32i64 == (upkr_low + upkr_range - 1i64) >> 32i64 { - upkr_append_byte(); + if upkr_state < 1<<16 { + upkr_state = (upkr_state << 8) | ?upkr_src_ptr; + upkr_src_ptr = upkr_src_ptr + 1; branch refill; } } - if upkr_range < (1i64 << 24i64) { - upkr_append_byte(); - upkr_append_byte(); - upkr_range = (1i64 << 40i64) - upkr_low; - } - - let range = upkr_range / 65536i64; - let bit = (upkr_code - upkr_low) / range < prob; + let lazy state_low = upkr_state & 0xfff; + let bit = state_low < prob; if bit { - upkr_range = range * prob; - prob = prob + (((1i64 << 16i64) - prob) >> 4i64); + upkr_state = prob * (upkr_state >> 12) + state_low; + prob = prob + ((0x1000 - prob) >> 4); } else { - upkr_low = upkr_low + range * prob; - upkr_range = range * (65536i64 - prob); - prob = prob - (prob >> 4i64); + upkr_state = (0x1000 - prob) * (upkr_state >> 12) + state_low - prob; + prob = prob - (prob >> 4); } - (context_index * 4)!0x3c000 = prob as i32; + (context_index * 4)!0x3c000 = prob; bit } -fn upkr_append_byte() { - upkr_code = ((upkr_code & i64.extend_i32_u(-1)) << 8i64) | (?upkr_src_ptr) as i64; - upkr_src_ptr = upkr_src_ptr + 1; - upkr_low = (upkr_low & i64.extend_i32_u(-1)) << 8i64; - upkr_range = upkr_range << 8i64; -} - start fn unpack_base() { base_end = uncompress(0, 0x3c800); } diff --git a/uw8-tool/Cargo.lock b/uw8-tool/Cargo.lock index acd0e94..702f307 100644 --- a/uw8-tool/Cargo.lock +++ b/uw8-tool/Cargo.lock @@ -63,9 +63,11 @@ dependencies = [ [[package]] name = "upkr" version = "0.1.0" -source = "git+https://github.com/exoticorn/upkr.git?rev=479a2e2#479a2e2c899a7aa24fa1fd9b4ebd371f8bc39f8e" +source = "git+https://github.com/exoticorn/upkr.git?rev=11b43f9bc4460d960a13829a8a64ff4af11d1665#11b43f9bc4460d960a13829a8a64ff4af11d1665" dependencies = [ + "anyhow", "cdivsufsort", + "pico-args", ] [[package]] diff --git a/uw8-tool/Cargo.toml b/uw8-tool/Cargo.toml index 5d79e7b..88a6599 100644 --- a/uw8-tool/Cargo.toml +++ b/uw8-tool/Cargo.toml @@ -10,4 +10,4 @@ wasmparser = "0.81" wasm-encoder = "0.8" anyhow = "1" pico-args = "0.4" -upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "479a2e2" } \ No newline at end of file +upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "5e82c65" } \ No newline at end of file diff --git a/web/src/index.html b/web/src/index.html index 8176a6d..d586d71 100644 --- a/web/src/index.html +++ b/web/src/index.html @@ -10,7 +10,7 @@
- +
diff --git a/web/src/main.js b/web/src/main.js index d9c05a3..de57d20 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -9,13 +9,9 @@ function setMessage(size, error) { document.getElementById('message').innerHTML = html; } -let framebufferCanvas = document.createElement("canvas"); -framebufferCanvas.width = 320; -framebufferCanvas.height = 240; -let framebufferCanvasCtx = framebufferCanvas.getContext("2d"); -let imageData = framebufferCanvasCtx.createImageData(320, 240); let screen = document.getElementById('screen'); let canvasCtx = screen.getContext('2d'); +let imageData = canvasCtx.createImageData(320, 240); let cancelFunction; @@ -117,9 +113,7 @@ async function runModule(data) { for (let i = 0; i < 320 * 240; ++i) { buffer[i] = palette[memU8[i + 120]] | 0xff000000; } - framebufferCanvasCtx.putImageData(imageData, 0, 0); - canvasCtx.imageSmoothingEnabled = false; - canvasCtx.drawImage(framebufferCanvas, 0, 0, 640, 480); + canvasCtx.putImageData(imageData, 0, 0); window.requestAnimationFrame(mainloop); } catch (err) { diff --git a/web/src/style.css b/web/src/style.css index be9db08..b0d3350 100644 --- a/web/src/style.css +++ b/web/src/style.css @@ -33,7 +33,10 @@ a:hover { color: #405040; } -canvas { +#screen { + width: 320px; + height: 240px; + image-rendering: pixelated; background-color: #202428; margin-bottom: 8px; border: 4px solid #303040; @@ -63,4 +66,18 @@ button:hover { button:active { background-color: #504450; +} + +@media (min-width: 680px) and (min-height: 560px) { + #screen { + width: 640px; + height: 480px; + } +} + +@media (min-width: 1000px) and (min-height: 800px) { + #screen { + width: 960px; + height: 720px; + } } \ No newline at end of file