duskos

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

commit 970fcf1ba6cca4ef3b8d42d574881c3954f63d39
parent d8dedd9ad941746f3fad662ea498359e278803bc
Author: Virgil Dupras <hsoft@hardcoded.net>
Date:   Wed,  1 Jun 2022 13:51:40 -0400

Add PS management words

Diffstat:
MMakefile | 3++-
Mf2asm.py | 14++++++++------
Mwords/dup.asm | 2--
Awords/over.asm | 5+++++
Awords/rot.asm | 11+++++++++++
Awords/swap.asm | 6++++++
Mxcomp2.txt | 6+++++-
7 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,5 +1,6 @@ TARGETS = dusk -WORDOBJS = xcomp.o $(addsuffix .o,$(addprefix words/, bye emit drop dup)) +WORDOBJS = xcomp.o $(addsuffix .o,$(addprefix words/, \ + bye emit drop dup swap over rot)) all: $(TARGETS) diff --git a/f2asm.py b/f2asm.py @@ -7,13 +7,15 @@ import struct fp = open(sys.argv[1], 'r') prevword = 'asmlast' +nasmmacros = {'ps2rs', 'rs2ps', 'rsget', 'rsdrop', 'a2rs', 'rs2a'} aliases = { - '>r': 'p2r', - 'r>': 'r2p', - 'r@': 'rget', - 'r~': 'rdrop', - 'A>r': 'a2r', - 'r>A': 'r2a', + '>r': 'ps2rs', + 'r>': 'rs2ps', + 'r@': 'rsget', + 'r~': 'rsdrop', + 'A>r': 'a2rs', + 'r>A': 'rs2a', + 'rot>': 'rotr', } def out(*args): diff --git a/words/dup.asm b/words/dup.asm @@ -1,6 +1,4 @@ defword 'dup', 3, word_dup, word_drop -GLOBAL word_asmlast -word_asmlast: mov eax, [ebp] sub ebp, 4 mov [ebp], eax diff --git a/words/over.asm b/words/over.asm @@ -0,0 +1,5 @@ +defword 'over', 4, word_over, word_swap + mov eax, [ebp+4] + sub ebp, 4 + mov [ebp], eax + ret diff --git a/words/rot.asm b/words/rot.asm @@ -0,0 +1,11 @@ +defword 'rot', 3, word_rot, word_over +GLOBAL word_asmlast +word_asmlast: + mov eax, [ebp] + mov ebx, [ebp+4] + mov ecx, [ebp+8] + mov [ebp], ecx + mov [ebp+4], eax + mov [ebp+8], ebx + ret + diff --git a/words/swap.asm b/words/swap.asm @@ -0,0 +1,6 @@ +defword 'swap', 4, word_swap, word_dup + mov eax, [ebp] + mov ebx, [ebp+4] + mov [ebp], ebx + mov [ebp+4], eax + ret diff --git a/xcomp2.txt b/xcomp2.txt @@ -1,2 +1,6 @@ : 2drop drop drop ; -: boot 'f' emit 'o' dup emit emit ; +: 2dup over over ; +: nip swap drop ; +: tuck swap over ; +: rot> rot rot ; +: boot 'f' 'o' dup rot emit emit emit ;