add support for .wat files, add xorscroll.wat example

This commit is contained in:
2021-12-16 23:58:58 +01:00
parent 299c08af5b
commit 581740cbdb
5 changed files with 33 additions and 1 deletions

1
Cargo.lock generated
View File

@@ -1543,6 +1543,7 @@ dependencies = [
"pico-args", "pico-args",
"uw8-tool", "uw8-tool",
"wasmtime", "wasmtime",
"wat",
] ]
[[package]] [[package]]

View File

@@ -12,4 +12,5 @@ minifb = "0.19"
notify = "4" notify = "4"
pico-args = "0.4" pico-args = "0.4"
curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "196719b" } curlywas = { git = "https://github.com/exoticorn/curlywas.git", rev = "196719b" }
wat = "1"
uw8-tool = { path = "uw8-tool" } uw8-tool = { path = "uw8-tool" }

View File

@@ -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
)
)
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -97,7 +97,11 @@ fn load_cart(filename: &Path, uw8: &mut MicroW8, config: &Config) -> Result<()>
if cart[0] >= 10 { if cart[0] >= 10 {
let src = String::from_utf8(cart)?; 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 { if config.pack {