diff --git a/platform/Cargo.lock b/platform/Cargo.lock index 1074a3b..0ef87ce 100644 --- a/platform/Cargo.lock +++ b/platform/Cargo.lock @@ -79,9 +79,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chumsky" -version = "0.5.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d3efff85e8572b1c3fa0127706af58c4fff8458f8d9436d54b1e97573c7a3f" +checksum = "8d02796e4586c6c41aeb68eae9bfb4558a522c35f1430c14b40136c3706e09e4" dependencies = [ "ahash 0.3.8", ] @@ -146,14 +146,14 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "curlywas" version = "0.1.0" -source = "git+https://github.com/exoticorn/curlywas.git?rev=196719b#196719b35ef377cb7e001554b27ac5de013dcf2b" +source = "git+https://github.com/exoticorn/curlywas.git?rev=89638565#896385654ab2c089200920b6dea4abec641c88d6" dependencies = [ "anyhow", "ariadne", "chumsky", "pico-args", - "wasm-encoder", - "wasmparser", + "wasm-encoder 0.10.0", + "wasmparser 0.83.0", ] [[package]] @@ -197,6 +197,21 @@ dependencies = [ "ahash 0.7.6", ] +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + [[package]] name = "lazy_static" version = "1.4.0" @@ -227,6 +242,15 @@ dependencies = [ "rgb", ] +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + [[package]] name = "miniz_oxide" version = "0.4.4" @@ -286,6 +310,24 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + [[package]] name = "rgb" version = "0.8.31" @@ -304,6 +346,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "time" version = "0.1.43" @@ -323,6 +376,18 @@ dependencies = [ "crunchy", ] +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + [[package]] name = "upkr" version = "0.1.0" @@ -342,8 +407,9 @@ dependencies = [ "pbr", "pico-args", "upkr", - "wasm-encoder", - "wasmparser", + "walrus", + "wasm-encoder 0.8.0", + "wasmparser 0.81.0", ] [[package]] @@ -352,6 +418,32 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "walrus" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb08e48cde54c05f363d984bb54ce374f49e242def9468d2e1b6c2372d291f8" +dependencies = [ + "anyhow", + "id-arena", + "leb128", + "log", + "walrus-macro", + "wasmparser 0.77.0", +] + +[[package]] +name = "walrus-macro" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e5bd22c71e77d60140b0bd5be56155a37e5bd14e24f5f87298040d0cc40d7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -367,12 +459,33 @@ dependencies = [ "leb128", ] +[[package]] +name = "wasm-encoder" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9d9bf45fc46f71c407837c9b30b1e874197f2dc357588430b21e5017d290ab" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmparser" +version = "0.77.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" + [[package]] name = "wasmparser" version = "0.81.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc" +[[package]] +name = "wasmparser" +version = "0.83.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" + [[package]] name = "winapi" version = "0.3.9" diff --git a/platform/Cargo.toml b/platform/Cargo.toml index 12ec78c..a840f8d 100644 --- a/platform/Cargo.toml +++ b/platform/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="196719b" } +curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="89638565" } uw8-tool = { path="../uw8-tool" } anyhow = "1" lodepng = "3.4" \ No newline at end of file diff --git a/platform/bin/loader.wasm b/platform/bin/loader.wasm index bf56884..12115eb 100644 Binary files a/platform/bin/loader.wasm and b/platform/bin/loader.wasm differ diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index 5ae23fa..b2aca00 100644 Binary files a/platform/bin/platform.uw8 and b/platform/bin/platform.uw8 differ diff --git a/platform/src/main.rs b/platform/src/main.rs index c0809bb..747fa84 100644 --- a/platform/src/main.rs +++ b/platform/src/main.rs @@ -12,15 +12,15 @@ fn main() -> Result<()> { println!("Compiling loader module"); let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default())?; - File::create("bin/loader.wasm")?.write_all(&loader)?; + File::create("bin/loader.wasm")?.write_all(&loader.wasm)?; - println!("Loader (including base module): {} bytes", loader.len()); + println!("Loader (including base module): {} bytes", loader.wasm.len()); println!("Compiling platform module"); let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default())?; println!("Compressing platform module"); let platform = uw8_tool::pack( - &platform, + &platform.wasm, &uw8_tool::PackConfig::default().with_compression_level(4), )?; File::create("bin/platform.uw8")?.write_all(&platform)?; diff --git a/platform/src/platform.cwa b/platform/src/platform.cwa index 67ef63e..8cc97bc 100644 --- a/platform/src/platform.cwa +++ b/platform/src/platform.cwa @@ -256,6 +256,11 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) { p = y1; } + if max_axis == 0 as f32 { + setPixel(x1 as i32, y1 as i32, col); + return; + } + let steps = floor(p + max_axis) as i32 - floor(p) as i32; p = floor(p) + 0.5 - p; if max_axis < 0 as f32 { @@ -267,7 +272,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) { dy = dy / max_axis; let f = min(max_axis, max(0 as f32, p)); - setPixel((x1 + f * dx) as i32, (y1 + f * dy) as i32, col); + setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col); if !steps { return; @@ -280,7 +285,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) { loop pixels { if steps := steps - 1 { - setPixel(x1 as i32, y1 as i32, col); + setPixel(i32.trunc_sat_f32_s(x1), i32.trunc_sat_f32_s(y1), col); x1 = x1 + dx; y1 = y1 + dy; branch pixels; @@ -288,7 +293,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) { } f = min(max_axis, p) - p; - setPixel((x1 + f * dx) as i32, (y1 + f * dy) as i32, col); + setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col); } //////////