--- /dev/null
+
+; -----------
+; SD_TEST.4th for MSP_EXP430FR5994
+; -----------
+
+CODE ABORT_SD_TEST
+SUB #2,R15
+MOV R14,0(R15)
+MOV &$180E,R14
+SUB #308,R14
+COLON
+$0D EMIT
+ABORT" FastForth V3.8 please!"
+PWR_STATE
+;
+
+ABORT_SD_TEST
+
+PWR_STATE
+
+[DEFINED] {SD_TEST} [IF] {SD_TEST} [THEN]
+
+MARKER {SD_TEST}
+
+[UNDEFINED] EXIT [IF]
+CODE EXIT
+MOV @R1+,R13
+MOV @R13+,R0
+
+ENDCODE
+[THEN]
+
+[UNDEFINED] SWAP [IF]
+CODE SWAP
+MOV @R15,R10
+MOV R14,0(R15)
+MOV R10,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] >BODY [IF]
+CODE >BODY
+ADD #4,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] 0= [IF]
+CODE 0=
+SUB #1,R14
+SUBC R14,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] IF [IF]
+CODE IF
+SUB #2,R15
+MOV R14,0(R15)
+MOV &$1DC6,R14
+ADD #4,&$1DC6
+MOV #$4034,0(R14)
+ADD #2,R14
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+
+CODE THEN
+MOV &$1DC6,0(R14)
+MOV @R15+,R14
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] ELSE [IF]
+CODE ELSE
+ADD #4,&$1DC6
+MOV &$1DC6,R10
+MOV #$403A,-4(R10)
+MOV R10,0(R14)
+SUB #2,R10
+MOV R10,R14
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] BEGIN [IF]
+CODE BEGIN
+ MOV #$4028,R0
+ENDCODE IMMEDIATE
+
+CODE UNTIL
+ MOV #$4034,R9
+BW1 ADD #4,&$1DC6
+ MOV &$1DC6,R10
+ MOV R9,-4(R10)
+ MOV R14,-2(R10)
+ MOV @R15+,R14
+ MOV @R13+,R0
+ENDCODE IMMEDIATE
+
+CODE AGAIN
+MOV #$403A,R9
+GOTO BW1
+ENDCODE IMMEDIATE
+
+: WHILE
+POSTPONE IF SWAP
+; IMMEDIATE
+
+: REPEAT
+POSTPONE AGAIN POSTPONE THEN
+; IMMEDIATE
+[THEN]
+
+[UNDEFINED] DO [IF]
+CODE DO
+SUB #2,R15
+MOV R14,0(R15)
+ADD #2,&$1DC6
+MOV &$1DC6,R14
+MOV #$403E,-2(R14)
+ADD #2,&$1C00
+MOV &$1C00,R10
+MOV #0,0(R10)
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+
+CODE LOOP
+ MOV #$4060,R9
+BW1 ADD #4,&$1DC6
+ MOV &$1DC6,R10
+ MOV R9,-4(R10)
+ MOV R14,-2(R10)
+BEGIN
+ MOV &$1C00,R14
+ SUB #2,&$1C00
+ MOV @R14,R14
+ CMP #0,R14
+0<> WHILE
+ MOV R10,0(R14)
+REPEAT
+ MOV @R15+,R14
+ MOV @R13+,R0
+ENDCODE IMMEDIATE
+
+CODE +LOOP
+MOV #$404E,R9
+GOTO BW1
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] I [IF]
+CODE I
+SUB #2,R15
+MOV R14,0(R15)
+MOV @R1,R14
+SUB 2(R1),R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] + [IF]
+CODE +
+ADD @R15+,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] - [IF]
+CODE -
+SUB @R15+,R14
+XOR #-1,R14
+ADD #1,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] MAX [IF]
+ CODE MAX
+ CMP @R15,R14
+ S< ?GOTO FW1
+BW1 ADD #2,R15
+ MOV @R13+,R0
+ ENDCODE
+
+ CODE MIN
+ CMP @R15,R14
+ S< ?GOTO BW1
+FW1 MOV @R15+,R14
+ MOV @R13+,R0
+ ENDCODE
+[THEN]
+
+[UNDEFINED] C@ [IF]
+CODE C@
+MOV.B @R14,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] SPACE [IF]
+: SPACE
+$20 EMIT ;
+[THEN]
+
+[UNDEFINED] SPACES [IF]
+CODE SPACES
+CMP #0,R14
+0<> IF
+ PUSH R13
+ BEGIN
+ LO2HI
+ $20 EMIT
+ HI2LO
+ SUB #2,R13
+ SUB #1,R14
+ 0= UNTIL
+ MOV @R1+,R13
+THEN
+MOV @R15+,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] DUP [IF]
+CODE DUP
+BW1 SUB #2,R15
+ MOV R14,0(R15)
+ MOV @R13+,R0
+ENDCODE
+
+CODE ?DUP
+CMP #0,R14
+0<> ?GOTO BW1
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] OVER [IF]
+CODE OVER
+MOV R14,-2(R15)
+MOV @R15,R14
+SUB #2,R15
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] >R [IF]
+CODE >R
+PUSH R14
+MOV @R15+,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] R> [IF]
+CODE R>
+SUB #2,R15
+MOV R14,0(R15)
+MOV @R1+,R14
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] CONSTANT [IF]
+: CONSTANT
+CREATE
+HI2LO
+MOV R14,-2(R10)
+MOV @R15+,R14
+MOV @R1+,R13
+MOV @R13+,R0
+ENDCODE
+[THEN]
+
+[UNDEFINED] STATE [IF]
+$1DBE CONSTANT STATE
+[THEN]
+
+[UNDEFINED] IS [IF]
+CODE DEFER!
+MOV @R15+,2(R14)
+MOV @R15+,R14
+MOV @R13+,R0
+ENDCODE
+
+: IS
+STATE @
+IF POSTPONE ['] POSTPONE DEFER!
+ELSE ' DEFER!
+THEN
+; IMMEDIATE
+[THEN]
+
+[UNDEFINED] U.R [IF]
+: U.R
+>R <# 0 # #S #>
+R> OVER - 0 MAX SPACES TYPE
+;
+[THEN]
+
+[UNDEFINED] DUMP [IF]
+CODE DUMP
+PUSH R13
+PUSH &$1DDC
+MOV #$10,&$1DDC
+ADD @R15,R14
+LO2HI
+ SWAP
+ DO CR
+ I 4 U.R SPACE
+ 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
+ DO I C@ $7E MIN $20 MAX EMIT LOOP
+ $10 +LOOP
+ R> $1DDC !
+;
+[THEN]
+
+[UNDEFINED] HERE [IF]
+CODE HERE
+MOV #BEGIN,R0
+ENDCODE
+[THEN]
+
+
+CODE SD_EMIT
+CMP #512,&$201E
+U>= IF
+ MOV #WRITE,R9
+ CALL 2(R9)
+THEN
+MOV &$201E,R8
+MOV.B R14,$1E00(R8)
+ADD #1,&$201E
+MOV @R15+,R14
+MOV @R13+,R0
+ENDCODE
+
+: SD_TEST
+PWR_HERE
+CR
+." 0 Set date and time" CR
+." 1 Load {TOOLS} words" CR
+." 2 Load {SD_TOOLS} words" CR
+." 3 Load {CORE_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 UTILITY.4TH" CR
+ LOAD" UTILITY.4TH"
+ ELSE 1 - ?DUP
+ 0= IF
+ ." LOAD SD_TOOLS.4TH" CR
+ LOAD" SD_TOOLS.4TH"
+ ELSE 1 - ?DUP
+ 0= IF
+ ." LOAD CORE_ANS.4TH" CR
+ LOAD" CORE_ANS.4TH"
+ ELSE 1 - ?DUP
+ 0= IF
+ ." LOAD CORETEST.4TH" CR
+ LOAD" CORETEST.4TH"
+ PWR_STATE
+ ELSE 1 - ?DUP
+ 0= IF
+ ." LOAD PROG100K.4TH" CR
+ NOECHO
+ LOAD" PROG100K.4TH"
+ ELSE 1 - ?DUP
+ 0= IF
+ ." READ PROG100K.4TH" CR
+ READ" PROG100K.4TH"
+ BEGIN
+ READ
+ UNTIL
+ ELSE 1 - ?DUP
+ 0= IF
+ ." WRITE YOURFILE.TXT" CR
+ WRITE" YOURFILE.TXT"
+ ['] SD_EMIT IS EMIT
+ $4000 HERE OVER - DUMP
+ ['] EMIT >BODY IS EMIT
+ CLOSE
+ ELSE 1 - ?DUP
+ 0= IF
+ ." DEL YOURFILE.TXT" CR
+ DEL" YOURFILE.TXT"
+ ELSE 1 - ?DUP
+ 0= IF
+ ." LOAD TSTWORDS.4TH" CR
+ LOAD" TSTWORDS.4TH"
+ ELSE
+ ." abort" ABORT" "
+ THEN
+ THEN
+ THEN
+ THEN
+ THEN
+ THEN
+ THEN
+ THEN
+ THEN
+THEN
+;
+
+
+
+RST_HERE
+
+[THEN]
+
+ECHO SD_TEST