diff --git a/Makefile b/Makefile index c6773a4e9a3373e3c45f870f2744bc25009f2ada..ff5be07e8f3586871fe705ee0c5506e603813caf 100644 --- a/Makefile +++ b/Makefile @@ -12,4 +12,8 @@ build-wasm: win-exe-icon: windres -o main_rc_windows.syso main.rc +arduino: + go run main.go build -target=arduino arduino.wa + wat2wasm a.out.wat -o a.out.wasm + clean: diff --git a/arduino.wa b/arduino.wa new file mode 100644 index 0000000000000000000000000000000000000000..c2440ee76ec1685b52315138fd9dd79b22715501 --- /dev/null +++ b/arduino.wa @@ -0,0 +1,19 @@ +# 版权 @2022 凹语言 作者。保留所有权利。 + +import "syscall/arduino" + +var LED = arduino.GetPinLED() + +fn init() { + arduino.PinMode(LED, 1) + arduino.Println("Wa is running 😎") +} + +fn main() { + for { + arduino.DigitalWrite(LED, arduino.HIGH) + arduino.Delay(100) + arduino.DigitalWrite(LED, arduino.LOW) + arduino.Delay(900) + } +} diff --git a/internal/waroot/_waroot/src/runtime/runtime.wa b/internal/waroot/_waroot/src/runtime/runtime.wa index dc074647f4db4429f0e0455c1f7d2f0e79163394..faaa0fa36a2fac380f5e4111fed725310dd1d44f 100644 --- a/internal/waroot/_waroot/src/runtime/runtime.wa +++ b/internal/waroot/_waroot/src/runtime/runtime.wa @@ -1,13 +1 @@ # 版权 @2019 凹语言 作者。保留所有权利。 - -#wa:import wa_js_env waPrintI32 -#wa:linkname $runtime.waPrintI32 -fn waPrintI32(i: i32) - -#wa:import wa_js_env waPrintRune -#wa:linkname $runtime.waPrintRune -fn waPrintRune(ch: i32) - -#wa:import wa_js_env waPuts -#wa:linkname $runtime.waPuts -fn waPuts(ptr: i32, len: i32) diff --git a/internal/waroot/_waroot/src/runtime/runtime_arduino.wa b/internal/waroot/_waroot/src/runtime/runtime_arduino.wa index f508959a071a3f512c6493003969b989c8f9f35a..8237592466bfa9112eeaaba2c1b3bcee391531c2 100644 --- a/internal/waroot/_waroot/src/runtime/runtime_arduino.wa +++ b/internal/waroot/_waroot/src/runtime/runtime_arduino.wa @@ -1,3 +1,12 @@ # 版权 @2022 凹语言 作者。保留所有权利。 var WAOS = "arduino" + +#wa:linkname $runtime.waPrintI32 +fn waPrintI32(i: i32) {} + +#wa:linkname $runtime.waPrintRune +fn waPrintRune(ch: i32) {} + +#wa:linkname $runtime.waPuts +fn waPuts(ptr: i32, len: i32) {} diff --git a/internal/waroot/_waroot/src/runtime/runtime_chrome.wa b/internal/waroot/_waroot/src/runtime/runtime_chrome.wa index d154102f2c08dfffa852c955f190a98c41267605..309402c8cb3f7c3aeb61f15f9f1785b55e3a96ef 100644 --- a/internal/waroot/_waroot/src/runtime/runtime_chrome.wa +++ b/internal/waroot/_waroot/src/runtime/runtime_chrome.wa @@ -1,3 +1,15 @@ # 版权 @2022 凹语言 作者。保留所有权利。 var WAOS = "chrome" + +#wa:import wa_js_env waPrintI32 +#wa:linkname $runtime.waPrintI32 +fn waPrintI32(i: i32) + +#wa:import wa_js_env waPrintRune +#wa:linkname $runtime.waPrintRune +fn waPrintRune(ch: i32) + +#wa:import wa_js_env waPuts +#wa:linkname $runtime.waPuts +fn waPuts(ptr: i32, len: i32) diff --git a/internal/waroot/_waroot/src/runtime/runtime_walang.wa b/internal/waroot/_waroot/src/runtime/runtime_walang.wa index 2da3aff2b8f7651f74d1ff95d89f1566b44a38dd..0a34fc6a021bb7c588be87a14be0b6daccf9622a 100644 --- a/internal/waroot/_waroot/src/runtime/runtime_walang.wa +++ b/internal/waroot/_waroot/src/runtime/runtime_walang.wa @@ -1,3 +1,15 @@ # 版权 @2022 凹语言 作者。保留所有权利。 var WAOS = "walang" + +#wa:import wa_js_env waPrintI32 +#wa:linkname $runtime.waPrintI32 +fn waPrintI32(i: i32) + +#wa:import wa_js_env waPrintRune +#wa:linkname $runtime.waPrintRune +fn waPrintRune(ch: i32) + +#wa:import wa_js_env waPuts +#wa:linkname $runtime.waPuts +fn waPuts(ptr: i32, len: i32) diff --git a/internal/waroot/_waroot/src/runtime/runtime_wasi.wa b/internal/waroot/_waroot/src/runtime/runtime_wasi.wa index 6008e424eaf2f53740297b19ea83daaa9047c33b..aab3268b323a00ab504dbb4fba046f6afda432a5 100644 --- a/internal/waroot/_waroot/src/runtime/runtime_wasi.wa +++ b/internal/waroot/_waroot/src/runtime/runtime_wasi.wa @@ -1,3 +1,15 @@ # 版权 @2022 凹语言 作者。保留所有权利。 var WAOS = "wasi" + +#wa:import wa_js_env waPrintI32 +#wa:linkname $runtime.waPrintI32 +fn waPrintI32(i: i32) + +#wa:import wa_js_env waPrintRune +#wa:linkname $runtime.waPrintRune +fn waPrintRune(ch: i32) + +#wa:import wa_js_env waPuts +#wa:linkname $runtime.waPuts +fn waPuts(ptr: i32, len: i32) diff --git a/internal/waroot/_waroot/src/syscall/arduino/arduino.wa b/internal/waroot/_waroot/src/syscall/arduino/arduino.wa index 63d0ee891dd7ec661ff465bea43f8c5711a7de3c..e53e160766cf653403ab868e65dfb2509951b7f7 100644 --- a/internal/waroot/_waroot/src/syscall/arduino/arduino.wa +++ b/internal/waroot/_waroot/src/syscall/arduino/arduino.wa @@ -1,33 +1,33 @@ # 版权 @2022 凹语言 作者。保留所有权利。 -const ( - LOW = 0 - HIGH = 1 +var ( + LOW :i32 = 0 + HIGH :i32 = 1 - INPUT = 0 - OUTPUT = 1 - INPUT_PULLUP = 2 + INPUT :i32 = 0 + OUTPUT :i32 = 1 + INPUT_PULLUP :i32 = 2 ) #wa:import arduino millis #wa:linkname $waMillis -fn Millis() => uint +fn Millis() => i32 #wa:import arduino delay #wa:linkname $waDelay -fn Delay(ms: uint) +fn Delay(ms: i32) #wa:import arduino pinMode #wa:linkname $waPinMode -fn PinMode(pin, mode: uint) +fn PinMode(pin, mode: i32) #wa:import arduino digitalWrite #wa:linkname $waDigitalWrite -fn DigitalWrite(pin, value: uint) +fn DigitalWrite(pin, value: i32) #wa:import arduino getPinLED #wa:linkname $waGetPinLED -fn GetPinLED() => uint +fn GetPinLED() => i32 #wa:import arduino print #wa:linkname $waPrint @@ -35,27 +35,13 @@ fn Print(s: string) #wa:import arduino getGreeting #wa:linkname $waGetGreeting -fn _getGreeting(buf: *byte, maxlen: uint) +fn _getGreeting(buf: *byte, maxlen: i32) fn Println(s: string) { Print(s) Print("\n") } -fn GetGreeting() => string { - var buf = make([]byte, 64) - _getGreeting(&buf[0], 64) - # Find '\0' - n := -1 - for i, b := range buf { - if b == 0 { - break - } - n = i - } - return string(buf[:n+1]) -} - #wa:linkname $waPrintI32 fn waPrintI32(i: i32) { # TODO