OSDN Git Service

V 3.2
[fast-forth/master.git] / MSP430-FORTH / MSP_EXP430FR5994 / CORDIC.4TH
index f61fa0e..31bba0e 100644 (file)
 ; ----------
 ; CORDIC.4th
 ; ----------
+; -----------------------------------------------------------
+; requires FIXPOINT_INPUT kernel addon, see forthMSP430FR.asm
+; -----------------------------------------------------------
 
 
 PWR_STATE
 
 [UNDEFINED] {CORDIC} [IF] 
 
+[UNDEFINED] MARKER [IF]
+: MARKER
+CREATE
+HI2LO
+MOV &$1DC8,0(R10)
+SUB #2,R8
+MOV R8,2(R10)
+ADD #4,&$1DC6
+LO2HI
+DOES>
+HI2LO
+MOV @R1+,R13
+MOV @R14+,&$180E
+MOV @R14,&$180C
+MOV @R15+,R14
+MOV #RST_STATE,R0
+ENDCODE
+[THEN]
+
 MARKER {CORDIC}
 
+[UNDEFINED] SWAP [IF]
+CODE SWAP
+MOV @R15,R10
+MOV R14,0(R15)
+MOV R10,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 #$404C,0(R14)
+ADD #2,R14
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] THEN [IF]
+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 #$4048,-4(R10)
+MOV R10,0(R14)
+SUB #2,R10
+MOV R10,R14
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] BEGIN [IF]
+CODE BEGIN
+MOV #HERE,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] UNTIL [IF]
+CODE UNTIL
+    MOV #$404C,R9
+BW1 ADD #4,&$1DC6
+    MOV &$1DC6,R10
+    MOV R9,-4(R10)
+    MOV R14,-2(R10)
+    MOV @R15+,R14
+    MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] AGAIN [IF]
+CODE AGAIN
+MOV #$4048,R9
+GOTO BW1
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] WHILE [IF]
+: WHILE
+POSTPONE IF SWAP
+; IMMEDIATE
+[THEN]
+
+[UNDEFINED] REPEAT [IF]
+: 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 #$4056,-2(R14)
+ADD #2,&$1C00
+MOV &$1C00,R10
+MOV #0,0(R10)
+MOV @R13+,R0
+ENDCODE IMMEDIATE
+[THEN]
+
+[UNDEFINED] LOOP [IF]
+CODE LOOP
+    MOV #$4078,R9
+    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
+[THEN]
+
+
 [UNDEFINED] {FIXPOINT} [IF]
 
 [UNDEFINED] DABS [IF]
 CODE DABS
-MOV #1-,R9
-ADD #4,R9
-MOV R9,R0
+AND #-1,R14
+S< IF
+    XOR #-1,0(R15)
+    XOR #-1,R14
+    ADD #1,0(R15)
+    ADDC #0,R14
+THEN
+MOV @R13+,R0
 ENDCODE
 [THEN]
 
-
 CODE HOLDS
 BW1         MOV @R15+,R9
             ADD R14,R9
@@ -57,9 +196,10 @@ BEGIN       MOV @R15,&$4C0
             GOTO BW1
 ENDCODE
 
-[UNDEFINED] SPACE [IF]
-: SPACE
-$20 EMIT ;
+[UNDEFINED] R> [IF]
+CODE R>
+MOV R6,R0
+ENDCODE
 [THEN]
 
 CODE F.
@@ -82,7 +222,7 @@ LO2HI
     $2C HOLD
     #S
     R> SIGN #>
-    TYPE SPACE
+    TYPE $20 EMIT
 ;
 
 [THEN]
@@ -284,6 +424,10 @@ LOOP
 
 ECHO
 
+; -----------------------------------------------------------
+; requires FIXPOINT_INPUT kernel addon, see forthMSP430FR.asm
+; -----------------------------------------------------------
+
 10000 89,0 POL2REC . .  ; sin, cos --> 
 10000 75,0 POL2REC . .  ; sin, cos --> 
 10000 60,0 POL2REC . .  ; sin, cos -->