sample_wasm.hsp

sample\iron\sample_wasm.hsp » Plain Format

;============================================================
;  sample_wasm.hsp — hspwasm.dll 最小デモ
;
;  add.wasm (エクスポート関数 add(a: i32, b: i32) -> i32) を
;  ロードして呼び出すサンプル。
;
;  add.wasm のビルド例 (wat2wasm):
;    ;; add.wat
;    (module
;      (func (export "add") (param i32 i32) (result i32)
;        local.get 0
;        local.get 1
;        i32.add)
;      (memory (export "memory") 1))
;
;    wat2wasm add.wat -o add.wasm
;
;  または Rust で:
;    #[no_mangle]
;    pub extern "C" fn add(a: i32, b: i32) -> i32 { a + b }
;    cargo build --target wasm32-unknown-unknown --release
;============================================================

#include "hsp3_net_64.as"
#include "iron_wasm.hsp"

    title "hspwasm sample"
    screen 0, 640, 400
    font "MS Gothic", 14

    wasm_open "add.wasm"
    h = stat
    if h < 0 {
        mes "wasm_open に失敗しました (code=" + h + ")"
        mes "add.wasm が見つからないか、壊れている可能性があります。"
        stop
    }
    mes "add.wasm をハンドル " + h + " でロードしました"

    ; linear memory サイズ
    wasm_mem_size h
    mes "linear memory size = " + stat + " bytes"

    ; add(3, 4)
    r = wasm_call2(h, "add", 3, 4)
    mes "add(3, 4) = " + r

    ; add(100, 200)
    r = wasm_call2(h, "add", 100, 200)
    mes "add(100, 200) = " + r

    ; argc=0 テスト (もし wasm 側に get_zero があれば)
    ; r = wasm_call0(h, "get_zero")
    ; mes "get_zero() = " + r

    wasm_close h
    mes "OK"
    stop