.TITLE DVR ; JEFFREY KODOSKY ARL MAY76 ; ; UTILITY: FLOATING POINT DIVIDER ; ENTRY: 2 ARGS (SP) ; ; EXIT: 1 ARG (SP) =F2/F1 ; C BIT SET AND +-INF RETURNED IF OVERFLOW ; ERRORS: NONE ; CALLS: NONE ; R5 PRESERVED ; ASSEMBLY SWITCHES: FPU,FIS,EAE,EIS ;(THIS ROUTINE IS A MODIFIED VERSION OF $DVR08 OF FPMP) ; RESTRICTIONS: DO NOT CALL THIS ROUTINE WITH F1=0. .GLOBL DVR MQ=177304 NOR=177312 LSH=177314 ASH=177316 F0=%0 F1=%1 D=8. N=12. Q=12. .IFDF FPU DVR: .WORD 170001 .WORD 172526 .WORD 172426 .WORD 174401 .WORD 174046 .WORD 170000 BVS INF JMP @-(R4) .GLOBL $$INF ;GOTO ADR FPU OVERFLOW CODE INF: JMP $$INF .ENDC .IFNDF FPU .IFDF FIS DVR: FDIV SP BVS UOVFL JMP @-(R4) .GLOBL $$INF0 ;GOTO MLR FIS OVER/UNDER FLOW CODE UOVFL: JMP $$INF0 .ENDC .IFNDF FIS DVR: MOV R4,-(SP) MOV R5,-(SP) CLR R0 CLR R1 CLR -(SP) ASL N+0-2(SP) ROL @SP CLR -(SP) BISB N+1(SP),@SP BEQ ZER$18 BISB N(SP),R0 SWAB R0 SEC ROR R0 BISB N+3(SP),R0 BISB N+2(SP),R1 SWAB R1 CLR R2 CLR R3 ASL D(SP) ADC 2(SP) BISB D+1(SP),R2 SUB R2,@SP CLR R2 BISB D(SP),R2 SWAB R2 SEC ROR R2 BISB D+3(SP),R2 BISB D+2(SP),R3 SWAB R3 .IFDF EAE!EIS CLC ROR R0 ROR R1 ROR R2 ROR R3 .ENDC CMP R0,R2 BLO DHI$18 .IFNDF EAE&EIS BHI DLW$18 CMP R1,R3 BHI DLW$18 BNE DHI$18 CLR Q(SP) INC @SP CLR R5 BR FLT$18 .ENDC .IFDF EAE!EIS BHIS DLW$18 .ENDC ZER$18: CMP (SP)+,(SP)+ BR EC1$18 OV1$18: ROL -(SP) OVR$18: MOV #-1,Q+2-2(SP) CLR Q+0-2(SP) ROR (SP)+ ROR Q+0-4(SP) MOV (SP)+,R5 MOV (SP)+,R4 CMP (SP)+,(SP)+ SEC JMP @-(R4) UND$18: TST (SP)+ EC1$18: CLR Q+0-4(SP) CLR Q+2-4(SP) BR RTN$18 DLW$18: ROR R0 ROR R1 INC @SP .IFNDF EAE&EIS DHI$18: MOV #9.,R4 JSR PC,DV1$18 MOVB R5,Q(SP) TST R4 BEQ NT0$18 CLR R5 BR FLT$18 NT0$18: MOV #16.,R4 JSR PC,DV1$18 .ENDC .IFDF EAE!EIS DHI$18: CLC ROR R3 ROR R0 ROR R1 .ENDC .IFDF EAE MOV #MQ,R5 MOV R1,@R5 MOV R0,-(R5) MOV R2,-(R5) TST (R5)+ MOV (R5)+,R1 MOV (R5)+,R4 MOV R3,@R5 TST -(R5) ASR R1 SUB R1,-(R5) DEC @#ASH MOV R2,-(R5) CMP (R5)+,(R5)+ NEG @R5 MOV #2,@#ASH ADD R4,-(R5) CLR @#NOR SUB @#NOR,@SP MOV #-6,@#LSH MOV (R5)+,Q(SP) MOV @R5,R5 .ENDC .IFDF EIS MOV R0,R4 MOV R1,R5 .WORD 071402 MOV R5,R1 MOV R4,R0 .WORD 070403 ASR R1 SUB R1,R4 .WORD 073427,-1 .WORD 071402 NEG R4 .WORD 073427,-14. ADD R0,R4 NBT$18: .WORD 073427,1 BMI NBI$18 DEC @SP BR NBT$18 NBI$18: .WORD 073427,-7 MOV R4,Q(SP) .ENDC FLT$18: MOV (SP)+,R4 ADD #200,R4 BLE UND$18 CMP #377,R4 BLT OVR$18 MOVB R4,Q+1-2(SP) SGN$18: ROR (SP)+ ROR Q+0-4(SP) ROR R5 ADC R5 MOV R5,Q+2-4(SP) ADC Q+0-4(SP) BCS OV1$18 BVS OV1$18 RTN$18: MOV (SP)+,R5 MOV (SP)+,R4 CMP (SP)+,(SP)+ CLC JMP @-(R4) .IFNDF EAE&EIS DV1$18: ASL R5 ASL R1 ROL R0 BCS GO$18 CMP R2,R0 BHI NGO$18 BLO GO$18 CMP R3,R1 BHI NGO$18 BEQ NQD$18 GO$18: SUB R3,R1 SBC R0 SUB R2,R0 INC R5 NGO$18: DEC R4 BGT DV1$18 RTS PC NQD$18: INC R5 BR EQ1$18 EQ2$18: ASL R5 EQ1$18: DEC R4 BGT EQ2$18 INC R4 RTS$18: RTS PC .ENDC .ENDC .ENDC .END