aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/amforth-interpreter.asm
blob: 1d7274552037390e7192a250fc6eb4863dc3d9ae (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
; the inner interpreter.

DO_COLON:
    push XH
    push XL          ; PUSH IP
    movw XL, wl
    adiw xl, 1
DO_NEXT:
.if WANT_INTERRUPTS == 1
    cp isrflag, zerol
    brne DO_INTERRUPT
.endif
    movw zl, XL        ; READ IP
    readflashcell wl, wh
    adiw XL, 1        ; INC IP

DO_EXECUTE:
    movw zl, wl
    readflashcell temp0,temp1
    movw zl, temp0
    ijmp

.if WANT_INTERRUPTS == 1
DO_INTERRUPT:
    ; here we deal with interrupts the forth way
    savetos
    mov tosl, isrflag
    clr tosh
    clr isrflag
    ldi wl, LOW(XT_ISREXEC)
    ldi wh, HIGH(XT_ISREXEC)
    rjmp DO_EXECUTE
.endif