-\ TARGET SELECTION
-\ MSP_EXP430FR5739 MSP_EXP430FR5969 MSP_EXP430FR5994 MSP_EXP430FR6989
-\ MSP_EXP430FR4133 MSP_EXP430FR2433 MSP_EXP430FR2355 CHIPSTICK_FR2433
-\
+\ -*- coding: utf-8 -*-
; -----------
; SD_TEST.f
; -----------
\
+\ to see kernel options, download FastForthSpecs.f
+\ FastForth kernel options: MSP430ASSEMBLER, CONDCOMP, SD_CARD_READ_WRITE
+\
+\ TARGET SELECTION
+\ MSP_EXP430FR5739 MSP_EXP430FR5969 MSP_EXP430FR5994 MSP_EXP430FR6989
+\ MSP_EXP430FR4133 MSP_EXP430FR2433 MSP_EXP430FR2355 CHIPSTICK_FR2433
+\
+\
\ how to test SD_CARD driver on your launchpad:
\
\
\ configure TERATERM as indicated in forthMSP430FR.asm
\
\
-\ if you have a MSP-EXP430FR5994 launchpad, program it with MSP_EXP430FR5994_3Mbds_SD_CARD.txt
+\ if you have a MSP-EXP430FR5994 launchpad, program it with MSP_EXP430FR5994_xbauds_SD_CARD.txt
\ to do, drag and drop this file onto prog.bat
\ nothing else to do!
\
\ set DTC .equ 1
\ FREQUENCY .equ 16
\ THREADS .equ 16
-\ TERMINALBAUDRATE .equ 3000000
+\ TERMINALBAUDRATE .equ what_you_want
\
\ uncomment: CONDCOMP
\ MSP430ASSEMBLER
\
\ copy TESTASM.4TH to \MISC\TESTASM.4TH (add path \MISC in the window opened by TERATERM)
\ copy TSTWORDS.4TH to \TSTWORDS.4TH
-\ copy CORETEST_xMPY.4TH to \CORETEST.4TH (x=S for FR4133, else x=H; suppr _xMPY in the window opened by TERATERM)
+\ copy CORETEST.4TH to \CORETEST.4TH
\ copy SD_TOOLS.f to \SD_TOOLS.4TH
\ copy SD_TEST.f to \SD_TEST.4TH
\ copy PROG100k.f to \PROG100k.4TH
PWR_STATE
-[DEFINED] {SD_TEST} [IF] {SD_TEST} [THEN] \ remove {SD_TEST}
-
-[DEFINED] ASM [DEFINED] TERM2SD" AND [IF] \ requirements test
+[UNDEFINED] {SD_TEST} [IF] \
MARKER {SD_TEST}
-[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP}
+[UNDEFINED] + [IF]
+\ https://forth-standard.org/standard/core/Plus
+\ + n1/u1 n2/u2 -- n3/u3 add n1+n2
+CODE +
+ADD @PSP+,TOS
+MOV @IP+,PC
+ENDCODE
+[THEN]
+
+[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP}
CODE MAX \ n1 n2 -- n3 signed maximum
CMP @PSP,TOS \ n2-n1
S< ?GOTO FW1 \ n2<n1
- BW1 ADD #2,PSP
+BW1 ADD #2,PSP
MOV @IP+,PC
ENDCODE
CODE MIN \ n1 n2 -- n3 signed minimum
CMP @PSP,TOS \ n2-n1
S< ?GOTO BW1 \ n2<n1
- FW1 MOV @PSP+,TOS
+FW1 MOV @PSP+,TOS
MOV @IP+,PC
ENDCODE
[THEN]
-[UNDEFINED] U.R [IF] \ defined in {UTILITY}
+[UNDEFINED] C@ [IF]
+\ https://forth-standard.org/standard/core/CFetch
+\ C@ c-addr -- char fetch char from memory
+CODE C@
+MOV.B @TOS,TOS
+MOV @IP+,PC
+ENDCODE
+[THEN]
+
+[UNDEFINED] SPACE [IF]
+\ https://forth-standard.org/standard/core/SPACE
+\ SPACE -- output a space
+: SPACE
+$20 EMIT ;
+[THEN]
+
+[UNDEFINED] SPACES [IF]
+\ https://forth-standard.org/standard/core/SPACES
+\ SPACES n -- output n spaces
+CODE SPACES
+CMP #0,TOS
+0<> IF
+ PUSH IP
+ BEGIN
+ LO2HI
+ $20 EMIT
+ HI2LO
+ SUB #2,IP
+ SUB #1,TOS
+ 0= UNTIL
+ MOV @RSP+,IP
+THEN
+MOV @PSP+,TOS \ -- drop n
+NEXT
+ENDCODE
+[THEN]
+
+[UNDEFINED] OVER [IF]
+\ https://forth-standard.org/standard/core/OVER
+\ OVER x1 x2 -- x1 x2 x1
+CODE OVER
+MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2
+MOV @PSP,TOS \ 2 -- x1 (x2) x1
+SUB #2,PSP \ 1 -- x1 x2 x1
+MOV @IP+,PC
+ENDCODE
+[THEN]
+
+[UNDEFINED] U.R [IF] \ defined in {UTILITY}
: U.R \ u n -- display u unsigned in n width (n >= 2)
>R <# 0 # #S #>
R> OVER - 0 MAX SPACES TYPE
;
[THEN]
-[UNDEFINED] DUMP [IF] \ defined in {UTILITY}
+[UNDEFINED] DUMP [IF] \ defined in {UTILITY}
\ https://forth-standard.org/standard/tools/DUMP
CODE DUMP \ adr n -- dump memory
PUSH IP
-PUSH &BASE \ save current base
-MOV #$10,&BASE \ HEX base
+PUSH &BASEADR \ save current base
+MOV #$10,&BASEADR \ HEX base
ADD @PSP,TOS \ -- ORG END
LO2HI
- SWAP OVER OVER \ -- END ORG END ORG
- U. 1 - U. \ -- END ORG display org end-1
- $FFF0 AND \ -- END ORG_modulo_16
+ SWAP \ -- END ORG
DO CR \ generate line
- I 7 U.R SPACE \ generate address
- I $10 + I \ display 16 bytes
+ I 4 U.R SPACE \ generate address
+ I 8 + I
+ DO I C@ 3 U.R LOOP
+ SPACE
+ I $10 + I 8 +
DO I C@ 3 U.R LOOP
SPACE SPACE
I $10 + I \ display 16 chars
- DO I C@ $7E MIN BL MAX EMIT LOOP
+ DO I C@ $7E MIN $20 MAX EMIT LOOP
$10 +LOOP
- R> BASE ! \ restore current base
+ R> BASEADR ! \ restore current base
;
[THEN]
+
+\ SD_EMIT c -- output char c to a SD_CARD file opened as write
+CODE SD_EMIT
+CMP #512,&BufferPtr \ 512 bytes by sector
+U>= IF \ if file buffer is full
+ MOV #WRITE,X \ CALL WRITEFILE
+ CALL 2(X) \ BufferPtr = 0
+THEN
+MOV &BufferPtr,Y \ 3
+MOV.B TOS,SD_BUF(Y) \ 3
+ADD #1,&BufferPtr \ 4
+MOV @PSP+,TOS \ 2
+MOV @IP+,PC
+ENDCODE
+
: SD_TEST
-\ BEGIN
- ECHO CR
- ." 0 Set date and time" CR
- ." 1 Load {UTILITY} words" CR
- ." 2 Load {SD_TOOLS} words" CR
- ." 3 Load {ANS_COMP} words" CR
- ." 4 Load ANS core tests" CR
- ." 5 Load a 100k program " CR
- ." 6 Read only this source file" CR
- ." 7 Write a dump of FORTH to YOURFILE.TXT" CR
- ." 8 append a dump of FORTH to YOURFILE.TXT" CR
- ." 9 Load TST_WORDS" CR
- ." your choice : "
- KEY CR
- 48 - ?DUP
+PWR_HERE \ remove all volatile programs from MAIN memory
+CR
+." 0 Set date and time" CR
+." 1 Load {TOOLS} words" CR
+." 2 Load {SD_TOOLS} words" CR
+." 3 Load {ANS_COMP} words" CR
+." 4 Load ANS core tests" CR
+." 5 Load a 100k program " CR
+." 6 Read only this source file" CR
+." 7 append a dump of FORTH to YOURFILE.TXT" CR
+." 8 delete YOURFILE.TXT" CR
+." 9 Load TST_WORDS" CR
+." your choice : "
+KEY
+48 - ?DUP
+0= IF
+ ." LOAD RTC.4TH" CR
+ LOAD" RTC.4TH"
+ELSE 1 - ?DUP
0= IF
- LOAD" RTC.4TH"
+ ." LOAD UTILITY.4TH" CR
+ LOAD" UTILITY.4TH"
ELSE 1 - ?DUP
0= IF
- LOAD" UTILITY.4TH"
+ ." LOAD SD_TOOLS.4TH" CR
+ LOAD" SD_TOOLS.4TH"
ELSE 1 - ?DUP
0= IF
- LOAD" SD_TOOLS.4TH"
+ ." LOAD ANS_COMP.4TH" CR
+ LOAD" ANS_COMP.4TH"
ELSE 1 - ?DUP
0= IF
- LOAD" ANS_COMP.4TH"
+ ." LOAD CORETEST.4TH" CR
+ LOAD" CORETEST.4TH"
+ PWR_STATE
ELSE 1 - ?DUP
0= IF
- LOAD" CORETEST.4TH"
- PWR_STATE \ remove words
+ ." LOAD PROG100K.4TH" CR
+ NOECHO
+ LOAD" PROG100K.4TH"
ELSE 1 - ?DUP
0= IF
- NOECHO
- LOAD" PROG100K.4TH"
- PWR_STATE \ remove words
- ECHO
+ ." READ PROG100K.4TH" CR
+ READ" PROG100K.4TH"
+ BEGIN
+ READ \ sequentially read 512 bytes
+ UNTIL \ prog10k.4TH is closed
ELSE 1 - ?DUP
0= IF
- READ" PROG100K.4TH"
- BEGIN
- READ \ sequentially read 512 bytes
- UNTIL \ prog10k.4TH is closed
+ ." WRITE YOURFILE.TXT" CR
+ WRITE" YOURFILE.TXT"
+ ['] SD_EMIT IS EMIT
+ MAIN_ORG HERE OVER - DUMP
+ ['] EMIT >BODY IS EMIT
+ CLOSE
ELSE 1 - ?DUP
0= IF
+ ." DEL YOURFILE.TXT" CR
DEL" YOURFILE.TXT"
- WRITE" YOURFILE.TXT"
- ['] SD_EMIT IS EMIT
- PROGRAMSTART HERE OVER - DUMP
- ['] EMIT >BODY IS EMIT
- CLOSE
ELSE 1 - ?DUP
0= IF
- WRITE" YOURFILE.TXT"
- ['] SD_EMIT IS EMIT
- CR
- PROGRAMSTART HERE OVER - DUMP
- ['] EMIT >BODY IS EMIT
- CLOSE
- ELSE 1 - ?DUP
- 0= IF
- LOAD" TSTWORDS.4TH"
- ELSE
- DROP EXIT
- THEN
- THEN
+ ." LOAD TSTWORDS.4TH" CR
+ LOAD" TSTWORDS.4TH"
+ ELSE
+ ." abort" CR EXIT
+ THEN
THEN
THEN
THEN
THEN
THEN
THEN
- ECHO ." it's done"
-
-\ AGAIN \ LOAD" don't work with loop tests.......
+THEN
;
-PWR_HERE \ to don't forget, otherwise SD_TEST destroys itself by downloading files comprising "PWR_HERE" command...
+RST_HERE
[THEN]
-SD_TEST
+ECHO SD_TEST