diff options
| author | kitty <nepeta@canaglie.net> | 2026-03-07 17:18:39 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-03-07 17:18:39 +1100 |
| commit | 1fe30216ca6fbee0595a5419a979c8b06ea56a28 (patch) | |
| tree | d1405bf411f7f6ece696bbad2bb671b71a9e46d3 | |
| parent | b226f8ae99a630334356b0e0e1de44429b64155d (diff) | |
replace raw byte execute with assembled execute
yay!!!!
| -rw-r--r-- | jefs.fs | 52 | ||||
| -rw-r--r-- | readme.md | 1 |
2 files changed, 10 insertions, 43 deletions
@@ -1,15 +1,4 @@ \ i think something is going on with the stack. i dunno -\ things TODO: -\ standardise stack comment abbrs (i like leo brodie's forth_style.txt) -\ DO LOOP -\ s\" -\ add error handling to compiling words -\ better syscall error handling -\ <builds does> -\ argc/argv -\ load file -\ DUMP -\ custom Nicer line mode editing (like rlwrap) : cell+ 8 + ; : say ( c-addr u -- ) swap 1 1 syscall3 drop ; @@ -46,27 +35,6 @@ hex : ret, c3 c, ; decimal -: execute [ hex - 4d c, 8b c, 1e c, \ mov r11, [r14] - \ REX.W + 8B /r -- MOV r64, r/m64 - \ rex w (64 bit operand size), r (modrm.reg ext), b (modrm.rm ext) - \ modrm 00 011 110 - \ mod [r/m] reg 1.011 (r11) r/m 1.110 (r14) - 4d c, 8d c, 76 c, 08 c, \ lea r14, [r14+8] - \ REX.W + 8D /r -- LEA r64, m - \ rex w (64 bit operand size), r (modrm.reg ext), b (modrm.rm ext) - \ modrm 01 110 110 - \ mod [r/m+disp8] reg 1.110 (r14) r/m 1.110 (r14) - 41 c, ff c, d3 c, \ call r11 - \ FF /2 -- CALL r/m64 - \ rex b (.rm ext) - \ modrm 11 010 011 - \ mod r/m reg /2 r/m 1.011 (r11) - decimal ] ; - -: ?comp state @ 0<> if 3 error ! handler execute then ; -: ?intr state @ if 4 error ! handler execute then ; - : cells 8 * ; : allot@ here @ swap here +! ; : allot allot@ drop ; @@ -162,20 +130,24 @@ variable disp : modrm, modrm @ c, disp @ ?dup 0<> if c, then ; : mod0 modrm @ 3f and modrm ! ; -: d) dup disp ! ( mod0 ) 0<> if modrm @ 40 or modrm ! then ; \ disp8 or 0 only for now. bug TODO: doesn't put correct .mod bytes +: d) dup disp ! mod0 0<> if modrm @ 40 or modrm ! then ; \ disp8 or 0 only for now. bug TODO: doesn't put correct .mod bytes : disp, disp @ ?dup 0<> if c, then ; : mov, rex, 8b c, modrm @ c, disp, asm$ ; : lea, rex, 8d c, modrm @ c, disp, asm$ ; : call, rex, ff c, /2 modrm @ c, disp, asm$ ; - -\ example idea: (from execute below) -\ rex.w r11, r14 0 d) mov, -\ rex.w r14, r14 8 d) lea, -\ r11 call, decimal \ }}} +\ could be inlined? +: execute [ rex.w r11, r14 0 d) mov, + rex.w r14, r14 8 d) lea, + r11 call, ] ; + +: ?comp state @ 0<> if 3 error ! handler execute then ; +: ?intr state @ if 4 error ! handler execute then ; + + hex : >word ffff and ; : >byte ff and ; @@ -440,8 +412,4 @@ decimal 0 constant version : welcome ." welcome to Jewelforth, version " version u. cr .free ; -\ : execute2 [ rex.w r11, r14 0 d) mov, -\ rex.w r14, r14 8 d) lea, -\ r11 call, ] ; - welcome quit bye @@ -13,7 +13,6 @@ i am thinking of completing before that. - `s\"` - `DO` + `LOOP` -- `{+,-}TO` - `\<BUILDS` and `DOES>` - reading from files - argc + argv |
