commit 970fcf1ba6cca4ef3b8d42d574881c3954f63d39
parent d8dedd9ad941746f3fad662ea498359e278803bc
Author: Virgil Dupras <hsoft@hardcoded.net>
Date: Wed, 1 Jun 2022 13:51:40 -0400
Add PS management words
Diffstat:
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 ;