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
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)
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
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
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
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"
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
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
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
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
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"
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
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
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
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
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