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/search-wordlist.asm | 72 ++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 amforth-6.5/common/words/search-wordlist.asm (limited to 'amforth-6.5/common/words/search-wordlist.asm') diff --git a/amforth-6.5/common/words/search-wordlist.asm b/amforth-6.5/common/words/search-wordlist.asm new file mode 100644 index 0000000..3d82de4 --- /dev/null +++ b/amforth-6.5/common/words/search-wordlist.asm @@ -0,0 +1,72 @@ +; ( c-addr len wid -- [ 0 ] | [ xt [-1|1]] ) +; Search Order +; searches the word list wid for the word at c-addr/len + +.if cpu_msp430==1 + HEADER(XT_SEARCH_WORDLIST,15,"search-wordlist",DOCOLON) +.endif + +.if cpu_avr8==1 +VE_SEARCH_WORDLIST: + .dw $ff0f + .db "search-wordlist",0 + .dw VE_HEAD + .set VE_HEAD = VE_SEARCH_WORDLIST +XT_SEARCH_WORDLIST: + .dw DO_COLON +PFA_SEARCH_WORDLIST: +.endif + .dw XT_TO_R + .dw XT_ZERO + .dw XT_DOLITERAL + .dw XT_ISWORD + .dw XT_R_FROM + .dw XT_TRAVERSEWORDLIST + .dw XT_DUP + .dw XT_ZEROEQUAL + .dw XT_DOCONDBRANCH + DEST(PFA_SEARCH_WORDLIST1) + .dw XT_2DROP + .dw XT_DROP + .dw XT_ZERO + .dw XT_EXIT +PFA_SEARCH_WORDLIST1: + ; ... get the XT ... + .dw XT_DUP + .dw XT_NFA2CFA + ; .. and get the header flag + .dw XT_SWAP + .dw XT_NAME2FLAGS + .dw XT_IMMEDIATEQ + .dw XT_EXIT + +.if cpu_msp430==1 + HEADLESS(XT_ISWORD,DOCOLON) +.endif + +.if cpu_avr8==1 +XT_ISWORD: + .dw DO_COLON +PFA_ISWORD: +.endif + ; ( c-addr len 0 nt -- c-addr len 0 true| nt false ) + .dw XT_TO_R + .dw XT_DROP + .dw XT_2DUP + .dw XT_R_FETCH ; -- addr len addr len nt + .dw XT_NAME2STRING + .dw XT_ICOMPARE ; (-- addr len f ) + .dw XT_DOCONDBRANCH + DEST(PFA_ISWORD3) + ; not now + .dw XT_R_FROM + .dw XT_DROP + .dw XT_ZERO + .dw XT_TRUE ; maybe next word + .dw XT_EXIT +PFA_ISWORD3: + ; we found the word, now clean up iteration data ... + .dw XT_2DROP + .dw XT_R_FROM + .dw XT_ZERO ; finish traverse-wordlist + .dw XT_EXIT -- cgit v1.2.3