From 581740cbdb5c4525963c3d50c80d59528f1faa43 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Thu, 16 Dec 2021 23:58:58 +0100 Subject: [PATCH] add support for .wat files, add xorscroll.wat example --- Cargo.lock | 1 + Cargo.toml | 1 + examples/wat/xorscroll.wat | 26 ++++++++++++++++++++++++++ platform/src/font.png | Bin 3080 -> 3071 bytes src/main.rs | 6 +++++- 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 examples/wat/xorscroll.wat diff --git a/Cargo.lock b/Cargo.lock index 3dacab7..c05b229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1543,6 +1543,7 @@ dependencies = [ "pico-args", "uw8-tool", "wasmtime", + "wat", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 6bdc23d..e2a01cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,4 +12,5 @@ minifb = "0.19" notify = "4" pico-args = "0.4" curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "196719b" } +wat = "1" uw8-tool = { path = "uw8-tool" } \ No newline at end of file diff --git a/examples/wat/xorscroll.wat b/examples/wat/xorscroll.wat new file mode 100644 index 0000000..fdbc09a --- /dev/null +++ b/examples/wat/xorscroll.wat @@ -0,0 +1,26 @@ +(module + (import "env" "memory" (memory 4)) + (func (export "upd") + (local $i i32) ;; local variables are zero initialized + + (loop $pixels + local.get $i ;; pixel index to write to + + (i32.rem_u (local.get $i) (i32.const 320)) ;; x + (i32.div_u (i32.load (i32.const 64)) (i32.const 10)) ;; time / 10 + i32.add + + (i32.div_u (local.get $i) (i32.const 320)) ;; y + + i32.xor ;; (x + time / 10) ^ y + (i32.shr_u (i32.const 3)) ;; .. >> 3 + (i32.and (i32.const 127)) ;; .. & 127 + + i32.store8 offset=120 ;; store at pixel index + 120 + + (i32.add (local.get $i) (i32.const 1)) ;; i + 1 + local.tee $i ;; write it back but keep it on the stack + (br_if $pixels (i32.lt_s (i32.const 76800))) ;; branch to start of loop if i < 320*240 + ) + ) +) diff --git a/platform/src/font.png b/platform/src/font.png index 06c2f99689c4c14ccda565d89db6efc0343be26e..b262f4bcac5df4776af138044fba0c145eea7c86 100644 GIT binary patch delta 3052 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 De;)Ap diff --git a/src/main.rs b/src/main.rs index 48d0ff9..7a13599 100644 --- a/src/main.rs +++ b/src/main.rs @@ -97,7 +97,11 @@ fn load_cart(filename: &Path, uw8: &mut MicroW8, config: &Config) -> Result<()> if cart[0] >= 10 { let src = String::from_utf8(cart)?; - cart = curlywas::compile_str(&src, filename, curlywas::Options::default())?; + cart = if src.chars().find(|c| !c.is_whitespace()) == Some('(') { + wat::parse_str(src)? + } else { + curlywas::compile_str(&src, filename, curlywas::Options::default())? + }; } if config.pack {