aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/amforth-interpreter.asm
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
commit67d25d837ac55f28a366c0a3b262e439a6e75fc3 (patch)
treedf7715c7724c5935ab87c807f3b8b4ef529315e3 /amforth-6.5/avr8/amforth-interpreter.asm
parente0d6784e89dba33226c0edb815bb974486fa7c48 (diff)
Add AmForth
Diffstat (limited to 'amforth-6.5/avr8/amforth-interpreter.asm')
-rw-r--r--amforth-6.5/avr8/amforth-interpreter.asm33
1 files changed, 33 insertions, 0 deletions
diff --git a/amforth-6.5/avr8/amforth-interpreter.asm b/amforth-6.5/avr8/amforth-interpreter.asm
new file mode 100644
index 0000000..1d72745
--- /dev/null
+++ b/amforth-6.5/avr8/amforth-interpreter.asm
@@ -0,0 +1,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 \ No newline at end of file