diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-27 20:04:34 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-27 20:04:34 +1100 |
| commit | a37b1263430224f55ef5381d8b997b19ee33c7de (patch) | |
| tree | a4f623c5c6605065be73e2112710963bc564b928 | |
| parent | 34432131f3843d747ad7c421848b7e387cc53c3b (diff) | |
some rearranging, interactive tick
| -rw-r--r-- | jefs.fs | 82 |
1 files changed, 42 insertions, 40 deletions
@@ -17,27 +17,6 @@ : decimal 10 base ! ; : hex 16 base ! ; -: nip swap drop ; -: tuck swap over ; - -hex : ret, c3 c, ; decimal - -: cells 8 * ; -: allot> here @ swap here +! ; -: allot allot> drop ; - -: [compile] parse find drop >cfa compile, ; immediate -: ' parse find drop >cfa [compile] lit ; immediate \ note: no error handling (yet) -: recurse latest @ >cfa compile, ; immediate -: s, ( c-addr u -- ) here @ swap ( c-addr here u ) dup >r cmove r> here +! ; - -: literal [compile] lit ; immediate -: constant create [compile] lit ret, ; -: variable 1 cells allot> create [compile] lit ret, ; -\ maybe i made bad design decisions, this is CREATE but it pushes a pointer to just after its definition. for arrays and the like -\ does not use LIT because we want to fill it in After -: make create here @ 18 + [compile] lit ret, ; - \ FLOW CONTROL {{{ \ jump helpers from forth83 (got them from pforth tho ehehe) \ < backward jump > forward jump @@ -57,13 +36,51 @@ hex : ret, c3 c, ; decimal : repeat branch swap <resolve >resolve ; immediate : ?dup dup 0<> if dup then ; +\ }}} + +: nip swap drop ; +: tuck swap over ; + +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 ] ; + +: cells 8 * ; +: allot> here @ swap here +! ; +: allot allot> drop ; + +: [compile] parse find drop >cfa compile, ; immediate +: ' parse find drop >cfa state @ if [compile] lit then ; immediate \ note: no error handling (yet) +: recurse latest @ >cfa compile, ; immediate + +: literal [compile] lit ; immediate +: constant create [compile] lit ret, ; +: variable 1 cells allot> create [compile] lit ret, ; +\ maybe i made bad design decisions, this is CREATE but it pushes a pointer to just after its definition. for arrays and the like +\ does not use LIT because we want to fill it in After +: make create here @ 18 + [compile] lit ret, ; \ jonesforth impl : case 0 ; immediate : of ' over compile, ' = compile, [compile] if ' drop compile, ; immediate : endof [compile] else ; immediate : endcase ' drop compile, begin ?dup while [compile] then repeat ; immediate -\ }}} : value create [compile] lit ret, ; : to parse find drop >cfa 6 + state @ if @@ -133,24 +150,6 @@ variable modrm 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 ] ; - : / /mod swap drop ; : mod /mod drop ; : negate 0 swap - ; @@ -258,6 +257,9 @@ make file-buffer file-buffer-length allot : write-file ( c-addr u fd -- ?u flag ) >r swap r> syswrite errno ; \ }}} +\ INTERACTIVITY {{{ +\ }}} + file-buffer file-buffer-length stdin read-file drop file-buffer swap evaluate bye \ .free bye |
