From 8fa64519e4951f2d161ad4ce4f6d3e3444a8630e Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Tue, 19 Apr 2022 00:27:53 +0200 Subject: [PATCH] add playNote fn and bell chr (7) --- examples/include/microw8-api.cwa | 1 + examples/include/microw8-api.wat | 1 + platform/bin/loader.wasm | Bin 1255 -> 1262 bytes platform/bin/platform.uw8 | Bin 3685 -> 3758 bytes platform/src/platform.cwa | 36 +++++++++++++++++++++---------- uw8-tool/src/base_module.rs | 9 ++++++-- 6 files changed, 34 insertions(+), 13 deletions(-) diff --git a/examples/include/microw8-api.cwa b/examples/include/microw8-api.cwa index 5d50279..ff74ebb 100644 --- a/examples/include/microw8-api.cwa +++ b/examples/include/microw8-api.cwa @@ -33,6 +33,7 @@ import "env.setCursorPosition" fn setCursorPosition(i32, i32); import "env.rectangle_outline" fn rectangle_outline(f32, f32, f32, f32, i32); import "env.circle_outline" fn circle_outline(f32, f32, f32, i32); import "env.exp" fn exp(f32) -> f32; +import "env.playNote" fn playNote(i32, i32); const TIME_MS = 0x40; const GAMEPAD = 0x44; diff --git a/examples/include/microw8-api.wat b/examples/include/microw8-api.wat index 7024a2d..116b669 100644 --- a/examples/include/microw8-api.wat +++ b/examples/include/microw8-api.wat @@ -33,6 +33,7 @@ (import "env" "rectangle_outline" (func $rectangle_outline (param f32) (param f32) (param f32) (param f32) (param i32))) (import "env" "circle_outline" (func $circle_outline (param f32) (param f32) (param f32) (param i32))) (import "env" "exp" (func $exp (param f32) (result f32))) +(import "env" "playNote" (func $playNote (param i32) (param i32))) ;; to use defines, include this file with a preprocessor ;; like gpp (https://logological.org/gpp). diff --git a/platform/bin/loader.wasm b/platform/bin/loader.wasm index 12115ebf9069e6900664b41e8f9fa45976743ef6..e5a4279099438a472186787cd308f3511c22eaf7 100644 GIT binary patch delta 492 zcmVzH<&UgnMXHBtABpSG8 z8Vpoqgg|eiOSNy1%H_xg%MCY@1X@P^tl^*Xw2NxM-3iY(M$3P$3nKL2zjeC_aEnCz zn3R69QT*A-3Y0EWE379!DgpOTBuV1f_(*P?IBi&PI}vO!bqnHwgCR{0g32$KdRY>y zpr;85*{lkeuJJ5M?*3rgcODH47bh2a(8!=r4Fo)&J*o^fi?vXHdfbE zO8ddL>d`}c{T_cy#V=FeY*3TB5xE=8_-D~2u1CZdk6*St-$8MxEIV4bnWf>;6e z|APG%62u&ivGZ+&-Ix0;$-CE)a`};eaHxjnjr*>-Vvy(ZsT6+#R77cw2pi7h8lJET z6AJyZrFj0xP>~1A^NOFag5MIrvHjMW#yxNf*3$Nh1tMhSKX?UF>iGEo&I~%b#-}=G z;(w1NypWD#buntZ`S!Rac%RY`TP3RLH9lY delta 485 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 ZxW{SJ&K;;Xt7?NQ2BL_rhC!9f)<#5LOT_>H delta 3634 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 7) + } else { + 0 + }; +} + +data 80 { + i8( + 0x80, 0xc0, 0, 81, 0xa0, 0x50, + 0xc4, 0, 0, 69, 0x60, 0x40, + 0x44, 0xb0, 0, 69, 0x90, 0x43, + 0x4, 0xf0, 0, 69, 0xa4, 0x44, + 0xff, 0xff, + 1, 1, 0, 100, 0, 100 + ) +} + /////////// // SETUP // /////////// @@ -565,17 +590,6 @@ start fn setup() { randomSeed(random()); } -data 80 { - i8( - 0, 128, 0, 69, 0x8, 0xc8, - 0, 128, 0, 69, 0x8, 0xc8, - 0, 128, 0, 69, 0x8, 0xc8, - 0, 128, 0, 69, 0x8, 0xc8, - 0xff, 0xff, - 1, 1, 0, 100, 0, 100 - ) -} - data 0x12c78 { i32(80) } diff --git a/uw8-tool/src/base_module.rs b/uw8-tool/src/base_module.rs index c9c042f..1e3a29c 100644 --- a/uw8-tool/src/base_module.rs +++ b/uw8-tool/src/base_module.rs @@ -166,6 +166,8 @@ impl BaseModule { add_function(&mut functions, &type_map, "exp", &[F32], Some(F32)); + add_function(&mut functions, &type_map, "playNote", &[I32, I32], None); + for i in functions.len()..64 { add_function( &mut functions, @@ -291,7 +293,10 @@ impl BaseModule { pub fn write_as_cwa>(&self, path: P) -> Result<()> { fn inner(mut file: File, base: &BaseModule) -> Result<()> { - writeln!(file, "// MicroW8 APIs, to be `include`d in CurlyWas sources")?; + writeln!( + file, + "// MicroW8 APIs, to be `include`d in CurlyWas sources" + )?; writeln!(file, "import \"env.memory\" memory({});", base.memory)?; writeln!(file)?; for &(module, ref name, type_id) in &base.function_imports { @@ -402,5 +407,5 @@ const CONSTANTS: &[(&str, u32)] = &[ ("BUTTON_A", 4), ("BUTTON_B", 5), ("BUTTON_X", 6), - ("BUTTON_Y", 7) + ("BUTTON_Y", 7), ];