From a9ec95c11082a7047e7554b0d533500aa2bd848a Mon Sep 17 00:00:00 2001 From: Brad Nelson Date: Sat, 2 Jan 2021 00:55:08 -0800 Subject: [PATCH] More web stuff. --- ueforth/web/dump_web_opcodes.c | 2 +- ueforth/web/web.template.js | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ueforth/web/dump_web_opcodes.c b/ueforth/web/dump_web_opcodes.c index 5141191..ee3d64b 100644 --- a/ueforth/web/dump_web_opcodes.c +++ b/ueforth/web/dump_web_opcodes.c @@ -4,7 +4,7 @@ #include "common/opcodes.h" #define PLATFORM_OPCODE_LIST \ - X("CALL", OP_CALL, sp = jscall(sp, tos); DROP) \ + X("CALL", OP_CALL, sp = Call(sp, tos); DROP) \ enum { OP_NONE = -1, diff --git a/ueforth/web/web.template.js b/ueforth/web/web.template.js index 47613ac..277e0a9 100644 --- a/ueforth/web/web.template.js +++ b/ueforth/web/web.template.js @@ -10,6 +10,26 @@ const boot = ` {{boot}} `; +var buffer = new ArrayBuffer(HEAP_SIZE); +var i32 = new Int32Array(buffer); +var u8 = new Uint8Array(buffer); +var objects = [SetEval]; + +function SetEval(sp) { + var index = i32[sp--]; + var len = i32[sp--]; + var code_addr = i32[sp--]; + var code = ''; + for (var i = 0; i < len; ++i) { + code += String.fromCharCode(u8[name_addr + i]); + } + objects[index] = eval(code); +} + +function Call(sp, tos) { + return objects[tos](sp); +} + function create(name, opcode) { } @@ -22,12 +42,7 @@ function Interpreter(stdlib, foreign, heap) { var imul = stdlib.Math.imul; - var exit = foreign.exit; - var emit = foreign.emit; - var qkey = foreign.qkey; - var color = foreign.color; - var print_decimal = foreign.print_decimal; - var print_hexadecimal = foreign.print_hexadecimal; + var Call = foreign.Call; var u8 = new stdlib.Uint8Array(heap); var i32 = new stdlib.Int32Array(heap);