.TITLE ADCONV .IDENT /RICE01/ .enabl lc ; ; CALL ADCONV(ARRAY,IARRAY,SCALES,ISIZE) ; ; J. CLEMENT MAY 1982 ADCONV:: MOV #4,R0 CALL R5CHEK MOV (R5)+,R2 ; Output array MOV (R5)+,R3 ; Input array MOV (R5)+,R4 ; Scale array MOV @(R5)+,R5 ; Array size LDFPS #0 ; Single precision + 1 word int. 1$: MOV (R3)+,R0 ; Value MOV R0,R1 ; Save it BIC #34000,R0 ; Clear scale and sign bits BIT #4000,R1 ; Sign bit ? BEQ 2$ ; No NEG R0 ; Now is negative number 2$: LDCIF R0,%0 ; Convert number to floating MULF (R4)+,%0 ; Multiply by scale ASH #-10.,R1 ; Shift scale bits over BIC #177763,R1 ; Strip off extra MULF SCAL0(R1),%0 ; Perform range conversion STF %0,(R2)+ ; Return result in Volts SOB R5,1$ RETURN SCAL0: .FLT2 0.0001 ; 200 mV range .FLT2 0.0005 ; 1 V range .FLT2 0.005 ; 10 V range .FLT2 0.0 ; Unknown range .END