duskos

dusk os fork
git clone git://git.alexwennerberg.com/duskos
Log | Files | Refs | README | LICENSE

commit 7eb4d73505ffef517297e1522eca15bb4cdfd121
parent 70e8edc9ef04c0283c7d469948e7f4d38b0a5544
Author: Virgil Dupras <hsoft@hardcoded.net>
Date:   Thu,  9 Mar 2023 10:04:37 -0500

HAL: fix PS leak in ! and ,

Diffstat:
Mfs/xcomp/bootlo.fs | 45++++++++++++++++++++++++---------------------
Mposix/vm.c | 2+-
2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/fs/xcomp/bootlo.fs b/fs/xcomp/bootlo.fs @@ -1,29 +1,37 @@ code : ] code ] ; : noop ; : W) 0 ; : A) 1 ; : PSP) 2 ; : RSP) 3 ; : i) $c ; +: dup, -4 ps+, PSP) !, ; +code dup dup, exit, +code swap PSP) @!, exit, +: +) swap $08 or ; +: drop, PSP) @, 4 ps+, ; +code drop drop, exit, +: 2drop, PSP) 4 +) @, 8 ps+, ; +code 2drop 2drop, exit, +code rot PSP) @!, PSP) 4 +) @!, exit, +code rot> PSP) 4 +) @!, PSP) @!, exit, +code nip 4 ps+, exit, +: over, dup, PSP) 4 +) @, ; +code over over, exit, +code 2dup W>A, PSP) @, -8 ps+, PSP) !, W<>A, PSP) 4 +) !, exit, + code @ W) @, exit, code16b W) 16b @, exit, code8b W) 8b @, exit, : c@ 8b @ ; : w@ 16b @ ; -: drop, PSP) @, 4 ps+, ; -code drop drop, exit, -code ! W>A, drop, A) !, exit, -code16b W>A, drop, A) 16b !, exit, -code8b W>A, drop, A) 8b !, exit, +code ! W>A, PSP) @, A) !, 2drop, exit, +code16b W>A, PSP) @, A) 16b !, 2drop, exit, +code8b W>A, PSP) @, A) 8b !, 2drop, exit, : c! 8b ! ; : w! 16b ! ; code +! W>A, A) @, ] + [ A) !, exit, code16b W>A, A) 16b @, ] + [ A) 16b !, exit, code8b W>A, A) 8b @, ] + [ A) 8b !, exit, -code , HERE i) [!], 4 HERE i) [+], exit, -code16b HERE i) 16b [!], 2 HERE i) [+], exit, -code8b HERE i) 8b [!], 1 HERE i) [+], exit, +code , HERE i) [!], 4 HERE i) [+n], drop, exit, +code16b HERE i) 16b [!], 2 HERE i) [+n], drop, exit, +code8b HERE i) 8b [!], 1 HERE i) [+n], drop, exit, : c, 8b , ; -: dup, -4 ps+, PSP) !, ; -code dup dup, exit, -code swap PSP) @!, exit, -: +) swap $08 or ; -code rot PSP) @!, PSP) 4 +) @!, exit, -code rot> PSP) 4 +) @!, PSP) @!, exit, + code 1+ 1 W+, exit, code 1- -1 W+, exit, : litn -4 ps+, PSP) !, LIT>W, ; @@ -60,11 +68,6 @@ code 1- -1 W+, exit, : r@ dup, RSP) @, ; immediate : r> [compile] r@ [compile] rdrop ; immediate : >r -4 rs+, RSP) !, drop, ; immediate -code nip 4 ps+, exit, -code 2drop PSP) 4 +) @, 8 ps+, exit, -: over, dup, PSP) 4 +) @, ; -code over over, exit, -code 2dup W>A, PSP) @, -8 ps+, PSP) !, W<>A, PSP) 4 +) !, exit, \ Arithmetic : > swap < ; @@ -109,8 +112,8 @@ create toptrdef ' @ , ' @, , : var, ( off -- ) RSP) [rcnt] @ neg CELLSZ - -^ +) toptr@ execute ; : V1 0 var, ; immediate : V2 4 var, ; immediate : V3 8 var, ; immediate : V4 12 var, ; immediate - -: foo 'A' CELLSZ + (emit) bye ; foo +dbg +: foo 'A' CELLSZ + (emit) ; foo bye \ Compiling words create _ 0 , : doer code compile (does) HERE @ _ ! CELLSZ allot ; diff --git a/posix/vm.c b/posix/vm.c @@ -525,7 +525,7 @@ static void buildsysdict() { CODE16(); compopwr(0x1a); retwr(); CODE8(); compopwr(0x22); retwr(); // ( n ?disp operand -- ) - entry("[+],"); compopwr(0x13); writewr(); retwr(); + entry("[+n],"); compopwr(0x13); writewr(); retwr(); CODE16(); compopwr(0x1b); writewr(); retwr(); CODE8(); compopwr(0x23); writewr(); retwr(); entry("lea,"); compopwr(0x14); retwr();