aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/scomma.asm
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/avr8/words/scomma.asm')
-rw-r--r--amforth-6.5/avr8/words/scomma.asm56
1 files changed, 56 insertions, 0 deletions
diff --git a/amforth-6.5/avr8/words/scomma.asm b/amforth-6.5/avr8/words/scomma.asm
new file mode 100644
index 0000000..a5be0ca
--- /dev/null
+++ b/amforth-6.5/avr8/words/scomma.asm
@@ -0,0 +1,56 @@
+; ( addr len -- )
+; Compiler
+; compiles a string from RAM to Flash
+VE_SCOMMA:
+ .dw $ff02
+ .db "s",$2c
+ .dw VE_HEAD
+ .set VE_HEAD = VE_SCOMMA
+XT_SCOMMA:
+ .dw DO_COLON
+PFA_SCOMMA:
+ .dw XT_DUP
+ .dw XT_DOSCOMMA
+ .dw XT_EXIT
+
+; ( addr len len' -- )
+; Compiler
+; compiles a string from RAM to Flash
+;VE_DOSCOMMA:
+; .dw $ff04
+; .db "(s",$2c,")"
+; .dw VE_HEAD
+; .set VE_HEAD = VE_DOSCOMMA
+XT_DOSCOMMA:
+ .dw DO_COLON
+PFA_DOSCOMMA:
+ .dw XT_COMMA
+ .dw XT_DUP ; ( --addr len len)
+ .dw XT_2SLASH ; ( -- addr len len/2
+ .dw XT_TUCK ; ( -- addr len/2 len len/2
+ .dw XT_2STAR ; ( -- addr len/2 len len'
+ .dw XT_MINUS ; ( -- addr len/2 rem
+ .dw XT_TO_R
+ .dw XT_ZERO
+ .dw XT_QDOCHECK
+ .dw XT_DOCONDBRANCH
+ .dw PFA_SCOMMA2
+ .dw XT_DODO
+PFA_SCOMMA1:
+ .dw XT_DUP ; ( -- addr addr )
+ .dw XT_FETCH ; ( -- addr c1c2 )
+ .dw XT_COMMA ; ( -- addr )
+ .dw XT_CELLPLUS ; ( -- addr+cell )
+ .dw XT_DOLOOP
+ .dw PFA_SCOMMA1
+PFA_SCOMMA2:
+ .dw XT_R_FROM
+ .dw XT_GREATERZERO
+ .dw XT_DOCONDBRANCH
+ .dw PFA_SCOMMA3
+ .dw XT_DUP ; well, tricky
+ .dw XT_CFETCH
+ .dw XT_COMMA
+PFA_SCOMMA3:
+ .dw XT_DROP ; ( -- )
+ .dw XT_EXIT