aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/msp430/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/msp430/amforth-interpreter.asm
parente0d6784e89dba33226c0edb815bb974486fa7c48 (diff)
Add AmForth
Diffstat (limited to 'amforth-6.5/msp430/amforth-interpreter.asm')
-rw-r--r--amforth-6.5/msp430/amforth-interpreter.asm54
1 files changed, 54 insertions, 0 deletions
diff --git a/amforth-6.5/msp430/amforth-interpreter.asm b/amforth-6.5/msp430/amforth-interpreter.asm
new file mode 100644
index 0000000..1862e84
--- /dev/null
+++ b/amforth-6.5/msp430/amforth-interpreter.asm
@@ -0,0 +1,54 @@
+DOCOLON:
+ PUSH IP ; 3 save old IP on return stack
+ MOV W,IP ; 1 set new IP to PFA
+
+.if WANT_INTERRUPTS==1
+DO_NEXT:
+ TST ISR
+ JNZ DO_INTERRUPT
+ MOV @IP+,W ; fetch word address into W
+DO_REALLY_NEXT:
+ MOV @W+,PC ; fetch code address into PC, W=PFA
+
+DO_INTERRUPT:
+ SUB #2,PSP ; save tos
+ MOV TOS,0(PSP)
+ MOV ISR,TOS ; move to tos
+ CLR ISR ; clear flag register
+ MOV #XT_ISREXEC, W
+ JMP DO_REALLY_NEXT
+
+irq1_handler:
+ MOV #1, R15
+ RETI
+irq2_handler:
+ MOV #2, R15
+ RETI
+irq3_handler:
+ MOV #3, R15
+ RETI
+irq4_handler:
+ MOV #4, R15
+ RETI
+irq5_handler:
+ MOV #5, R15
+ RETI
+irq6_handler:
+ MOV #6, R15
+ RETI
+irq7_handler:
+ MOV #7, R15
+ RETI
+irq8_handler:
+ MOV #8, R15
+ RETI
+irq9_handler:
+ MOV #9, R15
+ RETI
+irq10_handler:
+ MOV #10, R15
+null_handler:
+ RETI
+.else
+ NEXT
+.endif