aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/doplusloop.asm
blob: c34cae53dc14cd969e6bd19260ed8b051ae85739 (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
; ( n1 -- ) (R: loop-sys1 -- loop-sys2| )
; System
; runtime of +loop
;VE_DOPLUSLOOP:
;    .dw $ff07
;    .db "(+loop)"
;    .dw VE_HEAD
;    .set VE_HEAD = VE_DOPLUSLOOP
XT_DOPLUSLOOP:
    .dw PFA_DOPLUSLOOP
PFA_DOPLUSLOOP:
    pop zl
    pop zh
    add zl, tosl
    adc zh, tosh
    loadtos
    brvs PFA_DOPLUSLOOP_LEAVE
    ; next cycle
PFA_DOPLUSLOOP_NEXT:
    ; next iteration
    push zh
    push zl
    rjmp PFA_DOBRANCH ; read next cell from dictionary and jump to its destination
PFA_DOPLUSLOOP_LEAVE:
    pop  temp0
    pop  temp1  ; remove limit
    adiw xl, 1  ; skip branch-back address
    jmp_ DO_NEXT