Merge branch 'main' of github.com:flagxor/ueforth into main

This commit is contained in:
Brad Nelson
2022-06-06 23:31:35 -07:00
10 changed files with 36 additions and 16 deletions

View File

@ -238,6 +238,14 @@ $(GEN)/web_cases.js: $(GEN)/dump_web_opcodes | $(GEN)
$(GEN)/web_dict.js: $(GEN)/dump_web_opcodes | $(GEN) $(GEN)/web_dict.js: $(GEN)/dump_web_opcodes | $(GEN)
$< dict >$@ $< 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 ---- # ---- RESOURCES ----
$(RES): $(RES):
@ -283,7 +291,7 @@ $(WEB)/terminal.html: web/terminal.html | $(WEB)
$(WEB)/ueforth.js: \ $(WEB)/ueforth.js: \
web/fuse_web.js \ web/fuse_web.js \
web/web.template.js \ web/web.template.js \
common/boot.fs \ $(GEN)/web_boot.js \
$(GEN)/web_dict.js \ $(GEN)/web_dict.js \
$(GEN)/web_cases.js | $(WEB) $(GEN)/web_cases.js | $(WEB)
$^ >$@ $^ >$@

View File

@ -138,3 +138,8 @@ e: test-rshift
$1234 4 rshift $123 =assert $1234 4 rshift $123 =assert
-1 cell 8 * 1- rshift 1 =assert -1 cell 8 * 1- rshift 1 =assert
;e ;e
e: test-arshift
$1234 4 arshift $123 =assert
-1 cell 8 * 1- arshift -1 =assert
;e

View File

@ -220,6 +220,7 @@ e: check-core-opcodes
out: */MOD out: */MOD
out: LSHIFT out: LSHIFT
out: RSHIFT out: RSHIFT
out: ARSHIFT
out: AND out: AND
out: OR out: OR
out: XOR out: XOR

View File

@ -65,10 +65,10 @@ gstack value gp
graphics definitions also internals graphics definitions also internals
: box { left top w h } : box { left top w h }
left sx * tx + 16 rshift left sx * tx + 16 arshift
top sy * ty + 16 rshift top sy * ty + 16 arshift
w sx * 16 rshift w sx * 16 arshift
h sy * 16 rshift h sy * 16 arshift
raw-box raw-box
; ;

View File

@ -85,10 +85,10 @@ graphics internals definitions
graphics definitions also internals graphics definitions also internals
: heart 0 { x y s r } : heart 0 { x y s r }
x sx * tx + 16 rshift x sx * tx + 16 arshift
y sy * ty + 16 rshift y sy * ty + 16 arshift
s sx * 16 rshift s sx * 16 arshift
s sy * 16 rshift s sy * 16 arshift
raw-heart raw-heart
; ;

View File

@ -83,6 +83,7 @@ typedef struct {
X("*/MOD", SSMOD, SSMOD_FUNC) \ X("*/MOD", SSMOD, SSMOD_FUNC) \
Y(LSHIFT, tos = (*sp-- << tos)) \ Y(LSHIFT, tos = (*sp-- << tos)) \
Y(RSHIFT, tos = (((ucell_t) *sp--) >> tos)) \ Y(RSHIFT, tos = (((ucell_t) *sp--) >> tos)) \
Y(ARSHIFT, tos = (*sp-- >> tos)) \
Y(AND, tos &= *sp--) \ Y(AND, tos &= *sp--) \
Y(OR, tos |= *sp--) \ Y(OR, tos |= *sp--) \
Y(XOR, tos ^= *sp--) \ Y(XOR, tos ^= *sp--) \

View File

@ -31,12 +31,17 @@ function DropCopyright(source) {
} }
var is_windows = false; var is_windows = false;
var is_web = false;
var args = process.argv.slice(2); var args = process.argv.slice(2);
if (args.length > 0 && args[0] == '-win') { if (args.length > 0 && args[0] == '-win') {
is_windows = true; is_windows = true;
args.shift(); args.shift();
} }
if (args.length > 0 && args[0] == '-web') {
is_web = true;
args.shift();
}
var name = args.shift(); var name = args.shift();
var version = args.shift(); var version = args.shift();
var revision = args.shift(); var revision = args.shift();
@ -55,6 +60,8 @@ if (is_windows) {
source = source.replace(/["] ["]/g, ''); source = source.replace(/["] ["]/g, '');
source = source.replace(/["] [(] ([^)]*)[)] ["]/g, '// $1'); source = source.replace(/["] [(] ([^)]*)[)] ["]/g, '// $1');
source = 'const char ' + name + '[] =\n' + source + ';\n'; source = 'const char ' + name + '[] =\n' + source + ';\n';
} else if (is_web) {
source = 'const ' + name + ' = `\n' + source + '`;\n';
} else { } else {
source = 'const char ' + name + '[] = R"""(\n' + source + ')""";\n'; source = 'const char ' + name + '[] = R"""(\n' + source + ')""";\n';
} }

View File

@ -68,7 +68,7 @@ scanlines max-scanlines cells erase
: draw-spans max-scanlines 0 do i draw-row loop ; : draw-spans max-scanlines 0 do i draw-row loop ;
: 0.<< ( n -- n ) 16 lshift ; : 0.<< ( n -- n ) 16 lshift ;
: 0.>> ( n -- n ) 16 rshift ; : 0.>> ( n -- n ) 16 arshift ;
: line ( x1 y1 x2 y2 ) : line ( x1 y1 x2 y2 )
0 0 0 0 { x1 y1 x2 y2 dx dy sy ey } 0 0 0 0 { x1 y1 x2 y2 dx dy sy ey }

View File

@ -33,9 +33,9 @@ cases = ReplaceAll(cases, 'DROP', 'tos = *sp--');
cases = ReplaceAll(cases, 'DUP', '*++sp = tos'); cases = ReplaceAll(cases, 'DUP', '*++sp = tos');
cases = ReplaceAll(cases, 'tos += *sp--', 'tos = (tos + *sp)|0; --sp'); cases = ReplaceAll(cases, 'tos += *sp--', 'tos = (tos + *sp)|0; --sp');
cases = ReplaceAll(cases, /tos (.)= /, 'tos = tos $1 '); 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, '*(cell_t *) tos = ', 'i32[tos>>2] = ');
cases = ReplaceAll(cases, '*(int32_t *) tos = ', 'i32[tos>>2] = '); cases = ReplaceAll(cases, '*(int32_t *) tos = ', 'i32[tos>>2] = ');
cases = ReplaceAll(cases, '*(uint8_t *) tos = ', 'u8[tos] = '); cases = ReplaceAll(cases, '*(uint8_t *) tos = ', 'u8[tos] = ');
@ -53,7 +53,7 @@ cases = ReplaceAll(cases, '(void *) ', '');
cases = ReplaceAll(cases, '(const char *) ', ''); cases = ReplaceAll(cases, '(const char *) ', '');
cases = ReplaceAll(cases, '(cell_t *) ', ''); cases = ReplaceAll(cases, '(cell_t *) ', '');
cases = ReplaceAll(cases, '(cell_t) ', ''); cases = ReplaceAll(cases, '(cell_t) ', '');
cases = ReplaceAll(cases, /[(]ucell_t[)] ([^ ;]+)/, '($1>>>0)'); cases = ReplaceAll(cases, /[(]ucell_t[)] ([^ ;)]+)/, '($1>>>0)');
cases = ReplaceAll(cases, 'g_sys.state', 'i32[(i32[g_sys>>2] + (3 * 4))>>2]'); cases = ReplaceAll(cases, 'g_sys.state', 'i32[(i32[g_sys>>2] + (3 * 4))>>2]');
cases = ReplaceAll(cases, 'g_sys.DOLIT_XT', 'i32[(i32[g_sys>>2] + (10 * 4))>>2]|0'); cases = ReplaceAll(cases, 'g_sys.DOLIT_XT', 'i32[(i32[g_sys>>2] + (10 * 4))>>2]|0');
cases = ReplaceAll(cases, 'g_sys.DOEXIT_XT', 'i32[(i32[g_sys>>2] + (11 * 4))>>2]|0'); cases = ReplaceAll(cases, 'g_sys.DOEXIT_XT', 'i32[(i32[g_sys>>2] + (11 * 4))>>2]|0');

View File

@ -19,9 +19,7 @@
const HEAP_SIZE = (1024 * 1024); const HEAP_SIZE = (1024 * 1024);
const STACK_CELLS = 4096; const STACK_CELLS = 4096;
const boot = `
{{boot}} {{boot}}
`;
var heap = new ArrayBuffer(HEAP_SIZE); var heap = new ArrayBuffer(HEAP_SIZE);
var i32 = new Int32Array(heap); var i32 = new Int32Array(heap);