sample_wasm_shared.hsp

sample\iron\wasm_shared\sample_wasm_shared.hsp » Plain Format

;============================================================
;   sample_wasm_shared.hsp
;       同じ shared.wasm を HSP とブラウザ両方から呼んで
;       結果が一致することを確認するデモ。
;
;   shared.wasm (131 byte) が export する関数:
;       add(a, b)   → a + b
;       mul(a, b)   → a * b
;       fib(n)      → フィボナッチ (n=10 → 55)
;       sum_to(n)   → 1+2+...+n    (n=100 → 5050)
;
;   ブラウザ側は同じファイルを browser.html (同ディレクトリ) から
;   fetch + WebAssembly.instantiate で読むだけ。ビルド手順も
;   ランタイムも違うのに全く同じバイト列が同じ答えを返す。
;
;   ※ 実行には hspwasm.dll (または 64bit なら hspwasm_64.dll) が
;      HSP ランタイムディレクトリに配置されている必要あり。
;   ※ このサンプルはコンソール (hsp3cl) でも GUI (hsp3) でも動く。
;      shared.wasm と同じディレクトリから実行すること。
;============================================================

#include "hspwasm.as"

    mes "=== hspwasm — shared.wasm demo ==="
    mes ""

    wasm_load "shared.wasm", h
    if h < 0 {
        mes "ERROR: shared.wasm のロードに失敗 (stat=" + h + ")"
        mes "このスクリプトは shared.wasm と同じディレクトリから実行してください。"
        stop
    }
    mes "shared.wasm (131 bytes) を hspwasm でロードしました。"

    wasm_memory_size h, sz
    mes "linear memory size = " + sz + " bytes"
    mes ""

    mes "----- HSP から WebAssembly 関数を呼んでみる -----"

    dim args2, 2
    dim args1, 1

    args2(0) = 12 : args2(1) = 30
    wasm_call_i h, "add", args2, 2, r
    mes "add(12, 30)    = " + r        ; → 42

    args2(0) = 7 : args2(1) = 6
    wasm_call_i h, "mul", args2, 2, r
    mes "mul(7, 6)      = " + r        ; → 42

    args1(0) = 10
    wasm_call_i h, "fib", args1, 1, r
    mes "fib(10)        = " + r        ; → 55

    args1(0) = 20
    wasm_call_i h, "fib", args1, 1, r
    mes "fib(20)        = " + r        ; → 6765

    args1(0) = 100
    wasm_call_i h, "sum_to", args1, 1, r
    mes "sum_to(100)    = " + r        ; → 5050
    mes ""

    mes "同じ shared.wasm をブラウザで開いた場合の期待値:"
    mes "  add(12,30)=42 / mul(7,6)=42 / fib(10)=55 /"
    mes "  fib(20)=6765  / sum_to(100)=5050"
    mes ""
    mes "browser.html をダブルクリックしてブラウザで開いて比較してください。"

    wasm_close h
    stop