.TITLE $MLD $VERSN 05 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORP., MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .CSECT .GLOBL $MLD,$ERRA ; $MLD THE DOUBLE MULTIPLY ROUTINE ; CALLED IN POLISH MODE. ; REPLACES THE TOP TWO DOUBLES ON THE STACK ; WITH THEIR PRODUCT. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 MQ=177304 A=8. B=16. RESLT=12. SIGN=2 F0=%0 .IFDF  .TITLE $MLI $VERSN 05 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .CSECT .GLOBL $MLI,$ERRA ; $MLI ---- INTEGER MULTIPLY ; CALLED IN THE POLISH MODE ; REPLACE THE TWO INTEGERS ON THE TOP OF THE STACK ; WITH THEIR PRODUCT R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 SR=177311 MQ=177304 .IFNDF EAE&MULDIV $MLI: CLR R0 ;CLEAR PRO .TITLE $MLR $VERSN 07 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .CSECT .GLOBL $MLR,$ERRA ; $MLR THE REAL MULTIPLY ROUTINE ; ; ; CALLED IN POLISH MODE. ; REPLACES THE TOP TWO REALS ON THE STACK ; WITH THEIR PRODUCT. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 MQ=177304 SR=177311 LSH=177314 F0=%0 A=8. B=12. R .TITLE $MOD $VERSN 02 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL MOD,$DVI,$MLI,$POLSH ; THE FORTRAN MOD FUNCTION ; CALLING SEQUENCE: ; ; FORTRAN STANDARD (2 ARGS) ; ; RETURNS ARG1-(ARG1/ARG2)*ARG2 IN R0 ; R0=%0 R4=%4 R5=%5 SP=%6 MOD: MOV @2(R5),-(SP) ;PUSH FIRST ARG MOV @4(R5),-(SP) ;PUSH SECOND ARG MOV @2(R5 FPU $MLD: .WORD 170011 ;;SETD .WORD 172426 ;;LDD (SP)+,F0 ;GET OPERAND .WORD 171026 ;;MULD (SP)+,F0 ;PRODUCT .WORD 174046 ;;STD F0,-(SP) ;PRODUCT TO STACK JMP @(R4)+ .ENDC .IFNDF FPU $MLD: MOV R4,-(SP) MOV R5,-(SP) ASL A+0-4(SP) ;SHIFT MULTIPLICAND ROL -(SP) ;KEEP SIGN CLR -(SP) ;CLEAR EXPONENT MOVB A+1(SP),@SP ;KEEP MULTIPLICAND EXPONENT BEQ ZERO ;JUMP IF ANSWER IS ZERO MOVB A(SP),A+1(SP) ;SHIFT FRACTION LEFT SEC ;INSERT NORMAL BIT ROR A(SP) MOVB A+3(SP),A(SP) SWAB A+ DUCT SIGN MOV (SP)+,R1 ;GET MULTIPLICAND BGT P1 ;JUMP IF + BEQ ZERO ;JUMP IF ANSWER IS ZERO INC R0 ;NOTE - NEG R1 P1: MOV @SP,R3 ;GET MULTIPLIER BGT P2 BEQ ZERO INC R0 ;FORM RESULT SIGN NEG R3 P2: MOV R4,-(SP) ;SAVE R4 MOV #8.,R4 ;SET UP FOR LOW EIGHT BITS CMP R1,R3 BGE CLR ;JUMP IF MULTIPLIER SMALLER MOV R1,R2 ;IF NOT MAKE IT SO MOV R3,R1 MOV R2,R3 CLR: CLR R2 ;CLEAR HIGH ORDER PRODUCT MUL: ROR R2 ;SHIFT PRODUCT ROR R3 BCC CYCL ;JUMP IF MULTIPLIER BIT IS 0 ADD R1, ESLT=8. SIGN=2 .IFDF FPU $MLR: .WORD 170001 ;;SETF .WORD 172426 ;;LDF (SP)+,F0 ;GET MULTIPLICAND .WORD 171026 ;;MULF (SP)+,F0 ;MULTIPLY .WORD 174046 ;;STF F0,-(SP) ;PRODUCT TO STACK JMP @(R4)+ .ENDC .IFNDF FPU .IFDF FIS $MLR: FMUL SP JMP @(R4)+ .ENDC .IFNDF FIS $MLR: MOV R4,-(SP) MOV R5,-(SP) .IFNDF EAE&MULDIV MOV A+0-4(SP),R2 ASL R2 ;SHIFT MULTIPLICAND ROL -(SP) ;KEEP SIGN CLR -(SP) ;CLEAR EXPONENT SWAB R2 MOVB R2,@SP ;KEEP MULTIPLICAND EXPONENT BEQ ZERO1 ;JUMP ),-(SP) MOV @4(R5),-(SP) JSR R4,$POLSH ;ENTER POLISH MODE .WORD $DVI,$MLI,SBI ;(ARG1/ARG2)*ARG2 SBI: SUB (SP)+,@SP ;ARG1-(ARG1/ARG2)*ARG2 MOV (SP)+,R0 ;POP RESULT .F4RTN .END 2(SP) MOVB A+5(SP),A+2(SP) SWAB A+4(SP) MOVB A+7(SP),A+4(SP) SWAB A+6(SP) CLRB A+6(SP) ;MAKE ROOM FOR EXTRA BITS ASL B(SP) ;SHIFT HIGH MULTIPLIER ADC SIGN(SP) ;GET PRODUCT SIGN TSTB B+1(SP) BNE NONZ ;JUMP IF NOT ZERO ZERO: CMP (SP)+,(SP)+ ;FLUSH SIGN AND EXPONENT ZERO1: JMP ZERO2 NONZ: CLR R0 ;CLEAR PRODUCT CLR R1 .IFNDF EAE&MULDIV CLR R2 CLR R3 CLR R5 ;CLEAR C BIT OVERFLOW CATCHER ROR B(SP) ;SIGN IS NOW 0 MOV #16.,-(SP) ;PUSH ITERATION COUNT MOV B+6+2(SP),R4 ;GET LOWER2 ;ADD IN MULTIPLICAND CYCL: DEC R4 ;COUNT LOOP BGT MUL MOV (SP)+,R4 ;RESTORE R4 TSTB R3 ;TEST HIGH MULTIPLIER BNE OVER ;JUMP IF MULTIPLIER NOT GONE BISB R2,R3 ;MOVE PRODUCT RIGHT SWAB R3 CLRB R2 SWAB R2 ASR R2 ;ONE LAST SHIFT BNE OVER ;JUMP IF PRODUCT EXCEEDS 15 BITS ROR R3 NEG R3 ;MAKE - BPL OVER ;JUMP IF TOO BIG ROR R0 ;GET PRODUCT SIGN BCS OUT ;JUMP IF - NEG R3 ;MAKE + BVS OVER OUT: MOV R3,@SP ;MOVE OUT RESULT JMP @(R4)+ ;RETURN NEGM: NEG R3 ;TEST FOR OCTAL 1000 IF ANSWER IS ZERO SEC ;INSERT NORMAL BIT ROR R2 CLRB R2 BISB A+3(SP),R2 CLR R3 BISB A+2(SP),R3 SWAB R3 ASL B(SP) ;SHIFT HIGH MULTIPLIER ADC SIGN(SP) ;GET PRODUCT SIGN TSTB B+1(SP) BEQ ZERO1 ;JUMP IF ZERO ROR B(SP) ;SIGN IS NOW ZERO CLR R0 ;CLEAR PRODUCT CLR R1 MOV B+2(SP),R4 ;GET LOW ORDER MULTIPLIER BEQ B2Z B2NZ: MOV #15.,R5 JSR PC,MULT0 JSR PC,MULT ;DO LAST LOW BIT FULL PRECISION B2Z: MOV B(SP),R4 ;GET HIGH ORDER BITS MOV #7,R5 ;THERE ARE ONLY SEVEN OF THEM JSST ORDER MULTIPLER BEQ B6Z ;JUMP IF NO BITS HERE JSR PC,MULT0 MOV #16.,@SP ;RESTORE COUNT B6Z: MOV B+4+2(SP),R4 ;GET NEXT LOWEST FRACTION BNE B4NZ ;JUMP IF WORK TO DO TST B+6+2(SP) BEQ B4Z ;JUMP IF NO PRODUCT YET B4NZ: JSR PC,MULT2 JSR PC,MULT ;ONE BIT FULL PRECISION MOV #16.,@SP B4Z: MOV B+2+2(SP),R4 ;GET NEXT TO HIGHEST ORDER FRACT BNE B2NZ TST B+4+2(SP) BNE B2NZ TST B+6+2(SP) BEQ B2Z B2NZ: JSR PC,MULT B2Z: MOV B+0+2(SP),R4 ;GET HIGH ORDER BITS MOV #7,@SP ;THERE ARE ONLY00 BVC OVER ;JUMP IF NOT ROR R0 ;TEST FOR NEGATIVE RESULT BCS OUT ;YES, WE CAN HANDLE THIS BR OVER ;OVERFLOW ZERO: CLR @SP ;CLEAR PRODUCT JMP @(R4)+ ;RETURN .ENDC ; $MLI CODE FOR THE EAE .IFDF EAE $MLI: MOV #MQ,R0 ;GET MQ ADDRESS MOV (SP)+,(R0)+ ;MULTIPLIER TO MQ MOV (SP)+,@R0 ;MULTIPLICAND TO MUL MOV -(R0),-(SP) ;PRODUCT TO STACK BITB #2,SR BEQ OVER ;JUMP IF PRODUCT NOT SINGLE PRECISION JMP @(R4)+ ;RETURN TO USER .ENDC ; $MLI FOR THE MULDIV .IFDF MULDIV $MLI: MOV (SP)+,R PC,MULT JSR PC,MULT1 ;GO DO THE NORMAL BIT ADD (SP)+,R4 ;ADD EXPONENTS .ENDC ; EAE CODE .IFDF EAE ; (A1+A2*2**-16)*(B1+B2*2**-16) MOV #MQ,R4 ;POINT TO MQ MOV #100000,R5 ;GET LEADING BIT MOV B+2-4(SP),@R4 ;LOW ORDER B TO MQ MOV B+0-4(SP),-(R4) ;HIGH TO AC BEQ ZERO ;JUMP IF 0 INC @#LSH ;GET SIGN RORB @#SR ROL -(SP) ;SAVE IT MOV (R4)+,-(SP) ;SAVE EXPONENT CLRB @SP ;RIGHT JUSTIFY IT SWAB @SP MOV #7,@#LSH ;MOVE FRACTION LEFT MOV @R4,-(SP) ;SAVE B2 BIS R5,-(R4) ;INSERT NO .TITLE $NAM $VERSN 10 ; ; ;COPYRIGHT 1971, 1972,1973 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $NAM,$RET .GLOBL $AOTS .IFDF RSX .GLOBL $RESET,$EXIT,$ERRA .ENDC .CSECT ; R4=%4 R5=%5 R0=%0 SP=%6 PC=%7 ; ; CHAIN SUBROUTINE NAMES TOGETHER AND SAVE ; END OF CHAIN PTR ; .IFNDF RSX $NAM: CMP #055740,6(R4) ;CK IF MAIN PROG BNE NAM1 .GLOBL $ SEVEN OF THEM JSR PC,MULT JSR PC,MULT1 ;GO DO THE NORMAL BIT TST (SP)+ ;FLUSH ITERATION COUNT ADD (SP)+,R4 ;ADD EXPONENTS .ENDC .IFDF EAE!MULDIV CLR R4 BISB B+1(SP),R4 ;GET EXPONENT ADD R4,@SP ;GET SUM OF EXPONENTS MOVB #1,B+1(SP) ;INSERT NORMAL BIT ROR B(SP) SWAB B(SP) ;LEFT JUSTIFY FRACTION MOVB B+3(SP),B(SP) SWAB B+2(SP) MOVB B+5(SP),B+2(SP) SWAB B+4(SP) MOVB B+7(SP),B+4(SP) SWAB B+6(SP) CLRB B+6(SP) .ENDC .IFDF EAE MOV #MQ,R4 ;POINT TO MQ MOV A(SP),-(SP) R0 ;MOVE MULTIPLIER .WORD 070026 ;;MUL (SP)+,R0 ;MULTIPLY MOV R1,-(SP) ;PUSH PRODUCT BCS OVER ;JUMP IF OVERFLOW JMP @(R4)+ .ENDC OVER: CLR (SP) ;RETURN 0 MOV #7003,R0 ;ERROR 3,14. JSR PC,$ERRA JMP @(R4)+ .END RMAL BIT MOV (R4)+,-(SP) ;SAVE B1 MOV A+2+4(SP),@R4 ;LOW ORDER A TO MQ MOV A+0+4(SP),-(R4) ;HIGH TO AC BEQ ZERO2 ;JUMP IF 0 INC @#LSH ;GET SIGN RORB @#SR ADC 6(SP) ;GET RESULT SIGN MOV @R4,R3 ;GET EXPONENT CLRB R3 SWAB R3 ADD R3,4(SP) ;GET SUM OF EXPONENTS MOV #7,@#LSH ;LEFT JUSTIFY FRACTION MOV (R4)+,R2 ;SAVE A1 BIS R5,R2 ;INSERT NORMAL BIT CLR R0 ;CLEAR PRODUCT CLR R1 MOV (R4)+,R3 ;SAVE A2 BNE A2NZ TST -(R4) ;POINT TO MQ BR A2Z ;SHORT CUT A2NZ: MOV @SP,@R4 ;GET BOTI MOV R4,-(SP) JSR PC,$OTI ;INIT OTS MOV (SP)+,R4 NAM1: JSR PC,$AOTS ;ADDR $OTSV ADD #6,R0 MOV (R0),R1 ;ADDR LAST ENTRY IN CHAIN MOV R4,(R0)+ ;SET ADDR THIS ENTRY AS LAST MOV R1,(R4)+ ;CHAIN ENTRIES MOV (R0),(R4)+ ;SET SEQ NUM OF CALLING STMT CLR (R0) CMP (R4)+,(R4)+ ;STEP OVER ROUTINE NAME JMP @(R4)+ ;RETURN ; ; UNDO SUBROUTINE CHAIN ; $RET: MOV R0,-(SP) ;SAVE FUNCTION VALUE IN R0 JSR PC,$AOTS ADD #6,R0 MOV (R0),R4 ;GET ADDR OF LAST ENTRY IN CHAIN MOV (R4)+,(R0 MOV B+6+2(SP),@R4 ;GET A1*B4 JSR R5,EMULT MOV (SP)+,R2 ;RESULT TO PRODUCT MOV (SP)+,R3 MOV A+2(SP),-(SP) MOV B+4+2(SP),@R4 ;GET A2*B3 JSR R5,EMULT ADD (SP)+,R2 ;ADD TO PRODUCT ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV A+4(SP),-(SP) MOV B+2+2(SP),@R4 ;GET A3*B2 JSR R5,EMULT ADD (SP)+,R2 ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV A+6(SP),-(SP) MOV B+0+2(SP),@R4 ;GET A4*B1 JSR R5,EMULT ADD (SP)+,R2 ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV R2,R3 ;DIVIDE BY 2**16 1*A2 CMP -(R4),-(R4) ;POINT TO AC ADD R3,@R4 ;A2. 2'S COMP CORRECTION TST R3 BPL A2P ADD @SP,@R4 ;B1. CORRECTION A2P: MOV (R4)+,R1 ;HIGH PRODUCT TO R1 A2Z: MOV 2(SP),(R4)+ ;B2 TO MQ BNE B2NZ TST -(R4) ;POINT TO MQ BR B2Z ;SHORT CUT B2NZ: MOV R2,@R4 ;GET B2*A1 CMP -(R4),-(R4) ;POINT TO AC ADD 2(SP),@R4 ;B2. CORRECTION TST 2(SP) BPL B2P ;JUMP IF B2 + ADD R2,@R4 ;A1. CORRECTION B2P: ADD (R4)+,R1 ;HIGH PRODUCT TO R1 ADC R0 B2Z: MOV R2,(R4)+ ;A1 TO MQ ADD R2,R0 MOV @SP,@R4 )+ ;REMOVE FROM CHAIN MOV (R4)+,(R0) ;RESTORE STMT NUMBER AND CLEAR MOV (SP)+,R0 ;RESTORE FUNCTION VALUE .F4RTN ;RETURN ; ; .ENDC ; ; $NAM ROUTINE FOR RSX ; .IFDF RSX $NAM: JSR PC,$AOTS MOV R0,-(SP) ADD #6,(SP) MOV @(SP),R0 ;ADDR LAST ENTRY IN CHAIN MOV R4,@(SP) ;SET ADDR THIS ENTRY TO LAST CMP #055740,6(R4) ;CHK IF MAIN. PROGRAM BEQ NAM3 MOV R0,-(SP) NAM1: CMP R4,R0 ;IS SUBROUTINE ATTEMPTING ;TO REFERENCE ITSELF DIRECTLY ;OR INDIRECTLY? BEQ NAMERR MOV MOV R1,R2 CLR R1 MOV A(SP),-(SP) MOV B+4+2(SP),@R4 ;GET A1*B3 JSR R5,EMULT ADD (SP)+,R2 ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV A+2(SP),-(SP) MOV B+2+2(SP),@R4 ;GET A2*B2 JSR R5,EMULT ADD (SP)+,R2 ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV A+4(SP),-(SP) MOV B+0+2(SP),@R4 ;GET A3*B1 JSR R5,EMULT ADD (SP)+,R2 ADC R1 ADD (SP)+,R3 ADC R2 ADC R1 MOV A(SP),-(SP) MOV B+2+2(SP),@R4 ;GET A1*B2 JSR R5,EMULT ADD (SP)+,R1 ADC R0 ADD (SP)+,R2 ADC R1 ADC R0  .TITLE $NEG $VERSN 02 ; ; ; COPYRIGHT 1971,1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL $NGI,$NGR,$NGD,$NGB,$NGC,$ERRA ; INTEGER, REAL AND DOUBLE PRECISION NEGATION. ; CALLED IN THE POLISH MODE. ; NEGATES THE ITEM ON TOP OF THE STACK. R4=%4 R5=%5 SP=%6 $NGB: NEGB @SP ;NEGATE A BYTE JMP @(R4)+; $NGI: NEG @SP ;NEGATE AN ITEGER BVS OVER ;JU;GET A1*B1 ADD (SP)+,R0 ADD -(R4),R1 ADC R0 ADD -(R4),R0 ;AC+R0 TST (SP)+ ;POP B2 MOV (SP)+,R4 ;GET SUM OF EXPONENTS .ENDC ; MUL/DIV CODE .IFDF MULDIV ; (A1+A2*2**-16)*(B1+B2*2**-16) MOV B+2-4(SP),R5 ;LOW ORDER B MOV B+0-4(SP),R4 ;HIGH ORDER BEQ ZERO .WORD 073427,1 ;; ASHC #1,R4 ;GET SIGN BIT ROL -(SP) ;SAVE IT MOV R4,-(SP) ;SAVE EXPONENT CLRB @SP SWAB @SP ;RIGHT JUSTIFY .WORD 073427,7 ;; ASHC #7,R4 ;LEFT JUSTIFY FRACTION MOV R5,-(SP) ;SAVE B2 BIS #100000,R4 ;INSERT (R0),R0 BNE NAM1 MOV (SP)+,(R4)+ ;CHAIN ENTRIES MOV (SP)+,R0 MOV 2(R0),(R4)+ ;SET SEQ NUM OF CALLING STMT NAM2: CMP (R4)+,(R4)+ ;STEP OVER ROUTINE NAME JMP @(R4)+ ;RETURN NAM3: JSR R5,$RESET ;IF MAIN. PROGRAM ;GO CLEAN UP $DEVTB CMP (R4)+,(R4)+ ;ADJUST R4 TST (SP)+ ;REMOVE POINTER FROM STACK BR NAM2 ;AND EXIT ; ; $RET ROUTINE FOR RSX ; $RET: MOV R0,-(SP) ;SAVE FUNCTION VALUE IN R0 JSR #PC,$AOTS ;GET ADDR OF LAST ENTRY ;IN CHAIN MOV R0,-(SP) ADD #6,(SP) MOV !MOV A+2(SP),-(SP) MOV B+0+2(SP),@R4 ;GET A2*B1 JSR R5,EMULT ADD (SP)+,R1 ADC R0 ADD (SP)+,R2 ADC R1 ADC R0 MOV A(SP),-(SP) MOV B+0+2(SP),@R4 ;GET A1*B1 JSR R5,EMULT ADD (SP)+,R0 ADD (SP)+,R1 ADC R0 MOV (SP)+,R4 ;GET SUM OF EXPONENTS .ENDC .IFDF MULDIV MOV A(SP),-(SP) MOV B+6+2(SP),R4 ;GET A1*B4 JSR PC,EMULT MOV R4,R2 ;RESULT TO PRODUCT MOV R5,R3 MOV A+2(SP),-(SP) MOV B+4+2(SP),R4 ;GET A2*B3 JSR PC,EMULT ADD R4,R2 ;ADD TO PRODUCT ADC R1 ADD R5,R3 ADC "MP IF 100000 JMP @(R4)+ ;RETURN $NGC: TST 4(SP); NEGATE A COMPLEX NUMBER BEQ $NGR; JUMP TO AVOID -0.0 ADD #100000,4(SP); NEGATE IMAGINARY PART $NGR: $NGD: TST @SP BEQ ZERO ;JUMP IF 0 TO AVOID -0. ADD #100000,@SP ;INVERT FLOATING SIGN ZERO: JMP @(R4)+ OVER: MOV #5403,R0 ;ERROR 3,11. JSR PC,$ERRA JMP @(R4)+ .END # NORMAL BIT MOV R4,-(SP) ;SAVE B1 MOV A+2+4(SP),R3 ;GET A2 MOV A+0+4(SP),R2 ;GET A1 BEQ ZERO2 ;JUMP IF RESULT TO BE 0 .WORD 073227,1 ;; ASHC #1,R2 ;GET SIGN ADC 6(SP) ;GET RESULT SIGN MOV R2,R0 ;GET EXPONENT CLRB R0 SWAB R0 ADD R0,4(SP) ;GET SUM OF EXPONENTS .WORD 073227,7 ;; ASHC #7,R2 ;GET A1 BIS #100000,R2 ;INSERT NORMAL BIT CLR R0 ;CLEAR ACCUMULATOR CLR R1 TST R3 ;CHECK A2 BEQ A2Z ;JUMP IF 0 .WORD 070403 ;; MUL R3,R4 ;GET A2*B1 ADD R3,R4 TST R3 BPL A2P ;JUMP IF $@(SP),R4 MOV (R4),@(SP)+ ;REMOVE FROM CHAIN MOV (SP)+,R0 ;RESTORE FUNCTION VALUE .F4RTN ;RETURN NAMERR: MOV (SP)+,@(SP)+ ;RESTORE $NAMC MOV #512.,R0 JSR PC,$ERRA ;CALL ERR CLASS=0/NUM=2 JSR PC,$EXIT .ENDC .END %R2 ADC R1 MOV A+4(SP),-(SP) MOV B+2+2(SP),R4 ;GET A3*B2 JSR PC,EMULT ADD R4,R2 ADC R1 ADD R5,R3 ADC R2 ADC R1 MOV A+6(SP),-(SP) MOV B+0+2(SP),R4 ;GET A4*B1 JSR PC,EMULT ADD R4,R2 ADC R1 ADD R5,R3 ADC R2 ADC R1 MOV R2,R3 ;DIVIDE BY 2**16 MOV R1,R2 CLR R1 MOV A(SP),-(SP) MOV B+4+2(SP),R4 ;GET A1*B3 JSR PC,EMULT ADD R4,R2 ADC R1 ADD R5,R3 ADC R2 ADC R1 MOV A+2(SP),-(SP) MOV B+2+2(SP),R4 ;GET A2*B2 JSR PC,EMULT ADD R4,R2 ADC R1 ADD R5,R3 AD'A2 + ADD @SP,R4 ;B1 CORRECTION A2P: MOV R4,R1 ;A2*B1*2**-16 A2Z: MOV 2(SP),R4 ;B2 TO MULTIPLIER BEQ B2Z ;JUMP IF 0 .WORD 070402 ;; MUL R2,R4 ;GET A1*B2 ADD 2(SP),R4 TST 2(SP) BPL B2P ;JUMP IF B2 + ADD R2,R4 ;A1 CORRECTION B2P: ADD R4,R1 ;A1*B2*2**-16 ADC R0 B2Z: MOV R2,R4 ;A1 TO MULTIPLIER ADD R2,R0 .WORD 070416 ;; MUL @SP,R4 ;GET A1*B1 ADD (SP)+,R0 ADD R5,R1 ;LOW ORDER A1*B1 ADC R0 ADD R4,R0 ;HIGH ORDER A1*B1 TST (SP)+ ;POP B2 MOV (SP)+,R4 ;GET SUM OF EXPONENTS .ENDC)C R2 ADC R1 MOV A+4(SP),-(SP) MOV B+0+2(SP),R4 ;GET A3*B1 JSR PC,EMULT ADD R4,R2 ADC R1 ADD R5,R3 ADC R2 ADC R1 MOV A(SP),-(SP) MOV B+2+2(SP),R4 ;GET A1*B2 JSR PC,EMULT ADD R4,R1 ADC R0 ADD R5,R2 ADC R1 ADC R0 MOV A+2(SP),-(SP) MOV B+0+2(SP),R4 ;GET A2*B1 JSR PC,EMULT ADD R4,R1 ADC R0 ADD R5,R2 ADC R1 ADC R0 MOV A(SP),-(SP) MOV B+0+2(SP),R4 ;GET A1*B1 JSR PC,EMULT ADD R4,R0 ADD R5,R1 ADC R0 MOV (SP)+,R4 ;GET SUM OF EXPONENTS .ENDC ASL R3 * .TITLE $NFR $VERSN 06 ; ; ; COPYRIGHT 1971, 1972,1973 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .GLOBL $INFR, $OUTFW, $OPEN, $CLOSE, $READ .GLOBL $WRITE,$FNDEV,$IOSET,$IOERR,$FLDEV .GLOBL $AIOB .CSECT ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; THIS ROUTINE CONTROLS FORMATTED INPUT/OUTPUT ; $INFR: $OUTFW: MOV @UNITAD(R4),R0 ;GET DEVICE NUM + ROL R1 ;SHIFT OUT NORMAL BIT ROL R0 BCS NORM ;JUMP IF IT WAS FOUND ROL R1 ROL R0 ;MUST HAVE GOT IT NOW DEC R4 ;ADJUST EXPONENT NORM: SUB #200,R4 ;TAKE OUT ONE OF THE EXCESS 128'S BLE UNDER ;JUMP IF UNDERFLOW CMP #377,R4 BLT OVER ;JUMP IF OVERFLOW CLRB R1 BISB R0,R1 SWAB R1 CLRB R0 BISB R4,R0 SWAB R0 ROR (SP)+ ;GET PRODUCT SIGN ROR R0 ;INSERT IT IN RESULT ROR R1 ADC R1 ADC R0 BCS OVER1 ;JUMP IF OVERFLOW ON ROUND BVS OVER1 OUT: MOV R0,RESLT(SP) ;PUT OUT ANSWER , .TITLE $NRR $VERSN 04 ; ; ; COPYRIGHT 1971,1972,1973 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .GLOBL $INRR, $OUTRW, $FNDEV, $OPEN, $CLOSE .GLOBL $READ,$WRITE,$RANDM,$IOSET,$GET .GLOBL $IOERR .GLOBL $AIOB .CSECT R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; THIS ROUTINE CONTROLS RANDOM I/O ; $INRR: $OUTRW: MOV @UNITAD(R4),R0 ;GET DEVICE NUM -;SHIFT OUT NORMAL BIT ROL R2 ROL R1 ROL R0 BCS NORM ;JUMP IF IT WAS FOUND ASL R3 ROL R2 ROL R1 ROL R0 ;MUST HAVE GOT IT NOW DEC R4 ;ADJUST EXPONENT NORM: SUB #200,R4 ;TAKE OUT ONE OF THE EXCESS 128'S BLE UNDER ;JUMP IF UNDERFLOW CMP #377,R4 BLT OVER ;JUMP IF OVERFLOW CLRB R3 BISB R2,R3 ;SHIFT FRACTION RIGHT SWAB R3 CLRB R2 BISB R1,R2 SWAB R2 CLRB R1 BISB R0,R1 SWAB R1 CLRB R0 BISB R4,R0 SWAB R0 ROR (SP)+ ;GET PRODUCT SIGN ROR R0 ;INSERT IT IN RESULT R. JSR PC,$FNDEV ;GET DEVICE TBL ENTRY PTR IN R1 TST R1 BNE INFRX1 MOV #14,R3 ;SET R3 TO INDICATE INVALID DEVICE JMP $IOERR ;GO PROCESS THE ERROR ; ; INFRX1: JSR PC,$AIOB ;GET ADDR OF I/O BUFFER IN R2 ; ; CHECK IF FIRST CALL ; TST RECADR(R4) BNE INFRS ;BRANCH IF NOT FIRST CALL ; BITB #3,DVSW(R1) ;CHECK IF DEVICE OPEN BNE INFR2 ;BRANCH IF SO ; INFR1: JSR PC,$IOSET ;SET UP BUFFER FROM ENTRY ; JSR PC,$OPEN ;OPEN FILE TST R3 BEQ INFR2 TST R3 ;IF ERROR WAS NO SPACE FOR I/O/ MOV R1,RESLT+2(SP) MOV (SP)+,R5 MOV (SP)+,R4 CMP (SP)+,(SP)+ ;FLUSH TOP ARGUMENT JMP @(R4)+ ;RETURN .IFDF EAE!MULDIV ZERO2: CMP (SP)+,(SP)+ ;POP B1,B2 .ENDC ZERO1: CMP (SP)+,(SP)+ ;POP SIGN AND EXPONENT BR ZERO OVER: TST (SP)+ ;FLUSH SIGN OVER1: MOV #6003,R0 ;ERROR 3,12 BR ECALL UNDER: MOV #3405,R0 ;ERROR 5,7 TST (SP)+ ;FLUSH SIGN ECALL: JSR PC,$ERRA ;CALL ERROR ZERO: CLR R0 ;CLEAR RESULT CLR R1 BR OUT .IFNDF EAE&MULDIV MULT: ASR R4 ;TEST NEXT MULTIPLIER BIT BCC X0 ;JUM0JSR PC,$FNDEV ;GOT ADDR OF ENTRY INTO R1 TST R1 ;BRANCH IF ERROR BEQ BADEV ; JSR PC,$AIOB ;GET BUFR ADDR INTO R2 ; TST RECADR(R4) ;CHECK IF FIRST CALL BNE INFRRS ;BRANCH IF NOT ; ; BITB #3,DVSW(R1) ;CHECK IF OPEN BNE INRR2 ;BRANCH IF SO ; INRR1: JSR PC,$IOSET ;SET UP FOR OPEN ; JSR PC,$OPEN ;OPEN(OPEN DO GET FOR BLKLEN) TST R3 ; .IFDF RSX BNE BADOPN ;BRANCH IF ERRORS .ENDC ; .IFNDF RSX BEQ INRR2; NO ERRORS ON OPEN CMP R3,#6; TEST 'FILE DOES NOT EXIST' BNE BAD1OR R1 ROR R2 ROR R3 ADC R3 ;ROUND RESULT ADC R2 ADC R1 ADC R0 BCS OVER1 ;JUMP IF OVERFLOW ON ROUND BVS OVER1 OUT: MOV R0,RESLT(SP) ;PUT OUT ANSWER MOV R1,RESLT+2(SP) MOV R2,RESLT+4(SP) MOV R3,RESLT+6(SP) MOV (SP)+,R5 MOV (SP)+,R4 ADD #8.,SP ;FLUSH TOP ARGUMENT JMP @(R4)+ ;RETURN OVER1: TST -(SP) ;FAKE SIGN OVER: MOV #5003,R0 ;ERROR 3,10 BR ECALL UNDER: MOV #3005,R0 ;ERROR 5,6 ECALL: TST (SP)+ ;FLUSH SIGN JSR PC,$ERRA ;CALL ERROR ZERO2: CLR R0 ;CLEAR HIGH ORDER RESUL2 BLT INFR1A ;SIMPLY GO PROCESS ADD #3,R3 ;OTHERWISE SET R3 TO MSG NUM INFR1A: JMP $IOERR ;AND GO PROCESS ; ; CHECK FOR COMPATABLE DEVICE STATUS ; INFR2: BITB #2,DVSW(R1) ;CHECK IF OPENED FOR FMTD I/O BEQ INFRX2 MOV #13,R3 ;INDICATE COMPATABILITY ERROR JMP $IOERR ;AND GO PROCESS ; INFRX2: CMPB #4,DVHOPN(R1) ;IS FILE OPEN FOR INPUT BNE INFR4 ;BRANCH IF NOT TST IOSW(R4) ;IS STMT READ BNE INFR5 ;BRANCH IF SO INFR3: MOV DVLP(R1),BFLP(R2) ;SET LINK PTR JSR PC,$CLOSE ;CLOSE FILE 3P IF IT IS 0 MULT1: ADD R3,R1 ADC R0 BCS COVER ADD R2,R0 X0: ROR R0 ;NOW SHIFT PRODUCT ROR R1 DEC R5 ;COUNT LOOP BGT MULT ;AGAIN PLEASE RTS PC ;RETURN TO CALLER COVER: ADD R2,R0 ;FIRST ADD OVERFLOWED R0 SEC ;SHOW THIS OVERFLOW TO SHIFT BR X0 MULT0: ASR R4 ;REDUCED PRECISION MULTIPLY BCC X00 ADD R2,R0 ;USE ONLY HIGH ORDER MULTIPLICAND X00: ROR R0 ROR R1 DEC R5 BGT MULT0 RTS PC .ENDC ;NDF EAE!MULDIV .ENDC ;DF FIS .ENDC ;NDF FPU .END 4OPN; NO - SOME OTHER ERROR CONDITION TSTB DVHOPN(R1); WAS AN 'ALLOCATE' ATTEMPTED ? BNE BADOPN; YES - QUIT MOVB #127.,DVHOPN(R1);SET FLAG TO TRY ALLOCATE BR INRR1; RETRY THE OPEN .ENDC ; INRR2: BITB #2,DVSW(R1) ;CHECK IF RANDOM FILE BEQ COMPER ;ERROR IF NOT BITB #1,DVSW(R1) BEQ COMPER ; MOV DVRLEN(R1),LENMAX(R5) ;SET RIO STACK REC LEN MOV DVAVAD(R1),AVADDR(R5) ;ASSOC VAR ADDR MOV DVRMAX(R1),RECMAX(R5) ;NUM RECS IN FILE MOV @RNUMAD(R4),-(SP) ;PUSH RECORD NUM BLE BADREC ;E5T CLR R1 ;CLEAR LOW ORDER CLR R2 CLR R3 BR OUT .IFNDF EAE&MULDIV MULT: ASR R4 ;TEST NEXT MULTIPLIER BIT BCC X0 ;JUMP IF IT IS 0 MULT1: ADD A+6+4(SP),R3 ;ADD IN MULTIPLICAND ADC R2 ADC R1 ADC R0 ADC R5 ;SAVE OVERFLOW ADD A+4+4(SP),R2 ADC R1 ADC R0 ADC R5 ADD A+2+4(SP),R1 ADC R0 ADC R5 ADD A+0+4(SP),R0 ADC R5 X0: ASR R5 ;RECOVER OVERFLOW IF ANY ROR R0 ;NOW SHIFT PRODUCT ROR R1 ROR R2 ROR R3 DEC 2(SP) ;COUNT LOOP BGT MULT ;AGAIN PLEASE RTS PC ;RETURN TO 6 TST R3 BEQ INFR1 ;GO REOPEN JMP $IOERR ;GO PROCESS A CLOSE ERROR ; INFR4: TST IOSW(R4) ;IS STMT WRITE BNE INFR3 ;BRANCH IF NOT TO CLOSE AND OPEN ; OUTFW1: MOV #BFLEN,R0 ;SET BUFF LEN MOV DVLP(R1),BFLP(R2) ;SET LINK PTR MOV R2,R3 ADD #BFPTR,R3 ;SET BUFF START MOV R3,-(SP) ;CLEAR BUFF OUTFW9: MOVB #' ,(R3)+ DEC R0 BNE OUTFW9 MOV #133.,R0 ; ; IF DEVICE IS FORTRAN LISTING DEVICE ; (IE LP,KB,TT) LEAVE EXTRA CHAR ; MOV R2,-(SP) EMT 13 TST (SP)+ MOV #$FLDEV,R3 INFR6A: GRROR IF LE 0 CMP (SP),RECMAX(R5) ;OR GT MAX NUM RECS BHI BADREC DEC (SP) ;DECREMENT TO DO BLOCK CALC MOV DVRLEN(R1),-(SP) ;PUSH RECORD LEN MOV DVBLKL(R1),-(SP) ;PUSH BLOCK LEN ; JSR PC,$RANDM ;GET BLOCK NUM/DISP ON STACK ; TST (SP)+ MOV (SP)+,RECADR(R4) ;SAVE BLOCK DISP MOV (SP)+,R3 CMP R3,DVBLKN(R1) ;CHECK IF BLOCK ALREADY IN BEQ INRR4 ;BRANCH IF SO MOV R3,DVBLKN(R1) ;SET BLOCK NUM INRR5: MOV DVLP(R1),BFLP(R2) ;SET LINK PTR MOV DVBLKN(R1),BFMODE(R2) ;SET BLOCK NUM, ADECALLER MULT2: DEC 2(SP) ;DO ONLY 15 BITS THIS PASS MULT0: ASR R4 ;TEST NEXT MULTIPLIER BIT BCC X00 ;JUMP IF 0 ADD A+2+4(SP),R1 ;USE ONLY HIGH ORDER MULTIPLICAND ADC R0 ADC R5 ADD A+0+4(SP),R0 ADC R5 X00: ASR R5 ;RECOVER ANY OVERFLOW ROR R0 ROR R1 ROR R2 ROR R3 DEC 2(SP) ;COUNT LOOP BGT MULT0 RTS PC ;RETURN TO CALLER .ENDC .IFDF EAE EMULT: CLR @SP ;CLEAR PRODUCT TST @R4 BEQ MZ ;JUMP IF MULTIPLIER 0 BGT MPLUS TST 2(SP) ;TEST MULTIPLICAND BEQ MZ ;JUMP IF 0 BGT MNFTST (R3) BEQ INFR7A CMP (R3)+,(SP) BNE INFR6A INC 4(SP) INFR7A: CMP (SP)+,(SP)+ MOV (SP)+,R3 ; INFR7: MOV R3,RECADR(R4) ;SET BUFF PTRS ON STACK MOV R3,RECPTR(R4) ADD R0,R3 MOV R3,RECEND(R4) RTS PC ;RETURN ; ; ; ; ; ; INFR5: MOV DVLP(R1),BFLP(R2) ;SET LINK PTR MOV #BFLEN,BFMCNT(R2) ;SET MAX REC LEN ; JSR PC,$READ ;GO READ TST R3 BEQ INFR5X JMP $IOERR ;GO PROCESS A READ ERROR ; INFR5X: INC DVRCNT(R1) ;INC RECORD COUNT ADD #BFPTR,R2 ;ADDR DATA MOV R2,R1 ADD -2H .TITLE $NTB $VERSN 01 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $NTB .CSECT R4=%4 SP=%6 ; $NTB - LOGICAL 'NOT' OF TOP ELEMENT ON STACK ; RESULT RETURNED ON STACK IN LOW ORDER BYTE. ; HIGH ORDER BYTE IS CLEARED. $NTB: COMB (SP) CLRB 1(SP) JMP @(R4)+ .END """"""" "DDDD@DD@DD""""DD@D "DD""D"D "@D"@"@D ""DDDD  """DDDADDB C$SkQ M)SkQ 2SkQ  3SkQ  WkQ $OXkQ "XkQ & VbZkQ ( WZkQ 7HZkQ LPN`kQ Q qA`tkQ TXA`tkQ Z^A`tkQ [_A`tkQ \`A`GxkQ bjA`HxkQ ckA`IxkQ dlA`JxkQ nvA`KxkQ owA`LxkQ pxA`MxkQ u}A`NxkQ zA`OxkQ {M`kQ |M`kQ M`kQ M`kQ M`kQ M`kQ F`ggkQ F`hgkQ F`igkQ F`jgkQ F`kgkQ F`lgkQ M`OakQ M`PakQ M`QakQ R`"kQ `kQ `kQ `kQ `kQ =dkQ `dkQ dkQ dkQ dkQ dkQ dkQ PekQ RekQ qekQ 8}@z $Dff pҷ8a ͋,L  Bw(B ` % & ~&*C$$Βe E%>l  aʋaՀ$ & * P$ ΋Ί   ΋   d Ί  ( 1'u  Q$f $5@ U C΋ Cb M΋U@ U &  B" .&0 IEG ;JUMP IF +*- ADD (R4)+,@SP ;CORRECT 2'S COMPLEMENT ADD 2(SP),@SP BR EMLT MPLUS: TST 2(SP) ;TEST MULTIPLICAND BEQ MZ ;JUMP IF 0 BGT MLTQ ;JUMP IF + ADD (R4)+,@SP BR EMLT MNEG: ADD 2(SP),@SP MLTQ: TST (R4)+ ;POINT TO MUL EMLT: MOV 2(SP),@R4 ;MULTIPLY MOV -(R4),2(SP) ;GET PRODUCT ADD -(R4),@SP TST (R4)+ ;POINT TO MQ JMP @R5 ;RETURN MZ: CLR 2(SP) ;RETURN 0 JMP @R5 .ENDC .IFDF MULDIV EMULT: CLR -(SP) ;CLEAR HIGH PRODUCT TST R4 ;TEST MULTIPLICAND BEQ MZ ;JUMP IF 0 BGT J(R2),R2 ;ADDR END OF DATA+1 DEC R2 MOV R1,R3 CMPB #11,(R2) ;DELETE LF,VT,FF BHI INFR8X CMPB #15,(R2) BLO INFR8X DEC R2 CMPB #15,(R2) ;DELETE CR BEQ INFR8 INFR8X: INC R2 INFR8: MOV R2,R0 ;COMPUTE RECORD LENGTH SUB R3,R0 ;IN R0 BR INFR7 ;GO RECORD AND EXIT ; ; NON-FIRST CALL COMES HERE ; INFRS: TST IOSW(R4) BNE INFR5 ;BRANCH IF READ ; MOV DVLP(R1),BFLP(R2) ;SET LINK PTR MOV #BFLEN,BFMCNT(R2) ;SET BUFF LEN ; MOV R2,-(SP) EMT 13 TST (SP)+ MOV (SP)+,(SP) ; ; IF FOKDR, LEN MOV DVBLKA(R1),BFACNT(R2) MOV DVBLKL(R1),BFPTR(R2) TST IOSW(R4); TEST READ/WRITE BNE INRR51; BRANCH IF READ TST RECADR(R4); BRANCH IF RECORD IS NOT BNE INRR51; ALIGNED ON SEGMENT BOUNDARY CMP LENMAX(R5),DVBLKL(R1); BLO INRR51; BRANCH IF NOT FULL BLOCK JSR PC,$GET; FULL BLOCK WRITE BR INRR52; JUST GET A BUFFER INRR51: JSR PC,$READ ;READ BLOCK INRR52: TST R3 BNE INRRER ;BRANCH IF ERRORS MOV BFACNT(R2),DVBLKA(R1) ;SAVE BLOCK ADDR INRR4: MOV DVBLKA(R1),R3 MOV RECADMMPLUS ;+ TST 4(SP) ;TEST MULTIPLIER BEQ MZ ;JUMP IF 0 BGT MNEG1 ;+ BR MNEG MPLUS: TST 4(SP) ;TEST MULTIPLIER BEQ MZ ;JUMP IF 0 BGT MLTQ ;+ ADD R4,@SP BR MLTQ MNEG: ADD R4,@SP MNEG1: ADD 4(SP),@SP MLTQ: .WORD 070466,4 ;;MUL 4(SP),R4 ;GET PRODUCT MDONE: ADD (SP)+,R4 ;ADD IN HIGH ORDER PARTS MOV (SP)+,@SP ;FLUSH MULTIPLIER RTS PC ;RETURN MZ: CLR R4 ;RESULT IS 0 CLR R5 BR MDONE .ENDC .ENDC .END NRTRAN LISTING DEVICE BRANCH ; TO DO SPACING ; MOV #$FLDEV,R3 OUTFW6: TST (R3) BEQ OUTFW7 CMP (R3)+,(SP) BNE OUTFW6 TST (SP)+ BR OUTFWP OUTFW7: TST (SP)+ ; MOVB #15,@RECPTR(R4) ;ELSE APPEND CR AND LF INC RECPTR(R4) MOVB #12,@RECPTR(R4) OUTFW2: SUB RECADR(R4),RECPTR(R4) INC RECPTR(R4) MOV RECPTR(R4),BFACNT(R2) ;SET RECORD LENGTH JSR PC,$WRITE ;WRITE RECORD TST R3 ;BRANCH IF ERRORS BNE WRITER INC DVRCNT(R1) ;INC RECORD COUNT BR OUTFW1 ;GO CLEANUP AND RETURN ; OUTFWP:OR(R4),R0 MOV R0,R2 ADD R3,R0 ;ADDR OF DATA START MOV R0,RECADR(R4) MOV R0,RECPTR(R4) NEG R2 ;ADDR OF DATA START ADD DVBLKL(R1),R2 ;LENGTH TO END OF BLOCK CMP R2,LENMAX(R5) ;IS REC LT AMT IN BLOCK BLOS INRR3 ;BRANCH IF NOT MOV LENMAX(R5),R2 ;USE REC LEN INRR3: ADD R0,R2 ;ADDR OF DATA END +1 MOV R2,RECEND(R4) ;SET IT RTS PC ;RETURN ; ; INFRRS: TST IOSW(R4) ;NON-FIRST CALL COMES HERE BEQ OUTRW1 ;BRANCH IF IS WRITE STMT ; ; OUTRW2: INC DVBLKN(R1) ;MUST READ NEXP .TITLE $NTI $VERSN 02 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION MAYNAD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $NTI .CSECT ; R4=%4 SP=%6 ; ; $NTI - PERFORMS LOGICAL 'NOT' OF TOP ELEMENT ; ELEMENT ON THE STACK AND RETURNS. ; $NTI: COM (SP) ; ONE'S COMPLEMENT JMP @(R4)+ ;AND RETURN ; .END R MOVB #15,@RECPTR(R4) ;APPEND CR AND VT INC RECPTR(R4) MOVB #13,@RECPTR(R4) CLRB BFPTR(R2) CMPB BFPTR+1(R2),#'+ ;CHECK IF SPACE SUPPRESS BNE OUTFW3 ;BRANCH IF NOT OUTFW5: CLR BFPTR(R2) ;WRITE RECORD WITH 2 NULLS DEC RECADR(R4) BR OUTFW2 OUTFW3: CMPB BFPTR+1(R2),#'1 ;CHECK IF FORM FEED BNE OUTFW4 ;BRANCH IF NOT MOV #6015,BFPTR(R2) ;SET CR AND FF BR OUTFWX OUTFW4: CMPB BFPTR+1(R2),#'$ ;CHECK IF SUPRESS CRLF BNE OUTFW8 ;BR IF NOW DEC RECPTR(R4) ;BSP TO CR MOVB #13,@RECPTR(R4)ST BLOCK AND CLR RECADR(R4) ;START DATA AT DISP=0 BR INRR5 ;GO READ ; BADEV: MOV #14,R3 ;SET R3 TO BAD DEV ERR BR INRRER ; BADOPN: TST R3 ;CHK IF NO SPACE ERR BLT INRRER ;BR IF PRESENT ADD #3,R3 ;OTHERWISE DIDDLE R3 BR INRRER ; OUTRW1: MOV DVLP(R1),BFLP(R2) ;SET LINK PTR MOV DVBLKN(R1),BFMODE(R2) ;SET UP BLOCK BLOCK MOV DVBLKA(R1),BFACNT(R2) MOV DVBLKL(R1),BFPTR(R2) JSR PC,$WRITE ;WRITE TST R3 BNE INRRER ;BRANCH IF ERRORS TST LENMAX(R5) ;IF WAS LAST WRITE RETURU .TITLE $OPN $VERSN 06 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .GLOBL $OPEN .IFNDF RSX .GLOBL $RANDM .ENDC .CSECT ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; ; DO OPEN OF DEVICE - NUM IN R0, ENTRY ADDR IN R1,BUFF ; ADDR IN R2 ; SET ERROR CODES IN R3 ; $OPEN: CLR R3 TST IOTSW(R4) BGE OPNRAN ;BRANCH IF NOTV ;PUT A VT OUTFW8: MOVB BFPTR+1(R2),R3 ;CHECK IF 2 SPACES MOV #5015,BFPTR(R2) ;SET CR AND LF CMPB R3,#'0 BNE OUTFWX ;BRANCH IF NOT TO 1 SPACE MOV #2,BFACNT(R2) JSR PC,$WRITE ;WRITE FIRST SPACER TST R3 BNE WRITER OUTFWX: MOV #2,BFACNT(R2) JSR PC,$WRITE ;WRITE SPACER TST R3 ;CHECK ERROR BNE WRITER BR OUTFW5 ;GO WRITE DATA ; ; ; WRITER: JMP $IOERR ;GO PROCESS A WRITE ERROR ; ; .END WN BNE OUTRW2 ;ELSE GO READ NEXT BLOCK RTS PC ; INRRER: JMP $IOERR ;GO PROCESS THE ERROR COMPER: MOV #13,R3 ;SET COMPATABILITY ERROR BR INRRER BADREC: MOV #15,R3 ;SET INVALID RECORD BR INRRER ; ; .END X .TITLE $OARY1 $VERSN 04 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS.01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; GENX C,1 GENX C,8 ; .END Y RANDOM BITB DVSW(R1),#4 ;RANDOM BEQ ERRAN ;ERROR IF DEFINE FILE NOT DONE BR OPEN1 OPNRAN: BITB DVSW(R1),#4 ;NOT RANDOM BNE ERNRAN ;ERROR IF DEFINE FILE DONE ; OPEN1: MOV #OPNERI,BFLKER(R2) ;SET LNK BLK ERR RET MOV R2,-(SP) ;PUSH LINK BLOCK ADDR EMT 6 ;DO INIT ; MOV #OPNERO,BFLKER(R2) ;RESET LNK BLK ERR RET .IFNDF RSX TSTB DVHOPN(R1) ;IS CONTIGUOUS FILE TO BE ALLOC BEQ OPEN2 ;BRANCH IF NOT MOV #OPNERA,BFFLER(R2) ;SET FILBLK ERR RET MOV DVRLEN(R1),-(SP) ;GET REC LEN MOV DV]RMAX(R1),-(SP) ;GET NUM RECS MOV #128.,-(SP) ;GET NUM BYTES/BLOCK JSR PC,$RANDM ;CALC HOW MANY BLOCKS TST (SP)+ TST (SP)+ ;IF REMAINDER ADD 1 BEQ ALOC INC (SP) ;LEAVE NUM BLOCKS ON STACK ; ALOC: MOV R2,-(SP) ;PUSH FILE BLOCK ADDR ADD #BFFLNM,(SP) MOV R2,-(SP) ;PUSH LINK BLOCK ADDR EMT 15 ;DO ALLOCATE ; INC (SP)+ ;TEST IF ALLOC DONE PROPERLY BNE OPNERB ;BRANCH IF NOT ; .ENDC OPEN2: INC R3 ;ASSUME RANDOM (OPENU) .IFNDF RSX TST IOTSW(R4) BGE OPEN3A ;BRANCH IF NOT RAN^ .TITLE $OARY2 $VERSN 04 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; GENX C,2 GENX C,4 ; .GLOBL $CCX0 $CCX0: MOV (R4)+,R0 JMP @(R4)+ ; .END _ .TITLE $OARY3 $VERSN 04 ; ; COPYRIGHT 1973 DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; GENX A,1 GENX A,8 ; .END ` .TITLE $OARY4 $VERSN 04 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF TIS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; GENX A,2 GENX A,4 ; .GLOBL $KAX0 $KAX0: MOV (R4)+,R0 ADD @(R4)+,R0 JMP @(R4)+ ; .END aDOM MOV R2,-(SP) ;GET BLOCK SIZE EMT 13 CMP (SP)+,(SP)+ MOV (SP),DVBLKL(R1) ;SAVE NUM BYTES IN BLOCK ADD (SP)+,DVBLKL(R1) MOV #-1,DVBLKN(R1) BR OPEN3 .ENDC OPEN3A: ASL R3 ;ASSUME OUTPUT (OPENO) TST IOSW(R4) BEQ OPEN3 ;BRANCH IF OUTPUT ASL R3 ;SET OPENI OPEN3: MOVB R3,BFHOPN(R2) MOV R2,-(SP) ;PUSH LINK BLOCK ADDR EMT 13 ;CHECK IF TERMINAL DEVICE MOV (SP)+,R3 ;SAVE STATUS CMP (SP)+,(SP)+ ;CLEAN STACK FROM STAT BIT #400,R3 ;OMIT OPEN IF TERMINAL BNE OPEN4A OPEN3B:e MOV #OPNERR,BFFLER(R2) ;SET FILBLK ERR RET MOV R2,-(SP) ;PUSH FILE BLOCK ADDR ADD #BFFLNM,(SP) MOV R2,-(SP) ;PUSH LINK BLOCK ADDR EMT 16 ;DO OPEN ; ; ; ; ; OPEN4A: MOVB BFHOPN(R2),DVHOPN(R1) ;SAVE HOW OPEN MOV IOTSW(R4),R3 ;SET OPEN SWITCH BGE OPEN4 MOV #2,R3 OPEN4: INC R3 BISB R3,DVSW(R1) MOV BFLP(R2),DVLP(R1) CLR R3 ;SET NO ERRORS RTS PC ;RETURN ; ; ; ERRAN: MOV #3,R3 ;SET DEFINE FILE NOT DONE ERR RTS PC ; ERNRAN: MOV #4,R3 ;SET NONRAN OPEN/DEFINE FILE DONE Rf .TITLE $OASI1 $VERSN 05 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM CCC ; $CCCAI: MOV @(R4)+,R2 ADD @(R4)+,R2 MOV R2,@(R4)+ NXT $CKCAI: MOV @(R4)+,R2 ADD (R4)+,R2 MOV R2,@(R4)+ NXT $C1CAI: MOV @(R4)+,R2 INC R2 MOV R2,@(R4)+ NXT $CCCSI: MOV @(R4)+,R2 SUB @(R4)+,R2 MOV R2,@(R4)+ NXT $CKCSI: MOV @(R4)+,R2 SUB (R4)+,R2 g .TITLE $OASI2 $VERSN 05 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM CCS ; $CCSAI: MOV @(R4)+,-(SP) ADD @(R4)+,@SP NXT $CKSAI: MOV @(R4)+,-(SP) ADD (R4)+,@SP NXT $C1SAI: MOV @(R4)+,-(SP) INC @SP NXT $CCSSI: MOV @(R4)+,-(SP) SUB @(R4)+,@SP NXT $CKSSI: MOV @(R4)+,-(SP) SUB (R4)+,@SP NXT $C1SSI: MOV @(R4)+,-(SP) DEC @SP h .TITLE $OASI3 $VERSN 05 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM CRC ; $CRCAI: MOV @(R4)+,R1 ADD @R0,R1 MOV R1,@(R4)+ NXT $CRCSI: MOV @(R4)+,R1 SUB @R0,R1 MOV R1,@(R4)+ NXT ; ; FORM CSC ; $CSCAI: ADD @(R4)+,@SP MOV (SP)+,@(R4)+ NXT $CSCSI: MOV @(R4)+,R2 SUB (SP)+,R2 MOV R2,@(R4)+ NXT .GLOBL $CSCAI,$CSCSI ; ; FiTS PC ; OPNERI: MOV #-1,R3 ;NO SPACE TO INIT ERROR RTS PC OPNERO: MOV #-1,R3 ;NO SPACE TO OPEN ERROR OPNER: MOV R2,-(SP) ;PUSH LINK BLOCK ADDR MOV #OPNERI,BFLKER(R2) ;SET LNK BLK ERR RTN EMT 7 ;DO RLSE RTS PC ; OPNERA: TST (SP)+ ;REMOVE WORD FROM STACK OPNERB: MOV #2,R3 ;UNABLE TO ALLOC CONTIG FILE BR OPNER ;GO RLSE AND RETURN ; OPNERR: CMPB #2,BFHOPN(R2) ;CHECK IF WAS OPENO. BNE OPNER1 ;BRANCH IF NOT CMPB #2,BFERCD(R2) ;CHECK IF FILE ALREADY EXISTS BNE OPNER1 ;BRANCH IF Nj MOV R2,@(R4)+ NXT $C1CSI: MOV @(R4)+,R2 DEC R2 MOV R2,@(R4)+ NXT .GLOBL $CCCAI,$CKCAI,$C1CAI .GLOBL $CCCSI,$CKCSI,$C1CSI ; ; FORM CCR ; $CCRAI: MOV @(R4)+,@R0 ADD @(R4)+,@R0 NXT $CKRAI: MOV @(R4)+,@R0 ADD (R4)+,@R0 NXT $C1RAI: MOV @(R4)+,@R0 INC @R0 NXT $CCRSI: MOV @(R4)+,@R0 SUB @(R4)+,@R0 NXT $CKRSI: MOV @(R4)+,@R0 SUB (R4)+,@R0 NXT $C1RSI: MOV @(R4)+,@R0 DEC @R0 NXT .GLOBL $CCRAI,$CKRAI,$C1RAI .GLOBL $CCRSI,$CKRSI,$C1RSI ; .END kNXT .GLOBL $CCSAI,$CKSAI,$C1SAI .GLOBL $CCSSI,$CKSSI,$C1SSI ; ; FORM CRS ; $CRSAI: MOV @(R4)+,-(SP) ADD @R0,@SP NXT $CRSSI: MOV @(R4)+,-(SP) SUB @R0,@SP NXT .GLOBL $CRSAI,$CRSSI ; .END ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. lORM CSR ; $CSRAI: MOV @(R4)+,@R0 ADD (SP)+,@R0 NXT $CSRSI: MOV @(R4)+,@R0 SUB (SP)+,@R0 NXT .GLOBL $CSRAI,$CSRSI ; ; FORM CSS ; $CSSSI: NEG @SP $CSSAI: ADD @(R4)+,@SP NXT .GLOBL $CSSAI, $CSSSI .GLOBL $CRCAI,$CRCSI ; .END ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. mOT MOVB #13,BFHOPN(R2) ;TRY AGAIN OPENC BR OPEN3B ; OPNER1: MOV #5,R3 CMPB #6,BFERCD(R2) ;CHECK PROTECT CODE ERROR BEQ OPNER ;BRANCH IF SO INC R3 CMPB #2,BFERCD(R2) ;CHECK ALREADY OPEN/DOES NOT EXIST BEQ OPNER ;BRANCH IF SO OPNER2: INC R3 ;DEFAULT-UNABLE TO OPEN ERROR BR OPNER ; ; ERROR RETURNS IN R3 ; -1=NO SPACE TO DO I/O ; 2=UNABLE TO ALLOC CONTIG FILE ; 3=DEFINE FILE NOT DONE (RANDOM) ; 4=DEFINE FILE DONE (NOT RANDOM) ; 5=INVALID PROTECT CODE ; 6=FILE DOES NOT EXIST/OR AqLREADY OPEN ; 7=UNABLE TO OPEN ; ; .END r .TITLE $OASI4 $VERSN 05 ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 10754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM SCC ; $SCCAI: ADD @(R4)+,@SP MOV (SP)+,@(R4)+ NXT $SKCAI: ADD (R4)+,@SP MOV (SP)+,@(R4)+ NXT $S1CAI: INC @SP MOV (SP)+,@(R4)+ NXT $SCCSI: SUB @(R4)+,@SP MOV (SP)+,@(R4)+ NXT $SKCSI: SUB (R4)+,@SP MOV (SP)+,@(R4)+ NXT $S1CSI: DEC @SP MOV (SP)+,@(R4)+ Ns .TITLE $OASI5 $VERSN 05 ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORPORATION MAYNARD,MASS 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM SCS ; $SCSAI: ADD @(R4)+,@SP NXT $SKSAI: ADD (R4)+,@SP NXT $S1SAI: INC @SP NXT $SCSSI: SUB @(R4)+,@SP NXT $SKSSI: SUB (R4)+,@SP NXT $S1SSI: DEC @SP NXT .GLOBL $SCSAI,$SKSAI,$S1SAI .GLOBL $SCSSI,$SKSSI,$S1SSI ; ; FORM SRC ; $SRCAI: MOV (SP)+,R1 ADD @t .TITLE $OASI6 $VERSN 05 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM SRS ; $SRSAI: ADD @R0,@SP NXT $SRSSI: SUB @R0,@SP NXT .GLOBL $SRSAI,$SRSSI ; ; FORM SSC ; $SSCAI: MOV (SP)+,R1 ADD (SP)+,R1 MOV R1,@(R4)+ NXT $SSCSI: MOV (SP)+,R1 SUB (SP)+,R1 NEG R1 MOV R1,@(R4)+ NXT .GLOBL $SSCAI,$SSCSI ; ; FORM SSR ; $SSRAI: MvXT .GLOBL $SCCAI,$SKCAI,$S1CAI .GLOBL $SCCSI,$SKCSI,$S1CSI ; ; FORM SCR ; $SCRAI: MOV (SP)+,@R0 ADD @(R4)+,@R0 NXT $SKRAI: MOV (SP)+,@R0 ADD (R4)+,@R0 NXT $S1RAI: MOV (SP)+,@R0 INC @R0 NXT $SCRSI: MOV (SP)+,@R0 SUB @(R4)+,@R0 NXT $SKRSI: MOV (SP)+,@R0 SUB (R4)+,@R0 NXT $S1RSI: MOV (SP)+,@R0 DEC @R0 NXT .GLOBL $SCRAI,$SKRAI,$S1RAI .GLOBL $SCRSI,$SKRSI,$S1RSI ; .END wR0,R1 MOV R1,@(R4)+ NXT $SRCSI: MOV (SP)+,R1 SUB @R0,R1 MOV R1,@(R4)+ NXT .GLOBL $SRCAI,$SRCSI ; .END xOV (SP)+,@R0 ADD (SP)+,@R0 NXT $SSRSI: MOV (SP)+,@R0 SUB (SP)+,@R0 NEG @R0 NXT .GLOBL $SSRAI,$SSRSI ; ; FORM SSS ; $SSSAI: ADD (SP)+,@SP NXT $SSSSI: SUB (SP)+,@SP NXT .GLOBL $SSSAI,$SSSSI ; .END y .TITLE $OASI7 $VERSN 05 ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR ; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; FORM RCC ; $RCCAI: MOV @R0,R1 ADD @(R4)+,R1 MOV R1,@(R4)+ NXT $RKCAI: MOV @R0,R1 ADD (R4)+,R1 MOV R1,@(R4)+ NXT $R1CAI: MOV @R0,R1 INC R1 MOV R1,@(R4)+ NXT $RCCSI: MOV @R0,R1 SUB @(R4)+,R1 MOV R1,@(R4)+ NXT $RKCSI: MOV @R0,R1 SUB (R4)+,R1 MOV R1,@(R4)+ } NXT $R1CSI: MOV @R0,R1 DEC R1 MOV R1,@(R4)+ NXT .GLOBL $RCCAI,$RKCAI,$R1CAI .GLOBL $RCCSI,$RKCSI,$R1CSI ; ; FORM RCS ; $RCSAI: MOV @R0,-(SP) ADD @(R4)+,@SP NXT $RKSAI: MOV @R0,-(SP) ADD (R4)+,@SP NXT $R1SAI: MOV @R0,-(SP) INC @SP NXT $RCSSI: MOV @R0,-(SP) SUB @(R4)+,@SP NXT $RKSSI: MOV @R0,-(SP) SUB (R4)+,@SP NXT $R1SSI: MOV @R0,-(SP) DEC @SP NXT .GLOBL $RCSSI,$RKSSI,$R1SSI .GLOBL $RCSAI,$RKSAI,$R1SAI ; .END ~ .TITLE $OASI8 $VERSN 05 ; ;COPYRIGHT 1973 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPOSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF GFORM .SBTTL G FORMS ; ; FORM GCC ; $GCCAI: ADD @(R4)+,R0 MOV R0,@(R4)+ NXT $GKCAI: ADD (R4)+,R0 MOV R0,@(R4)+ NXT $G1CAI: INC R0 MOV R0,@(R4)+ NXT $GCCSI: SUB @(R4)+,R0 MOV R0,@(R4)+ NXT $GKCSI: SUB (R4)+,R0 MOV R0,@(R4)+ NXT $G1CSI: DEC R0 MOV R0 .TITLE $OASI9 $VERSN 05 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; $DCCAI: ADD @(R4)+,@(R4)+ NXT $DKCAI: ADD (R4)+,@(R4)+ NXT $D1CAI: INC @(R4)+ NXT $DCCSI: SUB @(R4)+,@(R4)+ NXT $DKCSI: SUB (R4)+,@(R4)+ NXT $D1CSI: DEC @(R4)+ NXT .GLOBL $DCCAI,$DKCAI,$D1CAI .GLOBL $DCCSI,$DKCSI,$D1CSI $DRCAI: ADD @R0,@(R4)+ NXT $DRCSI: SUB .TITLE $OMDI1 $VERSN 03 ; .IF DF EIS!EAE ; GENMDI C,C,C GENMDI C,K,C GENMDI C,C,R GENMDI C,K,R ; .ENDC .END ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ,@(R4)+ NXT .GLOBL $GCCAI,$GKCAI,$G1CAI .GLOBL $GCCSI,$GKCSI,$G1CSI ; ; FORM GCS ; $GCSAI: ADD @(R4)+,R0 MOV R0,-(SP) NXT $GKSAI: ADD (R4)+,R0 MOV R0,-(SP) NXT $G1SAI: INC R0 MOV R0,-(SP) NXT $GCSSI: SUB @(R4)+,R0 MOV R0,-(SP) NXT $GKSSI: SUB (R4)+,R0 MOV R0,-(SP) NXT $G1SSI: DEC R0 MOV R0,-(SP) NXT .GLOBL $GCSAI,$GKSAI,$G1SAI .GLOBL $GCSSI,$GKSSI,$G1SSI ; ; FORM CGC $CGCSI: NEG R0 $CGCAI: ADD @(R4)+,R0 MOV R0,@(R4)+ NXT .GLOBL $CGCSI,$CGCAI ; ; FORM @R0,@(R4)+; NXT .GLOBL $DRCAI,$DRCSI $DSCAI: ADD (SP)+,@(R4)+ NXT $DSCSI: SUB (SP)+,@(R4)+ NXT .GLOBL $DSCAI,$DSCSI .END .TITLE $OMDI2 $VERSN 03 ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORPORATION MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF EIS!EAE ; GENMDI C,C,S GENMDI C,K,S GENMDI C,R,C GENMDI C,R,S ; .ENDC .END SGC $SGCSI: NEG R0 $SGCAI: ADD (SP)+,R0 MOV R0,@(R4)+ .GLOBL $SGCSI,$SGCAI ; ; FORM SGS ; $SGSSI: NEG R0 $SGSAI: ADD R0,@SP NXT .GLOBL $SGSAI,$SGSSI .ENDC ;DF GFORM ; .END .TITLE $OMDI3 $VERSN 03 ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORPORATION MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF EIS!EAE ; GENMDI C,S,C GENMDI C,S,R GENMDI C,S,S GENMDI R,C,C ; .ENDC .END .TITLE $OMDI4 $VERSN 03 ; ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC ; .IF DF EIS!EAE GENMDI R,K,C GENMDI R,C,S GENMDI R,K,S GENMDI S,C,C ; .ENDC .END .TITLE $OMDI5 $VERSN 03 ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF EIS!EAE ; GENMDI S,K,C GENMDI S,C,R GENMDI S,K,R GENMDI S,C,S GENMDI S,K,S ; .ENDC .END .TITLE $OMDI6 $VERSN 03 ; ; COPYRIGHT 1973, DIGITA EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF EIS!EAE ; GENMDI S,R,C GENMDI S,R,S GENMDI S,S,C GENMDI S,S,R GENMDI S,S,S ; .ENDC .END .TITLE $OFPU1 $VERSN 03 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF FPU ; ; LANGUAGE FORM: ; X = A OP B ; .MACRO FORM OP LDF @(R4)+,F0 OP @(R4)+,F0 STF F0,@(R4)+ JMP @(R4)+ .ENDM GENRD CCC ; LANGUAGE FORM: ; ... OP B... ; .MACRO FORM OP LDF (SP)+,F0 OP @(R4)+,F0 STF F0,-(SP) JMP @(R4)+ .ENDM GENRD SCS ; ; LANGUAGE FORM: ; ...A OP B... ; .MACRO FORM OP LDF @(R4)+,F0 OP @(R4)+,F0 STF F0,-(SP) JMP @(R4)+ .ENDM GENRD CCS .ENDC .END ; .TITLE $OFPU3 $VERSN 03 ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORPORATION MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF FPU ; ; FORM SRS ; .MACRO FORM OP LDF (SP)+,F0 OP @R0,F0 STF F0,-(SP) NXT .ENDM GENRD SRS ; ; FORM SSC ; .MACRO FORM OP .IF IDN OP,S LDF (SP)+,F1 LDF (SP)+,F0 S F1,F0 STF F0,@(R4)+ NXT .MEXIT .ENDC .IF IDN OP,D LDF (SP)+,F1 LDF (S .TITLE $OFPU4 $VERSN 03 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF FPU ; ; FORM RCC ; .MACRO FORM OP LDF @R0,F0 OP @(R4)+,F0 STF F0,@(R4)+ NXT .ENDM GENRD RCC ; ; FORM RCS ; .MACRO FORM OP LDF @R0,F0 OP @(R4)+,F0 STF F0,-(SP) NXT .ENDM GENRD RCS ; ; FORM SCR ; .MACRO FORM OP LDF (SP)+,F0 OP @(R@R0,F0 STF F0,@(R4)+ NXT .ENDM GENRD SRC ; .ENDC .END P)+,F0 D F1,F0 STF F0,@(R4)+ NXT .MEXIT .ENDC LDF (SP)+,F0 OP (SP)+,F0 STF F0,@(R4)+ NXT .ENDM GENRD SSC ; ; FORM SSR ; .MACRO FORM OP .IF IDN OP,S LDF (SP)+,F1 LDF (SP)+,F0 S F1,F0 STF F0,@R0 NXT .MEXIT .ENDC .IF IDN OP,D LDF (SP)+,F1 LDF (SP)+,F0 D F1,F0 STF F0,@R0 NXT .MEXIT .ENDC LDF (SP)+,F0 OP (SP)+,F0 STF F0,@R0 NXT .ENDM GENRD SSR ; .ENDC .END 4)+,F0 STF F0,@R0 NXT .ENDM GENRD SCR ; .ENDC .END .TITLE $OFPU5 $VERSN 03 ; ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF FPU ; ; FORM CRS ; .MACRO FORM OP LDF @(R4)+,F0 OP @R0,F0 STF F0,-(SP) NXT .ENDM GENRD CRS ; ; FORM SSS ; .MACRO FORM OP .IF IDN OP,S LDF (SP)+,F1 LDF (SP)+,F0 S F1,F0 STF F0,-(SP) NXT .MEXIT .ENDC .IF IDN OP,D LDF (SP)+,F1 LDF .TITLE $OFPU6 $VERSN 03 ; COPYRIGHT 1973, DIGITA EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .IF DF FPU ; ; FORM CSC ; .MACRO FORM OP LDF @(R4)+,F0 OP (SP)+,F0 STF F0,@(R4)+ NXT .ENDM GENRD CSC ; ; ; ; FORM CSR ; .MACRO FORM OP LDF @(R4)+,F0 OP (SP)+,F0 STF F0,@R0 NXT .ENDM GENRD CSR ; ; FORM CRC ; .MACRO FORM OP LDF @(R4)+,F0 (SP)+,F0 D F1,F0 STF F0,-(SP) NXT .MEXIT .ENDC LDF (SP)+,F0 OP (SP)+,F0 STF F0,-(SP) NXT .ENDM GENRD SSS ; ; FORM CSS ; .MACRO FORM OP LDF @(R4)+,F0 OP @SP,F0 STF F0,@SP NXT .ENDM GENRD CSS ; .ENDC .END .TITLE $OMOV1 $VERSN 03 ; ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; ; .SBTTL BYTE MOVES (1 BYTE) ; ; $XCV ; .GLOBL $CCVB $CCVB: MOVB @(R4)+,@(R4)+ NXTB .GLOBL $RCVB $RCVB: MOVB @R0,@(R4)+ NXTB ; .GLOBL $SCVB $SCVB: MOVB (SP)+,@(R4)+ NXTB ; .GLOBL $GCVB $GCVB: MOVB R0,@(R4)+ NXTB ; .GLOBL $CRVB $CRVB: MOVB @(R4)+,@R .TITLE $OMOV2 $VERSN 03 ; ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; .SBTTL INTEGER AND LOGICAL MOVES (2 BYTES) ; ; $XCV ; .GLOBL $CCVI,$CCVL $CCVI: $CCVL: MOV @(R4)+,@(R4)+ NXT ; .GLOBL $RCVI,$RCVL $RCVI: $RCVL: MOV @R0,@(R4)+ NXT ; .GLOBL $SCVI,$SCVL $SCVI: $SCVL: MOV (SP)+,@(R4)+ NXT ; .GLOBL $KCVI,$KCVL $KCVI: $ OP @R0,F0 STF F0,@(R4)+ NXT .ENDM GENRD CRC ; ; .ENDC .END 0 NXTB ; .GLOBL $SRVB $SRVB: MOVB (SP)+,@R0 NXT ; .END KCVL: MOV (R4)+,@(R4)+ NXT ; .GLOBL $1CVI $1CVI: MOV #1,@(R4)+ NXT ; .GLOBL $GCVI,$GCVL $GCVI: $GCVL: MOV R0,@(R4)+ NXT ; ; $XRV ; .GLOBL $CRVI,$CRVL $CRVI: $CRVL: MOV @(R4)+,@R0 NXT ; .GLOBL $SRVI,$SRVL $SRVI: $SRVL: MOV (SP)+,@R0 NXT ; .GLOBL $KRVI $KRVI: MOV (R4)+,@R0 NXT ; .GLOBL $1RVI $1RVI: MOV #1,@R0 NXT .SBTTL REAL MOVES (4 BYTES) ; ; $XCV ; .GLOBL $CCVR $CCVR: MOV (R4)+,R2 MOV (R4)+,R3 MOV2 ( .TITLE $OMOV3 $VERSN 03 ;COPYRIGHT 1973, DIGITAL EQUIPMENT CORPORATION MAYNARD,MASS. 01754 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .SBTTL DOUBLE AND COMPLEX MOVES (8 BYTES) ; ; $XCV ; .GLOBL $CCVD,$CCVC $CCVD: $CCVC: MOV (R4)+,R2 MOV (R4)+,R3 MOV4 (R2)+,(R3)+ NXT ; .GLOBL $RCVD,$RCVC $RCVD: $RCVC: MOV (R4)+,R1 MOV4 (R0)+,(R1)+ NXT ; .GLOBL $SCVD,$SCVC $SCVD: $SCVC: MOV (R4)+,R1 R2)+,(R3)+ NXT ; .GLOBL $RCVR $RCVR: MOV (R4)+,R1 MOV2 (R0)+,(R1)+ NXT ; .GLOBL $SCVR $SCVR: MOV (R4)+,R1 MOV2 (SP)+,(R1)+ NXT ; .GLOBL $GCVR $GCVR: MOV (R4)+,R2 MOV R0,(R2)+ MOV R1,(R2)+ NXT ; ; $XRV ; .GLOBL $CRVR $CRVR: MOV (R4)+,R1 MOV2 (R1)+,(R0)+ NXT ; .GLOBL $SRVR $SRVR: MOV2 (SP)+,(R0)+ NXT ; .END .TITLE $OREV1 $VERSN 03 ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; COPYRIGHT 1973, DIGITAL EQUIPMENT CORP ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; .GLOBL $REVBB,$REVLL,$REVII,$REVRR .GLOBL $REVDD,$REVCC .GLOBL $REVRI,$REVDI,$REVCI .GLOBL $REVRD,$REVDR ; ; $REV'A'B,ADDRESS ; ; WHERE ; A IS TYPE OF LEFT ARGUMENT TO BE PLACED ; ON STACK UNDER THE B ARGUMENT WHICH ; IS ALREMOV4 (SP)+,(R1)+ NXT ; .GLOBL $GCVD,$GCVC $GCVD: $GCVC: MOV R0,@(R4) MOV (R4)+,R0 TST (R0)+ MOV R1,(R0)+ MOV R2,(R0)+ MOV R3,(R0)+ NXT ; ; $XRV ; .GLOBL $CRVD,$CRVC $CRVD: $CRVC: MOV (R4)+,R1 MOV4 (R1)+,(R0)+ NXT ; .GLOBL $SRVD,$SRVC $SRVD: $SRVC: MOV4 (SP)+,(R0)+ NXT ; .END .TITLE $ORB $VERSN 01 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $ORB .CSECT R4=%4 SP=%6 ; $ORB - PERFORMS LOGICAL 'INCLUSIVE OR' ; OF THE TOP TWO STACK ELEMENTS ; RETURNS RESULT IN THE LOW ORDER ; BYTE ON THE STACK. ; THE HIGH ORDER BYTE IS CLEARED $ORB: BISB (SP)+,(SP) CLRB 1(SP) JMP @(R4)+ .END ADY ON STACK ; B IS TYPE OF RIGHT ARGMENT ; $REVLL: $REVII: MOV #II,R1 BR REV $REVRI: MOV #RI,R1 BR REV $REVDI: $REVCI: MOV #DI,R1 BR REV $REVRR: MOV #RR,R1 BR REV $REVRD: MOV #RD,R1 BR REV $REVDR: MOV #DR,R1 BR REV $REVCC: $REVDD: MOV #DD,R1 BR REV ; ; ; TABLE ENTRIES ARE: ; 1) NUMBER OF BYTES IN LEFT DATA TYPE ; 2) NUMBER OF WORDS IN RIGHT DATA TYPE ; II: +2,1 RI: +4,1 DI: +8.,1 RR: +4,2 DR: +8.,2 RD: +4,4 DD: +8.,4 REV: MOV SP,R2 ;REMEMBER CURRENT ITEM .TITLE $ORI $VERSN 01 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $ORI .CSECT ; R4=%4 SP=%6 ; ; $ORI - PERFORMS LOGICAL 'INCLUSIVE OR' OF THE TOP TWO STACK ; ELEMENTS AND RETURNS THE RESULT ON TOP OF THE STACK. ; $ORI: BIS (SP)+,(SP) ;INCLUSIVE OR JMP @(R4)+ ;AND RETURN ; .END SUB (R1)+,SP ;LENGTHEN STACK MOV SP,R0 ;POPABLE REG MOV @R1,R3 ;#WORDS TO COPY DOWN 1$: MOV (R2)+,(R0)+ ;COPY LOOP DEC R3 BNE 1$ MOV -(R1),R3 ;BYTES OF ROOM ASR R3 ;WORDS OF ROOM MOV (R4)+,R2 ;ADDRESS OF CNE ITEM 2$: MOV (R2)+,(R0)+ ;COPY LOOP DEC R3 BNE 2$ JMP @(R4)+ ;POLISH RETURN ; ; SPECIAL CASE DUE TO ONE BYTENESS ; $REVBB: MOV @SP,-(SP) MOVB @(R4)+,R1 ;TO GET SIGN EXTEND MOV R1,2(SP) JMP @(R4)+ .END .TITLE $OTI $VERSN 01 ; ; COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; PDP-11 OTS INITIALIZATION MODULE ; .CSECT .GLOBL $OTI ; ; DOS VERSION ; $OTI: .IFDF FPU!FIS .GLOBL $FPERR MOV #$FPERR,-(SP) ;SET ENTRY IN INTERRUPT CLR -(SP) ;VECTOR FOR FLT PT TRAPS MOV #3,-(SP) EMT 41 .IFDF FPU LDFPS #1400 ;INIT FPP STATUS .ENDC .ENDC RT .TITLE $OTV $VERSN 04 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .GLOBL $IOBUF,$DEVTB,$OTSV,$ERRC .GLOBL $NAMC,$SEQC,$ERRWK .GLOBL $EXSW .CSECT ; ; ; THIS IS AN OTS NON-REEENTRANT AREA ; ; $OTSV: .WORD $DEVTB .WORD $IOBUF .WORD $ERRC ; $NAMC: .WORD 0 ;ADDR OF END OF SUBR TRCBK CHAIN ; $SEQC: .WORD 0 ;VALUE OF CURRENT INTS PC ; ; .END ERNAL SEQ ;NUMBER ; $EXSW: .WORD 0 ;VALUE FOR EXIT ROUTINE: ;0=USER CALL ;1=ERRORS HAVE OCCURED THIS RUN ;2=AN ERR HAS REACHED ITS MAX ;ALLOWED COUNT ;3=AN ERR WHOSE MAX ALLOWED ;IS -2 HAS CALLED EXIT ; $ERRWK: .=.+14. ;14 BYTES OF WORK AREA ;FOR ERROR ROUTINE (USED ;ONLY IF MSG FILE NOT ;AVAILABLE) ;ASO USED BY $IOSET ; .END .TITLE $PAU $VERSN 02 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .GLOBL $PAUSE .CSECT ; R4=%4 SP=%6 ; THIS IS THE OBJECT TIME PAUSE ROUTINE ; IT WILL CAUSE A MONITOR DIAGNOSTIC PRINT(ACTION READ) ; WITH NUM INDICAT .TITLE $PBP $VERSN 03 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; ; ; $POPP0 - POP A BYTE PARAMETER ; .GLOBL $POPP0 $POPP0: MOV (R4)+,R3 ADD R5,R3 MOV @R3,R3 MOVB (SP)+,@R3 JMP @(R4)+ ; ; $POPR0 - THIS ROUTINE REMOVES A BYTE ITEM FROM THE STACK ; AED ; $PAUSE: MOV R4,-(SP) ;PUSH ADDR OF PAUSE NUM MOV #4,-(SP) ;PUSH .O2BIN CONVT CODE EMT 42 ;DO CONVERSION ; MOV DIAG,-(SP) ;PUSH DIAG TYPE IOT ;DO DIAGNOSE ; ; IF CONTINUE ; MOV (SP)+,R4 ;POP ADDR OF FAILURE BIT #1,R4 ;CHECK IF EVEN OR ODD BNE PAU01 ;AND SET R4 TO NEXT WORD INC R4 PAU01: INC R4 ; JMP @(R4)+ ;RETURN TO CALLER ; DIAG: .BYTE 5 ;NUM OF DIAG .BYTE 1 ;INDICATE ACTION REQUIRED MSG ; .END ND PLACES IT IN REGISTER R0. IT IS USED IN EXTERNAL ; FUNCTIONS TO RETURN THE FUNCTION VALUE IN THE REGISTERS ; .GLOBL $POPR0 $POPR0: MOVB (SP)+,R0 ;POP ONE BYTE JMP @(R4)+ ; .END .TITLE $PCI $VERSN 01 ; ; ; COPYRIGHT 1972, DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL $PWCI,$ERRA; .GLOBL $MLC,$DVC,$POLSH; ; COMPLEX BASE TO INTEGER EXPONENT PROCESSING ; CALLED IN THE POLISH MODE. ; THE INTEGER EXPONENT IS @SP ; THE COMPLEX BASE IS AT 2(SP) THRU 8.(SP). ; THIS ROUTINE REPLACES THEM WITH D**I. R0=%0 R1=%1 R4=%4 R5=%5 SP .TITLE $PDD $VERSN 03 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL $PWDD,$PWDR,DLOG,DEXP,$MLD,$FCALL,$ERRA .GLOBL $PWRD,$POLSH ; DOUBLE BASE TO REAL OR DOUBLE EXPONENT PROCESSING ; CALLED IN THE POLISH MODE. ; THE EXPONENT (E) IS ON TOP OF THE STACK, ; AND THE BASE (B) IS THE SECOND ITEM ON THE STACK. R0=%0 R1=%1 R2=%=%6 $PWCI: MOV @SP,-(SP) ;DUPLICATE EXPONENT BGE EPOS ;JUMP IF + NEG @SP ;GET ABS VALUE OF EXPONENT EPOS: MOV R4,-(SP) ;SAVE R4 ASR 2(SP) ;TEST EXPONENT BCC EVEN ;JUMP IF EVEN MOV 12.(SP),-(SP) ;D TO WORK SPACE MOV 12.(SP),-(SP) MOV 12.(SP),-(SP) MOV 12.(SP),-(SP) TST 10.(SP) ;TEST REST OF EXPONENT BEQ DONE1 ;JUMP IF EXP WAS 1 BR EVODD EVEN: CLR -(SP) ;PUT (1.0,0.0) IN WORK SPACE CLR -(SP) CLR -(SP) MOV #40200,-(SP) TST 10.(SP) ;TEST REST OF EXPONENT BNE EVODD ;JUMP IF E2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 $PWRD: MOV (SP)+,R0 ;GET DOUBLE EXPONENT MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV 2(SP),-(SP) ;MAKE BASE DOUBLE PRECISION MOV 2(SP),-(SP) CLR 4(SP) CLR 6(SP) BR PWD ;JOIN PWDD $PWDR: MOV (SP)+,R0 ;GET REAL EXPONENT MOV (SP)+,R1 CLR R2 CLR R3 BR PWD ;JOIN $PWDD $PWDD: MOV (SP)+,R0 ;GET EXPONENT MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 PWD: MOV R4,-(SP) ;SAVE REGISTERS MOV R5,-(SP) MOV SP,R5 CMP (R5)+,(R5)+ ;POINT TO BASE MO .TITLE $PDI $VERSN 03 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL $PWDI,$ERRA; .IFNDF FPU .GLOBL $MLD,$DVD,$POLSH; .ENDC ; DOUBLE BASE TO INTEGER EXPONENT PROCESSING ; CALLED IN THE POLISH MODE. ; THE INTEGER EXPONENT IS @SP ; THE DOUBLE BASE IS AT 2(SP) THRU 8.(SP). ; THIS ROUTINE REPLACES THEM WITH D**I. R0=%0 R1 .TITLE $PDP $VERSN 01 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. .CSECT R3=%3 R4=%4 R5=%5 ; ; $POPP4,$POPP5 - POP A 4 WORD (DOUBLE OR COMPLEX) PARAMETER ; .GLOBL $POPP4,$POPP5,$POP4B $POPP5: $POPP4: MOV (R4)+,R3 ;GET DISPLACEMENT ADD R5,R3 ;ADD IT TO LIST ADDRESS MOV @R3,R3 ;GET THE VARIABLE ADDRESS JMP $POP4B ;GO TO COMMON XPONENT NOT 0 TST 14.(SP) ;TEST REAL PART BNE DONE1 ;JUMP IF BASE NOT 0 TST 18.(SP) ;TEST IMAGINARY PART BNE DONE1; BR ERROR1 ;0**0 NOT DEFINED EVODD: MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) SQUAR: MOV 6(SP),-(SP) ;DUPLICATE CURRENT POWER OF D MOV 6(SP),-(SP) MOV 6(SP),-(SP) MOV 6(SP),-(SP) JSR R4,$POLSH ;SQUARE CURRENT POWER OF R .WORD $MLC,ASR ASR: ASR 18.(SP) ;TEST EXPONENT BIT BCC SQUAR ;JUMP IF 0 MOV 14.(SP),-(SP) ;GET PARTIAL RESULT V R3,-(SP) ;PUSH EXPONENT MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) BGE EPZ ;JUMP IF E >=0 TST @R5 ;CHECK B BLT ERROR ;JUMP IF E <0 AND B <0 BEQ ERROR1 ;JUMP IF E <0 AND B =0 BR BPOS ;JUMP IF E <0 AND B >0 EPZ: BGT EPOS; JUMP IF E>0 TST @R5; E=0, CHECK B BEQ ERROR1; JUMP IF E=0 AND B=0 BR ONE; JUMP IF E=0 AND B<>0 EPOS: TST @R5; E>0, CHECK B BEQ ZERO; JUMP IF E>0 AND B=0 BLT ERROR; JUMP IF E>0 AND B<0 BPOS: MOV #DLOG,R4 ;POINT TO DLOG JSR PC,$FCALL ;GET DLOG(B) MOV R3,-(SP) =%1 R4=%4 R5=%5 SP=%6 F0=%0 F1=%1 .IFNDF FPU $PWDI: MOV @SP,-(SP) ;DUPLICATE EXPONENT BGE EPOS ;JUMP IF + NEG @SP ;GET ABS VALUE OF EXPONENT EPOS: MOV R4,-(SP) ;SAVE R4 ASR 2(SP) ;TEST EXPONENT BCC EVEN ;JUMP IF EVEN MOV 12.(SP),-(SP) ;D TO WORK SPACE MOV 12.(SP),-(SP) MOV 12.(SP),-(SP) MOV 12.(SP),-(SP) TST 10.(SP) ;TEST REST OF EXPONENT BEQ DONE1 ;JUMP IF EXP WAS 1 BR EVODD EVEN: CLR -(SP) ;PUT 1. IN WORK SPACE CLR -(SP) CLR -(SP) MOV #40200,-(SP) TST 10.(SP)CODE ; .END MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) ;GET R**2**N MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) JSR R4,$POLSH ;FORM NEW PARTIAL RESULT .WORD $MLC,UNPOL UNPOL: MOV (SP)+,14.(SP) ;STORE IN WORK SPACE MOV (SP)+,14.(SP) MOV (SP)+,14.(SP) MOV (SP)+,14.(SP) TST 18.(SP) ;TEST REMAINDER OF EXPONENT BNE SQUAR ;JUMP IF MORE TO DO DONE: ADD #8.,SP ;FLUSH D**2**N DONE1: TST 12.(SP) ;TEST EXPONENT SIGN BGE EPLUS ;JUMP IF + MOV 6(SP),-(SP) ;MOV MOV R2,-(SP) MOV R1,-(SP) ;PUSH DLOG(B) MOV R0,-(SP) JSR R4,$POLSH ;GET E*DLOG(B) .WORD $MLD,UNPOL UNPOL: MOV SP,R5 ;POINT TO E*LN(B) MOV #DEXP,R4 ;POINT TO DEXP JSR PC,$FCALL ;GET EXP(E*LN(B)) OUT: ADD #8.,SP ;FLUSH E*LN(B) MOV (SP)+,R5 MOV (SP)+,R4 MOV R0,@SP ;PUT RESULT ON STACK MOV R1,2(SP) MOV R2,4(SP) MOV R3,6(SP) JMP @(R4)+ ;RETURN TO USER ONE: MOV #40200,R0 ;RETURN 1. BR ZERO1 ERROR: MOV #11003,R0 ;ERROR 3,18 BR ECALL ERROR1: MOV #10403,R0 ;ERROR 3,17 ECALL: JS ;TEST REST OF EXPONENT BNE EVODD ;JUMP IF EXPONENT NOT 0 TST 14.(SP) ;TEST D BNE DONE1 ;JUMP IF BASE NOT 0 BR ERROR1 ;0**0 NOT DEFINED EVODD: MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) MOV 20.(SP),-(SP) SQUAR: MOV 6(SP),-(SP) ;DUPLICATE CURRENT POWER OF D MOV 6(SP),-(SP) MOV 6(SP),-(SP) MOV 6(SP),-(SP) JSR R4,$POLSH ;SQUARE CURRENT POWER OF R .WORD $MLD,ASR ASR: ASR 18.(SP) ;TEST EXPONENT BIT BCC SQUAR ;JUMP IF 0 MOV 14.(SP),-(SP) ;GET PARTIAL RESULT MOV 14.(SPE D**+I DOWN MOV 6(SP),-(SP) MOV 6(SP),-(SP) MOV 6(SP),-(SP) BNE RECIP; JUMP IF REAL PART NOT 0.0 TST 4(SP); TEST IMAGINARY PART BEQ ERROR ;JUMP IF D=0 RECIP: CLR 14.(SP) ;INSERT A (1.0,0.0) CLR 12.(SP) CLR 10.(SP) MOV #40200,8.(SP) JSR R4,$POLSH ;GET 1/D**+I .WORD $DVC,EPLUS EPLUS: MOV (SP)+,12.(SP) ;MOVE RESULT UP MOV (SP)+,12.(SP) MOV (SP)+,12.(SP) MOV (SP)+,12.(SP) MOV (SP)+,R4 ;RESTORE R4 CMP (SP)+,(SP)+ ;FLUSH EXPONENTS JMP @(R4)+ ;RETURN TO CALLER ERROR: ADD #8.R PC,$ERRA ZERO: CLR R0 ;RETURN 0 ZERO1: CLR R1 CLR R2; CLR R3; BR OUT ; .END ),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) ;GET R**2**N MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) MOV 14.(SP),-(SP) JSR R4,$POLSH ;FORM NEW PARTIAL RESULT .WORD $MLD,UNPOL UNPOL: MOV (SP)+,14.(SP) ;STORE IN WORK SPACE MOV (SP)+,14.(SP) MOV (SP)+,14.(SP) MOV (SP)+,14.(SP) TST 18.(SP) ;TEST REMAINDER OF EXPONENT BNE SQUAR ;JUMP IF MORE TO DO DONE: ADD #8.,SP ;FLUSH D**2**N DONE1: TST 12.(SP) ;TEST EXPONENT SIGN BGE EPLUS ;JUMP IF + MOV 6(SP),-(SP) ;MOVE D**+I DO .TITLE $PDU $VERSN 07 ; ; ; COPYRIGHT 1971, 1972,1973 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL PDUMP,$OUTFI,$IOA,$IOF,$ERRA .GLOBL $ICO,$DCO,$WRITE .GLOBL $APDU,SETPDU ; ; FORTRAN SETPDU ENTRY ; ; SPECIFY PDUMP LOGICAL UNIT NUMBER ; SETPDU: JSR PC,$APDU ;UNIT LOCATION MOV @2(R5),@R0 ;SAVE UNIT # .F4RTN ; THE FORTRAN PDUMP ROUTINE,SP ;FLUSH STACK ERROR1: MOV #15403,R0 ;ERROR 3,27. JSR PC,$ERRA BR EPLUS ; .END WN MOV 6(SP),-(SP) MOV 6(SP),-(SP) MOV 6(SP),-(SP) BEQ ERROR ;JUMP IF D=0 CLR 14.(SP) ;INSERT A 1. CLR 12.(SP) CLR 10.(SP) MOV #40200,8.(SP) JSR R4,$POLSH ;GET 1/D**+I .WORD $DVD,EPLUS EPLUS: MOV (SP)+,12.(SP) ;MOVE RESULT UP MOV (SP)+,12.(SP) MOV (SP)+,12.(SP) MOV (SP)+,12.(SP) MOV (SP)+,R4 ;RESTORE R4 CMP (SP)+,(SP)+ ;FLUSH EXPONENTS JMP @(R4)+ ;RETURN TO CALLER ERROR: ADD #8.,SP ;FLUSH STACK ERROR1: MOV #10003,R0 ;ERROR 3,16. JSR PC,$ERRA BR EPLUS ; .ENDC .IF. ; CALLING SEQUENCE: ; ; FORTRAN STANDARD (ARGS ARE VARIABLE # OF ; REPEATED TRIPLET - LIMIT1,LIMIT2,TYPE) ; ; ; ; ANY REASONABLE NUMBER OF REPETITIONS OF THE ; ABOVE TRIPLET TO DUMP ADDITIONAL SEGMENTS OF ; USER STORAGE. ; ; EITHER LIMIT1 OR LIMIT2 MAY BE THE LOW LIMIT ; OF THE AREA TO BE DUMPED. IN ANY EVENT STORAGE ; WILL BE DUMPED FROM THE LOWER LIMIT TO AND INCLUDING ; THE UPPER LIMIT. DEFINED TYPE CODES ARE AS FOLLOWS: ; 0 1 WORD OCTAL ; 1 1 WORD INTEGER ; 2 2 WORD OCTAL ; 3 2 .TITLE $PHP2 $VERSN 02 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; ; ; $PSHP - PUSH A PARAMETER ADDRESS ; .GLOBL $PSHP ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; .CSECT $PSHP: MOV (R4)+,R0 ADD R5,R0 MOV @R0,-(SP) JMP @(R4)+ ; .END DF FPU $PWDI: SETD ; SET DP MODE FOR FPU LDD #1.0,F0; INITIALIZE RESULT TO 1.0 MOV (SP)+,R0; GET EXPONENT MOV R0,R1; SAVE SIGN IN R1 BGE EPOS; JUMP IF + NEG R0; GET ABS VALUE OF EXPONENT EPOS: LDD (SP)+,F1; GET R ASR R0; TEST EXPONENT BCC EVEN; JUMP IF EVEN ODD: LDD F1,F0; BEQ DONE; JUMP IF EXP WAS 1 BR SQUAR; GO TO COMPUTE POWER EVEN: BNE SQUAR; EXPONENT .NE. 0 CFCC ; GET SIGN OF R BNE OUT; JUMP IF BASE NOT 0 BR ERROR; 0**0 NOT DEFINED ; SQUAR: MULD F1,F1; SQUARWORD INTEGER ; 4 REAL ; 5 DOUBLE PRECISION R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PDUMP: MOV (R5)+,-(SP) ;GET NUMBER OF ARGUMENTS NEXT: DECB @SP ;COUNT ARGS BGE ARGS OUT: TST (SP)+ ;POP ARG COUNT .F4RTN ;ALL ARGUMENTS USED. RETURN TO USER ARGS: MOV (R5)+,R0 ;GET FIRST OF TRIPLET DECB @SP ;COUNT BLT ERROR MOV (R5)+,R1 ;GET SECOND LIMIT DECB @SP BLT ERROR MOV @(R5)+,R2 ;GET TYPE BLT NEXT ;NOT A LEGAL TYPE CMP R2,#5 BGT NEXT ;DITTO MOV R5,-(SP);MARK PLACE IN AR .TITLE $PHR $VERSN 07 ; ; ;COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ; ;THIS ROUTINE PLACES ONE, TWO, OR FOUR ITEMS ON THE STACK ; FROM THE REGISTERS R0-R3. IT IS USED AFTER FUNCTION ; CALLS TO PLACE THE FUNCTION RESULT ON THE STACK ; .GLOBL $PSHR5,$PSHR4,$PSHRE CURRENT POWER OF R ASR R0; TEST EXPONENT BIT BCC SQUAR; JUMP IF 0 MULD F1,F0; RESULT=RESULT*R**2**N BNE SQUAR; MORE EXPONENT TO DO ; DONE: TST R1; TEST EXPONENT SIGN BGE OUT; CFCC ; CHECK 0 RESULT BEQ ERROR; 0.0**(-N) LDD #1.0,F1; DIVD F0,F1; GET 1/R**I LDD F1,F0; OUT: STD F0,-(SP); RESULT TO STACK JMP @(R4)+; EXIT ERROR: MOV #10003,R0 ;ERROR 3,16. JSR PC,$ERRA BR OUT; .ENDC .END G STRING ASL R2 ;WORD ALIGN SUB R0,R1 ;GET SMALLER LIMIT IN R0 BGE INC ;JUMP IF R1 HIGH ADD R1,R0 ;SWAP R0 AND R1 NEG R1 INC: MOVB ADB(R2),R3 ;GET # OF BYTES/ITEM ASR R3 ;DIVIDE R1 BY IT ASR: ASR R1 ASR R3 BGT ASR ;LOOP INC R1 ;GET # OF ELEMENTS TO DUMP MOV R1,-(SP) ;BUILD ADB FOR $IOA. DIMENSION MOV ADB(R2),-(SP) ;PUSH ADB TYPE FLAGS MOV R0,-(SP) ;PUSH ARRAY START TO ADB MOV SP,R5; ;POINTER TO ADB ON STACK JSR PC,$APDU ;GET ADDR OF DEV NUM IN R0 MOV R0,-(SP); ADDRESS OF3,$PSHR2,$PSHR1 $PSHR5: $PSHR4: MOV R3,-(SP) ;PUSH FOUR WORDS MOV R2,-(SP) $PSHR3: MOV R1,-(SP) ;PUSH TWO WORDS $PSHR2: $PSHR1: MOV R0,-(SP) ;PUSH ONE WORD JMP @(R4)+ ; .END .TITLE $PII $VERSN 03 ; ; ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORPORATION, MAYNARD,MASS ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE ; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT ; WHICH IS NOT SUPPLIED BY DEC. ; .CSECT .GLOBL $PWII,$ERRA; .IFNDF MULDIV .GLOBL $MLI,$POLSH; .ENDC ; INTEGER BASE (B) TO INTEGER EXPONENT (E) PROCESSING ; CALLED IN THE POLISH MODE ; E IS @SP, AND B IS AT 2(SP) ; THIS ROUTINE REPLACES THEM WITH B**I ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 OUTPUT DEVICE NUMBER MOV FMT(R2),-(SP) ;PUSH FORMAT TYPE FOR $OUTFI JSR R4,$POLSH ;ENTER POLISH MODE .GLOBL $POLSH .WORD $OUTFI,0,0; .WORD PSHPTR,$IOA,$IOF,UNPOL ;WRITE OUT ARRAY UNPOL: ADD #6,SP ;FLUSH ADB MOV (SP)+,R5; RESTORE ARG LIST POINTER BR NEXT ;GO FOR NEXT TRIPLET PSHPTR: MOV R5,-(SP); PUSH ADB POINTER FOR $IOA MOV #1,-(SP); PUSH # OF ADB'S JMP @(R4)+; NEXT ; ERROR: MOV #7004,R0 ;ERROR 4,14. JSR PC,$ERRA BR OUT; ; ADB: .WORD 50002 ;OCTAL 1 WORD .WORD 50002 ;DECIMA SP=%6 PC=%7 $PWII: MOV (SP)+,R0 ;GET EXPONENT BLE EXPLE ;JUMP IF E <=0 .IFNDF MULDIV MOV R4,-(SP) ;SAVE REGS MOV R5,-(SP) MOV R0,R5 ;E TO SAFE REGISTER ASR R5 ;TEST E BIT BCC EVEN ;JUMP IF E EVEN MOV 4(SP),-(SP) ;B TO WORK SPACE TST R5 ;TEST REST OF EXPONENT BEQ DONE ;JUMP IF ALL DONE BR EVODD EVEN: MOV #1,-(SP) ;1 TO WORK SPACE EVODD: MOV 6(SP),-(SP) ;GET B SQUAR: MOV @SP,-(SP) ;SQUARE CURRENT POWER OF B JSR R4,$POLSH ;GO $MLI .WORD $MLI,ASR ASR: ASR R5 ;TEST E BIT BCDIRECTORY DT0: [ 1,1 ] 27-SEP-73 MLD .MAC 17 27-SEP-73 <233> 132314 MLI .MAC 6 27-SEP-73 <233> 000055 MLR .MAC 13 27-SEP-73 <233> 025034 MOD .MAC 3 27-SEP-73 <233> 117040 NAM .MAC 6 27-SEP-73 <233> 171504 NEG .MAC 3 27-SEP-73 <233> 137635 NFR .MAC 10 27-SEP-73 <233> 165776 NRR .MAC 9 27-SEP-73 <233> 054203 NTB .MAC 2 27-SEP-73 <233> 064246 NTI .MAC 2 27-SEP-73 <233> 061215 OL 1 WORD .WORD 50004 ;OCTAL 2 WORD .WORD 50004 ;DECIMAL 2 WORD .WORD 54004 ;REAL .WORD 60010 ;DOUBLE PRECISION ; FMT: .WORD OFMT,IFMT,OFMT,IFMT,GFMT,DFMT OFMT: .ASCII /(8O8)/ IFMT: .ASCII /(8I8)/ GFMT: .ASCII /(4G15.7)/ DFMT: .ASCII /(3D22.14)/ ; .EVEN .END C SQUAR ;JUMP IF A 0 MOV @SP,-(SP) ;GET B**2**N MOV 4(SP),-(SP) ;GET PARTIAL RESULT FROM WORK JSR R4,$POLSH ;FORM NEW PARTIAL RESULT .WORD $MLI,UNPOL UNPOL: MOV (SP)+,2(SP) ;PARTIAL RESLT TO WORK SPACE TST R5 ;TEST REST OF E BNE SQUAR ;JUMP IF MORE TO DO TST (SP)+ ;POP B**2**N DONE: MOV (SP)+,4(SP) ;MOVE RESULT UP MOV (SP)+,R5 ;RESTORE REGS MOV (SP)+,R4 JMP @(R4)+ ;RETURN TO USER .ENDC ; .IFDF MULDIV MOV #1,R1; INITIALIZE RESULT=1 MOV (SP)+,R3; GET B ASR R0; TEST EXPONENPN .MAC 9 27-SEP-73 <233> 026643 OPARY1.MAC 2 27-SEP-73 <233> 035425 OPARY2.MAC 2 27-SEP-73 <233> 042447 OPARY3.MAC 2 27-SEP-73 <233> 035447 OPARY4.MAC 2 27-SEP-73 <233> 043763 OPASI1.MAC 3 27-SEP-73 <233> 150174 OPASI2.MAC 3 27-SEP-73 <233> 135177 OPASI3.MAC 3 27-SEP-73 <233> 140545 OPASI4.MAC 3 27-SEP-73 <233> 142311 OPASI5.MAC 3 27-SEP-73 <233> 105256 OPASI6.MAC 3 27-SEP-73 <233> 117214 OPASIT BCC SQUAR; JUMP IF EVEN MOV R3,R1; B TO RESULT REGISTER TST R0; BEQ DONE; JUMP IF EXP WAS 1 ; SQUAR: MUL R3,R3; SQUARE CURRENT POWER OF B BCS OVER; JUMP ON OVERFLOW ASR R0; TEST E BIT BCC SQUAR; JUMP IF A 0 MUL R3,R1; FORM NEW PARTIAL RESULT BCS OVER; JUMP ON OVERFLOW TST R0; TEST REST OF E BNE SQUAR; MORE EXPONENT TO DO DONE: MOV R1,-(SP); RESULT TO STACK JMP @(R4)+; EXIT ; OVER: MOV #7003,R0 ;ERROR 3,14. JSR PC,$ERRA ;INTEGER MULTIPLY OVERFLOW BR DONE; .E7.MAC 3 27-SEP-73 <233> 147332 OPASI8.MAC 4 27-SEP-73 <233> 176605 OPASI9.MAC 3 27-SEP-73 <233> 105703 OPMDI1.MAC 2 27-SEP-73 <233> 034146 OPMDI2.MAC 2 27-SEP-73 <233> 044773 OPMDI3.MAC 2 27-SEP-73 <233> 045033 OPMDI4.MAC 2 27-SEP-73 <233> 044055 OPMDI5.MAC 2 27-SEP-73 <233> 045574 OPMDI6.MAC 2 27-SEP-73 <233> 045757 OPFPU1.MAC 3 27-SEP-73 <233> 127120 OPFPU2.MAC 3 27-SEP-73 <233> 073613 OPFPU3.MANDC ; EXPLE: BLT EXPLT ;JUMP IF E <0 TST @SP ;CHECK B BEQ ERROR ;JUMP IF E=0 AND B =0 ONE: MOV #1,@SP ;ANSWER IS 1 JMP @(R4)+ ;RETURN TO USER EXPLT: TST @SP ;TEST B BEQ ERROR ;JUMP IF E <0 AND B =0 BLT BLT ;JUMP IF B <0 DEC @SP ;GET BASE -1 BEQ ONE ;JUMP IF BASE WAS 1 CLR: CLR @SP ;ANSWER IS 0 JMP @(R4)+ ;RETURN TO USER BLT: ADD #2,@SP ;GET E +2 BLE CLR ;JUMP IF B <-1 ASR R0 ;TEST E BCC RTN ;JUMP IF EVEN NEG @SP ;ANSWER IS -1 RTN: JMP @(R4)+ ;RETURN TO USER ERROR: MOV #7403C 3 27-SEP-73 <233> 136641 OPFPU4.MAC 3 27-SEP-73 <233> 073455 OPFPU5.MAC 3 27-SEP-73 <233> 115270 OPFPU6.MAC 3 27-SEP-73 <233> 074403 OPMOV1.MAC 3 27-SEP-73 <233> 076222 OPMOV2.MAC 4 27-SEP-73 <233> 012577 OPMOV3.MAC 3 27-SEP-73 <233> 130242 OPREV1.MAC 4 27-SEP-73 <233> 037431 ORB .MAC 2 27-SEP-73 <233> 071124 ORI .MAC 2 27-SEP-73 <233> 066140 OTI .MAC 3 27-SEP-73 <233> 073065 OTV .MAC ,R0 ;ERROR 3,14. JSR PC,$ERRA JMP @(R4)+ ; .END 3 27-SEP-73 <233> 144613 PAU .MAC 3 27-SEP-73 <233> 156443 PBP .MAC 3 27-SEP-73 <233> 115560 PCI .MAC 7 27-SEP-73 <233> 045156 PDD .MAC 6 27-SEP-73 <233> 151470 PDI .MAC 8 27-SEP-73 <233> 177353 PDP .MAC 3 27-SEP-73 <233> 074264 PDU .MAC 7 27-SEP-73 <233> 101411 PHP .MAC 2 27-SEP-73 <233> 056723 PHR .MAC 3 27-SEP-73 <233> 117100 PII .MAC 7 27-SEP-73 <233> 043562 FREE BLKS: 343 FREE FILES: 2