OSDN Git Service

Delete Thumbs.db
[fast-forth/master.git] / README.md
index 15cf051..8b97ac1 100644 (file)
--- a/README.md
+++ b/README.md
-Fast Forth For MSP430FRxxxx TI's chips
-======================================
+FastForth for MSP430FRxxxxTI's chips, from 16k FRAM 
+==================================================
 
+Tested on all MSP-EXP430FRxxxx TI launchpads (5739,5969,5994,6989,4133,2355,2433) and CHIPSTICKFR2433, at 0.5, 1, 2, 4, 8, 12, 16 MHz plus 20MHz and 24MHz with FR23xx,FR57xx devices.
 
-FAST FORTH is a fast and well made embedded interpreter/assembler/compiler, very interesting due to it size of 6 kbytes. 
-If your purpose is programming a MSP430FRxxxx in assembler, FAST FORTH is the Swiss army knife you absolutely need! 
+Fast Forth is a fast and well-made embedded interpreter/assembler/compiler, very interesting because of its size of 6 KB.
+This includes the FORTH language, a symbolic assembler without labels, conditional compilation, a 16-input search engine which
+speeds up the Forth interpreter by a factor of 4 and a connection to the serial terminal (TERATERM.exe), with 3 wires software flow control (XON/XOFF) and/or 4 wires hardware control flow, up to 6 Mbds.
+If your goal is to program a MSP430FRxxxx in assembler, FAST FORTH is the Swiss Army knife you absolutely need!
 
-For only 3 kbytes in addition, you have the primitives to access the sd\_card FAT16 and FAT32: read, write, del + load source files + direct copy from PC to SD\_Card.
-It works with all SD CARD memories from 64MB to 64GB. Read or write a byte is done in less than a microsecond @ 16MHz.
-This enables to make a fast data logger with a small footprint as a MSP430FR5738 QFN24. To compare with a LPC800 ARM entry-level...
+For only 3 kbytes in addition, you have the primitives to access the SD\_CARD FAT16 and FAT32: read, write, del, download source files and to copy them from PC to the SD_Card.
+It works with all SD\_CARD memories from 64MB to 64GB. The cycle of read/write byte is below 1 us @ 16 MHz.
+This enables to make a fast data logger with a small footprint as a MSP430FR5738 QFN24.
 
-With all core options its size is under 9.5kB. 
+With all kernel options FastForth size is under 10kB.
 
-       Tested on MSP-EXP430{FR5969,FR5994,FR6989,FR4133,FR2355,FR2433} launchpads and CHIPSTICKFR2433,
-    at 0.5, 1, 2, 4, 8, 12, 16 MHz plus 20MHz and 24MHz for FR23xx,FR57xx devices.
-
-    Files launchpad_xMHz.txt are 16threads vocabularies executables, with
-    "3 WIRES" (XON/XOFF flow control) and "4 WIRES" (Hardware flow control) 921600Bds terminal.
-
-    if you use a cable with a PL2303HXD, terminal baudrate can be boosted on the fly to 5Mbds
-    for Windows and up to 4Mbds for linux.
-    Try it by downloading MSP430-FORTH\CHNGBAUD.f. 
-
-    Once the Fast Forth code is loaded in the target FRAM memory, you can add it assembly code or 
-    FORTH code, or both, by downloading your source files that embedded Fast Forth interprets and
-    compiles. To do, you only need teraterm.exe as input terminal and an USBtoUART bridge 
-    to connect your target.
+    The files launchpad_xMHz.txt are the executables ready to use with 
+    a PL2303HXD cable and a serial terminal (TERATERM.exe) at 115200Bds with XON/XOFF,
+    or RTS hardware flow control
+    ------------------------------------------------------------------------------------------
+    WARNING! don't use it to supply your launchpad: red wire is 5V ==> MSP430FRxxxx destroyed!
+    ------------------------------------------------------------------------------------------
+    (you can modify this by opening the box and by welding red wire on 3.3V pad).
+    
+     TI Launchpad      PL2302HXD cable
+               RX <--- TX
+               TX ---> RX
+              GND <--> GND
+              RTS ---> CTS (not necessary if software XON/XOFF flow control
+                            see in your launchpad.asm to find RTS pin).
+
+    The interest of XON/XOFF flow control is to allow 3.75kV galvanic isolation of terminal input
+    with SOIC8 Si8622EC, or better yet, powered 5kV galvanic isolation with SOIC16 ISOW7821.
+    
+    If you want to change the terminal baudrate on the fly (230400 bds up to 6 Mbds),
+    download to your launchpad the file \MSP430-FORTH\CHNGBAUD.4th.
+    
+    To see all compilation options, download \MSP430-FORTH\FastForthSpecs.4th
     
-    Beforehand, the preprocessor GEMA, by means of a target.pat file, will have translated your 
-    source file.f in a targeted source file.4th ready to download.
-    A set of .bat files is furnished to do this automatically. See it all in the \MSP430-FORTH folder.
+    Once the Fast Forth kernel is loaded in the target FRAM memory, you add assembly code or 
+    FORTH code, or both, by downloading your source files that the embedded FastForth interprets and
+    compiles.    
+    Beforehand, the preprocessor GEMA, by means of a \config\gema\target.pat file, will have translated
+    the generic source file.f in a targeted source file.4th. This allows the assembler to use
+    symbolic addresses for all peripheral registers without having to declare them in the embedded FORTH.
+    A set of .bat files in \MSP430-FORTH folder is furnished to do this automatically.
 
-    The download, interpretation and compilation of a source file.4th is done at a throughput
-    of 40/80/120 kbytes/sec with a 8/16/24 MHz clock. 
-    Considering a ratio 5/1, that of the compiled code is 8/16/24 kbytes/sec.
+    The download, interpretation and compilation of a source_file.4th (without comments) is done
+    at a throughput up to 40/80/120 kbytes/sec with a 8/16/24 MHz clock. 
+    Considering a ratio 4/1, that of the compiled code is 10/20/30 kbytes/sec.
 
-    After downloading of complementary words in ANS_COMP.f, FastForth executes CORETEST.4th without errors
-    which ensures its compatibility with the FORTH CORE ANS94 standard.
+    After downloading of complementary words in \MSP430-FORTH\ANS_COMP.f, FastForth executes CORETEST.4th
+    without errors which ensures its compatibility with the FORTH CORE ANS94 standard.
 
-    Notice that FAST FORTH interprets lines up to 80 chars, only SPACE as delimiter, only CR+LF as EOL,
-    and BACKSPACE. And that memory access is limited to 64 kbytes
-    You can always create FORTH words to access data beyond this limit...
+    Notice that FAST FORTH interprets lines up to 84 chars, only SPACE as delimiter, only CR+LF as
+    End Of Line, and BACKSPACE
+    And that the high limit of program memory is $FF80. 
 
-    Finally, using the SCITE editor as IDE, you can do everything from its "tools" menu.
+    Finally, using the SCITE editor as IDE, all is ready to do everything from its "tools" menu.
 
 What is new ?
 -------------
 
-    FastForth V208. -2 bytes.
+V209
 
-    Corrected LITERAL (double LITERAL part).
-    Added \MSP430-FORTH\CORDIC.f for its aficionados.
+    -26 bytes.
+    V3 prerelease
+    added experimental extended_assembler (MSP430FR5969,MSP430FR5994,MSP430FR6989)
+
+V208
 
+    -58 bytes.
+    Simplified directory structure of project.
+    Added switch DOUBLE_INPUT as kernel compilation ADDON, removed switch LOWERCASE.
+    Added \MSP430-FORTH\CORDIC.f for aficionados.
+    Added FastForthSpecs.4th which shows all specs of FastForth.
+    Corrected LITERAL (double LITERAL part).
+    Modified ACCEPT COLD WARM ?ABORT, S", QNUMBER.
 
-    FastForth V207. -50 bytes.
+V207 
 
+    -50 bytes.
     Unlocking I/O's is transfered from RESET to WARM.
     Thus, by redirecting WARM, you can add I/O's configuration of your application before unlock them.
 
         two options to do this:
     
-            Light option: your START application routine is inserted in WARM and continues with the default WARM. 
-            See START routine in the \MSP430_FORTH\IR_RC5.f file as application example.
+            Light option: 
+            your START routine is inserted in WARM and continues with the default WARM. 
+            Search "START" in the \MSP430_FORTH\IR_RC5.f file as application example.
 
             Complete option: 
-            START application routine replaces WARM and continues with ABORT (without WARM message).
+            START routine replaces WARM and continues with ABORT (without WARM message).
             In this case, you can also change the Reset events handling but you will need to unlock I/O's 
             and configure TERMINAL I/O's in your START routine. 
-            Search "activate I/O" in \MSP430_FORTH\RC5toLCD.f file application to see how to do.
+            Search "activate I/O" in \MSP430_FORTH\RC5toLCD.f file to see how to do.
      
     Bugs corrected in target.asm, target.pat and device.inc files.
 
-    FastForth V206
+V206
 
     The terminal baudrate can be changed on the fly. Download MSP430-FORTH\CHNGBAUD.f to test.
 
-        forthMSP430FR.asm: 
+    forthMSP430FR.asm: 
 
-             Bugs corrected: ALSO and :NONAME (option).
+         Bugs corrected: ALSO and :NONAME (option).
 
-             The structure of primary DEFERred words as KEY,EMIT,CR,WARM... is modified,
-                              -------
-             the address of their default execute part, without name, can be found with:
-             ' <name> >BODY
+         The structure of primary DEFERred words as KEY,EMIT,CR,WARM... is modified,
+                          -------
+         the address of their default execute part, without name, can be found with:
+         ' <name> >BODY
 
-                 example, after this entry: ' DROP IS KEY
-                 KEY (or ' KEY EXECUTE) runs DROP i.e. runs the redirection made by IS,
-                 ' KEY >BODY EXECUTE runs KEY, the default action at the BODY address.
+             example, after this entry: ' DROP IS KEY
+             KEY (or ' KEY EXECUTE) runs DROP i.e. runs the redirection made by IS,
+             ' KEY >BODY EXECUTE runs KEY, the default action at the BODY address.
 
-                 and: ' KEY >BODY IS KEY
-                 restore the default action of this primary DEFERred word.
-                                                    -------
+             and: ' KEY >BODY IS KEY
+             restore the default action of this primary DEFERred word.
+                                                -------
 
-                 WARNING! you cannot do that with words created by DEFER !
-                 DEFER creates only secondary DEFERred words, without BODY !
-                                    ---------
+        WARNING! you cannot do that with words created by DEFER !
+        DEFER creates only secondary DEFERred words, without BODY !
+                            ---------
 
-                 to build a primary DEFERred FORTH word, 
-                            -------
-                 you must create a DEFERred word followed by a
-                 :NONAME definition, ended by ; IS <name>
+        to build a primary DEFERred FORTH word, 
+                    -------
+        you must create a DEFERred word followed by a
+        :NONAME definition, ended by ; IS <name>
 
-                     DEFER truc
+             DEFER truc
 
-                     :NONAME         \ does nothing (for the example)
-                         DUP
-                         DROP
-                     ; IS truc
+             :NONAME         \ does nothing (for the example)
+                 DUP
+                 DROP
+             ; IS truc
 
-                 The advantage of creating primary DEFERred words is to set their
-                 default state, enabling to reinitialize them easily.
+        The advantage of creating primary DEFERred words is to set their
+        default state, enabling to reinitialize them easily.
 
-        forthMSP430FR_ASM.asm:
+    forthMSP430FR_ASM.asm:
 
-                All assembly code is revamped.
+        All assembly code is revamped.
 
-                POPM and PUSHM instructions now follow the TI syntax :-(
+        POPM and PUSHM instructions now follow the TI syntax :-(
 
-                Added CODENNM as assembly counterpart of :NONAME (option)
+        Added CODENNM as assembly counterpart of :NONAME (option)
 
-                    to build the primary DEFERred assembly word "machin" :
-                                 -------
+        to build the primary DEFERred assembly word "machin" :
+                     -------
 
-                        DEFER machin
+            DEFER machin
 
-                        CODENNM
-                            NOP2        \ assembly instruction
-                            NOP3        \ assembly instruction
-                            MOV @IP+,PC \ mandatory before ENDCODE
-                        ENDCODE IS machin
+            CODENNM
+                NOP2        \ assembly instruction
+                NOP3        \ assembly instruction
+                MOV @IP+,PC \ mandatory before ENDCODE
+            ENDCODE IS machin
 
-                    you can obviously mix LOW/HIGH levels in CODENNM and :NONAME areas...
+        you can obviously mix LOW/HIGH levels in CODENNM and :NONAME areas...
 
+V205
 
-    FastForth V205
-        Added MSP-EXP430FR2355 launchpad
-        Added word :NONAME (option).
-        FastForth terminal via Bluetooth v2.1 + EDR (Microchip RN42) works fine in full duplex mode,
-        up to 460800bds, 4 WIRES (GND,RX,TX,RTS); but with, as wireless effect, a bad troughput of 6kb/s
-        instead of 30kb/s with a bridge UART2USB.
-        Added 4Mbds,5Mbds terminal @16MHZ, for use with UART2USB PL2303HXD.
-        Words AND, OR, XOR are moved as complement in ANS_COMP.f file.
-        Simplified preprocessor files in \config\gema\ folder: only two for one target:
-            one for the device, other for the target (launchpad or user application/module).
-            and similarly with the assembly files: Device.inc and Target.asm, for compiling FastForth.
-        Corrected startup time in target.asm files.
-        Modified Clock config in MSP_EXP430FR2433.asm and MSP_EXP430FR4133.ASM, allowing clock modulation.
+    Added MSP-EXP430FR2355 launchpad
+    Added word :NONAME (option).
+    FastForth terminal via Bluetooth v2.1 + EDR (Microchip RN42) works fine in full duplex mode,
+    up to 460800bds, 4 WIRES (GND,RX,TX,RTS); but with, as wireless effect, a bad troughput of 6kb/s
+    instead of 30kb/s with a bridge UART2USB.
+    Added 4Mbds,5Mbds terminal @16MHZ, for use with UART2USB PL2303HXD.
+    Words AND, OR, XOR are moved as complement in ANS_COMP.f file.
+    Simplified preprocessor files in \config\gema\ folder: only two for one target:
+        one for the device, other for the target (launchpad or user application/module).
+        and similarly with the assembly files: Device.inc and Target.asm, for compiling FastForth.
+    Corrected startup time in target.asm files.
+    Modified Clock config in MSP_EXP430FR2433.asm and MSP_EXP430FR4133.ASM, allowing clock modulation.
 
+V202
 
-    FastForth V202
-        added the line number in case of error occurring when download a file.f|file.4th
-        in the new HALFDUPLEX mode (scite command CTRL+2) or in default NOECHO mode (scite cmd CTRL+0).
-        However, in case of download a file.f (with preprocessing), this line number refers
-        to the contents of the file named LAST.4th.
-    
-    FastForth V201
+    added the line number in case of error occurring when download a source file (*f,*.4th)
+    in HALFDUPLEX mode (scite command CTRL+2) or in default NOECHO mode (scite cmd CTRL+0).
+    However, in case of download a file.f (with preprocessing), this line number refers
+    to the contents of the file named LAST.4th.
+
+V201
 
     modified OPEN file primitive in forthMSP430FR_SD_LOAD.asm; modified forthMSP430FR_SD_INIT.asm
     reordered files preprocessor in only one folder.
@@ -176,14 +203,12 @@ What is new ?
     Note that with MSP430FR57xx family, SDIB uses PAD, due to lack of RAM.
     
     With the BOOTLOADER option, QUIT becomes a DEFERed word to easily enable/disable bootloader:
-    ' BOOT IS QUIT     enables bootloader.
-    ' (QUIT) IS QUIT   disables bootloader.
-
-    Same logic as QUIT, ACCEPT is a DEFERed word only with SD_CARD_LOADER option. 
+    ' BOOT IS QUIT enables bootloader.
+    ' QUIT >BODY IS QUIT disables bootloader.
 
     Added QUIETBOOT option to enable BOOT without displaying; use with care...
-    
-    V162.
+
+V162
 
     Added a set of words to enable conditional interpretation/compilation : MARKER [DEFINED] [UNDEFINED] 
     [IF] [ELSE] [THEN]. A MARKER word (defined as {word} to well see it) allows you to wipe some program 
@@ -195,8 +220,7 @@ What is new ?
 
     Added a bootloader option which loads BOOT.4TH from SD_Card memory.
 
-
-       V161.
+V161
 
     SD_Card driver works also with software multiplier (with MSP430FR4133)
     added SLEEP and (SLEEP) words enabling user access to background task, 
@@ -404,7 +428,8 @@ remember its shared name i.e. : //myPC/users/my/FastForth.
 in file explorer then right clic on root to connect a network drive, copy shared name in drive name 
 and choose a free drive letter a:, b: ...
 
-Thus all relative paths will be linked to this drive, except the three \MSP430-FORTH\files.bat links.
+Thus all relative paths will be linked to this drive, except the three \MSP430-FORTH\files.bat 
+and \binaries\prog.bat links.
 For all of them right clic select, select properties then check drive letter in target.
 
 WARNING! if you erase a file directly in this drive or in one of its subfolders, no trash, the file is lost!
@@ -416,28 +441,28 @@ Minimal Software
 
 If you are under WINDOWS :
 
-       First, you download the TI's programmer from TI : http://www.ti.com/tool/MSP430-FLASHER.
-       And the MSP430Drivers : 
-       http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430_FET_Drivers/latest/index_FDS.html
+    First, you download the TI's programmer from TI : http://www.ti.com/tool/MSP430-FLASHER.
+    And the MSP430Drivers : 
+    http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430_FET_Drivers/latest/index_FDS.html
 
-       The next tool is TERATERM.EXE : http://logmett.com/index.php?/products/teraterm.html.
-       
-       As scite is my editor, this github repository is fully configured for scite users.
+    The next tool is TERATERM.EXE : https://osdn.net/projects/ttssh2/releases/
+    
+    As scite is my editor, this github repository is fully configured for scite users.
     download the single file executable called sc1 (not the full download! ) :
-    http://www.scintilla.org/SciTEDownload.html, then save it as \prog\wscite\scite.exe.
+    http://www.scintilla.org/SciTEDownload.html, then save it as \prog\scite.exe.
 
-       download GEMA preprocessor : https://sourceforge.net/projects/gema/files/gema/gema-1.4-RC/
+    download GEMA preprocessor : https://sourceforge.net/projects/gema/files/gema/gema-1.4-RC/
 
-       The MacroAssembler AS : http://john.ccac.rwth-aachen.de:8000/as/
+    The MacroAssembler AS :    http://john.ccac.rwth-aachen.de:8000/as/
 
-       and Srecord : http://srecord.sourceforge.net/download.html to convert HEX file to TI TXT files.
+    and Srecord : http://srecord.sourceforge.net/download.html to convert HEX file to TI TXT files.
 
-       copy last 3 items onto their respective \prog subfolder. 
+    copy last 3 items onto \prog subfolder. 
 
-       ask windows to open .asm, .inc, lst, .mac, .4th, .f, .pat files with scite.exe
+    ask windows to open .asm, .inc, lst, .mac, .4th, .f, .pat files with scite.exe
        
 
-If you are linux or OS X men, try virtualbox...
+If you are linux or OS X men, see FastForth.pdf.
 
 
 Build the program file
@@ -446,18 +471,9 @@ Build the program file
 
 \forthMSP430FR.asm is the main file to compile FastForth. It calls :   
 
-       - mspregister.mac that defines the TI symbolic instructions,
-       - Target.inc that defines for each device the eUSCI used as Terminal
-         and then selects the declarations file target.inc, 
-       - ForthThreads.mac in case of multithread vocabularies,
-       - optionally, forthMSP430FR_SD.asm file(s) for SD_Card,
-       - optionally, forthMSP430FR_ASM.asm for assembler,
-       - Target.asm that selects the target.asm,
-       - and then TERMINALBAUDRATE.asm.
-
 open forthMSP430FR.asm with scite editor
 
-uncomment the target as you want, i.e. MSP_EXP430fr5969
+uncomment the target as you want, i.e. MSP_EXP430FR5969
 
 choose frequency, baudrate, UART handshake.
 
@@ -469,15 +485,15 @@ assemble (CTRL+0). A window asks you for 4 parameters:
 
 set target as first param, i.e. MSP_EXP430FR5969,
 
-then execute. the output will be MSP_EXP430FR5969.txt
+then execute. the output will be \binaries\MSP_EXP430FR5969.txt
 
 
 
 Load Txt file (TI format) to target
 -----------------------------------
 
-       drag your target.txt file and drop it on prog.bat
-
+    in \binaries folder, drag your target.txt file and drop it on prog.bat
+    
     or use scite internal command TOOLS: FET prog (CTRL+1).
 
 nota : programming the device use SBW2 interface, so UART0 is free for serial terminal use.
@@ -493,11 +509,8 @@ Connect the FAST FORTH target to a serial terminal
 you will need an USBtoUART cable with a PL2303TA or PL2303HXD device that allows both XON/XOFF 
 and hardware control flow :
 
-       http://www.google.com/search?q=PL2303TA
-       http://www.google.com/search?q=PL2303HXD
-    WARNING! XON/XOFF no longer works with new Prolific driver v3.8.12.0 (03/03/2017)...
-             Waiting next update, get on web previous PL2303_Prolific_DriverInstaller_v1160.exe (or .zip)
-
+    http://www.google.com/search?q=PL2303TA
+    http://www.google.com/search?q=PL2303HXD
 
 or USBtoUART bridge, with a CP2102 device and 3.3V/5V that allows XON/XOFF control flow :
 
@@ -656,7 +669,7 @@ Drive letters are always ignored.
 Downloading source file to SD_Card
 ------------------------------------------
 
-to download a source file (.f or .4th) onto SD_CARD target, use CopySourceFileToTarget\_SD\_Card.bat.
+to download a source file (.f or.4th) onto SD_CARD target, use CopySourceFileToTarget\_SD\_Card.bat.
 or use scite.
 Double click on one of this bat files to see how to do.
 
@@ -682,8 +695,6 @@ In fact, it's the the assembler that requires the vocabularies management.
 
 Recognizing prefixed numbers %101011 (bin), $00FE (hex) and #220 (decimal).
 
-CAPS ON/OFF add on
-
 ECHO / NOECHO
 
 The words DEFER and IS are implemented. CR, EMIT, KEY, ACCEPT, QUIT and WARM are deferred words.
@@ -713,10 +724,10 @@ Equivalent word : COLD + WIPE.
 Here is the FastForth init architecture :
 
        case 0 : when you type WARM, FORTH interpreter is restarted, no program lost. 
-                        if ECHO is on, the WARM display is preceded by "0", else no display
+                        the WARM display is preceded by "#0"
 
        case 1 : Power ON ==> performs reset and the program beyond PWR_HERE is lost.
-                        if ECHO is on, the WARM display is preceded by the SYSRSTIV value "2", else no display.
+                        the WARM display is preceded by the SYSRSTIV value "#2".
 
        case 1.1 : when you type PWR_STATE ==> the program beyond PWR_HERE is lost.
 
@@ -727,10 +738,10 @@ Here is the FastForth init architecture :
                a source file with at least PWR_HERE to protect it against any subsequent error.
 
        case 2 : <reset>  ==> performs reset and the program beyond RST_HERE is lost.
-                        if ECHO is on, the WARM display is preceded by the SYSRSTIV value "4", else no display.
+                        the WARM display is preceded by the SYSRSTIV value "#4".
        
        case 2.1 : when you type COLD (software reset) ==> same effects.
-                          if ECHO is on, the WARM display is preceded by the SYSRSTIV value "6", else no display.
+                          the WARM display is preceded by the SYSRSTIV value "#6".
 
        case 2.2 : when you type RST_STATE ==> the program beyond RST_HERE is lost.
 
@@ -747,11 +758,11 @@ Here is the FastForth init architecture :
        case 4.2 : writing -1 in SAVE_SYSRSTIV before COLD = software DEEP_RST ===> same effects
                           The WARM display is preceded by "-1".
 
-       case 5 : after FAST FORTH core compilation, the WARM displays SAVE_SYSRSTIV = 3. User may use this
+       case 5 : after FAST FORTH core compilation, the WARM displays SAVE_SYSRSTIV = 5. User may use this
              information before WARM occurs.
 
 
-If SD\_CARD extention and SD\_CARD memory with \BOOT.4TH included, the cases 1 to 4 start it 
+If SD\_CARD extention and SD\_CARD memory with \BOOT.4TH included, the cases 1 to 4 starts it 
 after displaying of WARM message. 
 
 
@@ -786,9 +797,8 @@ EMBEDDED ASSEMBLER
 ======
 
 With the preprocessor GEMA the embedded assembler allows access to all system variables. 
-See files \\config\\gema\\MSP430FRxxxx\_FastForth.pat. 
-You can also access to VARIABLE, CONSTANT or DOES type words.
-see \MSP430-FORTH\TESTASM.4th.
+See files \\inc\\Target.pat. 
+You can also access to VARIABLE, CONSTANT or DOES type words. See \\MSP430-FORTH\\TESTASM.4th.
 
 
 
@@ -797,9 +807,9 @@ HOW TO MIX assembly and FORTH ?
 
 FAST FORTH knows two kinds of words :
 
-    low level assembly words starting with CODE <name> and end with ENDCODE.
+    low level assembly words starting with CODE <name> and ended with ENDCODE.
 
-    high level FORTH words beginning with : <name> and end with ;
+    high level FORTH words beginning with : <name> and ended with ;
 
 
 Examples
@@ -822,7 +832,7 @@ This faster (4 cycles) and shorter (one word) instruction replaces the famous pa
 instructions : CALL #LABEL ... RET (4+4 cycles, 2+1 words). The register IP is the Interpretative Pointer. 
 
 High level FORTH word starts with a boot code DOCOL that save the IP pointer, load it with the first address
-of a list of execution addresses, then perform a postincrement branch to this first address. 
+of a list of execution addresses, then performs a postincrement branch to this first address. 
 The list ends with the address of another piece of code EXIT (6 cycles) that restores IP before the instruction MOV @IP+,PC.
 
 
@@ -835,8 +845,7 @@ here, the compilation of low level word ADD :
 and the one of the high level word NOOP :
 
                     header          \ compiled by the word :
-    execution addr  PUSH IP         \ boot code compiled by the word :
-                    CALL rEXIT      \ boot code compiled by the word :
+    execution addr  CALL rDOCOL     \ boot code compiled by the word :
                     addr of DUP     \ execution addr of DUP
                     addr of DROP    \ execution addr of DROP
                     addr of EXIT    \ execution addr of EXIT compiled by the word ;
@@ -887,8 +896,7 @@ A little more complex, the case of mixing FORTH and assembly that is enabled by
 If we see the code "MIX\_FORTH\_ASM" after compilation :
 
             header              \ compiled by :
-    exec@   PUSH IP             \ save IP compiled by :
-            CALL rEXIT          \ execute EXIT compiled by :
+    exec@   CALL rDOCOL         \ boot code compiled by the word :
             addr                \ execution addr of SWAP
             addr                \ execution addr of DUP
             next addr           \ addr of asm1, compiled by HI2LO
@@ -918,24 +926,10 @@ If we see this code "MIX\_ASM\_FORTH" after compilation :
             header              \ compiled by CODE
     exec@   asm1                \ assembly instruction 1
             asm2                \ assembly instruction 2
-            PUSH IP             \ save IP compiled by COLON
-            CALL rEXIT          \ execute EXIT compiled by COLON
+            CALL rDOCOL         \ compiled by COLON
             addr1               \ of word1
             addr2               \ of word2
-            addr of EXIT        \ the word ; compiles EXIT that restores IP then executes MOV @IP+,PC
-
-
-EXIT is used twice !
-
-the first time, at the start of FORTH word, after save IP:
-
-    EXIT    MOV @RSP+,IP    \ 2 pop into IP the PC pushed on return stack by CALL rEXIT
-            MOV @IP+,PC     \ 4 execute the routine at addr1 next "CALL rEXIT" 
-
-then at the end of FORTH word :
-
-    EXIT    MOV @RSP+,IP    \ 2 pop old IP from return stack
-            MOV @IP+,PC     \ 4 execute the routine pointed by the old IP
+            addr of EXIT        \ the word ; compiles address of EXIT that restores IP then executes MOV @IP+,PC
 
 
 A new step
@@ -956,8 +950,7 @@ A new step
 the compiled result    
 
             header              \ compiled by :
-    exec@   PUSH IP             \ save IP compiled by :
-            CALL rEXIT          \ move next PC from return stack into IP, compiled by :
+    exec@   CALL rDOCOL         \ boot code compiled by the word :
             addr1               \ of word1
             addr2               \ of word2
             ...
@@ -965,11 +958,24 @@ the compiled result
             MOV #0,IP           \ IP is free for use
             asm1                \ assembly instruction
             ...
-            CALL rEXIT          \ compiled by LO2HI (10 cycles switch)
+            CALL #EXIT          \ compiled by LO2HI (10 cycles switch)
             addr3               \ of word3
             addr4               \ of word4
             addr5               \ of EXIT
 
+EXIT is used twice !
+
+the first time, by LO2HI :
+
+    EXIT    MOV @RSP+,IP    \ 2 pop into IP the PC pushed on return stack by CALL #EXIT
+            MOV @IP+,PC     \ 4 execute the routine at addr3 
+
+then at the end of FORTH word (addr5):
+
+    EXIT    MOV @RSP+,IP    \ 2 pop old IP from return stack
+            MOV @IP+,PC     \ 4 execute the routine pointed by the old IP
+
+
 Still another step : 
 
         CODE MIX_ASM_FORTH_ASM  \ CODE starts a low level word
@@ -1010,14 +1016,13 @@ with the compiled result :
             header              \ compiled by CODE
     exec@   asm
             asm
-            PUSH IP             \ compiled by COLON
-            CALL rEXIT          \ compiled by COLON
+            CALL rDOCOL         \ compiled by COLON
             addr
             addr
             next address        \ compiled by HI2LO
             asm
             asm
-            CALL rEXIT          \ compiled by LO2HI
+            CALL #EXIT          \ compiled by LO2HI
             addr
             addr
             EXIT addr           \ that restores IP from return stack and then executes MOV @IP+,PC
@@ -1029,7 +1034,7 @@ ASSEMBLER WITHOUT LABELS ? YES !
 ---
 
 To compare AS macro assembler and FastForth embedded assembler,
-compare files /ADDON/fixpoint.asm and /MSP430-FORTH/FIXPOINT.f
+compare files \ADDON\FIXPOINT.asm and \MSP430-FORTH\FIXPOINT.f
 
 The syntax of FastForth assembler borrows FORTH's one :
 
@@ -1088,7 +1093,7 @@ infinite loop :
         AGAIN               \ unconditionnal loop back to BEGIN 
     ENDCODE
 
-to quit this infinite loop, press <reset> 
+to quit this infinite loop, press reset. 
 
 
 We can nest several conditional branches :
@@ -1135,7 +1140,7 @@ unconditionnal backward jump :
         CODE UNCOND_BACKWARD
             asm
             asm
-            JMP TEST        \ jump backward to the predefined word TEST
+            JMP TEST_NESTED_BEGIN_AGAIN_IF  \ jump backward to a predefined word
         ENDCODE
 
 conditionnal backward jump :
@@ -1143,7 +1148,7 @@ conditionnal backward jump :
         CODE COND_BACKWARD
             asm
             CMP #0,R8
-            S< ?JMP TEST    \ jump backward to TEST if negative
+            S< ?JMP TEST_NESTED_BEGIN_AGAIN_IF    \ jump backward if negative
             asm
             MOV @IP+,PC
         ENDCODE
@@ -1188,52 +1193,45 @@ SYMBOLIC ASSEMBLER ? YES !
 
 I have discovered a little semantic preprocessor "GEMA", just like that FAST FORTH have its symbolic assembler !
 
-    \config\gema\DEVICE.pat contains memory map and vectors for a specified DEVICE
-    \config\gema\LAUNCHPAD.pat is the I/O config file for specific LAUNCHPAD (or application)
+    \inc\DEVICE.pat contains memory map and vectors for a specified DEVICE
+    \inc\LAUNCHPAD.pat is the I/O config file for specific LAUNCHPAD (or application)
 
 gema translates also FORTH registers in ASM registers (R0 to R15)
 
-If you have created a network drive from your local gitlab directory, it's easy :
-with scite editor open a file.f, then select in the menu "tools" the items "preprocess..." 
-
-furnished examples : see \MSP430-FORTH\
-Enjoy !
+With the three bat files in \MSP-430 folder all is done automatically.
 
 
 COMPILE FAST FORTH FOR YOUR MODULE
 --
 
-The principle is to create (or modify) first existing configuration files only to compile FAST FORTH.
+1- in forthMSP430FR.asm "TARGET configuration"  create a line for your target, example:
 
-1- in forthMSP430FR.asm "TARGET configuration SWITCHES"  create a line for your target, example:
+    ;MY_MSP430FR5738_1 ; compile for my own MSP430FR5738 miniboard V1
 
-    ;MY_MSP430FR5738_1 ; compile for my own MSP430FR5738 miniboard
+2- create your \inc\MSP430FR5738_1.asm and \inc\MSP430FR5738.inc from another target.asm and device.inc as pattern, 
+Notice that you must define here only the necessary for FAST-FORTH compilation.
 
-2- in Target.inc add one item:
+3- in \inc\ThingsInFirst.inc add one "device.inc" item:
 
         .IFDEF MY_MSP430FR5738_1
-        .warning "Code for MY_MSP430FR5738_1"
-    DEVICE = "MSP430FR5738" ; for target.inc file below, defines your device
-    UCA0_UART   ; for target.inc file below, defines uart used by FORTH input terminal 
-    LF_XTAL     ; for target.inc file below, defines if your module have a 32768 Hz xtal, to enable it.
-    UCB0_SD     ; for target.inc file below, defines UC used for SD Card driver if used
+    UCA0_UART   ; defines uart used by FORTH input terminal 
+    LF_XTAL     ; defines if your module have a 32768 Hz xtal, to enable it.
+    UCB0_SD     ; defines UC used for SD Card driver if used
         .include "MSP430FR5738.inc"  ; include device declarations
-        .ENDIF  ; MY_MSP430FR5738_1
+        .ENDIF
 
-3- also include an new item in Target.asm:
-    .IFDEF MY_MSP430FR5738_1
-    .include "MY_MSP430FR5738_1.asm"
-    .ENDIF
+4- in \inc\TargetInit.asm add one "target.asm" item: 
 
-4- create your MSP430FR5738_1.asm (and MSP430FR5738.inc) from another target.asm and device.inc as model, 
-then customize declarations.
+        .IFDEF MY_MSP430FR5738_1
+            .include MY_MSP430FR5738_1.asm
+        .ENDIF
 
 
-Then, for the needs of syntactic preprocessor:
+Then, for the preprocessor which you will use when downloading source files:
 
-1- create a \config\gema\device.pat file if not exist, to do a mix from your device.inc file and another analog device.pat.
+1- create your \inc\device.pat file if not exist, from your \inc\device.inc and another \inc\device.pat as pattern.
 
-2- create your \config\gema\target.pat file from target.asm file.
+2- create your \inc\target.pat file from your \inc\target.asm and another \inc\target.pat as pattern.
 
 Best practice, I suggest you that all digital pins you define (input or output) in your projects have their idle state high, with external pull up resistor
 that is the reset state of FastForth...
@@ -1250,7 +1248,7 @@ First you create two files : project.f and test.f
 PROJECT.f :
 
     ; ----------------------------------------------------
-    ; MSP430FR5969 MSP_EXP430FR5969 8MHZ 921600bds PROJECT
+    ; MSP430FR5969 MSP_EXP430FR5969 8MHZ 921600bds PROJECT.f
     ; ----------------------------------------------------
 
     [DEFINED] {PROJECT} [IF] {PROJECT} [THEN] \ remove {PROJECT} if exist (memory managment)
@@ -1266,13 +1264,13 @@ here you append your already tested routines :
     ENCODE
 
     ASM TWO     \ assembler ASM words are not FORTH executable and can only be used in assembler mode
-        ...     \ used to define interrupt routines, or subroutines as here.
-    RET
+        ...     \ used to define interrupt routines, or subroutines called by CALL...
+    RET         \ and ended by RET or RETI.
     ENDASM
 
     CODE THREE
         ...
-    CALL #TWO   \ CALL only ASM words (finishing with RET(I))...
+    CALL #TWO   \ CALL only ASM words
         ...
     MOV @IP+,PC \ NEXT
     ENCODE
@@ -1281,7 +1279,7 @@ here you append your already tested routines :
         ...
         ...
     BIC #WDTIFG,&SFRIFG1    \ reset WDT_INT flag
-    BIC #$F8,0(RSP)         \ set CPU ON and GIE OFF in retiSR
+    BIC #$F8,0(RSP)         \ set CPU ON and GIE OFF in saved SR
     RETI                    \   
     ENDASM
 
@@ -1295,7 +1293,7 @@ then finish with this 2 "magic" words plus one optional : START, STOP and option
         ...
         ...
     BIS &LPM_MODE,SR        \
-    JMP BW1
+    GOTO BW1
     ENDASM                  \
 
 
@@ -1306,6 +1304,8 @@ then finish with this 2 "magic" words plus one optional : START, STOP and option
         ...                 \ init assembly part
     MOV #WDT_INT,&VEC_WDT   \ init WDT vector interrupt
         ...
+    BIC #RC5,&P1REN         \ init I/O
+        ...
 
     MOV #SLEEP,X            \ redirect default background task to yours (optional)
     MOV #BACKGROUND,2(X)    \
@@ -1313,14 +1313,15 @@ then finish with this 2 "magic" words plus one optional : START, STOP and option
     COLON
         ...                 \ init FORTH part
     
-        LIT RECURSE IS WARM \ replace (WARM) as part of FORTH init by START in the FORTH init process
-        ABORT               \ then end the FORTH init process.
-    ;
+        LIT RECURSE IS WARM \ replace WARM by START
+        ['] WARM >BODY      \ and end START with default WARM
+        EXECUTE             \ that unlock I/O, start FORTH process
+    ;                       \ then fall down to sleep state, waiting any interrupt...
 
 
     CODE STOP               \ to properly stop your app
         MOV #SLEEP,X        \ restore the default background (optional)
-        ADD #4,X            \ (word SLEEP can only be used in assembler, not in FORTH)
+        ADD #4,X            \ (word SLEEP can only be seen in assembler mode, not in FORTH)
         MOV X,-2(X)
     COLON
         ['] WARM >BODY
@@ -1338,10 +1339,10 @@ end of file
 
 
 Each time you download this project file, the word {PROJECT} removes all subsequent definitions,
-and the word RST_HERE protects the PROJECT against <RESET\>
+and the word RST_HERE protects the PROJECT against RESET
 
-The word START allows to include your app init into FORTH's one.
-The word STOP unlink your app.
+The word START allows you to include your app init into FORTH's one.
+The word STOP unlink your app from FORTH init process.
 
 Look at the file RC5toLCD.f to retrieve this structure.
 
@@ -1394,10 +1395,10 @@ REGISTERS correspondence (the preprocessor gema.exe allow you to use FASTFORTH o
         R1          SP      RSP         Return Stack Pointer
         R2          SR/CG1              Status Register/Constant Generator 1
         R3          CG2                 Constant Generator 2
-        R4          R4      rDODOES     contents address of xdodoes   
-        R5          R5      rDOCON      contents address of xdocon    
-        R6          R6      rDOVAR      contents address of RFROM           
-        R7          R7      rEXIT       contents address of EXIT            
+        R4          R4      R (rDODOES) contents address of xdodoes   
+        R5          R5      Q (rDOCON)  contents address of xdocon    
+        R6          R6      P (rDOVAR)  contents address of RFROM           
+        R7          R7      M (rDOCOL)  contents address of xDOCOL (DTC=1|2)            
         R8          R8      Y           scratch register
         R9          R9      X           scratch register
         R10         R10     W           scratch register
@@ -1409,8 +1410,14 @@ REGISTERS correspondence (the preprocessor gema.exe allow you to use FASTFORTH o
 
 REGISTERS use
 
-    The FASTFORTH registers rDOCOL, rDOVAR, rDOCON and rDODOES must be preserved, 
-    PUSHM #4,R7 before use and POPM #4,R7 after.
+    The FASTFORTH registers rDOCOL, rDOVAR, rDOCON and rDODOES must be preserved. 
+    If you use them you can either PUSHM #4,M before and POPM #4,M after,
+    or by restoring after use their FastForth default values:
+    xdocol, xdovar, xdocon, xdodoes. See device.pat.
+    
+    But if you use this registers you must not at the same time use any FORTH words
+    created by them! 
+    
     don't use R3 and use R2 only with BIC, BIT, BIS instructions in register mode.
 
 
@@ -1418,59 +1425,59 @@ PARAMETERS STACK use
 
     The register TOS (Top Of Stack) is the first cell of the Parameters stack. 
     The register PSP (Parameters Stack Pointer) points the second cell.
-
+    
     to push one cell on the PSP stack :
-
+    
         SUB #2,PSP                  \ insert a empty 2th cell
         MOV TOS,0(PSP)              \ fill this 2th cell with first cell
         MOV <what you want>,TOS     \ MOV or MOV.B <what you want>,TOS ; i.e. update first cell
-
+    
     to pop one cell from the PSP stack :
-
+    
         MOV @PSP+,TOS               \ first cell TOS is lost and replaced by the 2th.
-
+    
     don't never pop a byte with instruction MOV.B @PSP+, because generates a stack misalignement...
 
 RETURN STACK use
 
     register RSP is the Return Stack Pointer (SP).
-
+    
     to push one cell on the RSP stack :
-
+    
         PUSH <what you want>        \
-
+    
     to pop one cell from the RSP stack :
-
+    
         MOV @RSP+,<where you want>   \
-
+    
     don't never pop a byte with instruction MOV.B @RSP+, ...
 
 
     to push multiple registers on the RSP stack :
-
+    
         PUSHM #n,Rx                 \  with 0 <= x-(n-1) < 16
-
+    
     to pop multiple registers from the RSP stack :
-
+    
         POPM #n,Rx                  \  with 0 <= x-(n-1) < 16
-
+    
     PUSHM order : PSP,TOS, IP,  S,  T,  W,  X,  Y, rEXIT,rDOVAR,rDOCON, rDODOES, R3, SR,RSP, PC
     PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8,  R7  ,  R6  ,  R5  ,   R4   , R3, R2, R1, R0
-
+    
     example : PUSHM #6,IP pushes IP,S,T,W,X,Y registers to return stack
-
+    
     POPM  order :  PC,RSP, SR, R3, rDODOES,rDOCON,rDOVAR, rEXIT,  Y,  X,  W,  T,  S, IP,TOS,PSP
     POPM  order :  R0, R1, R2, R3,   R4   ,  R5  ,  R6  ,   R7 , R8, R9,R10,R11,R12,R13,R14,R15
-
+    
     example : POPM #6,IP   pulls Y,X,W,T,S,IP registers from return stack
-
+    
     error occurs if n is out of bounds
 
 
 CPUx instructions RRCM,RRAM,RLAM,RRUM
     
     example : RRUM #3,Y      \ Y (R8) register is Unsigned Right shifted by n=3
-
+    
     error occurs if 1 > n > 4