commit 5a048ae822205dbd4cea44613dacd14bf1a461ab
parent 8e4589dd5e53a06626eb21706fa1c73c2b2e5906
Author: Virgil Dupras <hsoft@hardcoded.net>
Date: Thu, 16 Mar 2023 20:39:15 -0400
hal i386: fix broken findmod routine
EAX=5678 at bye
Diffstat:
2 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/fs/xcomp/bootlo2.fs b/fs/xcomp/bootlo2.fs
@@ -67,5 +67,5 @@ code 1- -1 W+n, exit,
: 8b EMETA_8B MOD ! ; immediate
: , HERE @!+ ;
-: foo HERE @ 4 - @ bye ;
-$1234 , foo
+: foo HERE @ 4 - 16b @ bye ;
+$12345678 , foo
diff --git a/fs/xcomp/i386/kernel.fs b/fs/xcomp/i386/kernel.fs
@@ -329,11 +329,6 @@ xcode branch!
ret,
\ Regular words
-xcode execute
- bx ax mov,
- xdrop,
- bx jmp,
-
xcode -
si 0 d) ax sub,
xdrop, ret,
@@ -479,26 +474,27 @@ pc to lblerrmsg \ ecx=sl ebx=sa
wcall, rtype
wjmp, abort
-xcode findmeta ( id ll -- ll-or-0 )
+xcode findmeta ( id ll -- ll-or-0 ) \ Preserves dx
bx si 0 d) mov, xnip,
pc to L1 \ bx=id
ax ax test,
- forward8 jz,
+ lblret abs>rel jz,
bx ax 4 d) cmp,
- forward8 jz,
+ lblret abs>rel jz,
ax ax 0 d) mov,
L1 absjmp,
-forward! forward!
- ret,
+pc to L2 \ mod not found, restore dx
+ ax dx mov, ret,
xcode findmod ( w -- w )
lblmod m) -1 i) test,
lblret abs>rel jz,
- ax 9 i) sub,
+ dx ax mov,
+ ax ax -9 d) mov,
bx lblmod m) mov,
- L1 abs>rel call,
+ L1 abscall,
ax ax test,
- lblret abs>rel jz,
+ L2 abs>rel jz,
lblmod m) 0 i) mov,
ax 8 i) add,
ret,
@@ -655,7 +651,9 @@ pc to L2 ( -- w ) \ find in sys dict
ret,
pc to L1 \ execute imm word
- wcall, execute
+ bx ax mov,
+ xdrop,
+ bx call,
wjmp, stack?
xcode compword ( str -- )
@@ -717,9 +715,9 @@ xcode code
pc to L1 \ bx=meta-id
cx lblsysdict m) mov,
- dx lblhere m) mov,
- dx cx -4 d) xchg,
- dx dwrite, dx dwrite,
+ bp lblhere m) mov,
+ bp cx -4 d) xchg,
+ bp dwrite, bx dwrite,
ret,
xcode code16b bx EMETA_16B i) mov, L1 absjmp,