OSDN Git Service

Ver 301
[fast-forth/master.git] / MSP430-FORTH / SD_TEST.f
index 029d8ae..df673a9 100644 (file)
@@ -1,12 +1,17 @@
-\ 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:
 \
 \
@@ -17,7 +22,7 @@
 \ 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!
 \
@@ -28,7 +33,7 @@
 \   set DTC .equ 1
 \       FREQUENCY   .equ 16
 \       THREADS     .equ 16
-\       TERMINALBAUDRATE    .equ 3000000
+\       TERMINALBAUDRATE    .equ what_you_want
 \         
 \   uncomment:  CONDCOMP
 \               MSP430ASSEMBLER
@@ -57,7 +62,7 @@
 \
 \   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
@@ -191,13 +268,11 @@ LO2HI
             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