X-Git-Url: https://git.kengrimes.com/?p=watForth.git;a=blobdiff_plain;f=forth.wat;fp=forth.wat;h=989b85d95adc2eb29786b969eb1d83b78c4af632;hp=a2498a37fe907a94b322169d3a275b144b084c26;hb=9a5c53df66d6f68395d9b11084482a7b1edf265e;hpb=5d787df4e2ff2a70cde1b599a3ff99faf9136179 diff --git a/forth.wat b/forth.wat index a2498a3..989b85d 100644 --- a/forth.wat +++ b/forth.wat @@ -13,7 +13,7 @@ (import "env" "sys_read" (func $sys_read (param i32 i32) (result i32))) (import "env" "sys_fetch" (func $sys_fetch (param i32 i32) (result i32))) (import "env" "sys_listen" (func $sys_listen (param i32) (result i32))) - (import "env" "sys_write" (func $sys_write (param i32 i32) (result i32))) + (import "env" "sys_write" (func $sys_write (param i32 i32 i32) (result i32))) (import "env" "sys_echo" (func $sys_echo (param i32))) (import "env" "sys_echochar" (func $sys_echochar (param i32))) (import "env" "sys_reflect" (func $sys_reflect (param i32))) @@ -75,8 +75,8 @@ (data (i32.const 16544) "\0e\00\00\00") ;; JZ: (data (i32.const 16548) "\e4\40\00\00") ;; addr of DOCHAR (data (i32.const 16552) "\10\00\00\00") ;; DROP - (data (i32.const 16556) "\c8\40\00\00") ;; WORDLOOP (continue using this wbuf we started) - (data (i32.const 16560) "\28\41\00\00") ;; EXECUTE-MODE + (data (i32.const 16556) "\94\41\00\00") ;; DO-BACKSLASH (continue using this wbuf we started) + (data (i32.const 16560) "\0d\00\00\00") ;; NOOP (data (i32.const 16564) "\12\00\00\00") ;; JMP: (data (i32.const 16568) "\74\40\00\00") ;; addr of KEYLOOP-1 (get a new wbuf, call to wbuf+1 ate ours) (data (i32.const 16572) "\10\00\00\00") ;; DROP <-- KEYDROP @@ -115,11 +115,27 @@ (data (i32.const 16744) "\10\00\00\00") ;; PARSE_ERR <-- donum_err (data (i32.const 16748) "\10\00\00\00") ;; ( DROP DROP ) (data (i32.const 16752) "\19\00\00\00") ;; BYE - (; : definition ;) - (data (i32.const 16800) "\74\40\00\00") ;; WORD - (data (i32.const 16804) "\1c\00\00\00") ;; HERE - (data (i32.const 16808) "\1d\00\00\00") ;; VOCAB_SET - (data (i32.const 16812) "\01\00\00\00") ;; RET + (; Do Backslash ;) + (data (i32.const 16788) "\05\00\00\00") ;; KEY + (data (i32.const 16792) "\02\00\00\00") ;; LIT + (data (i32.const 16796) "\20\00\00\00") ;; 32 (space) + (data (i32.const 16800) "\25\00\00\00") ;; =? + (data (i32.const 16804) "\0f\00\00\00") ;; JNZ: + (data (i32.const 16808) "\bc\41\00\00") ;; addr of keypump + (data (i32.const 16812) "\cc\40\00\00") ;; WORDLOOP + 1 + (data (i32.const 16816) "\28\41\00\00") ;; EXECUTE-MODE + (data (i32.const 16820) "\01\00\00\00") ;; RET + (data (i32.const 16828) "\18\00\00\00") ;; j-1: <-- keypump + (data (i32.const 16832) "\e0\41\00\00") ;; addr of end + (data (i32.const 16836) "\05\00\00\00") ;; KEY + (data (i32.const 16840) "\02\00\00\00") ;; LIT + (data (i32.const 16844) "\0a\00\00\00") ;; 10 (line feed) + (data (i32.const 16848) "\25\00\00\00") ;; =? + (data (i32.const 16852) "\0e\00\00\00") ;; JZ: + (data (i32.const 16856) "\bc\41\00\00") ;; addr of keypump + (data (i32.const 16860) "\10\00\00\00") ;; DROP + (data (i32.const 16864) "\01\00\00\00") ;; RET + (export "memory" (memory $0)) (export "main" (func $main)) (func $main (result i32) @@ -178,13 +194,22 @@ block $dictget block $parsenum block $wordfinish block $jneg1 block $swap block $words block $here block $dictset block $dup2 block $rot block $drop2 block $comma block $subtract block $keychan block $sethere block $eqbool + block $echostring get_local $eax br_table $op0 $ret (;2;)$lit $rinit (;4;)$word $key (;6;)$dup $plus (;8;)$jmp $emit (;10;)$fetch $set (;12;)$execute $noop (;14;)$jz $jnz (;16;)$drop $wsbool (;18;)$jmp $wordputc (;20;)$wordstart $dictget (;22;)$parsenum $wordfinish (;24;)$jneg1 $bye (;26;)$swap $words (;28;)$here $dictset (;30;)$dup2 $rot (;32;)$drop2 $comma - (;34;)$subtract $keychan (;36;)$sethere $eqbool $default + (;34;)$subtract $keychan (;36;)$sethere $eqbool (;38;)$echostring $default + end ;; echostring + get_local $channel + call $pop + set_local $eax + call $pop + get_local $eax + call $sys_write + br $next end ;; eqbool block $equiv call $pop