From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/words/rec-intnum.asm | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 amforth-6.5/common/words/rec-intnum.asm (limited to 'amforth-6.5/common/words/rec-intnum.asm') diff --git a/amforth-6.5/common/words/rec-intnum.asm b/amforth-6.5/common/words/rec-intnum.asm new file mode 100644 index 0000000..15400e1 --- /dev/null +++ b/amforth-6.5/common/words/rec-intnum.asm @@ -0,0 +1,76 @@ +; ( -- addr ) +; Interpreter +; Method table for single cell integers +.if cpu_msp430==1 + HEADER(XT_DT_NUM,6,"dt:num",DOROM) +.endif + +.if cpu_avr8==1 +VE_DT_NUM: + .dw $ff06 + .db "dt:num" + .dw VE_HEAD + .set VE_HEAD = VE_DT_NUM +XT_DT_NUM: + .dw PFA_DOCONSTANT +PFA_DT_NUM: +.endif + .dw XT_NOOP ; interpret + .dw XT_LITERAL ; compile + .dw XT_LITERAL ; postpone + +; ( -- addr ) +; Interpreter +; Method table for double cell integers +.if cpu_msp430==1 + HEADER(XT_DT_DNUM,7,"dt:dnum",DOROM) +.endif + +.if cpu_avr8==1 +VE_DT_DNUM: + .dw $ff07 + .db "dt:dnum",0 + .dw VE_HEAD + .set VE_HEAD = VE_DT_DNUM +XT_DT_DNUM: + .dw PFA_DOCONSTANT +PFA_DT_DNUM: +.endif + .dw XT_NOOP ; interpret + .dw XT_2LITERAL ; compile + .dw XT_2LITERAL ; postpone + +; ( addr len -- f ) +; Interpreter +; recognizer for integer numbers +.if cpu_msp430==1 + HEADER(XT_REC_NUM,7,"rec:num",DOCOLON) +.endif + +.if cpu_avr8==1 + +VE_REC_NUM: + .dw $ff07 + .db "rec:num",0 + .dw VE_HEAD + .set VE_HEAD = VE_REC_NUM +XT_REC_NUM: + .dw DO_COLON +PFA_REC_NUM: +.endif + ; try converting to a number + .dw XT_NUMBER + .dw XT_DOCONDBRANCH + DEST(PFA_REC_NONUMBER) + .dw XT_ONE + .dw XT_EQUAL + .dw XT_DOCONDBRANCH + DEST(PFA_REC_INTNUM2) + .dw XT_DT_NUM + .dw XT_EXIT +PFA_REC_INTNUM2: + .dw XT_DT_DNUM + .dw XT_EXIT +PFA_REC_NONUMBER: + .dw XT_DT_NULL + .dw XT_EXIT -- cgit v1.2.3