-Fast Forth For MSP430FRxxxx TI's chips
-======================================
+FastForth for MSP430FRxxxx TI'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 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!
+However, if the IDE works well with Windows 10, it works less well with Linux which suffers from the lack of a good alternative to TERATERM...
+
+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 kernel options, including extended_ASM, FastForth size is 11kB.
+
+ 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|ISO7421E, 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\FF_SPECS.4th.
+
+ 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 all this automatically.
+ The download, interpretation and compilation of a source_file.4th (without comments) is done
+ at a throughput of 40/80/120 kbytes/s with a 8/16/24 MHz clock and at maximum allowed baudrate.
+ Considering a ratio 5/1, that of the compiled code is 8/16/24 kbytes/s.
-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!
+ 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.
-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...
+ 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 FORTH program memory is $FF80.
-With all options its size is about 10kB.
+ Finally, using the SCITE editor as IDE, all is ready to do everything from its "tools" menu.
- Tested on MSP-EXP430{FR5969,FR5994,FR6989,FR4133,FR2355,FR2433} launchpads and CHIPSTICKFR2433,
- at 0.5, 1, 2, 4, 8, 16 MHz and 24MHz on FR2355.
+What is new ?
+-------------
- For the moment, the IDE works under WINDOWS...
-
- Files launchpad_3Mbds.txt are 16threads vocabularies 16MHz executables, with 3MBds XON/XOFF terminal,
- Launchpad_115200.txt files are same except 115200Bds for unlucky linux men without TERATERM.
- For the launchpad MSP-EXP430FR5994 with SD_CARD, full version is available. For others, you must
- recompile forthMSP430FR.asm with SD_CARD_LOADER and SD_CARD_READ_WRITE switches turned ON
- (uncomment their line).
+V300
- 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.
+ -4 bytes.
+ The prompt "ok" becomes a compilation option.
+
+ Taking into account the digit separator '_' in ?NUMBER, to better see when typing binary words.
+ example: %1010100011000111 can be typed as well: %1010_1000_1100_0111
- 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.
+ Corrected >NUMBER
+
+ Modified GetFreeHandle CloseHandle
+
+ Tested with BLE 5.0 terminal (a couple of BGX13P EVK) at 16MHz, 921600 bds + terminal 5 wires:
+ download throughput = 5 kbytes/s (and with errors when ECHO is ON), disappointing...
+ (Bluetooth 2.1 terminal with one RN42 works well).
+
+ RePeaTed instructions RRUX,RRCX,RLAX,ADDX,SUBX work fine! See TESTASMX.4TH
- 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.
- 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.
+V209
- 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...
+ -26 bytes.
+ V3 prerelease
+ added experimental extended_assembler (MSP430FR5969,MSP430FR5994,MSP430FR6989)
- Finally, using the SCITE editor as IDE, you can do everything from its "tools" menu.
+V208
-What is new ?
--------------
+ -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 FF_SPECS.4th to show all specificities of FastForth compilation.
+ Corrected LITERAL (double LITERAL part).
+ Modified ACCEPT COLD WARM ?ABORT, S", QNUMBER.
+
+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.
- 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,
- 921600bds, 4 wires (GND,RX,TX,RTS).
- Added 4Mbds,5Mbds terminal @16MHZ, for use with PL2303HXD UART2USB bridge.
- Words AND, OR, XOR are moved as complement in ANS_COMP.f file.
- Simplified preprocessor files: two preprocess files for one module:
- one for device, other for user_application/module.
- Corrected startup time in target.asm files.
- Modified Clock config in MSP430FR2433.asm and MSP430FR4133.ASM, allowing clock modulation.
-
-
- 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.
+ two options to do this:
- FastForth V201
+ 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 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 to see how to do.
+
+ Bugs corrected in target.asm, target.pat and device.inc files.
+
+V206
+
+ The terminal baudrate can be changed on the fly. Download MSP430-FORTH\CHNGBAUD.f to test.
+
+ forthMSP430FR.asm:
+
+ 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
+
+ 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.
+ -------
+
+ 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>
+
+ DEFER 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.
+
+ forthMSP430FR_ASM.asm:
+
+ All assembly code is revamped.
+
+ POPM and PUSHM instructions now follow the TI syntax :-(
+
+ Added CODENNM as assembly counterpart of :NONAME (option)
+
+ to build the primary DEFERred assembly word "machin" :
+ -------
+
+ DEFER 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...
+
+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.
+
+V202
+
+ 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.
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
- even if loaded in memory below RST_STATE boundary. See conditional compilation source files
- in \MSP430-FORTH.
+ even if loaded in memory below RST_STATE boundary.
All interpretation/compilation errors now execute POWER_STATE, so any incorrect definition
and all its source file will be automatically erased.
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,
+ added SLEEP word enabling user access to background task,
see ACCEPT in forthMSP430FR.asm and see use in RC5toLCD.f
You can type double numbers by inserting a decimal point.
Example : $-12 is processed as 16 bits negative number.
$-.12 or $-1.2 or $-12. are processed as 32 bits negative numbers.
- FAST FORTH V160, major version.
+ FAST FORTH V160, major version.
Accept SD_Card from 64 MB (FAT16) up to 64 GB (FAT32).
Note that Windows 10 no longer offers the FAT32 format for the highest sizes of SD_CARD memory.
So you must use an alternative to do, for example: https://www.partitionwizard.com.
- in SD_TOOLS the word SECT_D (dump sector) use a 32 bits number.
- added the word CLUST_D (dump first sector of a cluster).
- Usage (notice the point): number. CLUST_D
+ in SD_TOOLS the word SECTOR dumps a sector (use a 32 bits number).
+ the word CLUSTER dumps first sector of a cluster.
+ Usage (notice the point): number. CLUSTER or number. SECTOR
PREVIOUS versions
-
+
Added direct file transfer from PC to the target SD_CARD.
Measured throughput with "HCI" SD CARD: 90 kbytes/s at 3Mbauds and 16MHz target clock.
You can do it from scite editor (menu Tools) or by using specific bat file.
Double click on it to see how to do.
-
+
JTAG and BSL signatures (FF80h-FF88h) are protected against overwrite, typically during
source file download.
added signed number prefixes $ (hex), % (bin) and # (decimal) to supersede current BASE.
- Added words ASM and ENDASM to create assembler words that are not interpretable by FORTH
+ Added words ASM and ENDASM to create assembler words that are not interpretable by FORTH
i.e. that are called by {CALL|INTERRUPT} and ended by {RET|RETI}. These so created words
can be used only in ASSEMBLER context.
- In the embedded assembler, added 3 backward BW1 BW2 BW3 and 3 forward FW1 FW2 FW3 jump labels
+ In the embedded assembler, added 3 backward BW1 BW2 BW3 and 3 forward FW1 FW2 FW3 jump labels
to use with GOTO, ?GOTO.
These labels are for single use (one jump for one label) but immediately reusable once resolved.
-
- you can compile up to 32 threads vocabularies.
+
+ you can compile up to 32 threads vocabularies.
- Memory management :
- Fast Forth defines 4 levels of program memory with this words :
- WIPE (and system failures) that resets program memory, vectors interrupts and any DEFERred words,
- RST_HERE/RST_STATE that sets/resets the boundary of program protected against <reset> and COLD,
- PWR_HERE/PWR_STATE that sets/resets the boundary of program protected against power ON/OFF,
- and nothing, i.e. volatile program.
+ Memory management :
+ Fast Forth defines 4 levels of program memory with this words :
+ WIPE (and system failures) that resets program memory, vectors interrupts and any DEFERred words,
+ RST_HERE/RST_STATE that sets/resets the boundary of program protected against <reset> and COLD,
+ PWR_HERE/PWR_STATE that sets/resets the boundary of program protected against power ON/OFF,
+ and nothing, i.e. volatile program.
- You can download source files with hardware and/or software control flow (i.e. without line
+ You can download source files with hardware and/or software control flow (i.e. without line
or char delays) up to:
- 134400 bds @ 500kHz
+ 134400 bds @ 500kHz
268800 bds @ 1MHz
614400 bds @ 2MHz
1228800 bds @ 4MHz
6000000 bds @ 24MHz with MSP430FR57xx devices
See main file DTCforthMSP430FR5xxx.asm for the list of reliable baudrates.
- FAST FORTH can be adjusted by selection of SWITCHES in the source file to reduce its size according
- to your convenience. To do, comment/uncomment their line.
+ FAST FORTH can be adjusted by selection of SWITCHES in the source file to reduce its size according
+ to your convenience. To do, comment/uncomment their line.
for your application, select the mode LPM{0,1,2,3,4} that enables wake on FAST FORTH input,
depending of family: FR2xxx: LPM0, FR57xx : LPM0 to LPM2, FR59xx : LPM0 to LPM4.
Content
-------
-With a size of about 6 kb, Fast Forth contains 115 words:
-
- ASM CODE HI2LO COLD WARM (WARM) WIPE
- RST_HERE PWR_HERE RST_STATE PWR_STATE MOVE LEAVE +LOOP
- LOOP DO REPEAT WHILE AGAIN UNTIL BEGIN
- THEN ELSE IF ; : DEFER DOES>
- CREATE CONSTANT VARIABLE POSTPONE RECURSE IMMEDIATE IS
- ['] ] [ \ ' ABORT" ABORT
- QUIT EVALUATE COUNT LITERAL , EXECUTE >NUMBER
- FIND WORD ." S" TYPE SPACES SPACE
- CR (CR) NOECHO ECHO EMIT (EMIT) ACCEPT
- KEY (KEY) C, ALLOT HERE . D.
- U. SIGN HOLD #> #S # <#
- BL STATE BASE CIB J I UNLOOP
- U< > < = 0> 0< 0=
- DABS ABS NEGATE 1- 1+ - +
- C! C@ ! @ DEPTH R@ R>
- >R ROT OVER SWAP NIP DROP ?DUP
- DUP LIT EXIT
-
-...size that includes its embedded assembler of 71 words:
-
- ?GOTO GOTO FW3 FW2 FW1 BW3 BW2
- BW1 ?JMP JMP REPEAT WHILE AGAIN UNTIL
- ELSE THEN IF 0= 0<> U>= U<
- 0< 0>= S< S>= RRUM RLAM RRAM
- RRCM POPM PUSHM CALL PUSH.B PUSH SXT
- RRA.B RRA SWPB RRC.B RRC AND.B AND
- XOR.B XOR BIS.B BIS BIC.B BIC BIT.B
- BIT DADD.B DADD CMP.B CMP SUB.B SUB
- SUBC.B SUBC ADDC.B ADDC ADD.B ADD MOV.B
- MOV RETI LO2HI COLON ENDASM ENDCODE (SLEEP)
- SLEEP
-
-...everything you need to program effectively in assembly or FORTH or mix, as you want.
-See examples in \MSP430-FORTH.
-
-
-Here are kernel compilation options:
-
-CONDCOMP which enable conditional compilation:
-
- [DEFINED] [UNDEFINED] [IF] [ELSE] [THEN] COMPARE MARKER
-
-SD\_CARD\_LOADER to load FORTH source files from SD_CARD
-
- LOAD" (ACCEPT)
-
-SD\_CARD\_READ\_WRITE to read write delete files and direct copy from TERMinal input to SD_card
-
- TERM2SD" SD_EMIT WRITE WRITE" READ READ" CLOSE
- DEL"
-
-BOOTLOADER adds a boot on SD_CARD
-
- (QUIT) BOOT
-
-VOCABULARY to create vocabularies (words list)
-
- DEFINITIONS ONLY PREVIOUS ALSO FORTH VOCABULARY
-
-
-
-ADDs-ON below may be added either hard in kernel or later loaded/removed as any application:
-
-ANS\_CORE\_COMPLIANT necessary to pass ANS94 CORE tests
-
- PAD >IN >BODY SOURCE .( ( DECIMAL
- HEX FILL +! [CHAR] CHAR CELL+ CELLS
- CHAR+ CHARS ALIGN ALIGNED 2OVER 2SWAP 2DROP
- 2DUP 2! 2@ */ */MOD MOD /
- /MOD * FM/MOD SM/REM UM/MOD M* UM*
- S>D 2/ 2* MIN MAX RSHIFT LSHIFT
- INVERT AND OR XOR {ANS_COMP}
-
-SD\_TOOLS, basic tools for FAT16/32
-
- DIR FAT CLUSTER SECTOR {SD_TOOLS}
-
-FIXPOINT, minimalist fixed point arithmetic + - * /
-
- 2CONSTANT D>F S>F F. F* F#S F/
- F- F+ HOLDS {FIXPOINT}
-
-UTILITY:
-
- DUMP U.R WORDS ? .RS .S {UTILITY}
-
-
+See FastForth.pdf
Organize your gitlab copy of FastForth
-------
-download zip of last version
-
-copy it to a subfolder, i.e. FastForth, created in your user folder
-
-right clic on it to share it with yourself.
-
-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.
-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!
-
+See FastForth.pdf
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
-
- 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.
- 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.
-
- 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/
-
- 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.
-
- 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...
+See FastForth.pdf
Build the program file
----------------------
-
-\forthMSP430FR.asm is the main file to compile FastForth. It calls :
+\forthMSP430FR.asm is the main file to compile FastForth:
- - 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 family.inc,
- - ForthThreads.mac in case of multithread vocabularies,
- - optionally, forthMSP430FR_SD.asm file(s) for SD_Card,
- - optionally, forthMSP430FR_ASM.asm for assembler,
- - TargetInit.asm that selects the target.asm,
- - and then TERMINALBAUDRATE.asm.
+Open forthMSP430FR.asm with scite editor
-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.
assemble (CTRL+0). A window asks you for 4 parameters:
-set target as first param, i.e. MSP_EXP430FR5969,
+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.
+nota : programming the device use SBW2 interface, so UARTn is free for serial terminal connexion.
If you want to program your own MSP430FRxxxx board, wire its pins TST, RST, 3V3 and GND
to same pins of the launchpad, on eZ-FET side of the programming connector.
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 :
- search google: cp2102 module 3.3V
- http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
+ search google: cp2102 module 3.3V
+ http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
you must program CP2102 device to access 1382400 and 1843200 bds rates :
- http://www.silabs.com/Support%20Documents/Software/install_USBXpress_SDK.exe
- http://www.silabs.com/Support%20Documents/TechnicalDocs/an169.pdf
+ http://www.silabs.com/Support%20Documents/Software/install_USBXpress_SDK.exe
+ http://www.silabs.com/Support%20Documents/TechnicalDocs/an169.pdf
or a USBtoUART bridge, with a FT232RL device and 3.3V/5V for only hardware control flow:
-
+
WARNING! buy a FT232RL module with a switch 5V/3V3 and select 3V3.
- http://www.google.com/search?q=FT232RL+module+3.3V
- http://www.ftdichip.com
+ http://www.google.com/search?q=FT232RL+module+3.3V
+ http://www.ftdichip.com
or compatible 921600bds wireless module: RN42 (bluesmirf), RN4878...
-
+
How to configure the connection ?
-------------------------------
TXn ---> RX
RXn <--- TX
GND <--> GND
- WARNING! DON'T CONNECT 5V RED WIRE!
+ WARNING! DON'T CONNECT 5V RED WIRE!
- TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+ TeraTerm configuration : see forthMSP430fr.asm
If you plan to supply your target vith a PL2303 cable, open its box to weld red wire onto 3.3V pad.
RXn <--- TX
RTS ---> CTS 4th wire
GND <--> GND
- WARNING! DON'T CONNECT 5V !
+ WARNING! DON'T CONNECT 5V !
- TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+ TeraTerm configuration : see forthMSP430fr.asm
-3- Bluetooth module: Launchpad UARTn <--> RN42 <--> TERATERM
+3- Bluetooth module: Launchpad UARTn <--> RN42 <-wireless_BL2.1-> TERATERM
+ Launchpad UARTn <--> BGX13P EVK <-wireless_BLE5.0-> BGX13P EVK <--> USB <--> TERATERM
launchpad <--> wireless module
TXn ---> RX
RTS ---> CTS 4th wire
GND <--> GND
(CTS <--- RTS) 5th wire if necessary
+ 3V3 <--> 3V3
- 3V3 <--> 3V3
-
- TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+ TeraTerm configuration : see forthMSP430fr.asm
Send a source file.f or file.4th to the FAST FORH target
drag and drop your source file on to.
you can also open any source file with scite editor, and do all you want via its Tools menu.
+If you have any downloading error, first verify in "LAST.4th" that all lines are
+correctly ended with CR+LF.
+
SD_Card Load, Read, Write and Delete
=============================================
HowTo LOAD a sourcefile
--------------
- LOAD" path\filename.4th".
+ LOAD" path\filename.4th".
The file is interpreted by FORTH in same manner than from the serial terminal.
HowTo READ a file
--------------
- READ" path\filename.ext".
+ READ" path\filename.ext".
The first sector of this file is loaded in BUFFER.
To read next sectors, use the command READ that loads the next sector in the buffer,
HowTo WRITE a file
---------------
- WRITE" path\filename.ext".
+ WRITE" path\filename.ext".
If the file does not exist, create it, else open it and set the write pointer at the end of the file,
ready to append chars.
HowTo delete a file
---------------
- DEL" path\filename.ext". If the file is not found, do nothing, no error.
+ DEL" path\filename.ext". If the file is not found, do nothing, no error.
HowTo change DIRectory
---------------
- LOAD" \misc". \misc becomes the current folder.
- LOAD" ..\" parent folder becomes the current folder.
- LOAD" \" Root becomes the current folder.
+ LOAD" \misc". \misc becomes the current folder.
+ LOAD" ..\" parent folder becomes the current folder.
+ LOAD" \" Root becomes the current folder.
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.
-or use scite.
+to download a source file (.f or.4th) onto SD_CARD target, use CopySourceFileToTarget\_SD\_Card.bat.
Double click on one of this bat files to see how to do.
+or use scite.
+
+If you have any downloading error, first verify in "LAST.4th" that all lines are
+correctly ended with CR+LF.
I2C DRIVERS
===========
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.
Error messages are colored (reverse video on ANSI terminal).
Assembly jumps are as FORTH one's : IF, ELSE, THEN, BEGIN, AGAIN, UNTIL, WHILE.
-Not canonical jumps are also available with JMP|?JMP to a defined word and GOTO|?GOTO to
+Not canonical jumps are also available with JMP|?JMP to a predefined word, and GOTO|?GOTO to
backward labels BW1 BW2 BW3 or forward labels FW1 FW2 FW3.
These labels are for one use.
Switch within definitions between FORTH and Assembly contexts with words HI2LO and LO2HI.
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.
+ case 0 : when you type WARM, FORTH interpreter is restarted, no program lost.
+ 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.
+ case 1 : Power ON ==> performs reset and the program beyond PWR_HERE is lost.
+ 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.
+ case 1.1 : when you type PWR_STATE ==> the program beyond PWR_HERE is lost.
- case 1.2 : If an error message (reverse video) occurs, PWR_STATE is automatically executed
+ case 1.2 : If an error message (reverse video) occurs, PWR_STATE is automatically executed
and the program beyond PWR_HERE is lost. In this way, any compilation error is
followed by the complete erasure of the uncompleted word, or by that of
the downloading source file causing this error. So, it is recommended to finish
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.
-
- 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.
+ case 2 : <reset> ==> performs reset and the program beyond RST_HERE is lost.
+ the WARM display is preceded by the SYSRSTIV value "#4".
+
+ case 2.1 : when you type COLD (software reset) ==> same effects.
+ 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.
+ case 2.2 : when you type RST_STATE ==> the program beyond RST_HERE is lost.
- case 3 : when you type WIPE ==> all programs donwloaded from the terminal or the SD_Card are lost.
+ case 3 : when you type WIPE ==> all programs donwloaded from the terminal or the SD_Card are lost.
- case 4 : TERM_TX wired to GND via 4k7 during <reset> = DEEP_RST ===> performs reset, and all programs
+ case 4 : TERM_TX wired to GND via 4k7 during <reset> = DEEP_RST ===> performs reset, and all programs
donwloaded from the terminal or the SD_Card are lost. The WARM display is preceded by "-4".
-
- case 4.1 : software reset on failure (SYSRSTIV = 0Ah | SYSRSTIV >= 16h) ===> same effects
- The WARM display is preceded by the SYSRSTIV value.
-
- 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 4.1 : software reset on failure (SYSRSTIV = 0Ah | SYSRSTIV >= 16h) ===> same effects
+ The WARM display is preceded by the SYSRSTIV value.
+
+ 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 = 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.
======
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.
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
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.
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 ;
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
asm2 \ assembly instruction
... \ you can freely use IP !
... \ assembly instructions
- MOV @RSP+,IP \ restore IP saved by :
+ MOV @RSP+,IP \ restore IP saved by boot code
MOV @IP+,PC \ NEXT
-the instruction "CALL rEXIT" (CALL R7), have EXIT address as rEXIT content.
-
going a step further :
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
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
...
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
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
As we see, IP is saved only once, it's logical.
-ASSEMBLY WITHOUT LABEL ?
+ASSEMBLER WITHOUT LABELS ? YES !
---
-Yes ! the assembly syntax borrows FORTH's one for jumps :
+To compare AS macro assembler and FastForth embedded assembler,
+compare files \ADDON\FIXPOINT.asm and \MSP430-FORTH\FIXPOINT.f
+
+The syntax of FastForth assembler borrows FORTH's one :
CODE TEST_IF_THEN
CMP #1,R8 \ set Z,N,V, flags
- 0= IF \ irritating, the "IF =" upside down, isn't it?
+ 0= IF \ irritating, the "IF 0=" upside down, isn't it?
ADD R8,R9 \ true part of comparaison
THEN
... \ the next
+ ...
MOV @IP+,PC \ don't forget...
ENDCODE \ don't forget...
ENDCODE \ don't forget...
test for loop back version BEGIN ... UNTIL
+
CODE TEST_BEGIN_UNTIL
MOV #8,R10
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 :
THEN
MOV @IP+,PC
ENDCODE
-
+
another nest :
CODE TEST_NESTED_BEGIN_AGAIN_IF
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 :
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
-FAST FORTH have one pass assembler, not able to make forward jump.
+
+But FAST FORTH have one pass assembler, not able to make forward jump.
I have added possibility of several "non canonical" jumps, up to 3 backward and up to 3 forward imbricated jumps to label :
GOTO BW2 \ 2 14~ loop
FW2 BIC #1,SR \ 1 CLRC No error, C = 0
FW1 \ Error indication in C
- \ END T.I. ROUTINE Section 5.1.5 of MSP430 Family Application Reports
+ \ END of T.I. ROUTINE Section 5.1.5 of MSP430 Family Application Reports
MOV W,0(PSP) \ 3 remainder on stack
MOV Y,TOS \ 1 quotient in TOS
MOV @IP+,PC \ 4
I have discovered a little semantic preprocessor "GEMA", just like that FAST FORTH have its symbolic assembler !
- \config\gema\MSP430FRxxxx_FastForth.pat contains system variables for all devices
- \config\gema\MSP430FR57xx.pat contains declarations for FR57 family
- \config\gema\MSP430FR5x6x.pat ... for FR59/FR69 families
- \config\gema\MSP430FR2x4x.pat ... for FR2/FR4 families.
- \config\gema\DEVICE.pat contains memory map and vectors for a specified DEVICE
- \MSP430-FORTH\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 !
-
-Try SD\_TEST.f to build a SD\_Card test.
+With the three bat files in \MSP430_FORTH 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 family.inc file below, defines your device
- ;CHIP .equ 5738 ; not used
- UCA0_UART ; for family.inc file below, defines uart used by FORTH input terminal
- LF_XTAL ; for family.inc file below, defines if your module have a 32768 Hz xtal, to enable it.
- UCB0_SD ; for family.inc file below, defines UC used for SD Card driver if used
- .include "MSP430FR57xx.inc" ; include family declarations file: MSP430FR2x4x.inc,
- MSP430FR57xx.inc or MSP430FR5x6x.inc
- .ENDIF ; MY_MSP430FR5738_1
-
-3- complete family.inc file with declarations for your device if not exists.
- take care to verify they not already exist in common part at the end of the file.
-
-4- include an item in TargetInit.asm:
- .IFDEF MY_MSP430FR5738_1
- .include "MSP430FR5738_1.asm"
- .ENDIF
-
-5- create your target MSP430FR5738_1.asm from another target.asm as model, then customize declarations.
-
+ 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
-6- if you use SD Card you must add an item in the forthMSP430FR_SD_INIT.asm file. Proceed as target.asm:
+4- in \inc\TargetInit.asm add one "target.asm" item:
.IFDEF MY_MSP430FR5738_1
-
- ; COLD default state : Px{DIR,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; PX{OUT,REN} = 1 ; Px{IN,IES} = ?
-
- ; P2.3 as SD_CD
- SD_CD .equ 08h
- SD_CDIN .equ P2IN
- ; P2.4 as SD_CS
- SD_CS .equ 10h
- SD_CSOUT .equ P2OUT
-
- BIS.B #SD_CS,&P2DIR ; SD_CS output high
-
- ; P2.2/UCB0CLK ---> SD_CardAdapter CLK (SCK) default value
- ; P1.6/UCB0SIMO/UCB0SDA/TA0.0 ---> SD_CardAdapter SDI (MOSI) default value
- ; P1.7/UCB0SOMI/UCB0SCL/TA1.0 <--- SD_CardAdapter SDO (MISO) default value
- BIS #04C0h,&PASEL1 ; Configure UCB0 pins: P2.2 as UCB0CLK, P1.6 as UCB0SIMO & P1.7 as UCB0SOMI
- ; P2DIR.x is controlled by eUSCI_B0 module
- BIC #04C0h,&PAREN ; disable pullup resistors for SIMO/SOMI/CLK pins
-
+ .include MY_MSP430FR5738_1.asm
.ENDIF
-Then, for the needs of syntactic preprocessor:
-1- create a \config\gema\device.pat file if not exist, from analog device.pat file
+Then, for the preprocessor which you will use when downloading source files:
-2- create your MSP430-FORTH\target.pat file from analog target.pat file, include same forth declarations as target.asm and complete it for your application
+1- create your \inc\device.pat file if not exist, from your \inc\device.inc and another \inc\device.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
+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...
START YOUR PROJECT
--
PROJECT.f :
; ----------------------------------------------------
- ; MSP430FR5969 MSP_EXP430FR5969 8MHZ 921600bds PROJECT
+ ; MSP430FR5969 MSP_EXP430FR5969 8MHZ 921600bds PROJECT.f
; ----------------------------------------------------
- WIPE ; restore the content of your target.txt HEX file
+
+ [DEFINED] {PROJECT} [IF] {PROJECT} [THEN] \ remove {PROJECT} if exist (memory managment)
+
+ MARKER {PROJECT}
+
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
...
...
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
then finish with this 2 "magic" words plus one optional : START, STOP and optional BACKGROUND
ASM BACKGROUND \ (optional)
+ BW1
... \ insert here your background task
...
...
- MOV #(SLEEP),PC \ Must be the last statement of BACKGROUND
+ BIS &LPM_MODE,SR \
+ GOTO BW1
ENDASM \
+
+
+
+
CODE START \ to init your app
... \ 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) \
+ MOV #SLEEP,X \ redirect default background task
+ MOV #BACKGROUND,2(X) \ to yours (optional)
COLON
... \ init FORTH part
- \ NOECHO \ uncomment if your app runs without terminal
- LIT RECURSE IS WARM \ insert START (so your init app) in the FORTH init process
- (WARM) \ then continue 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)
- MOV #(SLEEP),2(X) \ (words SLEEP and (SLEEP) can only be used in assembler mode)
- \ (thus "['] (SLEEP) IS SLEEP" don't works.)
+ ADD #4,X \ (word SLEEP can only be seen in assembler mode, not in FORTH)
+ MOV X,-2(X)
COLON
- ['] (WARM) IS WARM \ remove START from FORTH init process
- ECHO \ to retrieve FORTH input terminal
+ ['] WARM >BODY
+ IS WARM \ remove START from FORTH init process
+ ECHO \ to always retrieve FORTH input terminal
COLD \ reset CPU, interrupt vectors and restart FORTH.
;
- ; compiling is done
- RST_HERE ; thus allowing to restart your app with <reset> or COLD
+ RST_HERE
+
START ; let's go!
end of file
-Each time you download this project file in LAUNCHPAD, the word WIPE returns the dictionary set as it was in TXT file.
-And the word RST_HERE protects the PROJECT against <RESET\>.
+Each time you download this project file, the word {PROJECT} removes all subsequent definitions,
+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.
\ ----------------------------------
\ MSP-EXP430FR5969_8MHZ_TEST.f
\ ----------------------------------
- RST_STATE \ restore the state defined by PROJECT.f
+
+ RST_STATE \ memory managment
here you write your routine to test
PWR_HERE \ test.f content is protected against POWER OFF, but volatile with <reset>
-
-Each time you download this test file, the word RST\_STATE returns the <RESET\> dictionary set (i.e. PROJECT). The word PWR\_HERE protects the test against POWER OFF. without the word PWR\_HERE, the test is lost when power down.
+Each time you download this TEST file, the word RST\_STATE clears memory content beyond PROJECT.
let's go
--
Good luck !
-
-Case of MSP430FR2xxx family (with FLL)
----
-
-
-Difficult to download CORETEST.4th on CHIPSTICK @ 8MHz without error (tested with USBtoUART device = CP2102).
-
-To resolve, I was forced to speed the clock up to 8.29 MHz ! (see ChipStick_fr2433.inc)
-
-And there is no this problem @ 16MHz !
-
-Is a problem that affects this device only, or corrupt TLV area during welding?
-
-If you ever encounter the same difficulty, recompile + download CORETEST.4th several times by increasing each time by 2 the FLLN value until you reach the good compromising...
-
-
ANNEXE
--
The embedded assembler don't recognize the (useless) TI's symbolic addressing mode: ADD.B EDE,TONI.
-REGISTERS correspondence
+REGISTERS correspondence (the preprocessor gema.exe allow you to use FASTFORTH or TI registers's names).
embedded ASM TI FASTFORTH comment
R0 PC PC Program Counter
R1 SP RSP Return Stack Pointer
- R2 SR/CG1 SR Status Register/Constant Generator 1
+ 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
R14 R14 TOS Top Of parameters Stack
R15 R15 PSP Parameters Stack Pointer
- FASTFORTH registers must be preprocessed by gema.exe before sending to the embedded assembler.
-
REGISTERS use
- The FASTFORTH registers rDOCOL, rDOVAR, rDOCON and rDODOES must be preserved,
- PUSHM R7,R4 before use and POPM R4,R7 after.
- don't use R3 and use R2 only with register addressing mode.
+ 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.
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) \ mov first cell in this empty 2th cell
- MOV <what you want>,TOS \ or MOV.B <what you want>,TOS ; i.e. in first 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
- ...
-
- don't never pop a byte with instruction MOV.B @PSP+, ...
+
+ 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 Rx,Ry \ x > y
- ...
-
+
+ PUSHM #n,Rx \ with 0 <= x-(n-1) < 16
+
to pop multiple registers from the RSP stack :
-
- POPM Ry,Rx \ y < x
- ...
-
-CPUx instructions PUSHM / POPM (my own syntax, not the TI's one, too bad :-)
-
- PUSHM order : PSP,TOS,IP, S, T, W, X, Y, R7, R6, R5, R4
-
- example : PUSHM IP,Y \ push IP, S, T, W, X, Y registers onto the stack RSP
-
-
- POPM order : R4, R5, R6, R7, Y, X, W, T, S, IP,TOS,PSP
-
- example : POPM Y,IP \ pop Y, X, W, T, S, IP registers from the stack RSP
-
- error occurs if bad order (PUSHM Y,IP for example)
+
+ 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,R8 \ R8 register is Unsigned Right shifted by n=3
-
+ example : RRUM #3,Y \ Y (R8) register is Unsigned Right shifted by n=3
+
error occurs if 1 > n > 4
conditionnal jumps use with symbolic assembler
- 0= { IF UNTIL WHILE ?JMP ?GOTO }
- 0<> { IF UNTIL WHILE ?JMP ?GOTO }
- U>= { IF UNTIL WHILE ?JMP ?GOTO }
- U< { IF UNTIL WHILE ?JMP ?GOTO }
- S< { IF UNTIL WHILE ?JMP ?GOTO }
- S>= { IF UNTIL WHILE ?JMP ?GOTO }
- 0>= { IF UNTIL WHILE }
- 0< { ?JMP ?GOTO }
+ 0= with IF UNTIL WHILE ?JMP ?GOTO
+ 0<> with IF UNTIL WHILE ?JMP ?GOTO
+ U>= with IF UNTIL WHILE ?JMP ?GOTO
+ U< with IF UNTIL WHILE ?JMP ?GOTO
+ S< with IF UNTIL WHILE ?JMP ?GOTO
+ S>= with IF UNTIL WHILE ?JMP ?GOTO
+ 0>= with IF UNTIL WHILE
+ 0< with ?JMP ?GOTO