OSDN Git Service

V309
[fast-forth/master.git] / ADDON / FixPoint.asm
index 7f69be9..da8e81a 100644 (file)
@@ -68,10 +68,10 @@ UDMT1       CMP #0,X
             BIT Y,TOS           ; 1 TEST ACTUAL BIT MRhi
             JMP UDMT3
 UDMT2       BIT X,W             ; 1 TEST ACTUAL BIT MRlo
-UDMT3       JZ UDMT4            ; 
+UDMT3       JZ UDMT4            ;
             ADD IP,4(PSP)       ; 3 IF 1: ADD MDlo TO RESlo
             ADDC T,2(PSP)       ; 3      ADDC MDhi TO REShi
-            ADDC M,Q            ; 1      ADDC MDLO TO RESLO        
+            ADDC M,Q            ; 1      ADDC MDLO TO RESLO
             ADDC P,R            ; 1      ADDC MDHI TO RESHI
 UDMT4       ADD IP,IP           ; 1 (RLA LSBs) MDlo *2
             ADDC T,T            ; 1 (RLC MSBs) MDhi *2
@@ -90,7 +90,7 @@ UDMT4       ADD IP,IP           ; 1 (RLA LSBs) MDlo *2
             FORTHWORD "F*"          ; s15.16 * s15.16 --> s15.16 result
             MOV 2(PSP),S        ;
             XOR TOS,S           ; MDhi XOR MRhi --> S keep sign of result
-            BIT #8000h,2(PSP)   ; MD < 0 ? 
+            BIT #8000h,2(PSP)   ; MD < 0 ?
             JZ FSTAR1           ; no
             XOR #-1,2(PSP)
             XOR #-1,4(PSP)
@@ -98,7 +98,7 @@ UDMT4       ADD IP,IP           ; 1 (RLA LSBs) MDlo *2
             ADDC #0,2(PSP)
 FSTAR1       mDOCOL
             .word DABS,UDMT
-            .word   $+2         ; -- RES0 RES1 RES2 RES3 
+            .word   $+2         ; -- RES0 RES1 RES2 RES3
             MOV @RSP+,IP
             MOV @PSP+,TOS       ; -- RES0 RES1 RES2
             MOV @PSP+,0(PSP)    ; -- RES1 RES2
@@ -108,7 +108,7 @@ FSTARSIGN   AND #-1,S           ; clear V, set N
             XOR #-1,TOS
             ADD #1,0(PSP)
             ADDC #0,TOS
-FSTAREND    MOV @IP+,PC 
+FSTAREND    MOV @IP+,PC
 
 
             FORTHWORD "F/"          ; s15.16 / s15.16 --> s15.16 result
@@ -120,7 +120,7 @@ FDIV        PUSHM #4,rDOVAR     ; 6 save rDOVAR to rDOCOL regs to use M to R ali
             MOV #0,T            ; DVDlo = 0
             MOV X,S             ;
             XOR TOS,S           ; MDhi XOR MRhi --> S keep sign of result
-            AND #-1,X           ; MD < 0 ? 
+            AND #-1,X           ; MD < 0 ?
             JGE FDIV1           ; no
             XOR #-1,Y           ; lo
             XOR #-1,X           ; hi
@@ -132,7 +132,7 @@ FDIV1       AND #-1,TOS
             XOR #-1,TOS
             ADD #1,M
             ADDC #0,TOS
-FDIV2   
+FDIV2
 ; unsigned 32-BIT DIVIDEND : 32-BIT DIVISOR --> 32-BIT QUOTIENT, 32-BIT REMAINDER
 ; DVDhi|DVDlo : DVRhi|DVRlo --> QUOThi|QUOTlo, REMAINDER
 ;            FORTHWORD "UD/MOD"
@@ -149,18 +149,18 @@ Q322        JNC Q323            ;2 yes: REM U< DIV
 Q323        ADDC R,R            ;1 RLC quotLO
             ADDC Q,Q            ;1 RLC quotHI
             SUB #1,P            ;1 Decrement loop counter
-            JN Q6432END         ;2 loop back if count>=0    
+            JN Q6432END         ;2 loop back if count>=0
             ADD T,T             ;1 RLA DVDlo
             ADDC Y,Y            ;1 RLC DVDhi
             ADDC X,X            ;1 RLC REMlo
             ADDC W,W            ;1 RLC REMhi
-            JNC Q321            ; 
+            JNC Q321            ;
             SUB M,X             ;1 REMlo - DIVlo
             SUBC TOS,W          ;1 REMhi - DIVhi
             BIS #1,SR
             JMP Q323
 Q6432END
-;            MOV X,4(PSP)       ; REMlo    
+;            MOV X,4(PSP)       ; REMlo
 ;            MOV W,2(PSP)       ; REMhi
 ;            ADD #4,PSP         ; skip REMlo REMhi
             MOV R,0(PSP)        ; QUOTlo
@@ -184,7 +184,7 @@ FNUMS       MOV @PSP,S          ; -- Qlo Qhi len        S = Qhi
             MOV TOS,2(PSP)      ; -- len Qlo len
             MOV #FNUMSNEXT,IP   ;
 FNUMSLOOP   MOV &BASE,TOS       ; -- len Qlo base
-            MOV #UMSTAR,PC 
+            MOV #UMSTAR,PC
 FNUMSNEXT   .word   $+2         ; -- len RESlo digit
             SUB #2,IP
             CMP #10,TOS         ;                       digit to char
@@ -203,7 +203,7 @@ FNUMS2CHAR  ADD #30h,TOS        ; -- len RESlo char
             MOV #0,0(PSP)       ; -- Qhi 0 len
             MOV #HOLDS_ORG,X    ; -- Qhi 0 len          X= org
             JMP HOLDS1
-            
+
     .ELSEIF ; hardware multiplier
 
             FORTHWORD "F*"          ; signed s15.16 multiplication --> s15.16 result
@@ -227,7 +227,7 @@ FDIV        PUSHM #4,rDOVAR     ; 6 PUSHM rDOVAR to rDOCOL to use M to R alias
             MOV #0,T            ; DVDlo = 0
             MOV X,S             ;
             XOR TOS,S           ; MDhi XOR MRhi --> S keep sign of result
-            AND #-1,X           ; MD < 0 ? 
+            AND #-1,X           ; MD < 0 ?
             JGE FDIV1           ; no
             XOR #-1,Y           ; lo
             XOR #-1,X           ; hi
@@ -239,7 +239,7 @@ FDIV1       AND #-1,TOS
             XOR #-1,TOS
             ADD #1,M
             ADDC #0,TOS
-FDIV2   
+FDIV2
 ; unsigned 32-BIT DIVIDEND : 32-BIT DIVISOR --> 32-BIT QUOTIENT, 32-BIT REMAINDER
 ; DVDhi|DVDlo : DVRhi|DVRlo --> QUOThi|QUOTlo, REMAINDER
 ;            FORTHWORD "UD/MOD"
@@ -256,19 +256,19 @@ Q322        JNC Q323            ;2 yes: REM U< DIV
 Q323        ADDC R,R            ;1 RLC quotLO
             ADDC Q,Q            ;1 RLC quotHI
             SUB #1,P            ;1 Decrement loop counter
-            JN Q6432END         ;2 loop back if count>=0    
+            JN Q6432END         ;2 loop back if count>=0
             ADD T,T             ;1 RLA DVDlo
             ADDC Y,Y            ;1 RLC DVDhi
             ADDC X,X            ;1 RLC REMlo
             ADDC W,W            ;1 RLC REMhi
-            JNC Q321            ; 
+            JNC Q321            ;
             SUB M,X             ;1 REMlo - DIVlo
             SUBC TOS,W          ;1 REMhi - DIVhi
             BIS #1,SR
             JMP Q323
 Q6432END
-;            MOV X,4(PSP)       ; REMlo    
-;            MOV W,2(PSP)       ; REMhi    
+;            MOV X,4(PSP)       ; REMlo
+;            MOV W,2(PSP)       ; REMhi
 ;            MOV @IP+,PC        ; 33 words
             AND #-1,S           ; clear V, set N
             JGE FDIVEND         ; if positive
@@ -279,7 +279,7 @@ Q6432END
 FDIVEND     MOV R,0(PSP)        ; QUOTlo
             MOV Q,TOS           ; QUOThi
             POPM #4,rDOVAR      ; 6 restore rDOCOL to rDOVAR
-            MOV @IP+,PC 
+            MOV @IP+,PC
 
 ; F#S    Qlo Qhi u -- Qhi 0   convert fractionnal part of Q15.16 fixed point number
 ;                             with u digits
@@ -290,7 +290,7 @@ FNUMS       MOV 2(PSP),X        ; -- Qlo Qhi u      X = Qlo
             MOV TOS,T           ;                   T = limit
             MOV #0,S            ;                   S = count
 FNUMSLOOP   MOV @PSP,&MPY       ;                   Load 1st operand
-            MOV &BASE,&OP2      ;                   Load 2nd operand
+            MOV &BASEADR,&OP2   ;                   Load 2nd operand
             MOV &RES0,0(PSP)    ; -- Qhi Qlo' x     low result on stack
             MOV &RES1,TOS       ; -- Qhi Qlo' digit high result in TOS
             CMP #10,TOS         ;                   digit to char
@@ -305,13 +305,13 @@ FNUMS2CHAR  ADD #30h,TOS
             MOV #0,0(PSP)       ; -- Qhi 0 len
             MOV #HOLDS_ORG,X    ; -- Qhi 0 len      X= org
             JMP HOLDS1
-            
+
     .ENDIF ; of hardware MPY
 
             FORTHWORD "F."          ; display a Q15.16 number with 4 digits after comma
             MOV TOS,S           ; S = sign
             MOV #4,T            ; T = 4     preset 4 digits for base 16 by default
-            MOV &BASE,W
+            MOV &BASEADR,W
             CMP #0Ah,W
             JNZ FDOT1           ;           if not base 10
             ADD #1,T            ; T = 5     set 5 digits
@@ -320,18 +320,18 @@ FDOT1       CMP #2,W            ;
             JNZ FDOT2           ;           if not base 2
             MOV #10h,T          ; T = 16    set 16 digits
 FDOT2       PUSHM #3,IP         ;                   R-- IP S=sign T=#digit
-            ASMtoFORTH
+            mASM2FORTH
             .word   LESSNUM     ; -- uQlo Qhi
             .word   DABS        ; -- uQlo uQhi      R-- IP sign #digit
             .word   RFROM       ; -- uQlo uQhi u    R-- IP sign
-            .word   FNUMS       ; -- uQhi 0     
-            .word   LIT,2Ch,HOLD;                   $2C = char ','
+            .word   FNUMS       ; -- uQhi 0
+            .word   LIT,',',HOLD;
             .word   NUMS        ; -- 0 0
             .word   RFROM       ; -- 0 0 Qhi        R-- IP
-            .word   SIGN        ; -- 0 0 
-            .word   NUMGREATER  ; -- addr len 
+            .word   SIGN        ; -- 0 0
+            .word   NUMGREATER  ; -- addr len
             .word   TYPE        ; --
-            .word   FBLANK,EMIT ; --      
+            .word   BL,EMIT     ; --
             .word   EXIT
 
             FORTHWORD "S>F"         ; convert a signed number to a Q15.16 (signed) number