duskos

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

commit 8e4589dd5e53a06626eb21706fa1c73c2b2e5906
parent 8a25fd43647b5c161cfad152e32876e7ef9c27e9
Author: Virgil Dupras <hsoft@hardcoded.net>
Date:   Thu, 16 Mar 2023 19:14:10 -0400

hal i386: add "32b)" "+," "[+n]," "[@]," "[!],"

EAX=1234 at bye

Diffstat:
Mfs/xcomp/bootlo2.fs | 38+++++++++++++++++++++++++++++++++++++-
Mfs/xcomp/i386/kernel.fs | 25+++++++++++++++++++++++++
2 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/fs/xcomp/bootlo2.fs b/fs/xcomp/bootlo2.fs @@ -32,4 +32,40 @@ code8b HERE @ W>A, PSP) @, A) 8b) !, 2drop, exit, code c! branch, drop code w! branch, drop -: foo 42 43 44 rot bye ; foo +code +! W>A, drop, A) +, A) !, drop, exit, +code16b W>A, drop, A) 16b) +, A) 16b) !, drop, exit, +code8b W>A, drop, A) 8b) +, A) 8b) !, 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, A) @, W<>A, 4 W+n, dup, W<>A, exit, +code16b W>A, A) 16b) @, W<>A, 2 W+n, dup, W<>A, exit, +code8b HERE @ W>A, A) 8b) @, W<>A, 1 W+n, dup, W<>A, exit, +code c@+ branch, drop + +code !+ W>A, drop, A) !, W<>A, 4 W+n, exit, +code16b W>A, drop, A) 16b) !, W<>A, 2 W+n, exit, +code8b HERE @ W>A, drop, A) 8b) !, W<>A, 1 W+n, exit, +code c!+ branch, drop + +code @@+ W>A, A) [@], 4 A) [+n], exit, +code16b W>A, A) 16b) [@], 2 A) [+n], exit, +code8b W>A, A) 8b) [@], 1 A) [+n], exit, +code @!+ W>A, drop, A) [!], 4 A) [+n], drop, exit, +code16b W>A, drop, A) 16b) [!], 2 A) [+n], drop, exit, +code8b W>A, drop, A) 8b) [!], 1 A) [+n], drop, exit, + +code + PSP) +, nip, exit, +: e>w 5 + ; +: w>e 5 - ; +: current sysdict @ e>w ; +code 1+ 1 W+n, exit, +code 1- -1 W+n, exit, +: immediate current 1- dup c@ $80 or swap c! ; +: EMETA_16B $11 ; : EMETA_8B $10 ; +: 16b EMETA_16B MOD ! ; immediate +: 8b EMETA_8B MOD ! ; immediate + +: , HERE @!+ ; +: foo HERE @ 4 - @ bye ; +$1234 , foo diff --git a/fs/xcomp/i386/kernel.fs b/fs/xcomp/i386/kernel.fs @@ -169,6 +169,9 @@ xcode 8b) ( operand -- operand ) xcode 16b) ( operand -- operand ) ax $20000 i) or, ret, +xcode 32b) ( operand -- operand ) + ax $100 i) or, ax $fffdffff i) and, ret, + \ Write routines pc to lblcallwr \ bx=abs addr $e8 i) cwrite, @@ -227,6 +230,7 @@ xcode W<>A, ( n -- ) \ di ax xchg, $97 i) cwrite, ret, pc to L1 \ ax=opmod + ax $20000 i) test, forward8 jz, $66 i) cwrite, forward! \ 16b? al ah xchg, ax wwrite, ah $40 i) test, forward8 jz, \ disp8 @@ -241,6 +245,7 @@ xcode !, ( operand -- ) \ operand ax mov, ax $8800 i) or, L1 absjmp, pc to L2 \ 16b or 8b + ax $fffdffff i) and, $0f i) cwrite, ax $b600 i) or, L1 absjmp, xcode @, ( operand -- ) \ ax operand mov, @@ -251,6 +256,26 @@ xcode @, ( operand -- ) \ ax operand mov, xcode @!, ( operand -- ) \ operand ax xchg, ax $8600 i) or, L1 absjmp, +xcode +, ( operand -- ) \ operand ax add, + ax $0200 i) or, L1 absjmp, + +xcode [@], ( operand -- ) \ ax 32b) operand mov, ax Xb) ax 0 d) mov, + xdup, wcall, 32b) wcall, @, ( operand -- ) + ax $ffffff00 i) and, \ set operand to [eax] but keep size + wjmp, @, + +\ bx 32b) operand mov, Xb) bx 0 d) ax mov, +xcode [!], ( operand -- ) + xdup, al $18 i) or, \ change target from ax to bx + wcall, 32b) wcall, @, ( operand -- ) + ah $88 i) or, + al $03 i) mov, \ keep size, but modrm is for bx 0 d) ax mov, + L1 absjmp, + +xcode [+n], ( n operand -- ) \ operand n i) add, + ax $8000 i) or, L1 abscall, ( n -- ) + ax dwrite, xdrop, ret, + xcode dup, -4 xlit, wcall, ps+, wcall, PSP)