.TITLE FIX2 $FPP=1 ; Enable this to use floating processor ; ; CALL FIX2(A,I) ; Converts floatin point number A to ; 2 word integer I ; ; CALL $FIX2 ; Converts floating point number in R0,R1 to 2 word integer ; FIX2:: MOV #2,R0 ; 2 Input params CALL R5CHEK ; Check em MOV (R5)+,R2 MOV (R2)+,R0 ; hi order MOV (R2)+,R1 ; Lo order CALL $FIX2 ; Convert MOV (R5)+,R2 ; Output address MOV R1,(R2)+ MOV R0,(R2)+ RETURN $FIX2:: .ifndf $FPP MOV R2,-(SP) MOV R0,-(SP) ; Save sign MOV R0,R2 ; And exponent ASH #-7,R2 ; Get exponent into lo bits BIC #177400,R2 ; Complete exponent SUB #200+24.,R2 ; Now is shift count CMP R2,#8. ; Is it too big? BGT 20$ ; Yes BIC #177600,R0 ; Clear exponent part of floating ADD #200,R0 ; Put back hidden bit ASHC R2,R0 ; Shift to proper magnitude BVC 30$ ; No overflow 20$: MOV #77777,R0 ; Set to max MOV #177776,R1 ; All the way 30$: TST (SP)+ ; Sign of result?? BGE 40$ ; Positive COM R0 COM R1 ADD #1,R1 ; Make 2's complement ADC R0 40$: MOV (SP)+,R2 .iff MOV R1,-(SP) MOV R0,-(SP) SETL LDF (SP)+,%0 STCFI %0,-(SP) MOV (SP)+,R0 MOV (SP)+,R1 .ENDC RETURN .END