diff --git a/Makefile b/Makefile index 80ae068..35c78d3 100644 --- a/Makefile +++ b/Makefile @@ -238,6 +238,14 @@ $(GEN)/web_cases.js: $(GEN)/dump_web_opcodes | $(GEN) $(GEN)/web_dict.js: $(GEN)/dump_web_opcodes | $(GEN) $< dict >$@ +WEB_BOOT = $(COMMON_PHASE1) \ + posix/posix.fs posix/allocation.fs posix/termios.fs \ + $(COMMON_PHASE2) \ + posix/autoboot.fs \ + common/fini.fs +$(GEN)/web_boot.js: common/source_to_string.js $(WEB_BOOT) | $(GEN) + $< -web boot $(VERSION) $(REVISION) $(WEB_BOOT) >$@ + # ---- RESOURCES ---- $(RES): @@ -283,7 +291,7 @@ $(WEB)/terminal.html: web/terminal.html | $(WEB) $(WEB)/ueforth.js: \ web/fuse_web.js \ web/web.template.js \ - common/boot.fs \ + $(GEN)/web_boot.js \ $(GEN)/web_dict.js \ $(GEN)/web_cases.js | $(WEB) $^ >$@ diff --git a/common/source_to_string.js b/common/source_to_string.js index 9ad5d82..e10415e 100755 --- a/common/source_to_string.js +++ b/common/source_to_string.js @@ -31,12 +31,17 @@ function DropCopyright(source) { } var is_windows = false; +var is_web = false; var args = process.argv.slice(2); if (args.length > 0 && args[0] == '-win') { is_windows = true; args.shift(); } +if (args.length > 0 && args[0] == '-web') { + is_web = true; + args.shift(); +} var name = args.shift(); var version = args.shift(); var revision = args.shift(); @@ -55,6 +60,8 @@ if (is_windows) { source = source.replace(/["] ["]/g, ''); source = source.replace(/["] [(] ([^)]*)[)] ["]/g, '// $1'); source = 'const char ' + name + '[] =\n' + source + ';\n'; +} else if (is_web) { + source = 'const ' + name + ' = `\n' + source + '`;\n'; } else { source = 'const char ' + name + '[] = R"""(\n' + source + ')""";\n'; } diff --git a/web/fuse_web.js b/web/fuse_web.js index 8af072f..dcf7dc1 100755 --- a/web/fuse_web.js +++ b/web/fuse_web.js @@ -33,9 +33,9 @@ cases = ReplaceAll(cases, 'DROP', 'tos = *sp--'); cases = ReplaceAll(cases, 'DUP', '*++sp = tos'); cases = ReplaceAll(cases, 'tos += *sp--', 'tos = (tos + *sp)|0; --sp'); cases = ReplaceAll(cases, /tos (.)= /, 'tos = tos $1 '); -cases = ReplaceAll(cases, /[*](.)p[+][+]/, '*$1p; ++$1p'); -cases = ReplaceAll(cases, /[*](.)p[-][-]/, '*$1p; --$1p'); -cases = ReplaceAll(cases, /[*][+][+](.)p/, '++$1p; *$1p'); +cases = ReplaceAll(cases, /[*](.)p[+][+]/, '*$1p, ++$1p'); +cases = ReplaceAll(cases, /[*](.)p[-][-]/, '*$1p, --$1p'); +cases = ReplaceAll(cases, /[*][+][+](.)p/, '++$1p, *$1p'); cases = ReplaceAll(cases, '*(cell_t *) tos = ', 'i32[tos>>2] = '); cases = ReplaceAll(cases, '*(int32_t *) tos = ', 'i32[tos>>2] = '); cases = ReplaceAll(cases, '*(uint8_t *) tos = ', 'u8[tos] = '); diff --git a/web/web.template.js b/web/web.template.js index f59032b..a066a2b 100644 --- a/web/web.template.js +++ b/web/web.template.js @@ -19,9 +19,7 @@ const HEAP_SIZE = (1024 * 1024); const STACK_CELLS = 4096; -const boot = ` {{boot}} -`; var heap = new ArrayBuffer(HEAP_SIZE); var i32 = new Int32Array(heap);