.TITLE FLOT2 $FPP=1 ; Enable this to use Floating processor FLOT2:: MOV #2,R0 ; 2 Input params CALL R5CHEK ; Check em MOV (R5)+,R0 ; Number address MOV (R0)+,R1 ; Low order bits MOV (R0)+,R0 ; Hi order bits CALL $FLOT2 ; Float the number MOV (R5)+,R2 ; Get output address MOV R0,(R2)+ ; Transfer hi order MOV R1,(R2)+ ; Lo order RETURN $FLOT2:: .ifndf $FPP MOV R2,-(SP) ; Save MOV #32.,R2 ; Total shift count MOV R0,-(SP) ; Save for sign BGT 10$ ; Positive number BEQ 5$ ; Short cut 1 word integer COM R1 ; Complement Lo COM R0 ; Complement Hi ADD #1,R1 ; Turn it to 2's complement ADC R0 ; And the hi order too BNE 10$ ; 2 word conversionn 5$: MOV R1,R0 ; Move low to high BEQ 35$ ; Totally zero word 6$: MOV #16.,R2 ; current shift count CLR R1 ; No low bits 10$: ASHC #1,R0 ; Shift out 1 bit BCS 20$ ; Found high order bit? SOB R2,10$ ; Continue till done 20$: ADD #200,R2 ; Complete exponent ASH #7,R2 ; Shift exponent to proper place ASHC #-9.,R0 ; Shift mantissa to proper place BIC #177600,R0 ; Clear extra bits in mantissa ADD R2,R0 ; Combine exponent, mantissa BIC #77777,(SP) ; Clear extra bits 35$: ADD (SP)+,R0 ; Combine Sign bit 40$: MOV (SP)+,R2 ; Restore .iff MOV R1,-(SP) MOV R0,-(SP) SETL LDCIF (SP)+,%0 STF %0,-(SP) MOV (SP)+,R0 MOV (SP)+,R1 .ENDC RETURN .END