X-Git-Url: https://git.kengrimes.com/?p=watForth.git;a=blobdiff_plain;f=forth.forth;fp=forth.forth;h=63da4a722d15bac22241211b293a7a50acf12cb7;hp=e7dc22974c155f5366adf97e19e9d52b049b4446;hb=63e17ddc993a5a04cc6ae55bad8420b61c37d1bf;hpb=1b642df6dc1da4bdbe2c389899bb4be072bc0b1e diff --git a/forth.forth b/forth.forth index e7dc229..63da4a7 100644 --- a/forth.forth +++ b/forth.forth @@ -10,19 +10,93 @@ \ \ You should have received a copy of the GNU General Public License \ along with this program. If not, see . +16500 execute WORD 16500 29 execute +word DEFINE 29 29 execute +\ word EXECUTE 12 define +word RINIT 3 define +word NOOP 13 define +word MODE 14336 define +word EXECUTE-MODE 16680 define +word EXECUTE-NUM 16720 define +word INTERPRET 16400 define +word KEY 5 define +word WORD-START 20 define +word WORD-PUT 19 define +word WORD-END 23 define +word STRING-START 39 define +word STRING-PUT 40 define +word STRING-END 41 define +word NUMBER 22 define +word FIND 21 define +word FIND-DOES 44 define +word DEFINE-DOES 45 define +word QUIT 16384 define +word BYE 25 define +word WORDS 27 define +word !CHANNEL 35 define +word !HERE 36 define +word HERE 28 define + +word ; 1 define +word JZ: 14 define +word JNZ: 15 define +word J-1: 24 define +word JMP: 18 define +word , 33 define +word + 7 define +word - 34 define +word =? 37 define +word WS? 17 define +word . 9 define +word .S 38 define +word @ 10 define +word @+ 42 define +word ! 11 define +word !+ 43 define +word LIT 2 define +word DUP 6 define +word 2DUP 30 define +word DROP 16 define +word 2DROP 32 define +word SWAP 26 define +word ROT 31 define + word ' here define word word find , word find find , word ; find , + word : here define ' word , ' here , ' define , ' ; , +' : dup define-does + : IWRITE-MODE ' dup , ' JNZ: , here 12 + , ' 2drop , ' ; , ' 2dup , ' find , ' dup , ' JZ: , here 16 + , ' , , ' 2drop , ' ; , -' drop , ' LIT , ' LIT , ' , , 16720 , ' , , ' ; , +' drop , ' LIT , ' LIT , ' , , ' EXECUTE-NUM , ' , , ' ; , + : i ' LIT , ' MODE , ' LIT , ' IWRITE-MODE , ' ! , ' ; , -: e ' LIT , ' MODE , ' LIT , ' EXECUTE-MODE , ' ! , ' ; , + \i -\: FINISH-STRING DROP STRING-END ; -\: " STRING-START -\: KEYPUMP KEY 34 =? JNZ: FINISH-STRING STRING-PUT JMP: KEYPUMP +\: e LIT MODE LIT EXECUTE-MODE ! ; +\: :> word find here define-does ; +\' :> \dup \define-does +\: FINISH-" DROP STRING-END ; +\: " STRING-START \: KLOOP KEY 34 =? JNZ: FINISH-" STRING-PUT JMP: KLOOP +\:> " " swap lit lit , , lit lit , , ; +\: IF JZ: \here \8 \+ \, ; word 2drop ; +\:> IF \: DOIF LIT JZ: , HERE DUP , ; +\: ELSE ; +\:> ELSE \: DOELSE LIT JMP: , HERE DUP , SWAP HERE ! ; +\: THEN ; +\:> THEN \: DOTHEN HERE ! ; +\: COMPILE-MODE dup +\doif 2dup find dup + \doif dup find-does dup + \doif swap drop rot 2drop execute ; + \dothen drop , 2drop ; + \dothen drop lit lit , execute-num , ; +\dothen 2drop ; +\: c LIT MODE LIT COMPILE-MODE ! ; +\: DO" \e + " watForth-32 Interactive CLI: " .s