aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/msp430/words/cmove-up.asm
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/msp430/words/cmove-up.asm')
-rw-r--r--amforth-6.5/msp430/words/cmove-up.asm16
1 files changed, 16 insertions, 0 deletions
diff --git a/amforth-6.5/msp430/words/cmove-up.asm b/amforth-6.5/msp430/words/cmove-up.asm
new file mode 100644
index 0000000..0bbe4a3
--- /dev/null
+++ b/amforth-6.5/msp430/words/cmove-up.asm
@@ -0,0 +1,16 @@
+;X CMOVE> c-addr1 c-addr2 u -- move from top
+; as defined in the ANSI optional String word set
+ CODEHEADER(XT_CMOVEUP,6,"cmove>")
+ MOV @PSP+,W ; dest adrs
+ MOV @PSP+,X ; src adrs
+ CMP #0,TOS
+ JZ CMOVU_X
+ ADD TOS,W ; start at end
+ ADD TOS,X
+CMOVU_1: SUB #1,X
+ SUB #1,W
+ MOV.B @X,0(W) ; copy byte
+ SUB #1,TOS
+ JNZ CMOVU_1
+CMOVU_X: MOV @PSP+,TOS ; pop new TOS
+ NEXT