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:
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();