Improve web.

This commit is contained in:
Brad Nelson
2021-01-13 23:50:52 -08:00
parent 222a51826f
commit b575aa3871
2 changed files with 64 additions and 7 deletions

View File

@ -15,8 +15,8 @@ static struct {
cell_t *heap, *last, notfound;
int argc;
char **argv;
cell_t DOLIT_XT, DOEXIT_XT, YIELD_XT;
cell_t *ip, *sp, *rp; // Parked alternates
cell_t DOLIT_XT, DOEXIT_XT, YIELD_XT;
} g_sys;
static cell_t convert(const char *pos, cell_t n, cell_t *ret) {

View File

@ -14,6 +14,20 @@ var heap = new ArrayBuffer(HEAP_SIZE);
var i32 = new Int32Array(heap);
var u8 = new Uint8Array(heap);
var objects = [SetEval];
var g_sys = 256; // Placed past a gap.
var g_tib = g_sys + 0 * 4;
var g_ntib = g_sys + 1 * 4;
var g_tin = g_sys + 2 * 4;
var g_state = g_sys + 3 * 4;
var g_base = g_sys + 4 * 4;
var g_heap = g_sys + 5 * 4;
var g_last = g_sys + 6 * 4;
var g_notfound = g_sys + 7 * 4;
var g_argc = g_sys + 8 * 4;
var g_argv = g_sys + 9 * 4;
var g_ip = g_sys + 10 * 4;
var g_sp = g_sys + 11 * 4;
var g_rp = g_sys + 12 * 4;
function SetEval(sp) {
var index = i32[sp--];
@ -30,6 +44,13 @@ function Call(sp, tos) {
return objects[tos](sp);
}
function Load(addr, content) {
for (var i = 0; i < content.length; ++i) {
u8[addr++] = content.charCodeAt(i);
}
return addr;
}
function create(name, opcode) {
}
@ -37,6 +58,36 @@ function InitDictionary() {
{{dict}}
}
function Init() {
i32[g_heap>>2] = g_sys + 16 * 4;
var source = g_heap;
i32[g_heap>>2] = Load(i32[g_heap>>2], boot);
var source_len = g_heap - source;
i32[g_ip>>2] = 0;
InitDictionary();
i32[g_sp>>2] = i32[g_heap>>2] + 1;
i32[g_heap>>2] += STACK_SIZE;
i32[g_rp>>2] = i32[g_heap>>2] + 1;
i32[g_heap>>2] += STACK_SIZE;
i32[(g_last - 4)>>2] = 1; // Make ; IMMMEDIATE
g_DOLIT_XT = Find('DOLIT');
g_DOEXIT_XT = Find('EXIT');
g_YIELD_XT = Find('YIELD');
i32[g_notfound>>2] = Find('DROP');
i32[g_ip>>2] = i32[g_heap>>2];
i32[g_heap>>2] = Find('EVALUATE1');
i32[g_heap>>2] += 4;
i32[g_heap>>2] = Find('BRANCH');
i32[g_heap>>2] += 4;
i32[g_heap>>2] = g_ip;
// argc, argv would have gone here.
i32[g_heap>>2] += 4;
i32[g_base>>2] = 10;
i32[g_tib>>2] = source;
i32[g_ntib>>2] = source_len;
}
function VM(stdlib, foreign, heap) {
"use asm";
@ -58,19 +109,21 @@ function VM(stdlib, foreign, heap) {
var u8 = new stdlib.Uint8Array(heap);
var i32 = new stdlib.Int32Array(heap);
var g_sys = 128;
var g_sys = 256;
var g_ip = g_sys + 10 * 4;
var g_sp = g_sys + 11 * 4;
var g_rp = g_sys + 12 * 4;
function run(initrp) {
initrp = initrp | 0;
function run() {
var tos = 0;
var ip = 0;
var sp = 0;
var rp = 0;
var w = 0;
var ir = 0;
rp = initrp;
ip = i32[rp>>2]|0; rp = (rp - 4)|0;
sp = i32[rp>>2]|0; rp = (rp - 4)|0;
sp = i32[g_sp>>2]|0;
rp = i32[g_rp>>2]|0;
ip = i32[g_ip>>2]|0;
tos = i32[sp>>2]|0; sp = (sp - 4)|0;
for (;;) {
w = i32[ip>>2]|0;
@ -123,5 +176,9 @@ var ffi = {
heap[128 + 6] = 256 * 4; // set g_sys.heap = 256 * 4;
var module = VM(window, ffi, heap);
Init();
setTimeout(function() {
module.run();
}, 10);
})();