aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/cmove_g.asm
blob: 3bcbb4e61b36f36c52ce333d0a188b2985bf4187 (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
; (addr-from addr-to n -- ) 
; Memory
; copy data in RAM from higher to lower addresses.
VE_CMOVE_G:
    .dw $ff06
    .db "cmove>"
    .dw VE_HEAD
    .set VE_HEAD  = VE_CMOVE_G
XT_CMOVE_G:
    .dw PFA_CMOVE_G
PFA_CMOVE_G:
    push xh
    push xl
    ld zl, Y+
    ld zh, Y+ ; addr-to
    ld xl, Y+
    ld xh, Y+ ; addr-from
    mov temp0, tosh
    or temp0, tosl
    brbs 1, PFA_CMOVE_G1
    add zl, tosl
    adc zh, tosh
    add xl, tosl
    adc xh, tosh
PFA_CMOVE_G2:
    ld temp1, -X
    st -Z, temp1
    sbiw tosl, 1
    brbc 1, PFA_CMOVE_G2
PFA_CMOVE_G1:
    pop xl
    pop xh
    loadtos
    jmp_ DO_NEXT