Trace: » forth04.html

[hemmerling] FORTH 4/7

Implementations

The Beginning

The first FORTH

The first Hardware

Free & OpenSource FORTH Systems

Valuable OpenSource FORTHs, named by a FORTH expert in 2021-07 ( in alphabetic Order )

  1. CamelForth.
  2. eForth.
  3. ESP32forth.
  4. ForthWin/Forth2020.
  5. Gforth.
  6. Mecrisp.
  7. noForth / Egel project.
  8. SP-Forth.
  9. Tachyon Forth.
  10. Win32forth.

Free & OpenSource FORTH Systems for BareMetal Systems, in Assembly Language, ( some ) C, ..

  • GitHub "ablevm / able-forth" - “A Forth-like programming language that targets the AbleVM”.
  • yesco / ALForth - “ALphabetical Forth - an ASCII mapped byte-code proposal for FORTH (standard and extented)”.
    • Facebook "Forth2020 Users-Group", Thread "How does one get an operational Forth system on a board that has extremely limited SRAM?" - “BTW, I”d consider using an Alphabetical Letter Forth bytecode: I've mapped the most common names in forth to 1 letter, and others to two letter sequences. I went through all the standard forth words and extras and assigned them 1-2 letters. I feel the mapping is pretty good. The mapping/bytecode was created for a letter byte coded forth for 6502 (not completed, but experiemnted on in various variants). There are many nice features with having the byte-code be the same the names. You'll find a number of similar systems of various “forth” charactersistcs by other members. What I've learned is that this simplifies, if not completely removes the need for a compiler/parser. I made a prototype one, with 8 bit (byte) “wordsize” with an editor. 256 bytes housed all user defined words (address 0-N, 0 terminated). and the end of the 256 byte page was 16 bytes for program stack, 16 bytes for user stack. The program grew up towards the stack that grew down”.
    • “I almost had a fullscreen (vt100) editor working for the 256– bytes. Newlines-formatted.256 bytes quite a lot of op-codes... CTRL-R reset the stack and parsed worddefs/ran the code on screen.Instead of immediate/Compile mode I had Edit/Run mode. I think my 50+ words plus editor was about 1.5KB in 6502”.
  • The OpenSource ANS94 FORTH system SourceForge "bigFORTH", SourceForge "bigFORTH".
    • List of FORTH words:
      BIGFORTH.INI  ENVIRONMENTAL  ENVIRONMENT?  ENVIRONMENT  ENVIRON.FS RANDOM  RND  ROL9  GENERATOR  SEED  RANDOM.FS  STRING  DOUBLE  PTR SHORT  BYTE  STRUCT{  STRUCT  SIZEOF  ALIGN-BY  STRUCT.FS  DFFIELD: SFFIELD:  FFIELD:  FIELD:  CFIELD:  +FIELD  END-STRUCTURE  BEGIN-STRUCTURE K-F12  K-F11  K-F10  K-F9  K-F8  K-F7  K-F6  K-F5  K-F4  K-F3  K-F2 K-F1  K-INSERT  K-END  K-NEXT  K-PRIOR  K-DOWN  K-RIGHT  K-UP  K-LEFT K-HOME  FKEY.  SIMPLE-FKEY-STRING  KEYCODE-END  KEYCODE-START  K-FNS: EKEY>FKEY  EKEY>XCHAR  EKEY>CHAR  K-FN-MASK  K-MOUSE-MASK  K-NUMLOCK-MASK K-ALT-MASK  K-CTRL-MASK  K-CAPSLOCK-MASK  K-SHIFT-MASK  EKEY?  EKEY ACTION-OF  DEFER!  DEFER@  SYNONYM  FORTH200X.FS  (FILE-ERROR  .BACK "BACK  IN_WHICH?  .EXCEPT  DUMPED  EXCEPT.FS  BECOMES  NOTRACE  TRACEALL TAB  ~~  ~~,  (~~)  B~~  BP'OFF  BP'ON  BP:  TRACE'  DEBUG  >DEBUG VOCS  D'  ?  DL  DU  DUMP  DSEE  SEE  TOOLS  .DUMPED  WITHIN 0= I C@  .A3  .A2  .A1  TOOLS.FB  .386  .86  DISLINE  DISW  DIS  DISASS.F -BUFFER  +BUFFER  +OUT  NULL  OUT  0.  OUTPUT.FB  (ENTER)  WRITE-HISTORY LFPAD  PREV-LINE  FIND-PREV-LINE  NEXT-LINE  GET-LINE  HIST-SETPOS HIST-POS  CLEAR-TIB  CLEAR-LINE  BACKSPACES  ?HISTORY  GET-HISTORY HISTORY-FILE  FORCE-OPEN  BACKWARD^  FORWARD^  HISTORY  BINDKEY <TAB>  EXTRACT-WORD  TIB-FULL?  KILL-EXPAND  SEARCH-PREFIX  PREFIX-FOUND F'  HELP  (FTAST  VT100-DECODE  TCODE  TRANS  FCODE  TRANSCODE  TRANSLATE VT100KEY.FS  IDLE+  IDLE'  RE-TIME  DOSHIFT  !NAME  NEWTASK  TASK TASKS  TASK'S  RENDEZVOUS  AUTOSTART  .TIME  >US  MS>TIME  MS  MINUTES SECONDS  TIMEOUT?  WAIT  TILL  AFTER  !TIME  TIME  TIMER@  KILL PASS  ACTIVATE  UNLOCK-ALL  MULTITASK  SINGLETASK  TASKER.FB  CP APPLY  'BYE  IMPORT  M'  MODULES  SAVESYSTEM  SAVEMOD  SAVING  SAVEMOD.FB STRING-PREFIX?  STR<  STR=  (0"  0"  ,0"  CPUSH  0PLACE  0>C"  C>0" $ADD  $SUM  +PLACE  BLANK  REPLACE  INSERT  DELETE  SEARCH  COMPARE CAPSCOMP  CAPS  STRINGS.FS  MEMERR$  SYSERRS  ERRORE.FS  SH  (VIEW RM  MV  LL  LS  FREE?  CD  DIR  PWD  MAKEDIR  KILLDIR  INDEX  CONVEY COPY  MORE  (MORE  FILES  EOF  "USE  FROM  RENAME  MAKEFILE  FREE? KILLFILE  PATH  RESIZE-FILE  FILE-SIZE  REPOSITION-FILE  FILE-POSITION FLUSH-FILE  WRITE-FILE  READ-FILE  BIN  W/O  R/W  R/O  DELETE-FILE CLOSE-FILE  CREATE-FILE  OPEN-FILE  SOURCE-ID  TIME&DATE  APP-WIN DOS  [WHILE]  [AGAIN]  [REPEAT]  [UNTIL]  [BEGIN]  [I]  [NEXT]  [FOR] [LOOP]  [+LOOP]  [?DO]  [DO]  [ENDIF]  [THEN]  [ELSE]  [IFUNDEF] [IFDEF]  [IF]  [UNDEFINED]  [DEFINED]  DEFINED?  [STRUCT]  FILEINT.FB HASH  HASH.FS  INCLUDED?  INCLUDED  INCLUDE-FILE  WRITE-LINE  READ-LINE \*  /*  (*  (  \\\  \\  #!  \  #LIST  MORE?  INCLUDE  STR?  #INCLUDE #LOAD  (#LOAD  INPUT-FILE  RESTORE-INPUT  SAVE-INPUT  REFILL  READLINE (READLINE  SKIPLF  READ?  STREAM@  -EOF?  POS@  FPOS  CMAX  STREAM.FB LABEL  >LABEL  CODE  >C:  ;CODE  USER'  ASSEMBLER  ASSEM486.FB  .BLK STARTUP.FB  FORTH  BIGFORTH  WIN32  FORTH.FB  RESTART  PCR/W  H: G:  F:  E:  D:  C:  B:  A:  DRV?  >DRIVE  DRIVE  DISPLAY  KEYBOARD PCACCEPT  PCDECODE  EVERYCHAR  CTYPE?  SCANCODE  LASTKEY  CTRLKEYS <CLR>  <END>  <BEG>  <BS>  <DEL>  <BACK>  <FORW>  <NEXT>  <PREV> <INS>  >STRING  CUR+  PCGETKEY  PCFORM  PCAT?  PCAT  PCTYPE  PCCLRLINE PCCURRITE  PCCURLEFT  PCCUROFF  PCCURON  PCPAGE  PCDEL  PCCR  BELL PCEMIT  COLOR  PCKEY  PCKEY?  KBSHIFT  PENDING  ESC[  ESC!  CON! #BELL  #TAB  #ESC  #LF  #CR  #BS  COLD  RSPACE  DS@  CS@  EXCEPT' EXCEPT#  DUMPED  'RESTART  #TIBS  INTERPRET-ARGS  DO-ARG  ARG#  -OPTIONS SCRIPT?  ARG  ARGC  MODULECOLD  MODULE;  MODULE]  EXPORT  EXPORTVOC EXPORT:  BYE:  MAIN:  COLD:  MODULE  MODULE[  JOINED  SAVEDP  FINDMOD MODHEADER  MAXMODLEN  QUERY  PREVTIB  NEXTTIB  EVALUATE  EXECUTE-PARSING ">TIB  DELTIB  MORETIBS  NEWTIB  #TIB  TIB  MAX#TIB  ?CR  COLS  ROWS COL  ROW  STOP?  BADBYE  BYE  MODULEBYE  SAVE  EMPTY  MARKER  FORGET(FORGET  CLEAR  CUSTOM-REMOVE  REMOVE  RM-MODULE  USE  /NAME  /PARSE FILE?  .FILE  >LEN  DIRECT  FILE  FILE,  CLOSE!  CLOSE  OPEN  FLUSH EMPTY-BUFFERS  CLOSE-FILES  SAVE-BUFFERS  CAPACITY  DOS  FILE-LINK HOSTSEM  BLOCK  BUFFER  ISFILE@  (BLOCK  (BUFFER  CORE?  UPDATE EMPTYBUF  BACKUP  DISKERR  (DISKERR  RESIZE  FREE  ALLOCATE  MEMORY BLOCKR/W  OFFSET  PREV  UNLOCK  LOCK  SEMA  IDLE  SEMALINK  SLEEP WAKE  PAUSE  STOP  LINKTASK  'UP  SLEEPERS  LIST  L/S  C/L  .S  MAXDEPTH-.S U.  .  UD.  D.  U.R  .R  UD.R  D.R  #S  #  SIGN  #>  <#  HOLD  QUD/MOD SPACES  SPACE  -TRAILING  BL  ERROR"  ABORT"  (ABORT  (ERROR"  (ABORT" (ERROR  LASTERR  ABORT  PUSHI/O  STANDARDI/O  (PUSHI/O  (STANDARDI/ QUIT  ?ERROR  (QUIT  PROMPT  'QUIT  INCLUDE  LOADFROM  -->  +THRU THRU  +LOAD  LOAD  (LOAD  SAVEERR  LOADERR  .STATUS  THROW  BACKTRACE CATCH  (CATCH  'CATCH  'ABORT  END-TRACE  >ERROR  ERR$S  ERROR$S SYSERR$  ?STACK  CPU  SYS-SP  FORTHSTART  FTAB  MROOT  IS  DEFERS WHAT'S  PATCH  DEFER  EOT?  ACCEPT  DECODE  KEY?  KEY  INPUT:  AT-XY CLRLINE  CURRITE  CURLEFT  CUROFF  CURON  TFLUSH  EOT  BOT  FORM AT?  AT  PAGE  DEL  TYPE  CR  EMIT?  EMIT  OUTPUT:  CFA@  TABLE: T]  ]  [  INTERPRET  NO.EXTENSIONS  NOTFOUND  PARSER  NUMBER  NUMBER? S>NUMBER  GETSIGN  GETBASE  BASES  CHAR@  >NUMBER  ACCUMULATE  DIGIT? [']  '  FIND  (FIND  (PREHASH  ((FIND  LIST(FIND  FOUND  .NAME  >BODY NAME>  (NAME>  WORDS  UNLIST  LIST>  ORDER  BODY>  SEARCH-WORDLIST FORTH-WORDLIST  SET-CURRENT  GET-CURRENT  SET-ORDER  GET-ORDER  WORDLIST 'PREHASH  'FINDPAD  >REL  ONLYFORTH  ONLY  ROOT  VOCABULARY  VOC, VOC-LINK  SLOWVOC  'INITVOC  DEFINITIONS  PREVIOUS  TOSS  ALSO  CONTEXT CURRENT  VP  TO  &  AUSER  USER  UALLOT  AVALUE  VALUE  2CONSTANT ACONSTANT  CONSTANT  AVARIABLE  2VARIABLE  VARIABLE  ALIAS  ;  !LENGTH :NONAME  >NAME  NFA?  :  CREATE  HEADER  NAME?  HEADALIGN  HEAD+ MAKEVIEW  BLK@  FORWARD  NOT  WARNINGS  WARNING  |  ?HEAD  HMACRO DP!  DOES>  (;CODE  HEAP?  HEAP  HALLOT  CLEARSTACK  MACRO  RESTRICT IMMEDIATE  RECURSE  RECURSIVE  REVEAL  'REVEAL  \NEEDS  \\  \  .( (  .'  ."  (."  C'  S'  ,'  "  S"  SLITERAL  (S"  C"  (C"  ,"  "LIT SSTRING+  CSTRING+  CTRL  ASCII  [CHAR]  CHAR  DECIMAL  HEX  JOIN FORK  ENDCASE  ENDOF  OF  CASE  NEXT  -LOOP  +LOOP  LOOP  NEXTITER -ITERATE  +ITERATE  ITERATE  FOR  U-DO  -DO  U+DO  +DO  ?DO  DO MEANWHILE  REPEAT  UNTIL  AGAIN  WHILE  BEGIN  ELSE  ENDIF  THEN IF  AHEAD  ?LEAVE  LEAVE  DONE  LEAVINGS  CS-ROLL  CS-PICK  YET BUT  .ALIGN  CASE?  ?STRUC  POSTPONE  [COMPILE]  COMPILE  (COMPILE REL  COMPILE,  CFA,  'CFA,  !LASTDES  ?ALIT,  ?LIT,  ALITERAL  2LITERAL LITERAL  #OPT  OPTTAB  :S  :R  :##  :#>  :#+@  :#@^  :#@&  :#@| :#@-  :#@+  :+@  :Q+@  :#^  :#&  :#|  :#-  :#+  :C@  :@  :I@  :SVAR@ :OVAR@  :SUSR@  :USER@  :#@  :#@>  :#C@  :#C@>  :IC@  :#!  :!  :#+C@ :C!  :XOR  :AND  :OR  :-  :+  :SVAR  :OVAR  :I  :Q+  :CDX  :SUSER :USER  :LIT  :+LOOP  :?  :F  :OVER  :DX>  :DX  :AX  :NONE  T&P  LASTXT LASTCFA  LAST  LASTOPT  LASTDES  NAME  (NAME  PARSE-NAME  PARSE WORD  SOURCE  BLK+  B/BLK  (WORD  CAPITALIZE  TOLOWER  CAPITAL  SCAN< -SCAN  -SKIP  SKIP<  SCAN  SKIP  ERASEBITS  MOVEBITS  A,  V!  A! RELOFF  RELON  RELINFO  BIT@  ~BIT  -BIT  +BIT  W,  C,  2, , PAD ALIGN  ALIGNED  ALLOT  UNUSED  HERE  ERASE  FILL  -TEXT  /STRING COUNT  PLACE  MOVE  (FOR  CMOVE>  CMOVE  ITH  UNLOOP  +I'  (NEXT (LOOP  (-LOOP  (+LOOP  I@  K'  J'  I'  K  J  I  (-DO  (U+DO  (+DO (U-DO  (?DO  (DO  Q*/  *  Q*  QMOD  Q/MOD  Q/  M*  UM*  DMIN  DMAX M*/  D*  UD/MOD  U/MOD  MOD  SM/REM  FM/MOD  M/REM  MU/  M/  /  */ UM/MOD  MU/MOD  M/MOD  /MOD  */MOD  BOUNDS  ABS  DABS  S>D  EXTEND UMIN  UMAX  MAX  MIN  DU<  D<  D=  WITHIN  D-  D0=  <>  U>=  U<= >=  <=  0<=  0>=  =  U<  U>  <  >  ?EXIT  0>  0<  0=  0<>  PUSH -ROLL  ROLL  -ROT  ROT  CHARS  CELL/  CELLS  PICK  D2/  D2*  4/ 4*  2/  2*  ON  OFF  FALSE  TRUE  -1  -CELL  CELL  4  3  2  1  0 8+  6+  CELL-  4-  2-  1-  CELL+  4+  3+  2+  1+  CHAR+  2!  2@ M+  D+  DNEGATE  <<  >>  RSHIFT  LSHIFT  NEGATE  INVERT  XOR  AND OR  -  UNDER+  +  RDEPTH  DEPTH  D0<  2ROT  2OVER  2DUP  2SWAP  SWAP TUCK  UNDER  NIP  OVER2  OVER  C!+  C@+  W!+  WX@+  W@+  !+  @+ AC!+  AC@+  A!+  A@+  A>  >A  PC!  PC@  CX@  WX@  W!  WEXTEND  W@ CTOGGLE  C!  C@  ?DUP  +!  !  @  2>R  2R>  2R@  R>  >R  RDROP  R@ PERFORM  EXECUTE  UNNEST  RP!  RP@  UP!  UP@  SP!  SP@  FROMFILE ISFILE  R#  SCR  DPL  LOADFILE  LINE  BLK  >IN  >TIB  STATE  EXPORTLINK THISMODULE  "ERROR  ERRORHANDLER  WAKE-TIME  INPUT  OUTPUT  BASE S^  DP  HANDLER  R0  S0  LOCK>  TSTART  TSAVE  TSAVERP  TPREV  TNEXT UDP  MAXUDP  (SUSER  (USER  DUP  D>S  DROP  2DROP  NOOP  EXIT  KERNEL
  • GitHub "rm-hull / byok" - “A bare-metal x86 Forth interpreter & compiler”.
  • GitHub "agsb /f2u" - “A forth concept with no assembler in dictionary, else in primitives, and a eficient indirect thread code”.
  • Charles Childers, Forthworks.
  • The OpenSource FORTH System FlashForth, SourceForge "FlashForth: for PIC and Atmega", SourceForge "FlashForth: for PIC and Atmega" - “A standalone Forth system for the Microchip PIC 18, 24, 30, 33 and the Atmel Atmega series of microcontrollers”.
  • Ulrich Hoffmann.
  • “Itsy Forth”.
    1. Original implementation for MSDOS by John Metcalf.
    2. GitHub "kt97679 / itsy-linux" - “Linux port of itsy forth by John Metcalf” ( MSDOS, Linux ).
    3. GitHub "dylanmc / itsy-forth" - “MacOS port of Linux port of itsy forth by John Metcalf ” ( MSDOS, Linux, MacOSX ).
    4. GitHub "phf / itsy-forth" - “Linux port of itsy forth by John Metcalf” ( MSDOS, Linux, MacOSX ).
  • The OpenSource “JonesForth”.
  • GitHub "howerj / libforth" - “libforth: A small Forth interpreter that can be used as a library written in c99”.
  • The OpenSource Forth “MinForth”.
  • Brad Nelson.
    • SourceForge "Mecrisp-Across Unofficial Documentation" - “Mecrisp-Across is a very strong optimising cross compiler running on ... ARM Linux and generating code for small classic MSP430 chips like MSP430F2012”.
    • List of FORTH words of “mecrisp 2.0.7 for msp430g2553”
      --- Mecrisp Core --- hook-key? hook-key hook-emit? hook-emit key? key emit? emit hex. cr bl space spaces words .s h.s u.s .rs 2nip 2drop 2-rot 2rot 2tuck 2swap 2over 2dup 2>r 2r> 2r@ 2rdrop depth pick nip drop rot -rot swap tuck over ?dup dup >r r> r@ rdrop rdepth rpick sp@ sp! rp@ rp! >< arshift rshift lshift shr shl ror rol bic not xor or and true false clz .digit digit hold sign #S # #> <# u. . ud. d. f/ f* hold< f#S f# f. f.n number */ u*/ */mod m/mod m* um/mod ud/mod udm* d2/ d2* dshr dshl dabs dnegate d- d+ s>d du> du< d> d< d0< d0= d<> d= um* u/mod /mod mod / * compare skipstring ctype type s" c" ." ( count \ min max umin umax 2- 1- 2+ 1+ even 2* 2/ abs negate - + binary decimal hex base cells cell+ move fill cbit@ bit@ cxor! xor! cbic! bic! cbis! bis! 2constant constant 2variable variable nvariable buffer: +! c+! 2! 2@ c! c@ ! @ >in current-source source setsource tib query cexpect accept token parse ['] ' evaluate interpret hook-quit quit dictionarystart dictionarynext , c, align aligned [char] char string, literal, 2literal, inline, call, ret, flashvar-here here allot (create) compiletoram? compiletoram compiletoflash smudge compileonly inline immediate setflags find execute recurse postpone does> <builds create state ] [ ; : 0-foldable 1-foldable 2-foldable 3-foldable 4-foldable 5-foldable 6-foldable 7-foldable jump, then else if ahead repeat while until again begin exit k j i unloop leave +loop loop ?do do case ?of of endof endcase u<= u>= u> u< <= >= > < 0< 0<> 0= <> = dint eint eint? nop reset lpm0 lpm1 lpm2 lpm3 lpm4 wakeup hook-pause pause serial-key? serial-key serial-emit? serial-emit adc-vcc adc-1.5 analog eraseflashfrom eraseflash cflash! flash! irq-port1 irq-port2 irq-adc irq-timera1 irq-timera0 irq-watchdog irq-timerb1 irq-timerb0 irq-comp irq-tx irq-rx --- Flash Dictionary --- list searchfor searchcalls uses name. disasm-$ disasm-fetch u.4 u.ns u.h register. disasm-const disasm-jumps disasm-source disasm-destination disasm-string disasm-single disasm-double disasm memstamp disasm-step seec see cornerstone eraseflash
      
    • List of FORTH words of “mecrisp 2.0.7 for msp430g2553”, converted to uppercase
      --- Mecrisp Core --- HOOK-KEY? HOOK-KEY HOOK-EMIT? HOOK-EMIT KEY? KEY EMIT? EMIT HEX. CR BL SPACE SPACES WORDS .S H.S U.S .RS 2NIP 2DROP 2-ROT 2ROT 2TUCK 2SWAP 2OVER 2DUP 2>R 2R> 2R@ 2RDROP DEPTH PICK NIP DROP ROT -ROT SWAP TUCK OVER ?DUP DUP >R R> R@ RDROP RDEPTH RPICK SP@ SP! RP@ RP! >< ARSHIFT RSHIFT LSHIFT SHR SHL ROR ROL BIC NOT XOR OR AND TRUE FALSE CLZ .DIGIT DIGIT HOLD SIGN #S # #> <# U. . UD. D. F/ F* HOLD< F#S F# F. F.N NUMBER */ U*/ */MOD M/MOD M* UM/MOD UD/MOD UDM* D2/ D2* DSHR DSHL DABS DNEGATE D- D+ S>D DU> DU< D> D< D0< D0= D<> D= UM* U/MOD /MOD MOD / * COMPARE SKIPSTRING CTYPE TYPE S" C" ." ( COUNT \ MIN MAX UMIN UMAX 2- 1- 2+ 1+ EVEN 2* 2/ ABS NEGATE - + BINARY DECIMAL HEX BASE CELLS CELL+ MOVE FILL CBIT@ BIT@ CXOR! XOR! CBIC! BIC! CBIS! BIS! 2CONSTANT CONSTANT 2VARIABLE VARIABLE NVARIABLE BUFFER: +! C+! 2! 2@ C! C@ ! @ >IN CURRENT-SOURCE SOURCE SETSOURCE TIB QUERY CEXPECT ACCEPT TOKEN PARSE ['] ' EVALUATE INTERPRET HOOK-QUIT QUIT DICTIONARYSTART DICTIONARYNEXT , C, ALIGN ALIGNED [CHAR] CHAR STRING, LITERAL, 2LITERAL, INLINE, CALL, RET, FLASHVAR-HERE HERE ALLOT (CREATE) COMPILETORAM? COMPILETORAM COMPILETOFLASH SMUDGE COMPILEONLY INLINE IMMEDIATE SETFLAGS FIND EXECUTE RECURSE POSTPONE DOES> <BUILDS CREATE STATE ] [ ; : 0-FOLDABLE 1-FOLDABLE 2-FOLDABLE 3-FOLDABLE 4-FOLDABLE 5-FOLDABLE 6-FOLDABLE 7-FOLDABLE JUMP, THEN ELSE IF AHEAD REPEAT WHILE UNTIL AGAIN BEGIN EXIT K J I UNLOOP LEAVE +LOOP LOOP ?DO DO CASE ?OF OF ENDOF ENDCASE U<= U>= U> U< <= >= > < 0< 0<> 0= <> = DINT EINT EINT? NOP RESET LPM0 LPM1 LPM2 LPM3 LPM4 WAKEUP HOOK-PAUSE PAUSE SERIAL-KEY? SERIAL-KEY SERIAL-EMIT? SERIAL-EMIT ADC-VCC ADC-1.5 ANALOG ERASEFLASHFROM ERASEFLASH CFLASH! FLASH! IRQ-PORT1 IRQ-PORT2 IRQ-ADC IRQ-TIMERA1 IRQ-TIMERA0 IRQ-WATCHDOG IRQ-TIMERB1 IRQ-TIMERB0 IRQ-COMP IRQ-TX IRQ-RX --- FLASH DICTIONARY --- LIST SEARCHFOR SEARCHCALLS USES NAME. DISASM-$ DISASM-FETCH U.4 U.NS U.H REGISTER. DISASM-CONST DISASM-JUMPS DISASM-SOURCE DISASM-DESTINATION DISASM-STRING DISASM-SINGLE DISASM-DOUBLE DISASM MEMSTAMP DISASM-STEP SEEC SEE CORNERSTONE ERASEFLASH
      
    • Specialty with the wordlist:
      • LIST lists the FORTH wordlist like WORDS / VLIST with other FORTH implementation.
      • WORD lists a FORTH wordlist with extended informations, one FORTH word by line.
  • preForth & seedForth.
  • “Pygmy Forth”.
  • The OpenSource FORTH “Diaperglu64” by Rainbarrel.com.
    • “Diaperglu64 is a 64 bit Forth based script interpreter and compiler I developed in C/C++ and assembler that can host dynamic html pages under Apache and ISAPI. It also comes with an x86 assembler”.
  • RETRO Forth & REVA Forth.
  • The OpenSource FORTH system GitHub "seanpringle / reforth" - “Enter Reforth! It is small, familiar, still a Forth. Not an ANS-Forth out of the box, but...”.
  • The OpenSource FORTH system GitHub "cesarblum/sectorforth" - “sectorforth is a 16-bit x86 Forth that fits in a 512-byte boot sector”.
  • The OpenSource FORTH system “Swapforth”.
  • “VolksForth”.
      • “Some modern Forth Systems were influenced by or were derived from volksFORTH (GNU-Forth, bigForth)”.
      • Implementations:
        1. volksFORTH MS-DOS (Intel x86 Architecture i8086-ia64).
        2. volksFORTH 6502 (Commodore 64, Commodore Plus 4, Commodore PET, Apple 1, Atari XL/XE).
          • Installation and operation with the C64 emulator “C64 Emulator”:
            • It is not useful to create a “Game Exe” by the menu command “Configuration / Misc / Create Game Exe” and selecting the disk image “vforth4_1.d64” as application, as loading a disk causes the error message ”?DEVICE NOT PRSENT ERROR”.
            • Instead, load a the disk image “vforth4_1.d64” by menu command “Configuration / Load File”. The loaded disk is be available even after executing the “Reset” menue command of the emulator.
            • At C64-BASIC promt:
              • Press “F1” key. It executes the C64-BASIC command 'LOAD”$”,8'.
              • “LIST” lists the directory of the loaded volksFORTH disk.
              • Execute 'LOAD”RUNME”,8' to read the readme text.
              • Execute 'LOAD”C64-VOLKSFORTH83”,8' to load volksFORTH.
              • Execute “RUN” to start volksFORTH.
        3. 65816 (Western Design Center - Mensch Computer, C-One).
        4. volksFORTH Z80 (CP/M, Amstrad CPC), Amstrad NC100, Cambridge Computer Z88.
        5. 68000 (Atari ST).
          • Installation and first-time operation with the ATARI-ST emulator “Hatari”:
            • Copy the contents of the “Harddisk” directory of the volksForth distribution archive on your host filesystem.
            • Press “F12” to enter the Hatari main menu.
            • Select “Atari screen” to configure the graphics resolution, e.g. to switch to “Mono”. Press the button “Back to main menu”.
            • Select “Hard disks”. Click on “GEMDOS drive: Browse” to select the “Harddisk” directory on your host filesystem. Press the button “Back to main menu”.
            • Optional saving of the configuration.
              • Select “Save config”. Select a directory with the configuration file “hatari.nvram”, click on the “hatari.nvram” filename label and press the button “ok”. The default file path on Win10 is “C:\users\<user>\AppData\Local\Hatari\hatari.nvram”.
              • As with “Hatari 2.3.1”, however, by saving a configuration, neither the screen size nor the GEMDOS drive can be restored by this.
          • Operation with the ATARI-ST emulator “Hatari”:
            • Press “F12” to enter the Hatari main menu.
            • Select “Load config”. Select a directory and press the button “ok”.
            • On the ATARI-ST desktop of the ATARI-ST emulation, open drive “C:” and double-click on the icon “4TH.PRG”.
    • C64 Wiki "volksFORTH" - “volksFORTH (ehemals ultraFORTH)... Zeitweise war die Weiterentwicklung unterbrochen, seit dem Jahr 2005 wurde sie wieder aufgenommen und wird wieder von Jahr zu Jahr überarbeitet. Die aktuelle Version ist 3.80.1. Zur Zeit wird an der Version 3.9.3 gearbeitet. Die kommende Version 4.0 soll dann weitgehend mit dem Forth2012-Standard kompatibel sein. volksFORTH kann kostenlos genutzt werden und steht unter BSD-Lizenz. Die Programmiersprache volksForth beinhaltet den gesamten Forth-83 Standard, sowie ergänzend viele ANSI Forth 94 Erweiterungen”.
    • Facebook "FORTH PROGRAMMING / EARLY FORTH SYSTEMS & DEVELOPMENT", Thread "How to handle parser recursion when dealing compiled Forth words?" - ” The minimal CP/M VolksForth kernel has access to the first file that you give as parameter on the command line. So if you run “volks4th fileint.fb” then all block access goes to the block file fileint.fb. If you then, inside VolskForth, run '1 load' then you have the full file interface available, with USE, INCLUDE etc. Without fileint.fb loaded, you have access to only that one file passed from the CP/M command line”.
  • Wolf Wejgaard.
      • “The first Holon system had a structure of modules, groups and (Forth) words”, inspired by the hierarchical presentation of classes in Smalltalk IDEs.
      • “Handling Source Code in a Browser”, “Handling Source in a Database”. “Why do programmers still edit source code in linear text files? Why not in a CMS? The CMS can write source files for the compiler. And it gives you new options to present and handle complete programs in a browser, clearly structured like a book”.
  • GitHub "frenchie68 / Z79Forth" - “Z79Forth for a Hitachi 63C09 based single board computer, aka the 'Z79Forth Reference Board'”.
      • “The reference 'canonical' (VM based implementation) remains CamelForth by Brad Rodriguez”.
      • Z79Forth implements a subset of FORTH79. Just the FORTH79 nucleus words U* and U/ are missing.
    • List of the about 200 FORTH words ( Developer comment: “All the stuff above @ is loaded from block storage. You can safely ignore it” ):
      TO VALUE : H. BSA BS BFBSADR MRUBUFA BUF1 BUF0 FLAGS>STR FLAGS-TABLE DIS .SRC .TAB HDMP OPCODE-LOOKUP INSTR>SOURCE INSTR>OPSIZE OPC-TABLE " TAB NB F12TESTLOAD SAPINLOAD HANLOAD PHRPALLOAD PALFLTLOAD DISLOAD LIFELOAD VILOAD @ ? C@ ! C! -! 1+! +! HERE LAST CELLS MOVE CMOVE CMOVE> BLANKS FILL ALLOT , C, -ROT ROT ROLL OVER PICK SWAP DROP DUP NIP TUCK ?DUP .S .' DUMP HEX DECIMAL OCTAL BIN BASE STATE VLIST PAYLOAD S */MOD */ /MOD MOD / 2/ 2* * SHIFT 2 1 0 2- 1- - 2+ 1+ + EMIT KEY KEY? MS CONTINUED --> THRU LOAD INTERPRET ACCEPT EXPECT -TRAILING COUNT TYPE PAD CR PAGE SPACES SPACE BL U.R .R U. . <# # #S HOLD SIGN #> 2@ 2! 2DUP 2DROP 2SWAP 2OVER D< D0= DNEGATE D+ S" ." \ SOURCE WORD CHAR [CHAR] BYE EXECUTE FORGET RECURSE ; : COMPILE, POSTPONE ['] [ ] FIND ABORT QUIT K J' J I' R@ I LEAVE R R> REPEAT WHILE END UNTIL EXIT AGAIN BEGIN NEGATE ABS MIN MAX < WITHIN U< U> NOT 0= 0< 0> INVERT COM AND OR XOR <= <> = THEN ELSE UNLESS IF UNLOOP +LOOP LOOP DO ICHECK MONITOR RESTRICT IMMEDIATE VARIABLE CONSTANT LITERAL DOES> CREATE DEPTH RCLR NCLR S>DLIST RTC! RTC@ TICKS INDEX LINE SCR IN BLK BLOCK BUFFER UPDATE FLUSH SAVE-BUFFERS EMPTY-BUFFERS
      
  • GitHub "tabemann / zeptoforth" - “A not-so-small forth for Cortex-M”.

CamelForth, an important FORTH Systems originally implemented Assembly Language, then ported to C

CamelForth by Brad Rodriguez
CamelForth in C by Brad Rodriguez
Resources
  • Experts told me, that CamelForth is case sensitive, in opposite to most FORTHs.

eForth, an important FORTH Systems originally implemented Assembly Language, then ported to C, then ported to Javascript, C++, Java in the 2020th

bForth & eForth Design Principles
  • Chen-Hanson Ting told me in 2021-08:
    • The original Forth of Chuck Moore of 1970 had the concept of a virtual memory system, i.e. the concept to read and write tapes, to save binary data to a file system.
    • eForth has no idea of files or any other mass storage systems. Files and blocks are not ( part of ) eForth. eForth has not to deal with mass storage.
    • Instead, eForth implements serial I/O only. The source and destination of data must be a serial port.
    • An implemented serial port, as destionation of serial data, might catch the data and save the data in files, on a local file system.
    • eForth just processes a stream of text ( the traditional Unix shell & Tcl/Tk data processing idea ).
  • Experts told me, that eForth is not a “full Forth”, but a very limited minimal Forth.
bForth by Bill Muench, eForth by Bill Muench & Chen-Hanson Ting
eForth by Thomas Göppel
Arduino Forth based on eForth
MicroEforth ( µEforth ) & ESP32forth in C by Brad Nelson & Chen-Hanson Ting
  • Target: ESP32.
  • Target: MicroEforth ( uEForth ) for Windows, Linux on 80×86, a64.
  • Forks.
  • Resources.
  • Lists of FORTH words.
    1. Target: ESP32 system, version “ESPforth v.7.05”.
      1. List of FORTH words, as listed by WORDS. The word OK appears twice in the list
        forth editor list copy thru load flush update empty-buffers buffer block save-buffers default-use use open-blocks block-id scr block-fid telnetd bterm timers registers webui login web-interface streams ; { words vlist order see .s startswith? str= :noname SMUDGE forget dump assert reset revive startup: remember restore save dump-file include included rtos interrupts sockets Serial ledc SPIFFS SD_MMC WiFi WebServer Wire resize free allocate ok LED OUTPUT INPUT HIGH LOW page tone freq duty adc pin ms start-task task pause tasks internals sealed also only transfer{ }transfer transfer definitions vocabulary [IF] [ELSE] [THEN] DEFINED? ok quit evaluate prompt refill tib echo fill cmove> cmove z>s s>z r| r" z" ." s" $place n. ? . u. binary decimal octal hex str #> sign #s # hold <# extract pad hld cr space emit bye key? key type is defer +to to value throw catch handler j i loop +loop leave unloop ?do do next for depth rp0 sp0 variable constant postpone >body >flags >link >link& >name abs max min aft repeat while else if then ahead until again begin literal [char] char ['] ' ] [ c, , align aligned allot here context current base state >in #tib 'tib 2! 2@ 2dup 2drop cell/ cells cell+ \ +! 4/ 4* 2/ 2* 1- 1+ nl bl 0<> <> = >= <= > < -rot rot - negate invert mod / /mod * */ rdrop nip ( ; EXIT : IMMEDIATE DOES> CREATE S>NUMBER? PARSE FIND CELL EXECUTE R@ R> >R RP! RP@ SP! SP@ C! L! ! C@ L@ @ DROP OVER SWAP DUP XOR OR AND RSHIFT LSHIFT */MOD U/MOD + 0< 0= timer_isr_register accept SD_MMC.begin MDNS.begin FILE-SIZE RESIZE-FILE REPOSITION-FILE FILE-POSITION READ-FILE WRITE-FILE DELETE-FILE CREATE-FILE OPEN-FILE FLUSH-FILE CLOSE-FILE BIN W/O R/W R/O TERMINATE MS-TICKS dacWrite pulseIn analogRead digitalRead digitalWrite pinMode 
        
      2. List of FORTH words, converted to lowercase
        forth editor list copy thru load flush update empty-buffers buffer block save-buffers default-use use open-blocks block-id scr block-fid telnetd bterm timers registers webui login web-interface streams ; { words vlist order see .s startswith? str= :noname smudge forget dump assert reset revive startup: remember restore save dump-file include included rtos interrupts sockets serial ledc spiffs sd_mmc wifi webserver wire resize free allocate ok led output input high low page tone freq duty adc pin ms start-task task pause tasks internals sealed also only transfer{ }transfer transfer definitions vocabulary [if] [else] [then] defined? ok quit evaluate prompt refill tib echo fill cmove> cmove z>s s>z r| r" z" ." s" $place n. ? . u. binary decimal octal hex str #> sign #s # hold <# extract pad hld cr space emit bye key? key type is defer +to to value throw catch handler j i loop +loop leave unloop ?do do next for depth rp0 sp0 variable constant postpone >body >flags >link >link& >name abs max min aft repeat while else if then ahead until again begin literal [char] char ['] ' ] [ c, , align aligned allot here context current base state >in #tib 'tib 2! 2@ 2dup 2drop cell/ cells cell+ \ +! 4/ 4* 2/ 2* 1- 1+ nl bl 0<> <> = >= <= > < -rot rot - negate invert mod / /mod * */ rdrop nip ( ; exit : immediate does> create s>number? parse find cell execute r@ r> >r rp! rp@ sp! sp@ c! l! ! c@ l@ @ drop over swap dup xor or and rshift lshift */mod u/mod + 0< 0= timer_isr_register accept sd_mmc.begin mdns.begin file-size resize-file reposition-file file-position read-file write-file delete-file create-file open-file flush-file close-file bin w/o r/w r/o terminate ms-ticks dacwrite pulsein analogread digitalread digitalwrite pinmode
        
      3. List of FORTH words, converted to uppercase
        FORTH EDITOR LIST COPY THRU LOAD FLUSH UPDATE EMPTY-BUFFERS BUFFER BLOCK SAVE-BUFFERS DEFAULT-USE USE OPEN-BLOCKS BLOCK-ID SCR BLOCK-FID TELNETD BTERM TIMERS REGISTERS WEBUI LOGIN WEB-INTERFACE STREAMS ; { WORDS VLIST ORDER SEE .S STARTSWITH? STR= :NONAME SMUDGE FORGET DUMP ASSERT RESET REVIVE STARTUP: REMEMBER RESTORE SAVE DUMP-FILE INCLUDE INCLUDED RTOS INTERRUPTS SOCKETS SERIAL LEDC SPIFFS SD_MMC WIFI WEBSERVER WIRE RESIZE FREE ALLOCATE OK LED OUTPUT INPUT HIGH LOW PAGE TONE FREQ DUTY ADC PIN MS START-TASK TASK PAUSE TASKS INTERNALS SEALED ALSO ONLY TRANSFER{ }TRANSFER TRANSFER DEFINITIONS VOCABULARY [IF] [ELSE] [THEN] DEFINED? OK QUIT EVALUATE PROMPT REFILL TIB ECHO FILL CMOVE> CMOVE Z>S S>Z R| R" Z" ." S" $PLACE N. ? . U. BINARY DECIMAL OCTAL HEX STR #> SIGN #S # HOLD <# EXTRACT PAD HLD CR SPACE EMIT BYE KEY? KEY TYPE IS DEFER +TO TO VALUE THROW CATCH HANDLER J I LOOP +LOOP LEAVE UNLOOP ?DO DO NEXT FOR DEPTH RP0 SP0 VARIABLE CONSTANT POSTPONE >BODY >FLAGS >LINK >LINK& >NAME ABS MAX MIN AFT REPEAT WHILE ELSE IF THEN AHEAD UNTIL AGAIN BEGIN LITERAL [CHAR] CHAR ['] ' ] [ C, , ALIGN ALIGNED ALLOT HERE CONTEXT CURRENT BASE STATE >IN #TIB 'TIB 2! 2@ 2DUP 2DROP CELL/ CELLS CELL+ \ +! 4/ 4* 2/ 2* 1- 1+ NL BL 0<> <> = >= <= > < -ROT ROT - NEGATE INVERT MOD / /MOD * */ RDROP NIP ( ; EXIT : IMMEDIATE DOES> CREATE S>NUMBER? PARSE FIND CELL EXECUTE R@ R> >R RP! RP@ SP! SP@ C! L! ! C@ L@ @ DROP OVER SWAP DUP XOR OR AND RSHIFT LSHIFT */MOD U/MOD + 0< 0= TIMER_ISR_REGISTER ACCEPT SD_MMC.BEGIN MDNS.BEGIN FILE-SIZE RESIZE-FILE REPOSITION-FILE FILE-POSITION READ-FILE WRITE-FILE DELETE-FILE CREATE-FILE OPEN-FILE FLUSH-FILE CLOSE-FILE BIN W/O R/W R/O TERMINATE MS-TICKS DACWRITE PULSEIN ANALOGREAD DIGITALREAD DIGITALWRITE PINMODE 
        
    2. Target: MicroEforth ( uEForth ) for Windows, Linux on 80×86, a64. Version “7.0.6.9”.
      1. List of FORTH words, as listed by WORDS. The word OK appears twice in the list
        forth +to to ; { (local) editor list copy thru load flush update empty-buffers buffer block save-buffers default-use use open-blocks block-id scr block-fid streams reset revive startup: remember restore save dump-file words vlist order see .s startswith? str= :noname SMUDGE forget dump assert start-task task pause tasks include included resize free allocate process-heap HeapReAlloc HeapFree HeapAlloc GetProcessHeap ok ms file-size resize-file reposition-file file-position write-file read-file rename-file delete-file flush-file close-file create-file open-file r/w w/o r/o windows f.s f. #fs set-precision precision fsqrt pi fvariable fconstant fliteral afliteral sf, sfloat+ sfloats sfloat f>= f<= f<> f> f< f= page at-xy normal bg fg ansi internals sealed also only transfer{ }transfer transfer definitions vocabulary [IF] [ELSE] [THEN] DEFINED? ok quit evaluate prompt refill tib accept echo blank erase fill cmove> cmove z>s s>z r| r" z" ." s" zplace $place n. ? . u. binary decimal octal hex str #> sign #s # hold <# extract pad hld cr space emit bye key? key type is defer +to to value-bins value throw catch handler j i loop +loop leave unloop ?do do next for nest-depth fdepth depth fp0 rp0 sp0 variable constant postpone >body >flags >link >link& >name abs max min recurse aft repeat while else if then ahead until again begin literal [char] char ['] ' ] [ c, , align aligned allot here context current base state >in #tib 'tib 2! 2@ 2dup 2drop cell/ cells cell+ +! 4/ 4* 2/ 2* 1- 1+ nl bl 0<> <> = >= <= > < -rot rot - negate invert mod / /mod * */ rdrop nip \ ( ; EXIT : YIELD IMMEDIATE DOES> CREATE F>NUMBER? S>NUMBER? PARSE FIND CELL EXECUTE R@ R> >R RP! RP@ SP! SP@ C! L! ! C@ L@ @ DROP OVER SWAP DUP XOR OR AND RSHIFT LSHIFT */MOD U/MOD + 0< 0= F>S S>F 1/F F/ F* F- F+ F0= F0< FNEGATE FSWA FOVER FDROP FNIP FDUP SF! SF@ FP! FP@ LOADLIBRARYA GETPROCADDRESS
        
jeforth in Javascript, by Cheahshen Yap, Sam Chen and Chen-Hanson Ting
  • Newest release “jeforth_614” in Javascript, in 2021-08.
  • Dr. Ting told me in 2021-08: 100 words, about 400 lines of C++ code.
  • “This jeforth system was originally written by Mr. Cheahshen Yap and Mr. Sam Chen in the Taiwan Forth Interest group around 2010-2011. I polished up the code so that all Forth words were self-sufficient objects. It now has a pretty user interface worthy of the Internet”.
ceForth in truely object-oriented C++, by Chen-Hanson Ting & friends
  • Newest release “ceforth_403” in truely object-oriented C++, in 2021-08.
  • forth.org/OffeteStore - “2177-ceForth_33_macroAssemblerVS2019.zip”.
  • Dr. Ting told me in 2021-08: 100 words, about 400 lines of C++ code.
ooForth in Java, by Xuyang (Shawn) Chen, Brad Nelson, Chochain Lee, and Chen-Hanson Ting
  • Newest release “ooforth_204” in Java, in 2021-08.
  • Dr. Ting told me in 2021-08: 100 words, about 400 lines of C++ code.
Resources

FORTH-83 Reference Implementations by Henry Laxon & Mike Perry

Downloads
  • Forth Interest Group ( FIG ) "Public Domain Forths" - “3 Forth-83 standard implementations by Henry Laxon & Mike Perry” ( MSDOS, CP/M, CP/M 68K ).
    • The MSDOS & CP/M archives are ok :-).
    • The CP/M 68K archive is incomplete. Additionally, at least the “README.68” text file is corrupted and contains false bytes :-(.
  • Mirror of "ftp.mayn.de/" - Forth-83 68K - Incomplete distribution. Instead of “f83.68k”, there is a 1 byte large file “f83.68k.txt” :-(.
  • GitHub "uho / F83" - “F83 (Forth 83 Model implementation, 16Bit) by Henry Laxen and Mike Perry, 1984. 8080, 8086, and 68000 distributions”. Complete distributions, including binaries ( “F83.COM”, “F83.COM”, “F83.68K” ) :-).
Resources
  • While the MSDOS and CP/M implementations are shipped with executable applications ( “F83.COM” ) :-), the CP/M 68K implementation consists of some ”.BLK” files, i.e. no “F83.COM” file :-(.
  • A suitable CP/M emulator for Windows is Ronald Daleske's “EMUZ80 - Z80 / CP/M - Emulator” ⇒ See Embedded Systems.
    1. Download eth FORTH-83 archive “f83v2-80.arc”.
    2. Unpack the ”.ARC” archive.
      • The free archiver IZArc on Windows can unpack ”.ARC” files of the CP/M and CP/M68K implementations :-).
    3. Copy the implementation files to one of the subdirectories “CPM_LW_A” or “CPM_LW_B”.
    4. Start the emulator, at CP/M shell promt enter:
      1. “C:”.
      2. “F83”.

F-PC by Tom Zimmer & Robert Smith

  • Forth Interest Group ( FIG ) "Public Domain Forths" - “fpc Forth optimized for PC by Tom Zimmer & Robert Smith”.
  • The “*.hlp” files are no “Windows Help”, but plain text files. Remember, the final version of F-PC was released in 1989, prior to the rise of Windows with Win3.1!
  • The word WORDS prints help on the screen, before the wordlist is printed:
    • ** Press SPACE to pause, or ESC to exit **.
    • COLON (pink), CONSTANT (darkGreen), VALUE (yellow), VARIABLE (green), USER-VARIABLE (green with blue background), DEFERED (lightBlue), USER-DEFERED (lightBlue on blue background), CODE (blue), CREATE-DOES (red), OTHER (white). Each word type is displayed in color as shown above.
    • --[ FORTH ]--.
  • List of 1523 FORTH words:
    EMPTY SESSIONDAT SESSIONSEGMENT SESSIONDATL MOUSEKEY MOUSEKEY? TRACKER TRACK-MOUSE TRACK-MENU ?MENUBAR# SHOW.MOUSE HIDE.MOUSE MOUSEBUTTON MOUSEXY! MOUSEXY LISTSET ?SHOWSTACK SMASK FPRINT INDEX EDITALL FLOOK GET-FILESPECS ?IN-EMPTY FALLOF WATCH-COMMANDS SETWATCH WATCH_CMD STIBBUF DEPTH_SAVE .WATCH WATCH_ADDRESS  WATCH_SEGMENT CALLS USEDIN XREF REF -SKIP -SCAN SCANW NEWBEEP BEEPFREQ BEEPDURATION RING TONE NOTE TONEGATE TIMERCTRL TIMERDATA MLOAD ?MARKEND.LINE MERRFIX EFSAVE >B >BROWSER AUTOEDITOFF AUTOEDITON (EDITERR) WORDSAVE MSGSAVE SED NEWFILE F1 LISTING UNEDIT AUTOSAVEOFF AUTOSAVEON LEAVEPROMPTOFF LEAVEPROMPTON VF VIEWFROM LIST EDIT H HELP E ED LL L V B BROWSE VIEW ?LEAVE_SET CFA_VIEW FILE-LINE_VIEW <ED> <RED> PUSH/POP-LEVEL HDSTSCHR HSRCSCHR HYPERTYPEL DOCOMPILE %DODOS COMMAND.BUF ".ERRMSG (--)CHAR SEDCHAR GRAPHICCHAR EURCHAR@ EXTCHAR@ ?AUOB EXTROWS EXTCHARSEG CHROW CHCOL CHARLINE CHARCOL CHARBUTTON IMPORT EXCUT EXPORT ?GETEXPFILE EXPBUF EXPORT$ GETINPFILE IMP/EXP.INIT CUT/COPY_FILE INSERTALINE IBM-PROPRINT LASERJET TELETYPE SHOMEM BACKUPON BACKUPOFF NOBACKUP DONE EDITOR FILEPRINT PFILE $PFILE TOPRINTER PCLOSE SWITCH SWITCH_BODIES XCHANGE MAKEDEFER :DEF? DEFMENU RESTMENU SAVEMENU MENU ?DOMKEY ?MENUKEY 1ST-ROWCHAR UCSCAN SHOWMENUS .MENU .MENUBAR .VERTICAL .HORIZONTAL DOFUNC MENULIST MENUBAR DEFAULT-LIST DEFAULT-BAR DEFSAVE DUMY$ DFILE$ DO-DOS FHELP OPENFILE MAKEAFILE EDITAFILE LEDIT_RESTORE MBYE DOFHELP DOLISTING EDITFILE MAKEFILE MENULINE" +," ENDMENU NEWMENUBAR NEWMENU MBUTTON DOOTHER MENUKEY MROW MCOL MCOLUMN DEFAULT-MCOLUMN MLINE DEFAULT-MLINE EMM-BYE-FUNC EMM-POINTERINIT EMM-POINTER CLS RENAME REN COPY CD CHDIR DEL DIR `` ` SYS SWAPFILE "SWAPFILE .ME ME@ ME$ .PATH PATH@ PATH$ .COMSPEC COMSPEC@ COMSPEC$ .ENV "ENVFIND ENVSIZE  EVSEG .FILES .LOADED NEEDS ?LOADED <GETFILE> FL OPEN VOCOFF VOCON STATOFF STATON .STATUS <.STAT> VOCV INCLUDE LOAD >VIEWFILE LOADEDFROM VIEWFILE NAME>PAD LINEEDITOR MARK HELLO .CURFILE .HELLO <.CURFILE> .FILE <.HELLO> (\.") \TYPE \TYPEL DO\CHAR \CHARS LFEMIT \EMIT "EMIT \AT-REST \AT-SAVE \Y \X \%AT \%TENTHS \%SPACES PACKED_ASC># SLOW FAST QTYPEL BLANKOFF BLANKON RECOVERLINE RECOVERSCR RESTSCR SAVESCR SVINIT SVTOTAL SVSIZE SVMAX SVSEG MENUBOX .BOX" (.BOX) BOX&FILL BOX BCR >MENU >BOX COLORIZEON COLORIZEOFF C.ID COLORIZE-INIT COLORIZE COLOR-INFO ?COLORIZE BORDER@ BORDER! PAL! BLINKON BLINKOFF BLINK! >LCD >COLOR >8BGFG >7BGFG >6BGFG >5BGFG >4BGFG >3BGFG >2BGFG >1BGFG COLORSET >BG >FG FG@ FG! BG@ BG! COLORS WHITE YELLOW LTMAGENTA LTRED LTCYAN LTGREEN LTBLUE DKGRAY LTGRAY BROWN MAGENTA RED CYAN GREEN BLUE BLACK BLACK-ON-WHITE WHITE-ON-BLACK INVERT-SCREEN >MONO >REVBLNK >BOLDBLNK >BOLDUL >BOLD >UL >REVERSE >NONEBG >NONE REVERSEVAL NORMALVAL REVVAL NORMVAL MED-CURSOR BIG-CURSOR NORM-CURSOR CURSOR-ON CURSOR-OFF CURSOR_POS_INIT >IBM IBM--LINE NORM-DARK LFILLW IBM-DARK IBM-AT? IBM-AT THESE WORDS PREWORDS CONTEXTONLY ?TOTAL.* ?USER-DEFERED.* ?DEFERED.* ?VALUE.* ?CONSTANT.* ?USER-VARIABLE.* ?VARIABLE.* ?:.* ?CODE.* ?*.* ?W.TEST .VOCWORDS W.NAME <W.NAME> ?W.NAME ?TOTALWORDS ?WORDTYPE WORDTYPE ?CODENAME ?INNAME W$ W.ID TOTALWORDS .VYET VADDR VYET LARGEST SEARCH VFIND HFIND PREPEND.PATH ?DRIVE.PREPEND ?DRIVE.EXTRACT FLHNDL DBG DEBUG ADEBUG UNBUG PNEXT DEBNEXT DNEXT FNEXT DBGH. DO.SHOW.SOURCE .RP DBG_RDEPTH DEBUG.S #PAD-SAVE SKIP_TO DBG.S 'DEBUG CNT DBOFF DBSEG SRCOFF SRCON DO.SRC .DEFSRC SRCCR SHOWSRC ?UPC DEBUGABLE TURNKEY FSAVE SAVE-EXE <SAVE-EXE> EXEHCB WRITE-EXE SAVEERR EHSP EHCKSM EH512Z EHLMRV EHADR EHZ EHMT SEXE WITHHEADS XDPSEGLEN DPSAVED SUVEC GLOBAL_REF LOCAL_REF CLEAR_ALL_LABELS LLSET- LLSET+ INLINE ASM->IN CODE LABEL DOASSEM ASMSTUFF ARUNSAVE PRE> >PRE POSTFIX PREFIX RUN-A; A; A;! .INST /NOLISTING /LISTING <LRUN> LIC@ LIHERE LINESTRT LRUNSAVE ?LISTING "ERR %"ERR ENDCASE NRESOLVE IF-OF OF ENDOF CASE DU XDUMP YDUMP DUMP LDUMP .FOOT .HEAD DLN EMIT. D.2W .2W DUMPC@ %DUMPC@ DUMPSEG SEE CRTAB -TAB +TAB 0TAB DECOM. SHOWBASE .VALIDATE BUFSIZE-INIT MS FUDGE IBLIMIT UNDEFER DEFERS BUG HIDDEN ROOT { \\ } <}> BEHEAD HWORDS+ HWORDS- HEADERLESS HEADERS I: | "IHEADER SAVE_"HEADER BEHEADABLE UNHEAD I:END UNVOC UNTHREAD HOPEN.FPATH @TBL+ !TBL+ ?FUNKEY .MEM EMMHEAD NEWPAGE %NEWPAGE FORMFEED USED .USED !USED DSBUF >PATHEND" $>TIB ?KEYPAUSE ?DOSTOP DEFAULTSTATE RESTORESTATE SAVESTATE STATV RESTSTAT RESTRMRG RESTLMRG RESTTABS RESTCAPS RESTBASE MOUSEFLG DOBUTTON >NORMBG >REV >NORM >ATTRIB8 >ATTRIB7 >ATTRIB6 >ATTRIB5 >ATTRIB4 >ATTRIB3 >ATTRIB2 >ATTRIB1 GRAPHCHAR <GRAPHDUMMY> H.4 (SEE) >NAME.ID ?DEFATTRIB NLEN =: \T \F \TCOM \FPC DIRECTIVE \- \|U \|UNLESS \+ \U \UNLESS ALIAS ?PAGE FORM-FEED PAGE #PAGE ?DOINGMAC RESTCURSOR SAVECURSOR -LINE AT? ?DARK DARK AT MANY TIMES #TIMES 0<= 0>= >= <= U>= U<= >.ID 'DOCOL DOES? $.L $.R  CDATE CTIME PFASAV DEFCFA .SRCCR CCR DRIVE? .FREE EEOL SP>COL ?DOSIO ?ENOUGH YCOUNT ? .VERSION .FPCVER# FPCVER# #THEN #ENDIF #IF #ELSE <#IF> .COMMENT: <.COMMENT:> /* COMMENT: <COMMENT:> COMMENT$ ?LOADING ?EXEC CRUNSAVE TILLKEY .COMPSTAT 0COMPILER HOURS MINUTES TENTHS SECONDS PAUSE-FUNC 10TH-ELAPSED SEC-ELAPSED TIMER .ELAPSED <.ELAPSED> B>SEC TIME-ELAPSED TIME-RESET B>T T>B TTIME STIME .DATE FORM-DATE D.M.Y Y-M-D M/D/Y BUILD-DATE <D.M.Y> <Y-M-D> <M/D/Y> .TIME FORM-TIME BUILD-TIME BUILD-SH BUILD-HM "+ ##+ DTBUF SETTIME GETTIME <GETTIME> SETDATE GET-CURSOR SET-CURSOR \ TAB ?CR ?LINE TABSIZE RMARGIN LMARGIN H. RECURSE DUMP .ID %.ID .S MAX.S DEPTH @REL>ABS SET_VECTORS RESTNEXT DIVIDE0 BYE BYEFUNC DIV0FUNC DIV0STRT RESTORE_VECTORS CTRLBKSAVE DIV0SAVE BIOSBKSAVE START COLD WARM 1STCOLD WARMFUNC WARMSTRT SEGSET INITSTUFF BOOT QUIT F: E: D: C: B: A: SELECT IS (IS) >IS USER #USER SETCRITICAL HADCRITICAL HDEFAULT DOS>TIB CFGHNDL DOS-LINE FLOAD $FLOAD FILE $FILE <$FILE> $FILE_BUF ?OPEN.ERROR PREPEND.APATH .FPATH FPATH FPATH+ <FPATH+> "FPATH+ SKIP.BLANKS NPATH PATH1 PATHLEN PATHPTR PATHHNDL FPATH$ \S OK ?FILEOPEN CHARREAD <FLOAD> ?NOLOADED, ?LOADED, LOADED, >LINE LOADER <LOAD> CLOSEALL CLOSE SEQDOWN FILLTIB LENGTH.CHECK ?.LOADLINE .LOADLINE %.LOADLINE SETTIB CRLF>BL'S HIDELINES SHOWLINES LISTVAR SEEK GFL FILE>TIB GETFILE $HOPEN IBRESET SEQINIT SEQUP ?SEQRANGE (?SERROR) ?BASE_RESTORE .BASE NOBASE DECIMALBASE HEXBASE DEFBASE DOERROR (DOERROR) LINEREAD %LINEREAD ?FILLBUFF FILLBUFF GET_ALINE CURPOINTER .SEQHANDLE SEQHANDLE+ LOADSTAT (TYPE) (TYPEL) CONTYPEL PRNTYPEL (PRINT) PRINTL (CONSOLE) CONSOLEL PRNHNDL CONHNDL LOADING FILEPOINTER HNDLS MAXNEST OUTBUF TOTALLINES INLENGTH INSTART OBLEN DELIMITER SCREENCHAR INBSEG IBFULL IBLEN WITHPATH OTHER.CHECK SET-DTA DTA! DTA@ FIND-NEXT FIND-FIRST HREAD HWRITE EXHWRITE EXHREAD HDELETE HCLOSE HOPEN WRITE-ONLY READ-WRITE READ-ONLY DEF-RWMODE R/W-DMODE R/W-MODE HCREATE HRENAME <HRENAME> PATHSET ENDFILE MOVEPOINTER HDOS4 HDOS3 HDOS1 $>EXT HANDLE>EXT FCB>HANDLE !HCB $>HANDLE ">HANDLE ?DEF.EXT DEFEXT HANDLE CLR-HCB >NAM >HNDLE >ATTRIB RWERR B/FILENAME HNDLOFFSET B/HCB RESTORE> SAVE> SAVE!> ?COMP %URESTORE> %USAVE> %USAVE!> %RESTORE> %SAVE> %SAVE!> &> ON> OFF> DECR> INCR> +!> !> @> ?USER ?NOUSER %&> %ON> %OFF> %DECR> %INCR> %+!> %U!> %U@> %!> %@> SIZEOF@> %SIZEOF@ SIZEOF!> %SIZEOF! 0POINTERS UNPOINTER> %UNPOINTER ?VALID_POINTER POINTER PTR_OK?EXIT EMMSYSEND <EXTEXEC> SP_SAVE SS_SAVE EXTHNDL CMDPATH EXEC.PARAM EXEC$ DISKOFF DISKON DSK-STATUS USE-DISK EMMPARST EMMPARS EMMHNDL EMMPAGE# #FPCPAGES EMMSTK EMMON EMMOFF EMM-INIT ?EMM: EMM-GET-VERSION EMM-DEALLOC-PAGES EMM-MAP-PAGES EMM-ALLOC-PAGES EMM-TOTAL-PAGES EMM-AVAIL-PAGES EMM-PAGE-FRAME ?EMMERR EMM-STATUS? EMM-PRESENT? CUR_EMM_HNDL USE-EMM EMM-STATUS PAGE-FRAME EMMNAME (?ERROR) ERRFIX RUN <RUN> 2VARIABLE 2CONSTANT DEFINITIONS VOCABULARY DEFER ARRAY VARIABLE VALUE CONSTANT RECURSIVE ; : (:) ANEW MAKEDUMMY ] (]) ;CODE ;USES [ SETASSEM ASSEMBLER DOES> (;CODE) (;USES) REVEAL HIDE ?CSP !CSP CREATE "CREATE HEADER <HEADER> ,JUMP ,CALL "HEADER <"HEADER> ?ALREADY_DEF %ALREADY_DEF SPCHECK NOLISTROOM NOHEADROOM ,VIEW NEXT FOR AFT BREAK CONTINUE FORWARD THEN ELSE IF +LOOP LOOP ?DO DO REPEAT WHILE UNTIL AGAIN BEGIN ?LEAVE LEAVE ?<RESOLVE ?<MARK ?>RESOLVE ?>MARK <RESOLVE <MARK >RESOLVE >MARK ?CONDITION FORGET ABORT ABORT" (ABORT") ?ERROR (FRGET) TRIM FENCE ">$ "" " ." X," ," (.") %(.") (X") (") X>"BUF XALIGN XEVEN "BUF [COMPILE] ['] ' ?MISSING CRASH CONTROL ASCII DLITERAL LITERAL IMMEDIATE COMPILE EVEN ALIGN C, ALLOT PRINT INTERPRET STATUS INTERP ?STACK (?STACK) WARNOVER STACKOVER STACKUNDER DEFINED SKIP'C' FIND %FIND %%FIND OVER.SWAP.HASH.@ PRIOR.CHECK DROP.CONTEXT.I2*+@D (FIND) HASH VIEW> >VIEW >LINK >NAME NO-NAME >BODY LINK> NAME> BODY> L>NAME N>LINK CNSRCH CNHASH DONE? +PLACEL PLACEL TRAVERSE ( .( >TYPE VIDEO-TYPE VIDEO-TYPEL NOSETCUR WORD PARSE SOURCE /STRING SCAN SKIP D.R D. (D.) UD.R UD. (UD.) .R . (.) U.R U. (U.) #S # SIGN #> <# HOLD NUMBER (NUMBER) %NUMBER NUMB %NUMB NUMH #NUM ^NUM 'NUM $NUM %NUMH %^NUM %'NUM %$NUM NUMBER? (NUMBER?) CONVERT DOUBLE? DIGIT  DEFAULT BINARY OCTAL DECIMAL HEX INIT-R0 FIRST LIMIT DISK-ERROR QUERY MORE? TIB EXPECT (EXPECT) NEXPECT KEYTABLE NORM-KEYTABLE ^CHAR CHAR (CHAR) CR-IN ESC-IN (ESC-IN) P-IN RES-IN RESET-IN BACK-UP DEL-IN (DEL-IN) BS-IN BEEP %BEEP BACKSPACES SPACES SPACE SPCS FEMIT CRLF (EMIT) PEMIT CR ?PRINTER.READY <?PTR.READY> PR-STATUS XC, X, XHERE YHASH YCSET Y, YC! YC@ Y! Y@ YS: YHERE SETYSEG F-PC +XSEG DOSVER CURSORSET MAXBLOCK SETBLOCK ALLOC DEALLOC DOS_MAXBLOCK DOS_SETBLOCK DOS_ALLOC DOS_DEALLOC MEMCHK #OVBYTES #OVSEGS #HEADSEGS #LISTSEGS #CODESEGS CMOVE-PARS> CMOVE-PARS CMOVEL> CMOVEL CONSOLE OUTPAUSE (KEY) (KEY?) BGSTUFF KEYFILTER BIOSKEY BIOSKEY? BIOSKEYVAL BIOSCHAR OS2 BDOS2 BDOS <BDOS> !L C!L C@L @L ?ES: ?DS: ?CS: COMPARE CAPS-COMP COMP -TRAILING PAD HERE ?UPPERCASE UPPER UPC ATBL MOVE COUNTL LENGTH COUNT BLANK ERASE LFILL FILL >IN_WORD CAPS BELL BS BL LOADLINE SEQHANDLE #PARS PHEAD SSEG XMOVED XSEGLEN DPSTART YSTART YDP XDPSEG XDP #LINE #OUT END? #TIB SPAN >IN VOC-LINK WIDTH 'TIB CONTEXT #VOCS CURRENT LAST CSP R# DPL WARNING STATE PRIOR TYPEL TYPE KEY KEY?           EMIT PRINTING HLD BASE OFFSET DP RP0 SP0 ES0 LINK ENTRY TOS SHOW.COLOR BLANK.COL VMODE.SET INITCOLOR INITMONO ?VMODE CROWS ROWS COLS BLANKING VMODE-VAR VIDEO-SEG ATTRIB DPARAGRAPH PARAGRAPH 2ROT ROLL */ */MOD MOD /MOD / MU/MOD M/MOD *D DMAX DMIN 4DUP D> D< DU< D= D0= ?DNEGATE D- UD16/ D2/ D2* DABS S>D DNEGATE D+ 2OVER 2SWAP 3DUP 2DUP 3DROP 2DROP 2! 2@ UBETWEEN BETWEEN WITHIN UMAX 0MAX MAX MIN UMIN > < U> U< ?NEGATE <> = 0<> 0> 0< 0= UM/MOD U*D * UM* 2- 1- 2+ 1+ 8* U8/ U16/ U2/ 2/ 2* #THREADS PDOS P! PC! P@ PC@ C+! +! D+! ABS - NEGATE + 0DECR DECR INCR 0! -1! OFF ON CTOGGLE CRESET CSET FALSE TRUE NOT XOR OR AND RPICK PICK 2R@ R@ 2>R 2R> >R DUP>R R>DROP R> ?DROP ?DUP JOIN SPLIT FLIP -ROT ROT NIP TUCK PLUCK OVER SWAP DUP DROP RP! RP@ SP! SP@ +PLACE PLACE CMOVE> CMOVE C! C@ ! @ (?LEAVE) (LEAVE) K J I PAUSE NOOP GO EXEC: GOTO PERFORM EXECUTE >BIOSBK >DOES >NEST >NEXT BOUNDS (OF) (?DO) (DO) (+LOOP) (LOOP) UNDO  NEXT| ?BRANCH DOENDOF BRANCH ?UNTIL ?WHILE DOREPEAT DOAGAIN DOTHEN DOENDCASE DOCASE DOBEGIN <'> (LIT) UP UNNEST ?EXIT EXIT BKFLAG BKABLE YSEG XSEG FILES FORTH
    

FORTH Systems in C/C++

4IM
The 4th Compiler
Autodesk Threaded Language Application System Toolkit ( ATLAST )
BForth
bif-c
calForth
    • “calForth is a forth language interpreter and compiler. It... will run on most *nix environments. It also includes a debugger and tracer. It's coded in 'C' to allow easy modification. Also, support for the 8051 processor has been added”.
    • “It will run as a forth interperter, as well as strictly compile an executable”.
C-FORTH: a portable, C-coded figFORTH Interpreter, by Allan Pratt ( 1985 )
  • Mirror "ftp.uu.net/comp.sources.unix/volume1/cforth" - “C-FORTH: a portable, C-coded figFORTH interpreter” by Allan Pratt, 1985-04. Project description, but no source ( “part1.gz”, “part2.gz”, “part3.gz” ).
  • GitHub "pahihu / cforthu", 2020 - “C-FORTH by Allan Pratt”. “This is c-forth written by Allan Pratt containing modifications by John P. Nelson, Ken Brown and Marc de Groot”. “Limitations: cell addressed FORTH virtual machine”.
    • “An OS/2 port of Allan Pratt's portable Forth interpreter for DOS that featured a basic interpreted core written in C and the rest of the tool written in Forth. It is often known as Portable Forth especially on DOS and OS/2, but that name should be avoided since it name wise clashes with Portable Forth Environment. It is a fairly slow implementation and although the porter announced that he would add OS/2 specific features they never showed up so not a lot to recommend it over and above the original 1985 DOS version”.
    • “On the other hand, at 20k in total it is tiny and still offers the usual Forth interpreter functions like execution tracing, single-stepping through instructions, breakpoint detection and breakpoint stack dumping. It also has a couple of small neat touches that not all Forth implementations have such as saving and automatic restoration environment”.
  • Resources.
cforth
cforth for osx
Chris Curl's FORTH Implementations
    1. GitHub "CCurl / BoardForth" - “A token-threaded VM for the PC and development boards, written in C ”.
      • Experts told me: “If what you are looking for is a Forth where the same code (both the Forth system code and your Forth “user code”) can be built and run on both the PC and on a dev board, then BoardForth may be an option for you”.
    2. GitHub "CCurl / CForth" - “A new Forth project”.
    3. GitHub "CCurl / Forth_C" - “Another Forth. This one creates a 'bare metal' Forth virtual machine. Written in C using Visual Studio”.
    4. GitHub "CCurl / Forth-GCC" - “This is a simple token-threaded (byte-code) implementation of Forth, written in C for GCC. Yes, I know ... ANOTHER Forth implementation. This one creates a 'bare metal' Forth virtual machine. The goal of this project is to create a basic, easy to understand, and easily extendable implementation of a Forth virtual machine. To that end, the virtual CPU has less than 50 instructions, which make up the VM's opcodes. They are also the Forth system's primitives”.
    5. GitHub "CCurl / Forth-PCode-Asm" - “Yet another Forth implementation. This one is a PCode based one written in assembler”.
    6. GitHub "CCurl / MachineForth" - “Inspired by Chuck Moore's 'Machine Forth'”.
cxxforth
embed by Richard James Howe
Ficl
FINF Is Not Forth
  • GitHub "lpereira / finf" - “FINF Is Not Forth. FINF is a simple implementation for a FORTH-like language for the Arduino platform... Current version weighs about 8kB of object code (8.8kB if built with TERMINAL defined), making it suitable even for less beefier Arduinos, such as the ones based on the Atmega168 microcontrollers (even though it runs out of memory quickly and starts to behave weirdly)”.
Froth
graspForth
  • “graspForth”.
    • GitHub "andrewtholt / graspForth" - “graspForth .. a 32-bit Forth by Bernard Mentink”.
    • The STM32 Primer Community "GraspForth" - “GraspForth port for STM32 Primer. Works over VirtualCOM”.
      • “You seem to have missed the whole point of my post. In respect to 'tethered' forth's for example. I don't want one. The reason is simple, I don't want to carry around the development system in the field. For example, I want to be able to configure/program/modify my products in the field with a PDA for example .. or a laptop .. or the kitchen sink, anything with a serial port. I don't want to drag around a development environment, if I wanted that I'd write using C tools”.
      • and eForth cannot be ported with GCC (AS) AS cannot have look-ahead ORG statements. Of the Free Forth's eForth(or hForth) is the best assembly based solution *if* you have the commercial assembler for that micro .. and you have time for the port” :-(.
      • “As I read it, eforth even lets you generate a Forth for a target system using a different assembler, by only using its macros and ignoring its own code generation functionality. The idea then is to have the 30-ish pieces of machine code set up as bit patterns of data, with the rest of the high level Forth still provided as data as before. Of course, the time problem goes up, but it's a lot more practical than implementing a whole Forth for a virgin machine with no tools for it. Traditionally, of course, you would go the route of cross compiling from a different Forth platform”.
      • “Well, many Forths are me-too efforts. They feature the same basic engine, the same ANS-Forth vocabulary and they are used in the same way. There are a few that are different:
        • C-based FORTH:
          • OpenBios - doing Fcode.
          • FICL - the way it interfaces with C.
          • 4tH - conventional compiler instead of Forth engine.
          • I have seen a C-based Forth in 1K C-code (First??) some time ago in a dutch Forth magazine.
        • Not C-based FORTH:
          • RetroForth - very minimal, very versatile, very portable.
          • ForthCMP - makes tiny, very speedy standalone executables.
kForth-64
Peter J. Knaggs' BaseForth
lbForth
Libforth
Lars Brinkhoff
  • GitHub "larsbrinkhoff / lbForth" - “Self-hosting metacompiled Forth, bootstrapping from a few lines of C; targets Linux, Windows, ARM, RISC-V, 68000, PDP-11, asm.js.”.
  • GitHub "larsbrinkhoff / nybbleForth" - “Stack machine with 4-bit instructions. There's a simulator, an assembler, a cross compiler, and a Forth kernel, all written in Forth. There's a hardware design written in Verilog”.
microforth
  • GitHub "Earlz / microforth" - “A forth implementation aimed at being portable and tiny(in code size and required resources) written in C”.
MinForth
MiniForth
MiniForth - Tiny Forth Built in a Week
muforth
    • GitHub "nimblemachines / muforth" - “A simple, indirect-threaded Forth, written in C; for target compiling; runs on Linux, BSD, OSX, and Cygwin”.
    • “Indirect-threaded code (ITC) Forth”.
    • “Unlike mecrisp – which could be considered muforth's main 'competition' – muforth supports a tethered development model, where the dictionary names and all the interactive command processing live on the host, and only the code and data live on the target machine. This makes it possible to target very small devices with a few kilobytes of flash. In contrast, mecrisp needs at least 16 KiB of flash to be useful; 32 KiB is a more comfortable minimum”.
    • “5.11. What is a tethered/umbilical Forth system? A tethered Forth system is a cross-development environment where the host and the target are connected at run-time (during development), allowing full interactive use of the target system without requiring all the space that a full-blown Forth system would require on the target. E.g., the headers can be kept completely in the host. Tethered systems may also provide the compilation speed and some of the conveniences of a full-blown Forth system on the host. Tethered systems are also called umbilical systems”.
OneFileForth
pez
  • GitHub "pete / pez" - “A Forth dialect based on Atlast, with expanded capabilities and more portability”.
pForth
PFE - Portable Forth Environment
    • “The PFE has been created by Dirk-Uwe Zoller and had been maintained up to the 0.9.x versions (1993-1995). Tektronix has adopted the PFE package in 1998 and made a number of extensions”.
    • “You can load additional C objects at runtime to extend the Forth dictionary”.
    • “It is fully written in C, the newer version has a module concept, and it is fully multithreaded. Autoconf used. Tested in embedded environments”.
SX-FORTH
Tail Forth
  • GitHub "snej / tails" - “Tails, A Fast C++ Forth Core. A fast, minimal Forth-like interpreter core in C++ with no assembly”.
This-Forth
TILE Forth by Mikael R.K. Patel
Toy-FORTH
uforth
yForth
  • yForth.

FORTH Systems in Java

FORTH in Java
Resources

FORTH Systems in Javascript

Beetle Forth
JeForth
  • GitHub "JeForth" - “A FORTH running on HTA, HTML, Node.js, NW.js, Chrome Extension, Chrome App, and more”.
JS-Forth
ricardo-forth
webForth

FORTH Systems in Lua

FORTH Compiler for the Forth language using LLVM

FORTH Systems in PHP

Implementations
  • GitHub "Spyryto/php-forth", Google Code "php-forth" - “Forth machine. Example PHP 5.3 console application project”.
  • GitHub "tobyontour / php-forth" - “Php-forth. Forth interpreter implemented in PHP”.
  • GitHub "tobyontour / Phoshell" - “Phoshell was initially implemented in PHP as an experiment to see how easy it is to implement a simplified stack machine. Eventually, we realized that this simplified stack machine can in fact be implemented in any known programming language with the equivalent of around 50 lines of JavaScript or PHP code, thus making the Forth like script (hence “Phos”) a likely candidate to be a universal scripting language”.
Resources

FORTH Systems in Python

FORTH Systems in Ruby

FORTH Systems in Rust

FORTH Systems just for complete Operating Systems ( Windows, Linux, MacOSX )

Delta Forth .NET
ForthWin/Forth2020
Gforth ( GNUForth )
  • The OpenSource 32-bit / 64-bit ANS94 FORTH system “Gforth” ( = “GNUForth” ).
  • “A free, fast, featureful and portable implementation of the Forth 2012 language”.
  • Gforth ( without “www.” only ).
  • Bernd Paysan "Gforth" - “Gforth uses GCC”.
    • “The Gforth project was started in mid-1992 by Bernd Paysan and Anton Ertl”.
    • “Gforth descends from bigFORTH (1993) and fig-Forth. Of course, a significant part of the design of Gforth was prescribed by ANS Forth”.
  • List of FORTH words:
    disasm disassembler base-addr show-name default-32bit default-16bit default-16bit? col w@ (D.) MAXCOUNTED SPCS SPCS-MAX maxstring dffield: sffield: ffield: 2field: field: cfield: end-structure begin-structure +field init-libcc end-c-library c-library c-library-name c-library-incomplete clear-libs c-function c-function-rt c-function-ft link-wrapper-function compile-wrapper-function1 compile-wrapper-functio .lib-error c-source-file-execute notype-execute c-source-file init-c-source-file lib-handle c-tmp-library-name c-named-library-name c-library-name-create c-library-name-setup open-wrappers prepend-dirname libcc-tmp-dir libcc-named-dir gen-filename basename dirname scan-back gen-wrapper-function wrapper-function-name gen-wrapped-stmt gen-wrapped-types gen-wrapped-func gen-wrapped-r gen-wrapped-d gen-wrapped-a gen-wrapped-n gen-wrapped-void gen-wrapped-call gen-par gen-par-types gen-par-void gen-par-func gen-par-r gen-par-d gen-par-a gen-par-n count-stacks count-stacks-types count-stacks-void count-stacks-func count-stacks-r count-stacks-d count-stacks-a count-stacks-n type-letter parse-function-types parse-libcc-type libcc-types \c save-c-prefix-line print-c-prefix-lines print-c-prefix-line c-prefix-lines-end c-prefix-lines c-prefix% c-prefix-chars c-prefix-count append-l add-lib c-libs c-lib% c-lib-string list-map list-append list-insert list% list-payload list-next append s+ front-char front-string const+ .nb replace-rpath libcc-path libcc-named-dir-v lib-modulename lib-filename lib-handle-addr c-source-file-id cff% cff-ptypes cff-np cff-rtype cff-lha cff-deferred cff-cfr mkdir-parents disasm-gdb append-extend-string end-code ;code (;code) code init-asm assembler break" (break") break: (break:) break:, dbg (debug) (_debug) D-KEY Unnest Nesting nestXT nestXT-checkSpecial Body restore-bp set-bp DT BP breaker breaker-size DebugLoop jump get-next disp-step Leave-D NoFine d.s .n scanword restore-see-flags save-see-flags dbg-ip see-code see-code-range see-code-next-inline simple-see simple-see-range simple-see-word print-backtrace print-bt-entry backtrace-return-stack init-backtrace backtrace-rs-buffer adjust-buffer init-buffer buffer% buffer-maxlength buffer-address buffer-length buffer-descriptor c-extend1 c-lp+!# c-laddr# c-f@local# c-flit c-@local# c-branch-lp+!# c-?branch-lp+!# c-loop-lp+!# see name-see (.immediate) (xt-see-xt) xt-see seefield seecol seedoes see-threaded seedefer seevalue seecon seeuser seevar seecode next-prim next-head discode .defname xt-see-xt makepass c-initanalyse BranchTo? DoTable c-extender C-Table c-(compile) c-does> c-abort" c-exit c-?do c-do c-loop c-for c-?branch DebugBranch c-branch RepeatCheck Forward? c-string? c-c" .name-without c-lit+ c-lit c-callxt c-call .word back? Debug? Display? Scan? DebugMode DisplayMode ScanMode C-Pass NoOutput Branch! Type! ,Branch CheckWhile MyBranch CheckEnd MoreBranchAddr? BranchAddr? (BranchAddr?) FirstBranch MaxTable BranchTable SearchPointer BranchPointer Branches C-Stop LeaveCode Disable WhileCode2 AheadCode ElseCode UntilCode AgainCode RepeatCode .struc c-\type (.string) .string cemit ctype warp? (nl) nl nlcount uppercase nlflag level- level+ Format Level YPos XPos C-Clearline C-Highlight C-Formated C-Output .\" s\" \"-parse \-escape \-escape-table parse-num parse-num-x char/ ekey? ekey>fkey ekey>char ekey clear-ekey-buffer esc-sequence esc-prefix ekey-buffered ekey-buffer esc-sequences unkeys unkey char-append-buffer key-buffered key-buffer s-k12 s-k11 s-k10 s-k9 s-k8 s-k7 s-k6 s-k5 s-k4 s-k3 s-k2 s-k1 k12 k11 k10 k9 k8 k7 k6 k5 k4 k3 k2 k1 k-f12 k-f11 k-f10 k-f9 k-f8 k-f7 k-f6 k-f5 k-f4 k-f3 k-f2 k-f1 k-delete k-insert k-next k-prior k-end k-home k-down k-up k-right k-left k-alt-mask k-ctrl-mask k-shift-mask keycode table tablesearch-map table-find savesystem dump-fi update-image-included-files delete-prefix save-mem-dict <compilation compilation> (compilation>1) <interpretation interpretation> (interpretation>1) fix-does-code create-interpret/compile no-interpretation-does-code no-compilation-does-code bye block-included --> +thru +load thru load block-input list updated? scr buffer block get-buffer flush empty-buffers save-buffers empty-buffer save-buffer update block-position get-block-fid use open-blocks flush-blocks block-cold offset block-offset block-fid block-limit buffers last-block block-buffers buffer-struct next-buffer block-buffer buffer-dirty buffer-fid buffer-block ) (end-assert) assert( assert3( assert2( assert1( assert0( assertn assert-level ~~ .debugline-stderr (.debugline) .debugline printdebugdata .sourcepos compile-sourcepos current-sourcepos str>loadfilename# loadfilename#>str vt100-decode tcode trans: transcode translate history-cold get-history xchar-history xtab-expand insert xkill-expand (xenter) xclear-tib xclear-line xend-pos xfirst-pos xeof <xdel> ?xdel (xdel) xforw xback (xins) <xins> xretype .all .rest xback-restore xcur-correct at-deltaxy #esc kill-prefix tib-full? search-prefix prefix-string prefix-off search-voc word-lex capscomp sgn prefix-found extract-word (enter) prev-line find-prev-line next-line get-line hist-setpos hist-pos clear-line linew-off screenw linew cur-correct back-restore history-file force-open end^ backward^ forward^ history bindkey >string ctrl ctrl-i utf-8-cold set-encoding-utf-8 u8width -u8trailing-garbage u8addrlen u8!+? u8@ u8\string- +u8/string u8emit u8key check-xy u8<< u8>> u8!+ u8@+ u8len max-single-byte UTF-8-err O-PNT@ O-DEINIT O-INIT TypeXT EmitXT O-EMIT O-TYPE O-PNT O-Buffer page at-xy ESC[ ;pn pn WordInfo InfoTable Com# Str# Ali# Use# Col# Def# Doe# Val# Var# Con# Pri# prim? xtprim? colon? defered? does? user? con? var? alias? >head >name threaded>name look prim>name PrimStart threaded>xt search-name xt>threaded base-execute infile-execute outfile-execute l@ w@ /l /w typewhite what's action-of f.s f.rdp f>str-rdp f>buf-rdp f>buf-rdp-try push-right ]] postponer1 [[ compile-compile-2literal compile-2literal compile-compile-literal compile-literal slurp-fid slurp-file const-does> (const-does>) compile-fliterals compile-literals in-return-stack? ]L sh system $? dmax dmin ?CSP !CSP CSP needs locals| TO definer! >definer (local) (exit-like) (until-like) (again-like) (begin-like) (then-like) locals-;-hook locals-:-hook endscope adjust-locals-list scope { old-dpp new-locals-wl new-locals-map new-locals-reveal new-locals-find some-wlocal some-flocal some-dlocal some-clocal locals-types lp-offset, lp-offset create-local compile-pushlocal-c compile-pushlocal-d compile-pushlocal-f check-begin set-locals-size-list list-size sub-list? common-list compile-pushlocal-w alignlp-f alignlp-w locals-dp locals-buffer locals adjust-locals-size compile-lp+! compile-f@local compile-@local FMOD FTRUNC f~ f~rel f~abs 1/f f2/ f2* pi fvariable sfnumber fs. fe. f. f$ -zeros zeros scratch set-precision precision FLiteral fdepth fconstant f, dfloat+ sfloat+ dfalign sfalign .words hash-cold make-hash (hashsearch-map) hashdouble (rehash) rehashall clearhash addall inithash hash-reveal (reveal lastlink! hash-find bucket NewFix DelFix hash-alloc hashsearch-map HashTable HashPop HashIndex HashPointer revealed insRule hash Hashlen hashbits reserve-mem marker marker! marker, included-files-mark expect span search blank erase convert [compile] C" endcase endof of case m*/ d>s .( broken-pipe-error exception next-exception errstring linked include-ffi.h-string libffi-present ffcall-present libtool-flags libtool-cc libtool-command has? $has? e? environment? environment-wordlist environment vocs order .voc .name .id id. seal set-order get-order init-vp update-image-order Only Root Forth vocsearch (localsvocfind) locals-wordlist (vocfind) previous also >order check-maxvp Vocabulary wordlist mappedwordlist slowvoc definitions vp! set-current get-current vp maxvp-limit maxvp %alloc %allocate %allot %align %size %alignment double% sfloat% dfloat% float% char% cell% struct end-struct field create-field field, dozerofield nalign naligned endtry-iferror endtry restore iferror handler-intro, (endtry) try (try) nothrow first-throw store-backtrace dodoes: dofield: dodefer: douser: dovar: docol: dovalue: docon: vlist words wordlist-words cols rows ? dump .line .chars .4 /dump .s maxdepth-.s [WHILE] [AGAIN] [REPEAT] [UNTIL] [BEGIN] [I] [NEXT] [FOR] [LOOP] [+LOOP] [?DO] [DO] (i) [ENDIF] [THEN] [ELSE] [IFUNDEF] [IFDEF] [IF] [undefined] defined [defined] ?if [struct]-voc [struct]-search scanIF >exec dummy countif ." S" abort" SLiteral CLiteral ?EXIT EXIT exit-like NEXT S+LOOP -LOOP +LOOP LOOP loop-like FOR U-DO -DO U+DO +DO ?DO ?do-like DO ?LEAVE LEAVE DONE leave> >leave clear-leave-stack leave-sp leave-stack leave-stack-size REPEAT WHILE UNTIL until-like AGAIN again-like BEGIN begin-like ELSE ENDIF THEN cs>addr then-like ?DUP-0=-IF ?DUP-IF IF AHEAD YET BUT <resolve >resolve >mark sys? ?struc other-control-flow cs-push-orig cs-push-part CS-ROLL CS-PICK cs-item-size cs-item? non-orig? scope? do-dest? dest? orig? def? scopestart do-dest dest dead-orig live-orig ASSUME-LIVE UNREACHABLE backedge-locals dead-code locals-list .included .stringsrequire include required included included1 add-included-file included? init-included-files sourceline# sourcefilename image-included-files included-files open-fpath-file open-path-file check-path open-ofile reworkdir compact-filename skip-..-prefixes preserve-root del-./s del-string expandtopic remove~+ extractpath need/ pathsep? tfile ofile absolut-path? .fpath .path previous-path next-path path>string fpath= path= fpath+ path+ only-path clear-path also-path os-cold make-path fpath +place path-allot ( write-line bin r/o r/w w/o os-boot (process-args) process-option args-evaluate args-required args-required1 os-execute-parsing next-arg shift-args script? argc argv pathdirs pathstring #! arg cstring>sstring set-encoding-fixed-width c-size c!+? string- +string char- xhold x@+/string -trailing-garbage x-width x-size xc-size xc@+ xc!+? xc@ x\string- +x/string xchar- xchar+ xkey xemit license include-file execute-parsing-file execute-parsing-named-file read-loop line-end-hook query clear-tibstack evaluate execute-parsing execute-parsing-wrapper create-input restore-input save-input pop-file push-file expand-tib new-tib file-input read-line evaluate-input terminal-input input-start-line input-lexeme! tib+ tib loadfilename #fill-bytes blk loadfile loadline old-input max#tib #tib input-lexeme >in (restore-input) (save-input) source-id refill source input-var input-method accept edit-line decode everyline everychar insert-char ctrlkeys (ret) (bs) (ins) recursive rehash reveal check-shadow (reveal) warnings last? ; :noname : (:noname) defstart ;-hook :-hook interpret/compile? TO IS [IS] <IS> defer! DOES> Defers defer@ Defer defer-default interpret/compile: interpret/compile-struct interpret/compile-comp interpret/compile-int (Field) 2Constant AValue Value AConstant Constant (Value) (Constant) AUser User uallot 2Variable AVariable Variable Create Alias compile-only restrict immediate lastflags ctoggle creset cset ," mem, S, ] [ compiler1 recurse POSTPONE postpone, [COMP'] COMP' ['] [(')] name>comp (compile) dodoes, (does>2) (does>) !does compile-to-prims, peephole-compile, basic-block-end compile, cfa, [char] char char@ ALiteral 2Literal Literal latest lastxt latestxt noname noname-header nextname nextname-header nextname-string input-stream input-stream-header header, longstring, string, header (header) const A, cfalign maxalign falign align 2, , c, allot bye boot cold 'cold process-args bootmessage (bootmessage) quit (DoError) .error-frame .error-line part-type mark-end mark-start umin .error-string dobacktrace DOERROR -trailing hex. dec.r dec. input-error-data >error error> error-stack /error max-errors (quit) prompt .status 'quit extend-mem free-mem-var save-mem interpreter1 interpret interpret1 before-word no.extensions interpreter-notfound1 compiler-notfound1 name parse-word parse-name parser parser1 ' (') find sfind /does-handler does-handler! does-code! code-address! flashc! flash! >does-code >code-address body> >body >head-noprim head? ??? (name>intn) (name>comp) name?int name>int (name>x) ((name>)) name>string (x>int) (cfa>int) compile-only-error ticking-compile-only-error flag-sign lcount-mask restrict-mask immediate-mask alias-mask find-name search-wordlist (search-wordlist) context voclink current lookup forth-wordlist f83search initvoc f83find wordlist-struct wordlist-extend wordlist-link wordlist-id wordlist-map wordlist-map-struct hash-method rehash-method reveal-method find-method \G \ ( number number? snumber? s>number s>number? s>unumber? s'>unumber? ?dnegate sign? getbase bases name-too-long? name-too-short? (name) parse word sword (word) version-string .error >stderr ErrLink u. . ud. d. u.r .r ud.r d.r #s # sign #>> <<# #> <# hold pad backspaces spaces space cr bell #lf #ff #cr #del #tab #bs #bell #eof (S") (.") key? key emit type (key?) (key) (emit) (type) infile-id outfile-id hex decimal "lit clearstacks clearstack depth ?stack abort (abort") c(abort") throw catch lp@ ud/mod s>d >number accumulate digit? skip scan bounds place roll dabs off on here dp in-dictionary? unused usable-dictionary-end dictionary-end A! chars cfaligned maxaligned r@ NIL str< string-prefix? str= locals-size max-name-length Last LastCFA dpp normal-dp state dpl base includefilename current-input "error errorhandler backtrace-rp0 handler lp0 fp0 rp0 sp0 save-task prev-task next-task udp main-task def#tib pad-minsize holdend holdptr holdbuf-end holdbuf word-pno-size chars/block l/s c/l /line bl float cell false true forthstart image-header tag-offsets call2 set-next-code decompile-prim forget-dyncode finish-code compile-prim1 lib-error l! sl@ ul@ w! sw@ uw@ wcall lib-sym open-lib fpick f>l >l lp! lp+2 lp+ lp- lp+!# laddr# f@local1 f@local0 f@local# @local3 @local2 @local1 @local0 @local# faxpy v* dfaligned sfaligned dfloats sfloats fatanh facosh fasinh ftanh fcosh fsinh ftan fsqrt fsincos fsin falog flog flnp1 fln fexpm1 fexp fcos fatan2 fatan fasin facos fabs >float represent fmin fmax fround floor floats float+ ftuck fnip frot fover fswap fdup fdrop fnegate f**2 fm*/ fm/ fm* f** f/ f* f- f+ sf! sf@ df! df@ f@ f! f>s f>d d>f s>f f0>= f0<= f0> f0< f0<> f0= f>= f<= f> f< f<> f= cputime utime newline =mkdir get-dir set-dir filename-match close-dir read-dir open-dir file-eof? file-status flush-file emit-file write-file (read-line) read-file resize-file file-size reposition-file file-position rename-file delete-file create-file open-file close-file call-c strsignal strerror resize free allocate ms time&date close-pipe open-pipe getenv (system) (bye) flush-icache wcwidth form stderr stdout stdin key?-file key-file threading-method faligned aligned (parse-white) (hashkey1) (tablelfind) (hashlfind) (listlfind) count (chars) char+ cells cell+ 2@ 2! c! c@ +! ! lit@ @ 2tuck 2nip 2rot 2swap 2over 2dup 2drop pick ?dup tuck nip -rot rot dup swap drop over 2rdrop 2r@ 2r> 2>r rdrop r> >r fp! fp@ rp! rp@ sp! sp@ up! useraddr within du>= du<= du> du< du<> du= d0>= d0<= d0> d0< d0<> d0= d>= d<= d> d< d<> d= u>= u<= u> u< u<> u= >= <= > < <> = 0>= 0<= 0> 0< 0<> 0= lshift rshift invert xor or and d2/ d2* dnegate d- d+ m+ um/mod um* m* sm/rem fm/mod 2/ 2* */ */mod /mod mod / * abs min max 1- 1+ negate - under+ lit+ + lit /string capscompare toupper compare fill cmove> cmove move k j i' i (u-do) (-do) (u+do) (+do) (?do) (do) (for) (s+loop)-lp+!# (s+loop) (-loop)-lp+!# (-loop) (+loop)-lp+!# (+loop) (loop)-lp+!# (loop) (next)-lp+!# (next) ?dup-0=-?branch ?dup-?branch ?branch-lp+!# ?branch branch branch-lp+!# does-exec lit-perform unloop ;s perform execute call noop
    
  • Resources:
  • Fan pages & FORTH application pages.
Oforth
  • Oforth for Linux, Windows, MacOSX.
  • “Oforth is a Forth dialect (Oforth is for Object + Forth). It keeps Forth mecanisms while implementing a full object model”.
  • Not under active development since 2018 :-(.
SP-Forth ( for Windows, Linux )
  • The OpenSource FORTH system SourceForge "SP-Forth", SourceForge "SP-Forth - ANS Forth compiler" by RuFIG - “ANS Forth for Win32 and Linux/x86”.
  • Not under active development since 2009 or 2011, respectively :-(.
  • The help file ”.\docs\papers\spf_help.chm”, which described each FORTH word of SP-Forth, is in Russian language only :-(.
  • List of FORTH words:
    /CHAR B! B@ B, INIT (INIT) SPF-INIT? ;.. ..: ... SPF-INI OPTIONS (OPTIONS) TITLE (TITLE) PLATFORM EXC-DUMP1 AT-EXC-DUMP IN-EXCEPTION USER-EXIT PROCESS-INIT USER-INIT FATAL-HANDLER1 (FATAL-HANDLER1) DUMP-TRACE-USING-REGS DUMP-EXCEPTION-HEADER DUMP-TRACE-SHRUNKEN TRACE-TAIL-SIZE TRACE-HEAD-SIZE DUMP-TRACE STACK-ADDR. ADDR. (ADDR.) ERR-EXIT POOL-INIT AT-PROCESS-STARTING AT-THREAD-STARTING ALIGN-BYTES-CONSTANT MAINX DONE COMMANDLINE-OPTIONS SUBSTRING-OPTIONS SAVE EXPORTS-SIZE EXPORTS-RVA RESOURCES-SIZE RESOURCES-RVA IMAGE-BASE IMAGE-SIZE IMAGE-BEGIN ORG-ADDR CGI-OPTIONS POST? CGI? THREAD-ID TERMINATE PAUSE STOP RESUME SUSPEND START ERASE-IMPORTS TASK: TASK WNDPROC: CALLBACK: EXTERN WINAPI: __WIN:  NEW-WINAPI? WINAPLINK OEM>ANSI ANSI>OEM PROC-ERROR1 LIB-ERROR1 ERROR2 DECODE-ERROR (DECODE-ERROR) FORTH_ERROR ENVIRONMENT? (ENVIR?) EXECUTE ?DUP RDROP >R R> }} {{ ;MODULE EXPORT MODULE: UNLOOP LEAVE I +LOOP LOOP ?DO DO RECURSE AGAIN REPEAT WHILE UNTIL BEGIN THEN ELSE IF ?LITERAL2 ?SLITERAL2 HEX-SLITERAL ?LITE ?SLITERAL1 ['] ABORT" [CHAR] ." C" S" CLITERAL SLITERAL 2LITERAL LITERAL -- FIELD \EOF EXIT ; [COMPILE] ( .( \ POSTPONE TO : :NONAME HIDE SMUDGE C-SMUDGE BEHAVIOR! BEHAVIOR ->VECT USER-VECT USER-VALUE USER USER-CREATE USER-ALIGNED ->VARIABLE VECT VALUE CONSTANT VARIABLE VOCABULARY DOES> (DOES2) (DOES1) CREATE CREATED HEADER SHEADER1 SHEADER LAST-NON LAST-CFA INCLUDED-EXISTING REQUIRE REQUIRED INCLUDED INCLUDED_STD INCLUDE-DEPTH (INCLUDED1) (INCLUDED) INCLUDE-PROBE INCLUDE-FILE TranslateFlow FIND-FULLNAME1 FIND-FULLNAME HEAP-COPY RECEIVE-WITH RECEIVE-WITH-XT PROCESS-ERR1 PROCESS-ERR EVALUATE EVALUATE-WITH RESTORE-SOURCE SAVE-SOURCE QUIT MAIN1 ] [ OK1 .SN #(SIGNED) INTERPRET &INTERPRET INTERPRET_ NOTFOUND EVAL-WORD BYE CHAR ' WORD ?COMP ?STACK DEPTH ?SLITERAL ?LITERAL <MAIN> OK BLK STATE WARNING R0 S0 SAVE-ERR (ABORT1") ?ERROR LAST-WORD TYPE0 ERR-STRING ERR-FILE ERR-LINE ERR-IN# ERR-LINE# ERR-NUMBER NOTSEEN-ERR SEEN-ERR SEEN-ERR? ERR-DATA /err-data err.file err.line err.notseen err.in# err.line# err.number /errstr_ ER-U ER-A (ABORT") ERROR WORDS NLIST W-CNT >OUT LATEST ORDER VOC-NAME. PREVIOUS ALSO SET-ORDER ONLY FORTH GET-ORDER DEFINITIONS FIND1 SFIND CONTEXT S-O SEARCH-WORDLIST1 SEARCH-WORDLIST-NFA CDR-BY-NAME CDR-BY-NAME3 CDR-BY-NAME2 CDR-BY-NAME1 CDR-BY-NAME0 SEARCH-WORDLIST FIND NEAR_NFA WordByAddrSilent (WordByAddrSilent) WordByAddr (WordByAddr) (NEAREST-NFA) (NEAREST3) (NEAREST2) (NEAREST1) FOR-WORDLIST ENUM-VOCS-FORTH (ENUM-VOCS-FORTH) ENUM-VOCS IS-CLASS-FORTH VOC IMMEDIATE ?VOC ?IMMEDIATE IS-VOC IS-IMMEDIATE ID. CDR NAME>L  NAME>F NAME>C NAME> WID-EXTRA PAR@ PAR! CLASS@ CLASS! VOC-NAME@ VOC-NAME! FREE-WORDLIST TEMP-WORDLIST WORDLIST AT-WORDLIST-CREATING BUILD-DATE VERSION WL_SIZE +WORD +SWORD >BODY FORTH-WORDLIST &VOC &IMMEDIATE LAST VOC-LIST _VOC-LIST ALIGN-NOP ALIGN ALIGNED ALIGN-TO ALIGN-BYTES >RESOLVE >RESOLVE1 >ORESOLVE >ORESOLVE1 <MARK >MARK ", SLIT, S", S, ?BRANCH, RLIT, DLIT, LIT, RET, BRANCH, COMPILE, _COMPILE, HERE RESOLVE_OPT J_OPT? J_MOVE J_+! J?_STEP CON>LIT VECT-INLINE? FORLIT, OPT ???BR-OPT ??BR-OPT ?BR-OPT BR-EVEN-EAX ?BR-OPT-RULES MACRO, INLINE, OPT_INIT OPT_CLOSE XC_J _INLINE, 2A_,_STEP 1A_,_STEP 0A_,_STEP A_,_STEP 7_,_STEP 6_,_STEP 5_,_STEP 4_,_STEP 4_,_STEP_ 3_,_STEP 2_,_STEP 1_,_STEP +EBP MACRO? INLINE? DO_OPT OPT_ -EVEN-EBP OPT-RULES ?C-JMP ?EAX=RULES FPOP DO_EAX>ECX ?EAX:=ECX EBX:=EAX ECX:=EAX F?EAX>ECX T?EAX>ECX -EBPCLR -EBPLIT EAX>ECX EAX>ECX0 ?EAX>ECX EAX>EBX EAX>EBX0 ?EAX>EBX }?~EAX ?~EAX{ SAVE-?~EAX ?~EAX OPinsert OPresize MOV_EDX_[EBP] ?EDX_[EBP] XX_STEP ?OPlast OPexcise OP_SIZE ^?EAX= ?ChEAX DUP7B? DUP5B? DUP6B? DUP2B? DUP3B? DUP3B?[EBP] ADD|XOR|OR|AND= +>OFF-EBP EVEN-EBP EVEN-EAX MACROOPT-WL SHORT? ?SET SetJP J_@ SJ@ J@ ClearJpBuff INIT-MACROOPT-LIGHT JP4 JP3 JP2 JP1 JP0 JpBuffSize ToOP0 SetOP OPLast OP8 OP7 OP6 OP5 OP4 OP3 OP2 OP1 OP0 OpBuffSize LAST-HERE J-SET :-SET OFF-EAX OFF-EBP MM_SIZE DIS-OPT SET-OPT J_COD ~BR-OPT OPT? REL@ 'DROP 'DUP >T [>T] W, C, , ALLOT DP IS-TEMP-WL GET-CURRENT SET-CURRENT DOES>A CFL (DP) CURRENT NON-OPT-WL VOC-LIST REFILL-SOURCE REFILL-FILE FREFILL REFILL-STDIN TAKEN-TIB REFILL CONSOLE-HANDLES ?CONSOLE ?GUI CURSTR <PRE>  SOURCE-ID-XT SOURCE-ID SKIP1 SKIP PSKIP PARSE PARSE-NAME NextWord ParseWord SkipUpTo SkipWord OnNotDelimiter SkipDelimiters OnDelimiter GetChar IsDelimiter IsDelimiter1 PeekChar CharAddr EndOfChunk SOURCE! SOURCE ATIB TIB C/L >IN #TIB SOURCE-NAME +LibraryDirName +ModuleDirName ModuleDirName CUT-PATH CURFILE ModuleName is_path_delimiter SCREEN-LENGTH >NUMBER (.") DUMP PTYPE >PRT .TO-LOG .0 U. . D. (D.) SIGN #> #S # <# HOLDS HOLD DECIMAL HEX PAD SYSTEM-PAD NUMERIC-OUTPUT-LENGTH BASE HLD SPACES SPACE BL CR EMIT TYPE1 ACCEPT1 ACCEPT TO-LOG STARTLOG ENDLOG KEY1 KEY KEY? PENDING-CHAR EKEY>SCAN EKEY>CHAR EKEY KEY_EVENT ControlKeysMask INPUT_RECORD EKEY? ANSI><OEM FILE-EXISTS FILE-EXIST FLUSH-FILE WRITE-LINE RESIZE-FILE WRITE-FILE lpNumberOfBytesWritten READ-LINE _addr _fp2 _fp1 REPOSITION-FILE READ-FILE lpNumberOfBytesRead OPEN-FILE FILE-SIZE FILE-POSITION lpDistanceToMoveHigh DELETE-FILE OPEN-FILE-SHARED CREATE-FILE-SHARED SA CREATE-FILE CLOSE-FILE SET-EXC-HANDLER (EXC) DROP-EXC-HANDLER <EXC-DUMP> EXC-HANDLER HALT AT-PROCESS-FINISHING AT-THREAD-FINISHING H-STDLOG H-STDERR H-STDOUT H-STDIN ABORT CATCH <SET-EXC-HANDLER> THROW FATAL-HANDLER HANDLER RESIZE FREE ALLOCATE DESTROY-HEAP CREATE-PROCESS-HEAP CREATE-HEAP SET-HEAP EXTRA-MEM USER-HERE USER-ALLOT ERR USER-OFFS THREAD-HEAP R/W W/O R/O FILE_CURRENT FILE_BEGIN OPEN_EXISTING CREATE_ALWAYS FILE_ATTRIBUTE_ARCHIVE INVALID_HANDLE_VALUE MEM_RESERVE MEM_COMMIT PAGE_EXECUTE_READWRITE FlushFileBuffers Sleep TerminateThread ResumeThread SuspendThread CreateThread GetEnvironmentVariableA GetModuleFileNameA OemToCharBuffA CharToOemBuffA GetProcAddress LoadLibraryA GetCommandLineA HeapReAlloc HeapFree HeapAlloc HeapDestroy HeapCreate GetProcessHeap ReadConsoleInputA GetNumberOfConsoleInputEvents ExitThread ExitProcess SetEndOfFile WriteFile ReadFile GetFileSize SetFilePointer DeleteFileA CreateFileA CloseHandle GetFileAttributesA GetLastError GetStdHandle <FORTH-INSTANCE FORTH-INSTANCE> _WNDPROC-CODE _WINAPI-CODE API-CALL AO_INI LIB-ERROR PROC-ERROR ST-RES AOGPA AOLL TYPE NATIVE-LINES EOLN UNIX-LINES DOS-LINES LTL LT DOES-CODE HASH DABS CZMOVE ERASE MOVE >CELLS >CHARS CHARS CHAR- CHAR+ */ CELL TRUE FALSE FNOP _FLIT-CODE10 _FLIT-CODE8 `F1- F**2 `F1+ FD> FD< FRSTOR FSAVE FENV> F>ENV F10/ F10* F>D F>D LOW-MODE UP-MODE ROUND-MODE TRUNC-MODE F[LOG] FLOG2 GETFPUSW F--DS F>DS DS>F GETFPUCW SETFPUCW FINIT F>RAD F>DEG FASIN FACOS FATAN2 FATAN FTAN F** FEXPM1 FEXP FLOG FLNP1 FLN SF@ SF! F@ DATA>FLOAT32 FLOAT>DATA32 DATA>FLOAT FLOAT>DATA F! DF@ DF! D>F F1+ FDEPTH FROT FSWAP FINT FOVER FDUP FDROP FSQRT F/ F- F+ F* FABS FSINCOS FSIN FCOS FNEGATE FMIN FMAX F= F< F0< F0= 1.E .E FL2E FL2T FLN2 FLG2 FPI 10.E 2.E (ENTER) TRAP-CODE TIMER@ (LocalsExit) RFREE (RALLOT) RALLOT RP+! RP+ RP+@ NRCOPY N>R NR> DRMOVE C-EXECUTE C-?DUP C-RDROP C-R> C->R C-I ADD[ESP],EAX C-?DO C-DO J FS! FS@ TlsIndex@ TlsIndex! RP@ SP@ RP! SP! ASCIIZ> FILL CMOVE> CMOVE SEARCH COMPARE -TRAILING D2/ D2* D= D0= 0<> 0= 0< U> U< D> D< WITHIN > < <> = DIGIT FM/MOD SM/REM ARSHIFT RSHIFT LSHIFT M* */MOD U2/ 2/ UM/MOD UMOD /MOD MOD +! U/ / UM* C>S U>D D>S S>D NOOP DNEGATE ABS NEGATE INVERT XOR OR AND * COUNT 0! 1+! - D- D+ CELLS CELL- CELL+ + 2* 2- 2+ 1- 1+ 2! 2@ W! W@ C! C@ ! @ 2R@ R@ 2R> 2>R TUCK ROLL PICK -ROT ROT NIP 2OVER OVER 2SWAP SWAP 2DROP 0MAX UMIN UMAX MIN MAX DROP 2DUP DUP VECT-CODE TOUSER-VALUE-CODE USER-VALUE-CODE TOVALUE-CODE CONSTANT-CODE USER-CODE CREATE-CODE _---CODE CLITERAL-CODE CLITERAL-CODE SLITERAL-CODE _SLITERAL-CODE _TOUSER-VALUE-CODE _TOVALUE-CODE _VECT-CODE _USER-VECT-CODE _USER-VALUE-CODE USER+ _USER-CODE _CONSTANT-CODE _CREATE-CODE
    
StoneKnifeForth
  • GitHub "kragen / stoneknifeforth" - “This is StoneKnifeForth, a very simple language inspired by Forth. It is not expected to be useful; instead, its purpose is to show how simple a compiler can be. The compiler is a bit under two pages of code when the comments are removed. This package includes a 'metacircular compiler' which is written in StoneKnifeForth and compiles StoneKnifeForth to an x86 Linux ELF executable”.
Win32Forth ( for Windows )
    • Latest version is “Win32Forth 6.15.05” ( and Tom Zimmer's last Win32Forth Version 4.2 Build 671 ). At some other places, there might be a “WinForth 6.16”, though...
  • Not under active development since 2018 :-(.
  • The installer must be pointed to a directory, in which the installer then creates a “WIN2FORTH” directory. The directory “WIN2FORTH” must not exist :-), else the installer aborts with an error :-(.
  • Implementation size:
    • Startup screen: “2,812 Words in Application dictionary. 2,631 Words in System dictionary. 5,443 Words total in dictionaries. 20,312 Windows Constants available”.
    • “WORDS” displays 2447 of the 5448 words in the system.
  • List of FORTH words:
    EMPTY >WIN32FORTHIDE >WINED SYSTEMEDITOR FORTHBOOT LOADCONFIGFILE USERCONFIG$ CONFIG$ SET-SHELL ABS@ "OF-INCLUDE ("OF-INCLUDE) "OF-COMPARE ("OF-COMPARE) BACKGROUND FOREGROUND SIZE-POINTER UPARROW-POINTER WAIT-POINTER NOWAY-POINTER ICON-POINTER IBEAM-POINTER CROSS-POINTER ARROW-POINTER NEW-POINTER SP>COL SET-POINTER NOTE F^X FPOP FPUSH (F@) FR@ FDUP>R F>R R>F FSP FSTACK ?UPPERCASE ASCIIZ->ASC-LEN OF-RANGE _OF-RANGE SYS ` ZEXEC .BROWSE .DOS .EDITOR WIN32S? WIN98? WIN95? NT? WITH-IMG <CLASS <OBJECT HEAP> <A -- DOC (* /* CONSOLEWINDOW CMD MULTISTATUSBAR STATUSBAR -STATUSBAR.F COMMANDWINDOW LOGKEYSTROKES HANDLEKEYDOWN HANDLEKEYS SET-CONSOLE-POPUP SET-CONSOLE-MENU MENU-OFF CONSOLE-POPUP WIN32FORTH-POPUP-BAR CONSOLE-MENU WIN32FORTH-MENU-BAR MARK-ALL CUT-CONSOLE COPY-CONSOLE .LDE .WINDOWS .DFC DEXH XREF HELP-SYSTEM CLASS-BROWSER .FORTHFORM .IDE -TOOLS.F NEWEDITDIALOG PAGE-UP-SETUP PAGE-UP-DIALOG ABOUT-WIN32FORTH IDOK3 IDD_PROMPT2_TEXT IDOK2 IDD_EDIT2_TEXT IDD-PROMPT2_TEXT IDD_EDIT2_DIALOG IDD_EDIT_TEXT2 IDD-PROMPT_TEXT2 IDD_REPLACE_DIALOG IDB_OPTION IDD_EDIT_DIALOG IDD_PROMPT_TEXT IDD_EDIT_TEXT IDD_TITLE_TEXT IDD_4UP IDD_2UP IDD_PAGEUP IDD_AVAIL_MEMORY IDD_AVAIL IDD_SAVE_MEMORY IDD_ABOUT_TEXT4 IDD_ABOUT_TEXT3 IDD_ABOUT_TEXT2 IDD_ABOUT_TEXT IDD_ABOUT_HEAD IDD_ABOUT_FORTH IDD_TEXT IDD_CHECK IDD_FONT IDD_FONTDLG FORTHDLG BROWSEFORFOLDER -BROWSEFLD.F MIN-MENU-BAR POPUPBAR MENUBAR NEXTID IDCOUNTER IDSTART MODELESSDIALOG DIALOG LOAD-DIALOG READ-DIALOG FIND-DIALOG-ID ?DLGERR DIALOGID? COMBOFIELD EDITFIELD PICTUREBUTTON TOOLBAR DEFTOOLSPACING DEFTOOLWIDTH DEFTOOLHEIGHT LRBUTTONBAR HBUTTONBAR BHBUTTONBAR VBUTTONBAR GENERIC-BUTTONBAR BUILDBAR DEFBHEIGHT DEFBWIDTH DIALOGWINDOW BUTTONCONTROL RADIOCONTROL CHECKCONTROL STATICCONTROL GROUPCONTROL LISTCONTROL COMBOLISTCONTROL COMBOCONTROL EDITCONTROL CLIENTRECT CONTROL IN-BUTTON? MOUSE-IS-DOWN? INFO-FLAG CALLWINDOWPROC SUBCLASS-ENTRY SUBCLASS-RETURN SUBCLASS-WNDPROC ZMESSAGE MESSAGE-ORIGIN MESSAGE-ON MSG-WINDOW MSGWINDOW CHILD-WINDOW LOADICONFILE SEND-WINDOW FIND-WINDOW WINDOW WNDRECT WNDPROCERROR ERRSTRING ERRCFA CLASSNAMEID DEFAULTMENUBAR ZERO-IMAGE-WINDOWS GENERIC-WINDOW GET-MOUSE-XY WINRECT WRECT DIALOG-LINK WINDOWS-LINK PRINT-CONSOLE PRINT-SCREEN #PRINT-SCREEN ROWSTRING 4PRINT 2PRINT FPRINT $FPRINT PRINT PRINTER FOUR-PAGE TWO-PAGE SINGLE-PAGE PRINT-SCALED PAGE-SCALED PRINT-MULTI-PAGE START-RAW2 START-RAW START-SCALED2 START-SCALED PAGE-SETUP START-PRINTER2 THEPRINTER WINPRINTER SPLITLINE -BLSCAN1 XLCNT BORDER? DIRECT-PRINT? AUTO-ON? CALC_FONT_HEIGHT PRINT-EXTENDED-LINES PRINTER-VRES PRINTER-HRES PRINTER-VSIZE PRINTER-HSIZE PRINTER-MODE XLINECOUNT ?TAB PR_RAW PR_SCALED #XINDENT PRINTER? MULTI-PAGE? PRINTER-#LINE PRINTER-#OUT PRINTER-COLS PRINTER-ROWS PRINTER-CPI PRINTER-LPI PRINTING? SCREEN-HEIGHT SCREEN-WIDTH #PAGES-UP WINDC GDIDC CHAR-HEIGHT CHAR-WIDTH PRINT-ORIENTATION PAPER-SIZE QUALITY-PRINT UNLOCKDEVMODE LOCKDEVMODE DEFAULTPRINTER PRINT-FLAGS GET-COPIES GET-TOPAGE GET-FROMPAGE PRINT-END PRINT-PAGE END-PAGE START-PAGE PRINT-START AUTO-PRINT-INIT PRINT-SETUP PRINT-INIT PRINT-INIT2 PRINT-CLOSE PRINTDLG PAGESETUPDLG JOB DOCNAME DI NCOPIES NMAXPAGE NMINPAGE NTOPAGE NFROMPAGE PDFLAGS HDC HDEVNAMES HDEVMODE HWNDOWNER PD RTMARGIN RTMINMARGIN PTPAPERSIZE PSDFLAGS HOWNER PSD FILESAVEDIALOG FILEOPENDIALOG FILENEWDIALOG GET-FILTER-INDEX -XFILEDLG.F FONT GDIFONT ?GDICHECK (?GDICHECK) .GDI-OBJECTS UNLINKGDIOBJECT GETGDIOBJECTHANDLE ?ISGDIOBJECT GDIOBJECT 8REVERSE 6REVERSE 5REVERSE HATCHCOLOROBJECT BROWN WHITE LTCYAN CYAN LTMAGENTA MAGENTA DKMAGENTA LTYELLOW YELLOW LTBLUE BLUE LTGREEN GREEN LTRED RED DKGRAY LTGRAY GRAY BLACK NEW-COLOR EXTCOLOROBJECT COLOROBJECT IMAGESET?COLORSET ?COLORCHECK (?COLORCHECK) .COLORS COLORS-LINK PALETTEINDEX PALETTERGB RGB GDITEXTMETRIC GDISIZE GDIRGBQUAD GDICOLORREF GDIPOINT MDBG MDEBUG MSEE OBJECTS MATCHES IVARS METHODS CMETHODS SAVEINFO LOADINFO _?UNSAVE-SRC _SAVE-SRC _SAVE-SOURCE SRCINFOHERE _RESETSRCINFO SRCINFO, DOLOADINFO SRCINFOCNT SRCINFOPTR PRE-INIT-SYSTEM-LOCKS-OFF PREINITAPPID INIT?ENABLECONSOLEMESSAGES INIT-TURNKEY-NODEBUG INIT-TURNKEY-FIND INIT-IMAGE-HANDLES TRIM-IMAGE-ERRORS TRIM-IMAGE-CHAINS TRIM-IMAGE-LIST ZERO_CONHNDL TURNKEY SAVE "SAVE (SAVE) CONSOLEHIDDENBOOT CONSOLEBOOT DOSCONSOLEBOOT NOCONSOLEBOOT .APPDIR &APPDIR PRESETNOCONSOLEIO PRESETDOSCONSOLE GENERALBOOT MSGBOX CONSOLEMODE DOCONSOLEBOOT DEFAULT-APPLICATION IS-IMAGE IN-IMAGE? >IMAGE IMAGE-COPY ZERO-WORDS IMAGE-STATS PSIZE PORIG PTABL VIMAGE SCINTILLA-DLL? AUTOEDITOFF AUTOEDITON _EDIT-ERROR BROWSE Z EDIT ED VV V VIEW LINELIST N LL L LOCATE .V WHERE $BROWSE $EDIT PASTE-LOAD EDITOR-PRESENT? MSGPAD -EDITOR_IO.F "FILE-LINK WEB "WEB-LINK "SHELLEXECUTE ("SHELLEXECUTE) DOS SHELL $SHELL .SHELL S$ .$ ,$ DOS" SHELL" BROWSE" EDITOR" DOS$ SHELL$ BROWSE$ EDITOR$ $EXEC-WAIT $EXEC NEW-PROMPT? EXEC-CMD-WAIT EXEC-CMD ZEXEC-CMD-WAIT ZEXEC-CMD EXECEDITOR EXECWINED EXECHELP EXECIDE EXECFORTH (W32FAPPCMDLINE) EXECW32FAPP SET-TIME-TAKEN TIME-TAKEN CLOSETHREAD CLOSEPROCESS ((CREATEPROCESS)) PROCESSCMD PROCINFO STARTUPINFO DECODEW32FMSG BROADCASTW32FMSG SENDW32FMSG COPYDATASTRUCT RUNASNEWAPPID UNINITSHAREDMEMORY INITSHAREDMEMORY ?REMOVEGHOST CLOSESHAREDMEMORY .SHARED SHAREDHWND SHAREDAPPID RESETSHARED SETSHARED SET?ENABLECONSOLEMESSAGES (?ENABLECONSOLEMESSAGES) ENABLEW32FMSG ISRUNNING? W32FSHAREP W32FSHAREH W32FSHARENAME ED_NAME ED_WATCH ED_OPEN_BROWSE ED_OPEN_EDIT ED_DEBUG ED_STACK ED_WORD ED_RESPONSE WM_INQUIRE WM_DONEBP WM_RSTKBP WM_HEREBP WM_BEGNBP WM_JUMPBP WM_CONTBP WM_UNESTBP WM_NESTBP WM_STEPBP WM_SETBP WM_PASTELOAD WM_KEY WM_SHOWDEFER WM_HTML WM_LINEFILE WM_WORDHELP WM_BEEPME W32FAPPID>FILENAME W32FEDITOR W32FHELP W32FIDE W32FFORTH W32FWINED UNSET-EXCEPT SET-EXCEPT RELEASE-EXCEPT-BUFFER ALLOCATE-EXCEPT-BUFFER .EXCEPTION CLEAR-EXCEPTION .EXCEPTION-CODE INIT-EXCEPT-USERS RECOVER-EXCEPTION SHOW-EXCEPTION EXCEPT-IO THROW_WINEXCEPT EXCEPTION_CONTINUE_EXECUTION EXCEPTION_CONTINUE_SEARCH EXCEPTION_EXECUTE_HANDLER MACRO 2LITERAL HARROW-CURSOR MAGNIFY-CURSOR SPLITH-CURSOR       SPLITV-CURSOR HAND-CURSOR IDC_HARROW IDC_HAND IDC_MAGNIFY IDC_SPLITH IDC_SPLITV APP_ICON ICON_FORTH WAIT-CURSOR UPARROW-CURSOR SIZEWE-CURSOR SIZENWSE-CURSOR SIZENS-CURSOR SIZENESW-CURSOR SIZEALL-CURSOR NOWAY-CURSOR IBEAM-CURSOR HELP-CURSOR CROSS-CURSOR ARROW-CURSOR APPSTARTING-CURSOR MAKE-CURSOR DEFAULTOF FLIST FTYPE "FTYPE ?KEYPAUSE PAUSE-SECONDS SECONDS_MS RANDOM-INIT RANDOM SEED3 SEED2 SEED1 .BUILTBY ELAPSE .ELAPSED TIMER-RESET TIME-RESET START-TIME MS@ .CVERSION .AM/PM >AM/PM" .TIME >TIME" .MONTH,DAY,YEAR >MONTH,DAY,YEAR" .DATE >DATE" .#" TIME&DATE COMPILE-VERSION GET-LOCAL-TIME TIME$ DATE$ TIME-BUF TIME-LEN _STACK-CHECK LINELOAD #FLOAD >LINE START-LINE .VIEWINFO $.VIEWINFO ORIG-LOC CUR-LINE COPYFILE ?WIN-ERROR WIN-ABORT .ERRORBOX ERRORBOX ?TERMINATEBOX ?ERRORBOX ?MESSAGEBOX MESSAGEBOX .LOADED .PLATFORM .PLATFORM-NT .REG_WNT\VERSION IDIR .FILE .CUR-FILE .DEFERRED SCREEN-SIZE XFIELD: LFIELD: WFIELD: BFIELD: CFIELD: FIELD: +FIELD END-STRUCTURE BEGIN-STRUCTURE ENVIRONMENT? ENVIRONMENT OPEN-SHARE I-WAS-FIRST CLOSE-SHARE OPEN-MAP-FILE CLOSE-MAP-FILE UNMAP-VIEW-FILE FLUSH-VIEW-FILE MAP-VIEW-FILE MAP-NAME CREATE-FILE-MAP >HFILENAME >HFILEMAXLENGTH >HFILELENGTH >HFILEADDRESS >HFILEMAPPING >HFILE MAP-FIELD+ MAP-HANDLE DOMAP +K_CONTROL +K_ALT +K_SHIFT K_PGUP K_PGDN K_PAUSE K_SCROLL K_DOWN K_UP K_RIGHT K_LEFT K_DELETE K_INSERT K_END K_HOME K-NEXT K-PRIOR K-PAUSE K-SCROLL K-DOWN K-UP K-RIGHT K-LEFT K-DELETE K-INSERT K-END K-HOME SPLKEY K_F12 K_F11 K_F10 K_F9 K_F8 K_F7 K_F6 K_F5 K_F4 K_F3 K_F2 K_F1 K-F12 K-F11 K-F10 K-F9 K-F8 K-F7 K-F6 K-F5 K-F4 K-F3 K-F2 K-F1 FKEY K_LF K_CR K_BACKSPACE K_TAB K_ESC LITKEY RENAME DO-RENAME-AFILE DIR PRINT-DIR-FILES .FILE-SIZE-NAME _PRINT-DIR-FILES .DIR->FILE-SIZE .DIR->FILE-NAME FORALLFILES FORALLFILENAMES DIR->FILE-NAME ASCIIZ->ASC-LEN FILETIME-TO-SYSTEMTIME GET-FILE-MODIFIED FILE-TIME-BUF DIR-ATTRIBUTE? GET-FILE-NAME GET-FILE-SIZE GET-DOS-WRITE-DATETIME GET-DOS-ACCESS-DATETIME GET-DOS-CREATE-DATETIME FIND-CLOSE FIND-NEXT-FILE FIND-FIRST-FILE GET-FSPACE CAPS-COMPARE CAPS-SEARCH WMILLISECONDS WSECOND WMINUTE WHOUR WDAY WDAYOFWEEK WMONTH WYEAR _SYSTEMTIME SIZEOF(_SYSTEMTIME) PTR-DOS-TIME PTR-DOS-DATE _WIN32-FIND-DATA TOTAL-FILE-BYTES #FILES _HDL-SEARCH [GETMETHOD] GETMETHOD .CLASSES TEMPRECT RECTANGLE STRING OBJECT CLASSROOT METHODCATCH METHODEXECUTE ?DISPOSE DISPOSE DIMENSION  -RANGE +RANGE |CLASS BUILD|CLASS CLONE <SUPER :CLASS BUILD:CLASS (CLASS) :OBJECT OBJ-LOADLINE OBJ-CLASS USEROBJECT: NEW> ** [[ HASH> @WORD WARN_CLASH NEWOBJECT (NEWOBJECT) ?WIN-ERROR-ENABLED THROW_DISPOSE_ERR THROW_INDEX_OFR THROW_UNDEF_METH THROW_METH_BUFF_OVERFLOW THROW_NO_WM THROW_OBJ_EXPOSED THROW_NO_FIND_OBJ THROW_INVALID_IVAR THROW_NO_FIND_VAR THROW_INVALID_OBJ_REF THROW_NOT_METHOD THROW_NOT_OBJ THROW_NOT_CLASS THROW_NO_CLONE THROW_NOT_CLASS_OR_OBJ THROW_NEW> THROW_IVAR_EXISTS THROW_NOT_IN_CLASS THROW_BIG_BITS THROW_ZERO_BITS THROW_NO_BITS THROW_NOT_SELF THROW_NOT_SEL THROW_NEED_SEL WITHOUT-SOURCE WITH-SOURCE PATCHINTO #PATCHINTO ?UNBUG WATCH DBG RESTORE-IO DEBUG-IO BP FDEBUG FDBG DEBUG NDBG ADEBUG REMOTE-DEBUG UNBP UNBUG _.RSTACK BUG CFA-WATCH WATCHED-CFA START-WATCH? IN-BREAKPOINT? REMOTE-DEBUG? MAX.RSTACK +OV? DEBUG-EXIT DEBUG-.S DEBUG-ENTRY $WATCH STACK-WATCH WORD-WATCH DBG-FSTACK DBG-NEXT-CELL .WORD-TYPE-CHAIN DBG-NEST-CHAIN ?WINERROR DEFINEDABORT, (?WINERROR) (FORMATSYSTEMMESSAGE) (GETLASTERROR) MENUKEY-MORE AUTO_KEY? AUTO_KEY MOUSEFLAGS MOUSEY MOUSEX ACTIVATE-CONSOLE FOREGROUND-CONSOLE _ACTIVATE-CONSOLE _FOREGROUND-CONSOLE (SETACTIVEWINDOW) (SETFOREGROUNDWINDOW) (SETWINDOW) CURSOR-ON SHOW-CURSOR CURSOR-OFF HIDE-CURSOR FORTH-IO DUMP DUMPC@ +NO-WRAP -DUMP.F ON-ALLWORDS WORDS WITH-ADDRESS CONSTANTS .WORDS VOCS ORDER HORIZONTAL-LINE USED .MEM .FREE .MALLOCS .PROCS .LIBS .COUNTS .THREADS .THREAD 1TCOUNT .1THREAD COUNT-WORDS COUNT-VOC HEADER-CNT APP-CNT WORDS-CNT SEEMORE REST SHOW-NEXT-OFF SHOW-NEXT-ON DISASSEMBLER SEE 'SEE (SEE) DEBUGGING? .WORD-CHAIN .OTHER-CLASS-CHAIN .EXECUTION-CLASS-CHAIN FDISCARD-NUMBER _FLOAT-NUMBER, FLOAT-RESET-STACKS FLOAT-NUMBER? .FLOAT SEE.FLOAT .ONEFLOAT F.X FDUMP .FDEPTH F.S SHOW-FP-DEPTH F^2 F0<> F2PI FPI/2 G. E. FS. FE. F. (G.) (E.) (FS.) (FE.) (F.) MIN-PRECISION SET-PRECISION PRECISION MAXSIG SIGDIGITS REPRESENT F# >FLOAT F#+> F#-> F+> F-> #FLOAT-ARRAY FLOAT #^FLOAT-ARRAY ^FLOAT FLOAT-ARRAY SFLOATS SFLOAT+ DFLOATS DFLOAT+ FLOATS FLOAT+ SFALIGNED SFALIGN DFALIGNED DFALIGN FALIGNED FALIGN FATANH FACOSH FASINH FTANH FCOSH FSINH FALOG F** FEXPM1 FEXP FLOG FLNP1 FLN FATAN2 FATAN FACOS FASIN FTAN FSINCOS FCOS FSIN F0.5 F10.0 F2.0 FINF F~ FSQRT FABS F2/ F2* 1/F FNEGATE F/ F* F- F+ FMIN FMAX F>= F<= F> F< F= F0> F0< F0= SFS>DS FS>DS F>S S>F ZF>D F>D D>F FROUND FTRUNC FCEIL FLOOR SQ2/2M1 SQ2M1 A2**63 FSMALL FEPS FBIG FLN2 FLOG2 FL2E FL2T F1.0 F0.0 FPI F2NIP F2SWAP F2DUP F2DROP FNIP FPICK FROT FOVER FSWAP FDUP FDROP SFIELD: FFIELD: DFIELD: FLITERAL FCONSTANT  +FTO FTO FVALUE FVARIABLE F, F+! DF! SF! F! DF@ SF@ F@ FSP-ADJUST FSP-CACHED? FINIT FEXAM FPU_STATUS_CCF_DENORMAL FPU_STATUS_CCF_EMPTY FPU_STATUS_CCF_ZERO  FPU_STATUS_CCF_INFINITY FPU_STATUS_CCF_NORMAL FPU_STATUS_CCF_NAN FPU_STATUS_CCF_UNSUPPORTED FPU_STATUS_CCF_MASK_023 FPU_STATUS_CCF_MASK_1 FPU_STATUS_CCF_MASK FDEPTH FSTKUFLO THROW_FLOATSTACKUNDER FLOATSTACK FSTACK-ELEMENTS FLOATSP CELLS/FLOAT FPSW> >FPCW FPCW> >FREGS> >FREGS B/FLOAT .M1NAME .M0NAME OBJ-SAVE ADD-HASH CLASH ?UNHASH UNHASH (UNHASH) HASH-WID HASHED OP! OP@ (IVD+!) (IVD!) (IVD@) (IV+!) (IV!) (IV@) (IVW+!) (IVW!) (IVW@) (IVC+!) (IVC!) (IVC@) (&IV) ^BASE DOOBJ ?EXITM EXITM UNNESTM M1CFA M0CFA ((FINDV)) ((FINDM)) METHOD-HASH VOC-PFA-SIZE CLASSES .FONTS FONTFUNC &FONTFUNC CALLBACK: CALLBACK BUILD-CALLBACK __CDECL __STDCALL __CDECLV CALLBACK-BEGIN CALLBACK-RETURN ]MACRO MACRO[ (]MACRO) (MACRO[) _NOPT-CODE NCODE SUBR: _CODE> _OPT-CODE RESOLVE-OFA CODE-HEADER MACRO: SUBR: ;CODE CODE SET-REGISTER-ASM SET-REGISTER-REF ;INTS ;BYTES NUMBERS: -NUMBERALLOC.F "FILE-CLIP" REQUIRED REQUIRE NEEDS \LOADED \LOADED- LOADED? "LOADED? GOHOME PREPEND<HOME>\ FINDRELATIVENAME FINDRELATIVEPATH MAKEPATHRELATIVETO ISPATHRELATIVETO? MAKEABSOLUTEPATH N"OPEN OPEN-PATH$ "PATH-FILE PROGRAM-PATH-INIT .FPATH FPATH+ FBASE-PATH+ "FPATH+ "FBASE-PATH+ SEARCH-PATH SEARCH-BASE-PATH FIND-PATH FULL-PATH .PATH "PATH+ FIRST-PATH" RESET-PATH-SOURCE NEXT-PATH" PATH: CHDIR .DIR "CHDIR .FORTHDIR .PROGRAM WINVER-INIT WINVER GETREGISTRYENTRY WIN10 WIN8 WIN7 WIN2008R2 WIN2008 WINVISTA WIN2003 WINXP WIN2K WINNT4 WINNT351 WINME WIN98 WIN95 GETSETTING SETSETTING REGSETSTRING REGGETSTRING PROGREG-INIT PROGREG-SET-BASE-PATH REGACCESSMASK REGBASEKEY PROGREG BASEREG (REGSETVALUE) (REGQUERYVALUE) (REGCLOSEKEY) (REGCREATEKEY) (REGOPENKEY) INIT-NEW$ _NEW$ DYNALLOC DYN-OFFSET DYN-PTR MAX-DYN-STRING NAMED-NEW$ SIZEOF@> SIZEOF!> UNPOINTER> POINTER RESIZEPOINTER (RESIZEPOINTER) %SIZEOF@ %SIZEOF! >POINTER %UNPOINTER .POINTERS [UNDEFINED] [DEFINED] #IFNDEF #IFDEF #ENDIF #THEN #IF #ELSE [ENDIF] [THEN] [IF] [ELSE] MODULE EXTERNAL INTERNAL PRIVATE (PRIVATE) ASSEMBLER EDITOR "ANYFIND ANYFIND ANYVOC VOC: +ORDER SET-ORDER GET-ORDER FORTH-WORDLIST PREVIOUS ONLY ALSO DEFINITIONS VOCABULARY #VOCABULARY LEXICON #LEXICON (VOC) SWAP-CURRENT SET-CURRENT GET-CURRENT WORDLIST #WORDLIST #LEXTHREADS #THREADS ANEW POSSIBLY MARKER DO-MARKER MARK DO-MARK FORGET (FORGET) VTRIM TRIM-WINPROCS TRIM-WINLIBS TRIM-HANDLES TRIM-DEFER TRIM-CHAINS FULL-TRIM TRIM? SYS-TRIM? FENCE (GDIUNLOCK) (GDILOCK) (DYNUNLOCK) (DYNLOCK) (POINTERUNLOCK) (POINTERLOCK) (CLASSNAMEUNLOCK) (CLASSNAMELOCK) (DIALOGUNLOCK) (DIALOGLOCK) (CONTROLUNLOCK) (CONTROLLOCK) USEROBJECTLIST IDK_BASEPROC NEWPROC PROC_NEXT GET-VIEWFILE +LNULL C+LPLACE +LPLACE LPLACE "LCLIP" LMAXSTRING LMAXCOUNTED ?ENABLECONSOLEMESSAGES STOPLAUNCHING MYRUNUNIQUE RUNUNIQUE NEWAPPID MYAPPID ERASE$ STRING: #DEFINE ISWINCONSTANT PRESETCONSOLEIO (CONSOLEHIDDENBOOT) (CONSOLEBOOT) (DOSCONSOLEBOOT) (NOCONSOLEBOOT) DOSCONSOLE NOCONSOLEIO MESSAGELOOP MESSAGESTRUCTURE WAITFORMESSAGE PAUSEFORMESSAGES HANDLEMESSAGES HANDLE HANDLES-LIST PRE-SAVE-IMAGE-CHAIN POST-FORGET-CHAIN FORGET-CHAIN SEMICOLON-CHAIN MSG-CHAIN RESET-STACK-CHAIN FORTH-IO-CHAIN UNLOAD-CHAIN INITIALIZATION-CHAIN .CHAINS (.CHAINS) .CHAIN IN-CODE-SPACE? IN-SYS-SPACE? IN-APP-SPACE? TRIM (TRIM) B. BU,.R BUD,.R .R.1 D.R.# (D.#) UD.R UD. U,.R UD,.R (UD,.) (XUD,.) (.) ID. ?.NAME ?NAME ARG-EXT" ARG-NEXT" ARG-1" "ARG-NEXT" ARG-POS" ARG" 2+TO 2TO 2VALUE DO2VALUE+! DO2VALUE! 2+! UNUSED EXPECT SPAN CONVERT ,"TEXT" C+PLACE SYS-RESERVE RESERVE APP-RESERVE \+ \- M+ M*/ UT/ (UT/) MT* UT* TNEGATE STACK-EMPTY? CHECKSTACK NOSTACK1 NOSTACK STACK-CHECK-ON STACK-CHECK-OFF OLDDEPTH CS-ROLL CS-PICK ROLL EXEC: ?+; ?+\ ?-\ ENDCHAR? ".EXT-ONLY" "MINUS-EXT" "PATH-ONLY" ("PATH-FUNC") (CALL-PRE) (CALL-PRFS) BUFFER: IMPORT: AS ALLOT-TO SUPPRESS-SYSTEM \IN-SYSTEM-OK DOIMPORT "HOLD LOWORD HIWORD NR> N>R DEFER! DEFER@ ACTION-OF RESTORE-DEFAULT IS-DEFAULT _RESTORE_DEFAULT _IS-DEFAULT .USERSIZE CFA-COMP, CFA-CODE EXIT-ASSEMBLER ENTER-ASSEMBLER CFA-FUNC GET-COMMANDLINE NOT +Z", +Z," ASCIIZ Z-BUF  -NULL, _\N->CRLF DEFAULTWINDOWPROC _DEFAULTWINDOWPROC WITH-SOURCE? MESSAGE-OFF "TOP-MESSAGE "MESSAGE SAVE-SOURCE RESETSRCINFO .RSTACK STOP/START .. BREAKER MAKEDEFER ?ISCLASS DO|CLASS DOCLASS CTRL ALT ASCII EXCEPTION@ ABS>REL REL>ABS HOLDS EMIT? EKEY>FKEY EKEY>CHAR EKEY? EKEY FOCUS-CONSOLE NORMAL-CONSOLE SHOW-CONSOLE UNHIDE-CONSOLE HIDE-CONSOLE SHOW-WINDOW CONDC SET-CONPOS ?CONTROL ?SHIFT SHIFTMASK ?LINE CRTAB TABBING-ON TABBING-OFF TABING-OFF TABING-ON FIRST-LINE -TAB +TAB 0TAB TAB TAB-WRAP? WRAP? INDENT FIRST-LINE? TABING? TABS-MAX TAB-MARGIN RIGHT-MARGIN LEFT-MARGIN TAB-SIZE ROWS COLS AT-XY >NORM >BOLD PAGE BEEP _BEEP BEEP! TONE TONE_DURA TONE_FREQ SHIFT_MASK CONTROL_MASK ALT_MASK UP_MASK DOWN_MASK DOUBLE_MASK PROC_MASK MENU_MASK MOUSE_MASK K-ALT-MASK K-SHIFT-MASK K-CTRL-MASK SPECIAL_MASK FUNCTION_MASK CONHNDL SUPER-NUMBER? IS-NUMBER? NUMBER? DISCARD-NUMBER IP-NUMBER? IP-SEG WINCON-NUMBER? WINCON-CALL WINENUMPTR WINCONPTR WINCONLIB QUOTED-NUMBER? HEX-NUMBER? 0XL-NUMBER? LASTCHAR NEW-NUMBER BASE-NUMBER? XBASE-CONVERT BASE-TONUM DOTTED-NUMBER? RUN-NUMCHAIN -VE-TEST -IFZEROTHROW NUMBER?-CHAIN //{{NO_DEPENDENCIES}} // COMMENT: (( "COMMENT \S ( COMMENT _COMMENT MULTI-LINE? _COMMEOF ; DO-;CHAIN #DOES> DOES> ?EXIT EXIT .VERSION ((VERSION)) BUILD# VERSION# KWORDS NUF? .REFILL ECHO _START/STOP DELAYS SCREENDELAY .NAME .S WAIT EMIT. H.8 H.4 H.2 H.N H.R EXEM TASK-ENTRY START-INTERPRETER &FORTHDIR &PROGNAM EXCEPT-HANDLER EXCEPT-VALLOC EMPTY-COMMAND-LINE CMDLINE BOOT QUERY-INTERPRET MESSAGE _MESSAGE WARNMSG RESET-STACKS _RESET-STACKS EDIT-ERROR &OF (&OF-VALUE) (&OF-LOCAL) PARMFIND LOCALS| {: { NEXTWORD (LOCAL) LOCFLG INPARMS #-LOCALS LOCAL15 LOCAL14 LOCAL13 LOCAL12 LOCAL11 LOCAL10 LOCAL9 LOCAL8 LOCAL7 LOCAL6 LOCAL5 LOCAL4 LOCAL3 LOCAL2 LOCAL1 LOCAL0 MOVE-LOCALS INIT-LOCALS EXITP UNNESTP DOLOCAL+! DOLOCAL! DOLOCAL LOCALALLOC: LOCALALLOC _LOCALALLOC _LOCALALLOCP _LOCALFREE (DPRWARN) DPR-WARNING-ON DPR-WARNING-OFF DPR-WARNING? \ OK SYS-FLOAD INCLUDE "FLOAD FLOAD $FLOAD INCLUDED INCLUDE-FILE END-INCLUDE START-INCLUDE EVALUATE EXECUTE-PARSING RESTORE-INPUT SAVE-INPUT LINKFILE ISABSOLUTEPATH? ISFILE LOADFILE KERNFILE $CURRENT-DIR! CURRENT-DIR$ $OPEN "OPEN _"OPEN ?DEFEXT "TO-PATHEND" DEFEXT DEFEXT_ON? DEFEXTZ$ DEFEXTMAX DEFEXT$ INCLUDING? STACK-CHECK REFILL LEN-PREV (WINPAUSE) WINPAUSE INTERPRET _INTERPRET ?UNSAVE-SRC SAVE-SRC NUMBER, _NUMBER, QUERY ?STACK DEPTH FIELD+ OFFSET INSERT-STRAND APPEND-STRAND STRAND DO-CHAIN CHAIN-ADD-BEFORE NOOP-CHAIN-ADD-BEFORE CHAIN-REMOVE CHAIN-ADD NOOP-CHAIN-ADD NEW-SYS-CHAIN NEW-CHAIN SYS-CHAIN-LINK CHAIN-LINK +TO TO DOFCON VALUE IS ?IS (IS) @(IP) 2VARIABLE 2CONSTANT USERSIZE NEWUSER USER DEFER VARIABLE CONSTANT CREATE DEFER-LIST RECURSE : :NONAME PARMS-INIT PARMS ?:M [ ] _[ _] #(;CODE) (DOES>) (;CODE) SYS-WARN-DOES? SUPPRESS DOES>? DODOES-CALL, ?CSP !CSP CSP SYNONYM ALIAS HEADER SLOW SLFACTOR "HEADER START/STOP ("HEADER) CLASS>SYS CFAPTR! _HEADER-OFA CONSFILE ENDCASE ENDOF OF CASE +LOOP LOOP ?DO DO REPEAT WHILE AGAIN UNTIL BEGIN ELSE ENDIF THEN -IF IF AHEAD <RESOLVE >RESOLVE <MARK >MARK ?COMP ?EXEC ?PAIRS ABORT" (ABORT") ((")) ?THROW ABORT! NABORT! ABORT THROW CATCH FSAVE-FILE FILE-STATUS RESIZE-FILE WRITE-LINE READ-LINE FLUSH-FILE FILE-SIZE FILE-APPEND REPOSITION-FILE ADVANCE-FILE FILE-POSITION FPARMS-FP RENAME-FILE DELETE-FILE WRITE-FILE READ-FILE CLOSE-FILE CREATE-FILE OPEN-FILE ASCII-Z R/W W/O R/O BIN RESIZE REALLOC RELEASE FREE MALLOC ALLOCATE (MEMUNLOCK) (MEMLOCK) MHEAPSIZE MALLOC-ADJLEN LINK>MEM LINK>HADDR MALLOC-LINK MALLOC-HFLAG DLL WINLIBRARY FREE-DLL LOAD-DLL "WINLIBRARY CALL EXTERN PROC RES-MULTI-LIBS RES-SINGLE-LIB RES-LOADPROC "FIND-PROC PROC-ERROR _PROC-ERROR PROC>NAME PROC>PCNT PROC>LIB PROC>EP PROC>CFA CFA>PROC LIB>NAME LIB>HANDLE IGNORE-MISSING-PROCS? WINPROC-LAST WINPROC-LINK WINLIB-LAST WINLIB-LINK PDP PARSE-S$ /PARSE-WORD /PARSE SLITERAL ." Z" S" C" (.") (Z") (S") (C") NEW$  Z,"  Z", ," ", \N->CRLF LINK, UN-LINK APPEND-LINK ADD-LINK DO-LINK POSTPONE ['] [CHAR] [COMPILE] ' CHAR LITERAL REVEAL HIDE DEPRECATED IMMEDIATE CODE-ALIGN CODE-C, CODE-W, CODE-, CODE-ALLOT CODE-HERE CODE-FREE SYS-ALIGN SYS-COMPILE SYS-COMPILE, SYS-C, SYS-W, SYS-, SYS-ALLOT SYS-HERE SYS-FREE APP-ALIGN APP-ALLOT APP-HERE APP-FREE TURNKEYED? NALIGNED -ALIGNED ALIGN ALIGNED COMPILE COMPILE, SYS-WARNING-ON SYS-WARNING-OFF SYS-WARNING? DUP-WARNING-ON DUP-WARNING-OFF DUP-WARNING? IN-SYS? SYS-ADDR? ALLOT ?MEMCHK C, W, , HERE CODE-ORIGIN SYS-ORIGIN APP-ORIGIN CODE> APPLICATION> SYSTEM> DP> >CODE >SYSTEM >APPLICATION >DP IN-PREVIOUS IN-CODE IN-SYSTEM IN-APPLICATION ODP DP CDP ADP SDP DP-LINK IMG-ENTRY SYS-OFFS SYS-SIZE APP-OFFS APP-SIZE CODE-OFFS CODE-SIZE DEFINED FIND CAPS-FIND NAME-MAX-CHARS SEARCH-WORDLIST (SEARCH-SELF) (SEARCH-WID) "#HASH LATEST-NFA OFA-LAST >OFA@ >FFA@ >VIEW@ >VIEW >HEAD-FIELD N>HEAD >NAME [UNKNOWN] DOVOC VOC>VCFA VCFA>VOC VOC#THREADS VOC>VLINK VLINK>VOC VOC-ALSO HIDDEN FILES LOCALS FORTH ROOT VOC-LINK LAST-LINK LAST LATESTXT CURRENT CONTEXT NFA-COUNT NAME> LINK> N>BFA N>CFAPTR N>LINK L>NAME BODY> >BODY BFA_VFA_PRESENT BFA_FFA_PRESENT BFA_OFA_PRESENT BFA_UNUSED1 BFA_UNUSED2 BFA_UNUSED3 BFA_DEPRECATED BFA_IMMEDIATE .( PARSE PARSE-WORD PARSE-NAME WORD .ID ? H. U.R U. .R . D.R D. (D.) #S # SIGN #> <# HOLD OCTAL BINARY HEX DECIMAL NUMBER ?MISSING (NUMBER?) NUM-INIT -VE-NUM? DP-LOCATION DOUBLE? >NUMBER DIGIT UPPERCASE LOWER UPPER UPC TR TRTZ TRTNZ GETLASTWINERR GETLASTWINERRMSG WINERRMSG MS BYE K_BYE UNLOAD-FORTH #TAB COL SPACES SPCS SPCS-MAX SPACE D_ACCEPT D_KEY D_KEY? D_EKEY>CHAR D_EKEY D_CR D_EMIT D_TYPE D_UNINIT-CONSOLE D_INIT-CONSOLE DOSCHAR INP_REC OUTH INH K32DLL _CONHNDL APPINST SCROLLTOVIEW &THE-SCREEN GETROWOFF GETCOLROW GET-CURSOR SET-CURSOR CHARWH SETCHARWH BG@ FG@ FGBG! GETXY GOTOXY ?CR CR TYPE EMIT CLS "PUSHKEYS PUSHKEY ACCEPT KEY? KEY INIT-SCREEN INIT-CONSOLE CONSOLE MAXASCII K_NOOP2 K_NOOP1 K_NOOP0 .SMAX #TIB SOURCE TIB (SOURCE) LOADING? SOURCE-POSITION SOURCE-ID >IN LOADLINE FIND-BUFFER TEMP$ CUR-FILE POCKET WARNING STATE LAST-ERROR MSG THROW_MSGS MAIN? ASSYNC-TASK MAIN-TASK TASK-STATUS? TASK-FLIP TASK-CLEAR TASK-SET USEROFFS USERMIN USEREXTRA PAD HLD BASE OP LP HANDLER EXC-ACCESS EXC-GUARD &EXCEPT &EXREC TCB SP0 RP0 UP! UP@ NEXT-USER DOCALL-SINGLE DOCALL-MULTI DOEXTERN DOCALL CALL-PROC DMAX DMIN D<> D> D< D0= D0< D= D>S S>D DABS DNEGATE D- D+ BYTE-SORT CELL-SORT LARGEST /STRING -NULLS -TRAILING -TRAILCHARS +NULL +PLACE PLACE "CLIP" -SKIP -SCAN LSCAN LSKIP WSCAN WSKIP SCAN SKIP SEARCH ISTR= STR= COMPARE LCASETAB UCASETAB ZCOUNT LCOUNT WCOUNT COUNT */ */MOD MOD / /MOD FM/MOD SM/REM * M* 4DUP 3DUP 4DROP 3DROP 2ROT 2OVER 2SWAP 2DUP 2NIP 2DROP 2! 2@ BETWEEN WITHIN 0MAX MAX UMAX MIN UMIN DU< U> U< >= <= > < <> = 0> 0< 0<> 0= WORD-JOIN WORD-SPLIT UM/MOD UM* D2/ D2* 1- 1+ U2/ 2/ 2* ABS NEGATE UNDER+ - + BIT-MSB BIT-POP TOGGLE OFF ON CDECR CINCR DECR INCR RSHIFT LSHIFT INVERT XOR OR AND BLANK ERASE FILL MOVE CMOVE> CMOVE CHAR+ CHARS -CELLS +CELLS CELL- CELL+ CELLS- CELLS+ CELLS W+! W! SW@ W@ C+! C! C@ +! ! @ 2R@ 2R> 2>R RDROP R>DROP DUP>R R@ R> >R RP! RP@ SP! SP@ 4REVERSE 3REVERSE S-REVERSE PICK TUCK NIP ?DUP -ROT ROT OVER SWAP DUP DROP _ENDCASE _ENDOF _OF _CASE BOUNDS UNLOOP (+LOOP) (LOOP) ?LEAVE LEAVE K' K J' J I' I (?DO) (DO) _WHILE _UNTIL _REPEAT _AGAIN _THEN _BEGIN -?BRANCH ?BRANCH BRANCH CALLF RETURNF EXEC-SEQ NEXT-SEQ CRLF$ MAXCOUNTED MAX-PATH MAXSTRING MAX-HANDLE #VOCS PTRNULL NULL FALSE TRUE BL -CELL CELL 2 1 0 -1 NOOP PERFORM EXECUTE LIT UNNEST DOOFF DOUSER DOVALUE+! DOVALUE! DOVALUE DO2VALUE DODEFER DOVAR DODOES DOCON DOCOL 
    
  • Win32Forth Project Group. Last update 2010-02-11.
  • Narkive News Archive "comp.lang.forth.narkive.com", Thread "Forth as smartphone's operating system", 2018 - “What tools offers Win32forth ... Full sources of anything. A simple installing complete IDE, with editor, full source debugger, with tracing capabilities, Assembler, Disassembler, Full C interface, lots of libraries for TCP-IP for example, is easy to write a server (in real it is already written).... Win32forth has lots of examples ready to go, how to access the full hardware of your PC, you can read and write on COM ports Parallel ports” :-).
  • Expert comment about the history of Win32Forth.
    • “Tom Zimmer hat Anfang der 2000 aufgegeben, aber er hatte viele Programmierer dabei zum helfen, die danach alleine oder zusammen weiterentwickelten”.
    • “Es waren ca 20 Top Programmierer in diesem Team, Howerd Oakford, Dirk Brühl und ein anderer Dirk”.
    • “Fast alle Forth Programmierer die Du heute kensst, haben mit Win32forth Programme geschrieben. es war ausserordentliches System”.
    • “Win32forth lauft fast kaum in modernen Rechner, so es macht kein Sinn. Win32forth konnte man nicht in Windows >XP installieren. so haben alle aufgegeben. Windows hat win32forth als ein Virus Programm gesehen, so kannst Du auch nicht mehr den Turnkey oder SAVE benutzen, es wird alles von der Festplatte gelöscht”
    • “Das tolle Feature von Win32forth war, dass Du EXE Programme herstellen konntest und danach verbreiten. Als Windows dies dichtmachte hat der ganze Prozess kein Wert mehr”.
    • “Es gab viele Seiten mit Win32forth Programme, es gab sogar Seiten mit Win32forth Server auf Forth geschrieben, die als Virus auftauchten und dann gesperrt wurden. Es fing eigentlich mit einem XP-Patch schon an”.
    • “Man hätte es retten können, aber es gab Leute die mit Win32forth Virus Applikationen schrieben. Computer Chaos Club usw.”.
  • Forth-Gesellschaft e.V. "Win32Forth heilen !", 2019-03-10 - “Trotzdem wird Win32F als 'Falsch Positiv' identifiziert und blockiert. Nach weiterer Suche fand ich einige Probleme im HEAD von PE-EXE. Einige Eingaben erwiesen sich als problematish, und mit einem anderen HEAD, geborgt aus einer aelteren Version von Tom Zimmer, konnte ich die Entdeckungsrate ganz beeindruckend vermindern”.
  • Fan pages & FORTH application pages.
Howerd Oakford's Win32Forth6v05H
  • Inventio Software Techie Page by Howerd Oakford - “Win32Forth6v05H 2019 Mar 02. The ‘H’ is for Howerd, although I have kept as much of the original V6.05 as possible. This version of Win32Forth runs under Windows 7 and 10 and does not trigger my anti-virus program”.
  • Experts told me, that “Win32Forth6v05” still is almost like the latest Tom Zimmer's last “Win32Forth Version 4.2 Build 671”! There was never a version 5. Some Win32Forth releases after 6.05, Win32Forth was heavily modified. The current stable version of Win32Forth is 6.15, in 2021, though there is a Win32Forth 6.16 somewhere out.
visualFORTH based on Win32Forth
Win32FX based on Win32Forth 6.01
  • SourceForge "Win32FX". SourceForge "Win32FX", win32fx.sf.net - “Evolved from Win32Forth 6.01. Code runs ten times faster on older cpu's. Absolute addressing makes the VM simple to understand. Five stacks and demos showing why modern Forths need at least 4, and preferably 5 stacks to be viable in today's computer”.
Mind.Forth based on Win32Forth

WinForth64

FORTH for MacOS prior MacOSX

FORTH for Android OS & Raspberry Pi

Any MSDOS FORTH on Android OS & Raspberry Pi
Any MSDOS FORTH on Raspberry Pi
Native FORTH for Raspberry Pi
Resources

FORTH Systems for ATARI 400/800

FORTH for the BBC Microcomputer

FORTH for Commodore Amiga & AmigaOS

  • The once-commercial, now free JForth.

FORTH Systems for Commodore C64, VC20

FORTH Systems for ESP8266

FORTH Systems for IBM-PC & MSDOS

FORTH System for JU+TE-Computer

    • “Das JU+TE-FORTH-System setzt das 4K-System ES1988 sowie 8 Kbyte RAM voraus. Das FORTH-System wird von Kassette geladen und läßt sich ab %E000 über PROG oder BASIC starten”.
    • “Auf die Screenarbeit wurde verzichtet, da mit der Bildschirmgröße und RAM- Austattung des JU+TE-Computers zu enge Grenzen gesetzt sind. Statt dessen können mit dem Wort VIEW alle Wörterbucheinträge rückübersetzt werden”.

FORTH System for LEGO MindStorms RCX

FORTH Systems for Microchip / Atmel MCUs

Microchip
Atmel

FORTH System for Parallax MCUs

Propforth
Tachyon Forth
Resources
    • “PropForth5.5 is last version for P1”.
    • “I have been trying to use Tachyon for my project, but it is sufficiently unique and for me it is quite frustrating because it is different in its behavior from other Forth implementations. Peter Jakacki is a very talented programmer and he has developed this system to fit his way of thinking. I am struggling trying to figure stuff out. Things that were easy in other implementations are vague and hard to discover”.
    • There are at least 4 different versions of forth for the propeller. All versions can make use of the multiple cores of the propeller.
      • Three versions (Tachyon 3 & 4, and Propforth 5) are optimized for the propeller with many words defined for sensors, communications, actuators.
      • One version (pfth) is a standard ANS forth with some key words defined for use with the propeller. I found it useful for learning interactively some low level propeller features by interactively adjusting parameters in one core and transferring data to words running in other cores.

FORTH Systems for Texas Instruments TI-99/4A console with 32K Memory Expansion ( and Disk System )

FORTH Systems for Texas Instruments MSP430

4E4th
eForth
  • See above on this page.
FASTFORTH
Mecrisp
  • See above on this page.
muforth
  • See above on this page.
noForth
Egel Project

FORTH Systems for ZX81

Metacompilers for Forth

ANS Proposed Standard
bForth, eForth
  • eForth is shipped with a meta-compiler.
  • See on this page “bForth by Bill Muench, eForth by Bill Muench & Chen-Hanson Ting”.
Chromium 2 Metacompiler by Bradford J. Rodriguez
  • Camelforth "CamelForth/6809" - “CamelForth/09 is supplied as source code, and is compiled with a Forth metacompiler, Chromium 2. This compiler, and the corresponding 6809 cross-assembler, are distributed with CamelForth/09. To run this compiler you must have Laxen & Perry F83 for the IBM PC (available for download from the Forth Interest Group, ftp://ftp.forth.org, and from many IBM PC shareware distributors)”.
embed by Richard James Howe
  • embed is shipped with a meta-compiler.
  • See on this page, section “FORTH Systems in C/C++”.
GForth
Metaforth by Jan Vermue and Hans Nieuwenhuijzen
Win32Forth
  • Win32Forth is shipped with a meta-compiler.
  • See on this page.
Resources

Other Programming Languages & Runtime Systems with RPN, but not really FORTH

Online Services for Software Development with FORTH

Using an OpenSource FORTH for commercial Projects to generate a Sales Product

  • Experts warned me to use a modern OpenSource FORTH ( like some FORTH for the ESP8266 ) for commercial embedded system projects, as some of these products are using several different OpenSource libraries ( e.g. to handle WiFi on the ESP8266,.. ) with often a handful of different OpenSource licenses, including some problematic licenses. The idea to compile this with a self-written application in FORTH language to a commercial saleable binary product, without that the hole commercial binary product is effected by the OpenSource libraries, is not quite realistic :-(.

History of FORTH

FIG's & TheFourceSource's History of FORTH

  • Forth Interest Group, Glen B. Haydon "LEVELS OF FORTH", TheFourceSource "The Forth Source - Catalog" ⇒ “Levels of Forth”, “Implementation Levels of Forth”.
    1. “Level 0”.
      • “On several occasions C.H. Moore has listed approximately 63 functions which he considers the essence of Forth”.
      • 45 functions noted by Glen B. Haydon at one presentation pf Charles Moore:
        + - * /MOD MIN MAX = AND OR XOR NEGATE ABS NOT */ DUP DROP SWAP OVER DECIMAL HEX OCTAL . n .R CR EMIT KEY : ; CREATE , ALLOT IF ELSE THEN FOR NEXT I
        
      • Glen B. Haydon: “There are only 45 functions in this list. You can see about which period this was. The list does not include BEGIN, UNTIL, and several other functions belong in Level 0. A figure of about 63 is appropriate. Three functions are used for output to the display. He included no functions for any kind of storage. Screens are not included much less any means of writing on such a screen. Something more than Level 0 is necessary to provide anyone but Chuck enough to work with”.
    2. “Level 1”.
      • fig-Forth.
        • “There was little in the way of documentation beyond the Installation Manual and the source listings. The older publications such as the Kitt Peak Primer and Using Forth did not mesh well with the public domain version available” :-(.
          • “Kitt Peak Primer” ⇒ See FORTH 3/6.
          • Document “Using Forth” ???
        • “The fig-Forth implementations took over the disk precluding its use for other programs. The error messages were stored on a disk” :-(.
    3. “Level 2”
      • FORTH-79.
        • “79 Standard made about 40 changes to the functions in fig-Forth”.
        • “Soon there came the 79 Standard which made several changes. It was then proposed that the Forth Interest Group stop supplying the fig-Forth source listings” :-(.
        • Book by Leo Brody “Starting Forth”, 1st. edition.
      • MVP Forth, up to 240 or up to 500 functions. The MVP Forth implementation of FORTH-79 takes over a disk format. But the file on Gene Forth Round Table includes several added utilities which allow one to access screens in files and the compiling of text files written with any word processor.
        • “A Forth editor described in Chapter 3 of Starting Forth written by Sam Daniels is included”.
        • Suggested reading:
          • Document “MVP System Documentation”.
          • Document “MVP FORTH Guide”.
          • Book “Starting Forth”, 1st Edition by Leo Brodie.
          • Free document “The Forth Guide” by by Glen B. Haydon.
    4. “Level 3”.
      • FORTH-83, up to 1000 functions, including the 132 functions from the 83 Standard.
      • Document by Ting “Inside F83”.
    5. “Level 4”.
      • FPC Forth ( = F-PC Forth ), by Tom Zimmer. 2500 functions. Based on the 83 Standard. All of the source code is in text files.
      • Documents by Ting “F-PC Technical Reference Manual” and “F-PC Users Manual”.
    6. “Level 5”.
      • MVP-F32 Forth( = F32 Forth ), by Rick VanNorman. 32-bit FORTH, up to 900 functions.
    7. “Level 6”.
      • Norm ANS Forth, 1994.
      • THIS4TH Forth.
      • MVP-F32 ( = F32 Forth ) by Rick van Norman, with 32-bit MSDOS extender ( DPMI ) support.

FORTH.Inc's History of FORTH

Forth 200x Standardisation Committee s History of FORTH 1978-2012

Jeff Fox's History of FORTH 1970-2004

TU Wien, Institut für Computersprachen's History of FORTH

Forth Family Tree and Timeline
Gforth's History of FORTH
  1. All early Forth systems were custom-made, usually by Charles Moore, who discovered (as he puts it) Forth during the late 60s. The first full Forth existed in 1971.
  2. The principal architect of microForth was Dean Sanderson. microForth was FORTH, Inc.'s first off-the-shelf product. It was developed in 1976 for the 1802, and subsequently implemented on the 8080, the 6800 and the Z80.
  3. A team led by Bill Ragsdale implemented fig-Forth on many processors in 1979. Robert Selzer and Bill Ragsdale developed the original implementation of fig-Forth for the 6502 based on microForth.
  4. VolksForth was written by Klaus Schleisiek, Bernd Pennemann, Georg Rehfeld and Dietrich Weineck for the C64 (called UltraForth there) in the mid-80s and ported to the Atari ST in 1986. It descends from fig-Forth.
  5. Bernd Paysan wrote bigFORTH, a descendent from TurboForth, an unreleased 32 bit native code version of VolksForth for the Atari ST, written mostly by Dietrich Weineck.
  6. Gforth descends from bigFORTH (1993) and fig-Forth. Of course, a significant part of the design of Gforth was prescribed by ANS Forth.

Resources

Tools & Applications

Applications & Libraries

Complete Application with FORTH as Programming Language

Games

Complete Hardware Application with FORTH as Programming Language ( Applicance )

Compilers built with FORTH

  • BASIC.
      • “amr Forth, Basic, and Assembler are released under the LGPL open source license to use freely without charge. All are available for both the Windows and Linux operating systems”.
        • “Three languages, Forth, Basic, and Assembler plus multiple operating systems, Linux, Unix, BSD, & MS Windows in a fully integrated development environment”.
  • Pascal compiler.
      • “Apropos Spieltrieb, wie wäre es denn mit einem portablen Pascal auf dem Rücken eines Forth's. Gibts da schon was?” ⇒ “Paul Kleinrubatscher hat sowas einmal in einer Diplomarbeit teilweise gemacht (aber nicht so toll). Schwierigkeiten dabei sind vor allem das goto (vor allem ueber Prozedurgrenzen hinweg) und, zu einem geringerem Grad, das statische Scoping”.
  • Tiny Pascal.

Database Interface

Forth Query Language ( FQL )

Federico de Ceballos

Graphics with FORTH

FORTH Implementations, FORTH Graphics Libraries

Commercial Documentation

    • “GraFORTH. Graphics Language Reference Manual for the Apple ][”.
    • “APX 20157, William D. Volk: FORTH Turtle Graphics Plus Manual” ( for ATARI 400/800 )

Videos

FORTH Resources

General Resources

Lint for FORTH?

Networking ( TCP/IP Networking, Wireless Communications like WiFi, Internet Access, ... ) & Serial Communications

File Transfer Protocols

MQTT

RS232 Serial Communications

USB Serial Communications

Serial Communications Protocols

TCP/IP Networking

    • “Forth with a pre-existing TCP protocol stack” - Some freeware.
    • “Native Forth implementations of TCP/IP” - No freeware :-(.
  • ESPForth is configured to communicate by WiFi of the ESP32 chip ( i.e. by ESP32 system libraries, written in C language ).

Resources

Operating Systems Stuff ( Multitasking with FORTH, Multitasking Operating Systems with FORTH Integration & Bootloaders written in FORTH )

FORTH with Cooperative Multitasking

Implementations
  • FORTH-83 ⇒ See on this page.
  • VolksForth ⇒ See on this page.
Resources

FORTH with Preemtive Multitasking

Implementations
  • Win32Forth ⇒ See on this page.
Resources

FORTH with Time Triggered Architecture

Multitasking FORTH

C++ 20 Coroutines
Multithreading FORTH in C++
    • “When you download mingw, there is a win32 version and a POSIX version. Get the POSIX and it will come with the std::thread implementation”.
    • “You can either: Choose the “pthreads” option when installing mingw-w64, or Choose the “Win32 threads” option when installing mingw-w64, and install an additional header file pack. Another good option is to install via MSYS2 which always gives you the latest build with a suitable configuration. (pthreads in this case)”.

FORTH Bootloaders

Collapse OS
  • Collapse OS - “Bootstrap post-collapse technology”.
  • GitHub "hsoft / collapseos" - “Collapse OS is a Forth operating system and a collection of tools and documentation with a single purpose: preserve the ability to program micro- controllers through civilizational collapse”.
Open Firmware

Simple multi-tasking Operating Systems ( Schedulers ) which might cooperate with FORTH

FreeRTOS
Resources

FORTH with complete FORTH Operating Systems

ForthOS
  • ForthOS by Andy Valencia ( - 2018-09-24 ).
    • 2018-11-07 - “With the slow fading of Forth (well, at least my own interest in it!) I'm not going to bother spending the money to keep this old domain. So if you're interested in digging through this old OS implemented in Forth, I'll keep a copy of this site available on sources.vsta.org”.
        • “An operating system written from scratch and capable of hosting its own development (edit, compile, debug) and OS re-generation. Based on the Forth programming language”.
        • “ForthOS is a complete, standalone operating system for the PC. It includes command line, compiler, debugger, editor, and filesystem. You can give it a test drive by booting the standalone CD (image provided so you can burn your own). If you like it, you can install it onto a disk partition and boot directly from your hard disk”.
        • “ForthOS was the basis for the author's own experimental software work; unlike many other Forth systems, this one as a real tool in day-to-day use as a part of a larger development. It is a fully standalone system, with a metacompiler used to generate new versions of ForthOS while running under ForthOS. ForthOS is a complete, standalone operating system for the PC. It includes command line, compiler, debugger, editor, and filesystem. You can give it a test drive by booting the standalone CD (image provided so you can burn your own). If you like it, you can install it onto a disk partition and boot directly from your hard disk”.
  • A former non-FORTH operating system The VSTa Operating System by Andy Valencia.
Kestrel Computer Project
    • RapidIO, RetroForth, and RISC-V Update.
    • Stepwise Refinement of an Event-Driven Forth Interpreter Part 3: Multiplication.
    • Stepwise Refinement of an Event-Driven Forth Interpreter Part 2: Basic Correctness Checks.
    • Stepwise Refinement of an Event-Driven Forth Interpreter.
    • Kestrel-3 User's Guide Available Now.
    • Event-Driven Forth and its Implications.
    • “This project is now archived, due to Raptor Engineering Releases Kestrel, The 'First Open-HDL/Open Firmware BMC', which I read on 2021 Feb 09. I cannot risk legal action from Raptor Engineering, especially considering how much our respective projects overlap. — Samuel A. Falvo II, 2021 Feb 09”.
    • GitHub "Kestrel Computer Project" - “The Kestrel Computer Project aims to build a full-stack, open-source and open-hardware, home computer”.
  • The competitor Medium "El Correo Libre Issue 35" - “Raptor Engineering Releases Kestrel, The 'First Open-HDL/Open Firmware BMC'”.
rpiForth
pijFORTHos

FORTH with commercial complete FORTH Operating Systems

Resources

Stack Trace

Packet Manager, Repository

Profiling

Unit Test / Test of Assertions & Debugging

Unit Test Tools

Unit Test Tools in FORTH
    • “Test programs for Forth 2012 and ANS Forth”.
    • Experts told me, that this test framework might be adopted to do unit-test alike tests for your own FORTH application “Helps in testing for ANS conformance. But it also defines a generic test framework (see tester.4th). It can be tailored to check for non-regression in other Forth variants”.
  • Forth200x / Forth2012
  • GitHub "Anding / simple-tester" - “A simple FORTH test package intended for embedded systems based on the ANS FORTH version of ttester.f”.
    • Expert #1 feedback: “It seems a pity Ulrich Hoffmann arbitrarily switched the names form T{ =⇒ T} to T{ T} == that will make any existing test suite fail” :-(. “Hashing is a clever idea, but is no cheaper than actually comparing the values, so I'm not sure why they took that approach?”.
    • Expert #2 feedback: “I'm not sure what the justification of the hashing was other than its easier to pass a calculated value around as a single stack item or to store it for later use”.
  • GitHub "G9541 / stm8ef" - “eForth tester - inspired by forth2012-test-suite tester.fr”.
  • GitHub "swapforth / anstests / tester.fr" - “ANS tests snapshot”, “\ 31/3/2015 Variable #ERRORS added and incremented for each error reported”
Unit Test Tools in Assembly Language, for FORTH
Expert-generated List of FORTH implementations, which are shipped with Unit Test Tools
  1. eForth for ST8 ( in FORTH ).
  2. Gforth.
  3. Win32forth. Not included in the default FORTH kernel, but provided as Forth script file with distribution package.
  4. zedforth ( in Z80 assembly language ).

Unit Test Resources

T{ 1 2 drop }T 1 ==
T{ 1 dup }T 1 1 ==
T{ 2 1 swap }T 1 2 ==

Debugging Resources

Practical FORTH Debugging Session

  • You can test this yourself in a forth system of your choice. just press
     
    1 +
  • and an error message will come.
    1 2+
  • gives ok. type
    .s
  • then the stack is printed.
    weerty
  • displays an error and empties the stack.
     
    1 2 3 .S +.S +.S
  • you see it. type
    qwer
  • this gives an error and your stack is empty again
    .S
  • now pointers, type
    VARIABLE A 0 A !
  • poke's 0 in a A
    @
  • peeks in to A and put it on the stack
    .S
  • you can see this an test this
    . VARIABLE B 10 B !
  • you test
    A@ B@ .s
  • and decide that you want to add them up type
    + .S
  • if you like it you make it a word:
    a@+b@ (-- n) a @ b @ + ; 5 6 B ! a ! A@+B@ .
  • and test is
    5 6 .s B ! A ! .s A@+B@ .s . .s B@+A@
  • gives a error again. Try :
    2 1 ;
  • and type
    2 .
  • see how powerful forth is
    . 2 2 + . forget 2 2 2 + .
    

Resources

Appropriate OpenDirectory Directory Pages

 
en/forth04.html.txt · Last modified: 2022/08/13 19:55 (external edit) · []
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki