Web boots to prompt.

This commit is contained in:
Brad Nelson
2022-07-14 13:49:31 -07:00
parent 521c756031
commit 9d79b26e9e
2 changed files with 19 additions and 17 deletions

View File

@ -19,9 +19,9 @@ forth definitions internals
( Bring a forth to the top of the vocabulary. ) ( Bring a forth to the top of the vocabulary. )
: ok ." uEforth" raw-ok ; : ok ." uEforth" raw-ok ;
: dummy-type 2drop yield ; ' dummy-type is type : web-type 0 call ; ' web-type is type
: dummy-key yield 0 ; ' dummy-key is key : web-key yield 0 ; ' web-key is key
: dummy-key? yield 0 ; ' dummy-key? is key? : web-key? yield 0 ; ' web-key? is key?
transfer forth transfer forth
forth forth

View File

@ -25,7 +25,7 @@ const SMUDGE = 2;
const BUILTIN_FORK = 4; const BUILTIN_FORK = 4;
const BUILTIN_MARK = 8; const BUILTIN_MARK = 8;
const DEBUGGING = true; const DEBUGGING = false;
{{boot}} {{boot}}
@ -36,23 +36,25 @@ var u16 = new Uint16Array(heap);
var u8 = new Uint8Array(heap); var u8 = new Uint8Array(heap);
var builtins = []; var builtins = [];
var opcodes = {}; var opcodes = {};
var objects = [SetEval]; var objects = [Type, Eval];
{{sys}} {{sys}}
function SetEval(sp) { function Type(sp) {
var index = i32[sp--]; var n = i32[sp>>2]; sp -= 4;
var len = i32[sp--]; var a = i32[sp>>2]; sp -= 4;
var code_addr = i32[sp--]; console.log(GetString(a, n));
var code = '';
for (var i = 0; i < len; ++i) {
code += String.fromCharCode(u8[name_addr + i]);
}
objects[index] = eval(code);
} }
function Call(sp, tos) { function Eval(sp) {
return objects[tos](sp); var n = i32[sp>>2]; sp -= 4;
var a = i32[sp>>2]; sp -= 4;
eval(GetString(a, n));
}
function Call(sp) {
var op = i32[sp>>2]; sp -= 4;
return objects[op](sp);
} }
function Load(addr, content) { function Load(addr, content) {
@ -533,7 +535,7 @@ function VM(stdlib, foreign, heap) {
fp = i32[rp>>2]|0; rp = (rp - 4)|0; fp = i32[rp>>2]|0; rp = (rp - 4)|0;
tos = i32[sp>>2]|0; sp = (sp - 4)|0; tos = i32[sp>>2]|0; sp = (sp - 4)|0;
for (;;) { for (;;) {
trace(ip|0, sp|0, tos|0); //trace(ip|0, sp|0, tos|0);
w = i32[ip>>2]|0; w = i32[ip>>2]|0;
ip = (ip + 4)|0; ip = (ip + 4)|0;
decode: for (;;) { decode: for (;;) {