;PRODUCT CODE DEC-11-NFPMA-A-LA ;COMPUTER PDP-11 ;CONFIGURATION PAPER TAPE CONFIGURATION IS MINIMUM ; 8192 WORDS MEMORY ;SOFTWARE REQUIREMENTS PAL-11S (OR MACRO-11) ; LINK-11S (OR LINK-11) ;PROGRAM NAME FPMP-11 ;VERSION VERSION LEVEL 1 ; PATCH LEVEL A ;DESCRIPTION FLOATING POINT MATH PACKAGE ; PLUS TRAP HANDLER ; (FLOATING POINT SUBROUTINES TAKEN FROM ; DOS-11 FORTRAN IV OTS) ;AUTHOR E. PETERS (TRAP HANDLER & PACKAGE ; INTEGRATION) ;DATE AUGUST, 1972 ; COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., ; MAYNARD, MASSACHUSETTS 01754 .CSECT .IFDF SINGLE CND$2=1 CND$3=1 CND$4=1 CND$6=1 CND$18=1 CND$20=1 CND$30=1 CND$37=1 CND$38=1 CND$39=1 CND$41=1 CND$44=1 CND$46=1 .ENDC .IFDF DOUBLE CND$1=1 CND$5=1 CND$10=1 CND$13=1 CND$14=1 CND$15=1 CND$16=1 CND$19=1 CND$28=1 CND$45=1 CND$47=1 .ENDC .IFDF SINGLE!DOUBLE CND$8=1 CND$9=1 CND$31=1 CND$42=1 .ENDC .IFDF CND$38 CND$2=1 CND$18=1 CND$20=1 CND$21=1 CND$30=1 CND$32=1 .ENDC .IFNDF FPU .IFDF CND$3!CND$20!CND$37!CND$39 CND$2=1 CND$18=1 CND$30=1 .IFDF CND$37 CND$4=1 .ENDC .ENDC .IFDF CND$10!CND$13!CND$15!CND$19 CND$1=1 CND$16=1 CND$28=1 CND$33=1 .IFDF CND$13 CND$11=1 .ENDC .ENDC .IFDF CND$3!CND$10 CND$27=1 .ENDC .IFDF CND$19!CND$20 CND$27=1 CND$35=1 .ENDC .IFDF CND$14 CND$1=1 CND$16=1 .ENDC .IFDF CND$41 CND$2=1 CND$18=1 .ENDC .ENDC .IFDF CND$23 CND$27=1 CND$33=1 .ENDC .IFDF CND$22!CND$26 CND$35=1 .ENDC .IFDF CND$39 CND$33=1 .ENDC .TITLE TRAP02 .IFDF CND$42 .GLOBL TRAPH,$ERRA R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 TRAPH: BIC #17,2(SP) CLR -(SP) MOV R5,-(SP) MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV 20(SP),R3 BIC #20,R3 MOV R3,@#177776 MOV 16(SP),R1 MOV R1,R5 MOV -(R1),R4 MOV R4,R3 BIC #177700,R4 ASL R4 MOV TBL$42(R4),R4 BEQ ERR$42 MOV R4,R2 BIC #140000,R2 ADD PC,R2 PT$42: BIT #40000,R4 BEQ NAD$42 ROLB R3 BPL PLM$42 BCC STK$42 MOV R5,R0 ADD (R5)+,R0 UPC$42: MOV R5,16(SP) STK$42: MOV #FAC$42+6,R5 TST R4 BLT ST4$42 CLR @R5 CLR -(R5) TST (R5)+ ST4$42: MOV @R5,-(SP) MOV -(R5),-(SP) MOV -(R5),-(SP) MOV -(R5),-(SP) TST R4 BLT ST6$42 CMP (R0)+,(R0)+ BR OT2$42 ST6$42: ADD #8.,R0 MOV -(R0),-(SP) MOV -(R0),-(SP) OT2$42: MOV -(R0),-(SP) MOV -(R0),-(SP) MOV #ADR$42,R4 JMP @R2 ADR$42: .WORD .+2 MOV #FAC$42,R5 MOV (SP)+,(R5)+ MOV (SP)+,(R5)+ MOV (SP)+,(R5)+ MOV (SP)+,(R5)+ RET$42: MOV @PC,R0 MOV #FAC$42,R5 TST (R5)+ BLT NEG$42 BGT PLS$42 TST (R5)+ BNE PLS$42 TST (R5)+ BNE PLS$42 TST (R5)+ BNE PLS$42 CLR R0 NEG$42: NEG R0 CMF$42: BIS @#177776,20(SP) PLS$42: TST R0 CM1$42: MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 TST (SP)+ BEQ RTI$42 BPL RT2$42 MOV (SP)+,6(SP) MOV (SP)+,6(SP) CMP (SP)+,(SP)+ RTI RT2$42: MOV (SP)+,2(SP) MOV (SP)+,2(SP) RTI$42: RTI NAD$42: JSR R5,@R2 MOV (PC)+,R5 .WORD FAC$42 MOV R0,(R5)+ MOV R1,(R5)+ MOV R2,(R5)+ MOV R3,(R5)+ BR RET$42 PLM$42: BCC STM$42 MOV R5,R0 TST R4 BGE PL1$42 ADD #8.,R5 BR UPC$42 PL1$42: CMP (R5)+,(R5)+ BR UPC$42 STM$42: MOV SP,R0 ADD #22,R0 INC 14(SP) TST R4 BGE STK$42 NEG 14(SP) BR STK$42 ERR$42: CLR R0 JSR R5,$ERRA BR ERR$42 FAC$42: .WORD 0,0,0,0 .IFDF CND$6 CMR$42: MOV #CAR$42,R4 JMP $CMR CAR$42: .WORD .+2 BIS @#177776,24(SP) CMP (SP)+,(SP)+ BR CM1$42 .ENDC .IFDF CND$5 CMD$42: MOV #CAD$42,R4 JMP $CMD CAD$42: .WORD CMF$42 .ENDC PMODE=40000 DMODE=100000 TBL$42: .WORD 0,0,0,0,0,0,0,0 .WORD 0,0 .IFDF CND$2 .WORD $ADR-PT$42+PMODE .WORD $SBR-PT$42+PMODE .ENDC .IFNDF CND$2 .WORD 0,0 .ENDC .IFDF CND$1 .WORD $ADD-PT$42+PMODE+DMODE .WORD $SBD-PT$42+PMODE+DMODE .ENDC .IFNDF CND$1 .WORD 0,0 .ENDC .IFDF CND$5 .WORD CMD$42-PT$42+PMODE+DMODE .ENDC .IFNDF CND$5 .WORD 0 .ENDC .IFDF CND$6 .WORD CMR$42-PT$42+PMODE .ENDC .IFNDF CND$6 .WORD 0 .ENDC .WORD 0 .IFDF CND$30 .WORD $MLR-PT$42+PMODE .ENDC .IFNDF CND$30 .WORD 0 .ENDC .IFDF CND$28 .WORD $MLD-PT$42+PMODE+DMODE .ENDC .IFNDF CND$28 .WORD 0 .ENDC .IFDF CND$16 .WORD $DVD-PT$42+PMODE+DMODE .ENDC .IFNDF CND$16 .WORD 0 .ENDC .WORD 0 .IFDF CND$18 .WORD $DVR-PT$42+PMODE .ENDC .IFNDF CND$18 .WORD 0 .ENDC .IFDF CND$4 .WORD AINT-PT$42 .ENDC .IFNDF CND$4 .WORD 0 .ENDC .WORD 0,0,0,0,0,0,0 .IFDF CND$37 .WORD SIN-PT$42,COS-PT$42 .ENDC .IFNDF CND$37 .WORD 0,0 .ENDC .IFDF CND$13 .WORD DSIN-PT$42+DMODE .WORD DCOS-PT$42+DMODE .ENDC .IFNDF CND$13 .WORD 0,0 .ENDC .IFDF CND$39 .WORD ATAN-PT$42 .ENDC .IFNDF CND$39 .WORD 0 .ENDC .WORD 0 .IFDF CND$15 .WORD DATAN-PT$42+DMODE .ENDC .IFNDF CND$15 .WORD 0 .ENDC .WORD 0 .IFDF CND$41 .WORD SQRT-PT$42 .ENDC .IFNDF CND$41 .WORD 0 .ENDC .IFDF CND$14 .WORD DSQRT-PT$42+DMODE .ENDC .IFNDF CND$14 .WORD 0 .ENDC .IFDF CND$38 .WORD TANH-PT$42 .ENDC .IFNDF CND$38 .WORD 0 .ENDC .IFDF CND$20 .WORD EXP-PT$42 .ENDC .IFNDF CND$20 .WORD 0 .ENDC .IFDF CND$19 .WORD DEXP-PT$42+DMODE .ENDC .IFNDF CND$19 .WORD 0 .ENDC .IFDF CND$3 .WORD ALOG-PT$42 .WORD ALOG10-PT$42 .ENDC .IFNDF CND$3 .WORD 0,0 .ENDC .IFDF CND$10 .WORD DLOG-PT$42+DMODE .WORD DLOG10-PT$42+DMODE .ENDC .IFNDF CND$10 .WORD 0,0 .ENDC .WORD 0,0,0,0,0,0,0,0,0,0 .IFDF CND$44 .WORD $LDR-PT$42+PMODE .ENDC .IFNDF CND$44 .WORD 0 .ENDC .IFDF CND$45 .WORD $LDD-PT$42+PMODE+DMODE .ENDC .IFNDF CND$45 .WORD 0 .ENDC .IFDF CND$46 .WORD $STR-PT$42+PMODE .ENDC .IFNDF CND$46 .WORD 0 .ENDC .IFDF CND$47 .WORD $STD-PT$42+PMODE+DMODE .ENDC .IFNDF CND$47 .WORD 0 .ENDC .WORD 0,0,0 .ENDC .TITLE $ADD05 .IFDF CND$1 .GLOBL $ADD,$SBD,$ERR R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 A1=6 B1=8. C1=10. D1=12. A2=14. B2=16. C2=18. D2=20. SIGNS=0. MQ=177304 NOR=177312 LSH=177314 ASH=177316 F0=%0 $SBD: ADD #100000,@SP .IFDF FPU $ADD: .WORD 170011 .WORD 172426 .WORD 172026 .WORD 174046 JMP @(R4)+ .ENDC .IFNDF FPU $ADD: MOV R4,-(SP) MOV R5,-(SP) CLR -(SP) CLR R4 CLR R5 ASL D1(SP) ROL C1(SP) ROL B1(SP) ROL A1(SP) BISB A1+1(SP),R4 BEQ A1Z$1 ROLB @SP ASL D2(SP) ROL C2(SP) ROL B2(SP) ROL A2(SP) BISB A2+1(SP),R5 BNE A2N$1 RORB @SP ROR A1(SP) ROR B1(SP) ROR C1(SP) ROR D1(SP) MOV A1(SP),A2(SP) MOV B1(SP),B2(SP) MOV C1(SP),C2(SP) MOV D1(SP),D2(SP) A1Z$1: TST (SP)+ JMP OUT$1 A2N$1: ROLB SIGNS+1(SP) MOVB #1,A2+1(SP) MOVB #1,A1+1(SP) SUB R4,R5 BGT EXA$1 MOV A2(SP),R0 MOV B2(SP),R1 MOV C2(SP),R2 MOV D2(SP),R3 BR SCK$1 EXA$1: ADD R5,R4 MOV A1(SP),R0 MOV B1(SP),R1 MOV C1(SP),R2 MOV D1(SP),R3 MOV A2(SP),A1(SP) MOV B2(SP),B1(SP) MOV C2(SP),C1(SP) MOV D2(SP),D1(SP) SWAB @SP NEG R5 SCK$1: CMPB SIGNS+1(SP),@SP BEQ ECK$1 NEG R3 ADC R2 ADC R1 ADC R0 NEG R2 ADC R1 ADC R0 NEG R1 ADC R0 NEG R0 ECK$1: TST R5 BEQ SFD$1 SFT$1: CMP #-57.,R5 BLE SFR$1 MOV A1(SP),R0 MOV B1(SP),R1 MOV C1(SP),R2 MOV D1(SP),R3 BR NOD$1 SFR$1: CMP #-8.,R5 BLE SR8$1 .IFNDF MULDIV CLR -(SP) TST R0 BPL SF1$1 COM @SP .ENDC .IFDF MULDIV TST R0 .WORD 006746 .ENDC SF1$1: CMP #-16.,R5 BLT S16$1 MOV R2,R3 MOV R1,R2 MOV R0,R1 MOV @SP,R0 ADD #16.,R5 BNE SF1$1 TST (SP)+ BR SFD$1 .IFDF EAE S16$1: CMP #-3,R5 BLE S8A$1 MOV R4,@SP MOV #MQ,R4 MOV R3,@R4 MOV R2,-(R4) MOV R5,@#LSH MOV (R4)+,R2 MOV @R4,R3 CLR @R4 MOV R1,-(R4) MOV R5,@#LSH TST (R4)+ BIS @R4,R2 MOV R1,@R4 MOV R0,-(R4) MOV R5,@#ASH MOV (R4)+,R0 MOV @R4,R1 MOV (SP)+,R4 BR SFD$1 .ENDC .IFNDF EAE&MULDIV S16$1: CMP #-8.,R5 BLE S8A$1 ADD #16.,R5 SL8$1: ASL R3 ROL R2 ROL R1 ROL R0 ROL @SP DEC R5 BGT SL8$1 MOV R2,R3 MOV R1,R2 MOV R0,R1 MOV (SP)+,R0 BR SFD$1 .ENDC .IFDF MULDIV S16$1: CMP #-3,R5 BLE S8A$1 MOV R4,@SP MOV R5,-(SP) MOV R1,R4 .WORD 073005 MOV R2,R5 .WORD 073416 MOV R2,R4 MOV R5,R2 MOV R3,R5 .WORD 073426 MOV R5,R3 MOV (SP)+,R4 BR SFD$1 .ENDC S8A$1: TST (SP)+ SR8$1: ASR R0 ROR R1 ROR R2 ROR R3 INC R5 BLT SR8$1 SFD$1: ADD D1(SP),R3 ADC R2 ADC R1 ADC R0 ADD C1(SP),R2 ADC R1 ADC R0 ADD B1(SP),R1 ADC R0 ADD A1(SP),R0 CMPB SIGNS+1(SP),@SP BNE SUB$1 BIT R0,#1000 BEQ NOD$1 ASR R0 ROR R1 ROR R2 ROR R3 INC R4 NOD$1: SWAB R4 BNE OVF$1 NFL$1: BISB R0,R4 ROR (SP)+ ROR R4 ROR R1 ROR R2 ROR R3 ADC R3 ADC R2 ADC R1 ADC R4 BVS OVR$1 BCS OVR$1 MOV R4,A2+0-2(SP) MOV R1,B2+0-2(SP) MOV R2,C2+0-2(SP) MOV R3,D2+0-2(SP) OUT$1: MOV (SP)+,R5 MOV (SP)+,R4 ADD #8.,SP JMP @(R4)+ OVF$1: TST (SP)+ OVR$1: JSR R5,$ERR BR OUT$1 .BYTE 3 .BYTE 1 UTS$1: TST R4 BGT NOD$1 UNF$1: JSR R5,$ERR BR UND$1 .BYTE 5 .BYTE 1 UND$1: CLR R0 CLR R1 CLR R2 CLR R3 ZER$1: CLR @SP CLR R4 BR NFL$1 SUB$1: TST R0 BGT BT9$1 BEQ ZTS$1 NEG R3 ADC R2 ADC R1 ADC R0 NEG R2 ADC R1 ADC R0 NEG R1 ADC R0 SWAB @SP NEG R0 BEQ ZTS$1 BT9$1: .IFDF EAE BIT R0,#740 BNE B9A$1 MOV R4,-(SP) MOV #MQ,R4 MOV R1,@R4 MOV R0,-2(R4) CLR @#NOR MOV @#NOR,-(SP) SUB #6,@SP MOV R1,@R4 MOV R0,-(R4) MOV @SP,@#LSH MOV (R4)+,R0 MOV @R4,R1 MOV R2,@R4 CLR -(R4) MOV @SP,@#LSH BIS (R4)+,R1 MOV R3,@R4 MOV R2,-(R4) MOV @SP,@#LSH MOV (R4)+,R2 MOV @R4,R3 SUB (SP)+,@SP MOV (SP)+,R4 BGT NOD$1 BR UNF$1 .ENDC B9A$1: BIT R0,#400 BNE UTS$1 DEC R4 ASL R3 ROL R2 ROL R1 ROL R0 BR B9A$1 ZTS$1: SUB #8.,R4 TST R1 BNE ZT1$1 SUB #16.,R4 MOV R2,R1 BNE ZT2$1 SUB #16.,R4 TST R3 BEQ ZER$1 BISB R3,R1 SWAB R1 SWAB R3 BISB R3,R0 CLR R3 BR BT9$1 ZT2$1: MOV R3,R2 CLR R3 ZT1$1: SWAB R1 BISB R1,R0 CLRB R1 SWAB R2 BISB R2,R1 CLRB R2 SWAB R3 BISB R3,R2 CLRB R3 BR BT9$1 .ENDC .ENDC .TITLE $ADR04 .IFDF CND$2 .GLOBL $ADR,$SBR,$ERR R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 SIGNS=0 A1=4 B1=6 A2=8. B2=10. AC=177302 MQ=177304 NOR=177312 ASH=177316 F0=%0 $SBR: ADD #100000,@SP .IFDF FPU $ADR: .WORD 170001 .WORD 172426 .WORD 172026 .WORD 174046 JMP @(R4)+ .ENDC .IFNDF FPU $ADR: MOV R4,-(SP) CLR -(SP) CLR R2 CLR R3 ASL B1(SP) ROL A1(SP) BISB A1+1(SP),R3 BEQ OUT$2 ROLB @SP ASL B2(SP) ROL A2(SP) BISB A2+1(SP),R2 BNE A2N$2 RORB @SP ROR A1(SP) ROR B1(SP) MOV A1(SP),A2(SP) MOV B1(SP),B2(SP) BR OUT$2 A2N$2: ROLB SIGNS+1(SP) MOVB #1,A2+1(SP) MOVB #1,A1+1(SP) SUB R3,R2 BGT EXA$2 MOV A2(SP),R0 MOV B2(SP),R1 BR SCK$2 EXA$2: ADD R2,R3 MOV A1(SP),R0 MOV B1(SP),R1 MOV A2(SP),A1(SP) MOV B2(SP),B1(SP) SWAB @SP NEG R2 SCK$2: CMPB SIGNS+1(SP),@SP BEQ ECK$2 NEG R1 ADC R0 NEG R0 ECK$2: TST R2 BEQ SFD$2 SFT$2: CMP #-25.,R2 BLE SFR$2 MOV A1(SP),R0 MOV B1(SP),R1 BR NOD$2 .IFDF EAE SFR$2: MOV R1,@#MQ MOV R0,@#AC MOV R2,@#ASH MOV @#MQ,R1 MOV @#AC,R0 .ENDC .IFDF MULDIV SFR$2: .WORD 073002 .ENDC .IFNDF EAE&MULDIV SFR$2: CMP #-8.,R2 BLE SF0$2 CLR R4 TST R0 BPL NCP$2 COM R4 NCP$2: CMP #-16.,R2 BLT SRL$2 MOV R0,R1 MOV R4,R0 ADD #16.,R2 BEQ SFD$2 SRL$2: CMP #-8.,R2 BLE SF0$2 ADD #16.,R2 SFL$2: ASL R1 ROL R0 ROL R4 DEC R2 BGT SFL$2 MOV R0,R1 MOV R4,R0 BR SFD$2 SF0$2: ASR R0 ROR R1 INC R2 BLT SF0$2 .ENDC SFD$2: ADD A1(SP),R0 ADD B1(SP),R1 ADC R0 CMPB SIGNS+1(SP),@SP BNE SUB$2 BIT R0,#1000 BEQ NOD$2 ASR R0 ROR R1 INC R3 NOD$2: SWAB R3 BNE OVR$2 BISB R0,R3 ROR @SP ROR R3 ROR R1 ADC R1 ADC R3 BVS OVR$2 BCS OVR$2 STR$2: MOV R3,A2(SP) MOV R1,B2(SP) OUT$2: TST (SP)+ MOV (SP)+,R4 CMP (SP)+,(SP)+ JMP @(R4)+ OVR$2: JSR R5,$ERR BR OUT$2 .BYTE 3 .BYTE 2 SUB$2: TST R0 BGT BT9$2 BEQ ZTS$2 NEG R0 NEG R1 SBC R0 SWAB @SP BT9$2: .IFDF EAE BIT R0,#700 BNE B9A$2 MOV R1,@#MQ MOV R0,@#AC CLR @#NOR SUB @#NOR,R3 MOV #-6,@#ASH ADD #6,R3 BLE UNF$2 MOV @#AC,R0 MOV @#MQ,R1 BR NOD$2 .ENDC B9A$2: BIT R0,#400 BNE UTS$2 DEC R3 ASL R1 ROL R0 BR B9A$2 ZTS$2: TST R1 .IFDF EAE BNE BT9$2 BR ZER$2 .ENDC .IFNDF EAE BEQ ZER$2 SWAB R1 BISB R1,R0 CLRB R1 SUB #8.,R3 BR BT9$2 .ENDC UTS$2: TST R3 BGT NOD$2 UNF$2: JSR R5,$ERR BR UND$2 .BYTE 5 .BYTE 2 UND$2: CLR R1 ZER$2: CLR R3 BR STR$2 .ENDC .ENDC .EOT