aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/scomma.asm
blob: a5be0cacf737085d623c205e3a9f695df98a2d96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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