/FOCAL 5/69, BRIEF E.A.E. PATCHES /THESE USE MODE "B" (PDP-8/E & LATER) /FIELD 0 FOR 1 USER, FIELD 1 FOR 2 USERS /SUGGESTION: LOAD OVER 2-USER LANGUAGE /--STILL IN FIELD 0--BEFORE STARTING IT. *7055 /REVISE "FIXSGN" TO SHIFT OPERAND LEFT, /AND TO KEEP IT POSITIVE IN ALL CASES. FIXSGN, 0 CLA CLL CMA DCA FNEGSW TAD FLAC1 /TEST FLAC. IS IT 0? SNA JMP I FLTPT /IT IS. EXIT. SPA CLA NEGATE /IF IT WAS NEGATIVE TAD FLOP1 SPA CLA JMS I NEGOP1 /LIKEWISE FOR OPERAND TAD FNEGSW DCA T2 TAD FLOP3 /SHIFT OPERAND LEFT CLL RAL DCA FLOP3 TAD FLOP2 RAL DCA FLOP2 TAD FLOP1 RAL DCA FLOP1 /PRE-SHIFT COMPLETED JMP I FIXSGN /RETURN /NOTE: THE DIVISION ERROR (OVERFLOW, DIVISION / BY 0, ETC.) IS NOW FLAGGED AS "28.122", NOT /"28.123". SEE LOCATION 7172, FORMERLY 7173. /FLOATING MULTIPLICATION, 3-WORD PRODUCT, /2-WORD MULTIPLICAND & MULTIPLIER FLMUL, JMS FIXSGN TAD FLAC0 TAD FLOP0 DCA FLAC0 /COMPUTE EXPONENT TAD FLAC2 /LOW MULTIPLICAND SWAB /MQL & SWITCH MODE TO "B" MUY /LO*LO FLOP2 MQL /ONLY CARRY MATTERS TAD FLAC1 SWP MUY /HI*LO + CARRY FLOP2 DCA WORD2 /STORE CARRY SWP DCA FLAC3 /OVERFLOW WORD TAD FLAC2 /LOW MULTIPLICAND MQL MUY /LO*HI FLOP1 SWP TAD FLAC3 DCA FLAC3 /COMPLETES 3RD ORDER WD. SZL ISZ WORD2 /ADDITIVE CARRY TAD FLAC1 SWP MUY /HI*HI + CARRY FLOP1 SWP TAD WORD2 /COMPLETES 2ND ORDER WD. SWP /MQ GETS LOW WORD, SZL / AC GETS HIGH IAC /ADDITIVE CARRY, IF ANY SWP DST FLAC1 /STORE JMS FNORM /NORMALIZE ISZ T2 /NEG. ANSWER WANTED? NEGATE /YES JMP I FLTPT /EXIT WORD2, 0 ZBLOCK 2 /FREE /FLOATING DIVISION (DOUBLE-PREC.) FLDIV, JMS FIXSGN /SET UP FLAC & FLOP TAD FLOP0 CIA TAD FLAC0 DCA FLAC0 /COMPUTE EXPONENT DCA FLAC3 /NOT USED THIS TIME TAD FLAC2 /LOW DIVIDEND SWAB /INTO MQ TAD FLAC1 /HIGH DIVIDEND DVI FLOP1 /HIGH DIVISOR DST DVQUOT /("DST" WORKS BACKWARDS) SZL CLA /LINK = 1 IF OVERFLOW BADDIV, ERROR /GENERATES "28.122" /QUOTIENT IS STILL IN MQ: MUY FLOP2 /QUOT * LO DIVISOR / 4096 DCM /NEGATE, SEE IF IT'S TAD DVREM / GREATER THAN REM. SZL JMP DIVN2 /O.K., NO ADJUSTMENT DVOPS, CIA /ADJUST 1ST DIVIDE DCA DVREM /ADJUST REM. TAD FLOP1 /CHECK FOR OVERFLOW CLL CIA TAD DVREM SNL JMP DVOP1 /*DON'T* ADJUST QUOT. DCA DVREM /YES, ADJUST CMA TAD DVQUOT /DECREMENT IT DCA DVQUOT DVOP1, CLA CLL TAD DVREM /REMAINDER SNA CAM /REM.=0, 0 EVERYTHING DVI /DIVIDE REM. FLOP1 /..BY HIGH DIVISOR SZL CLA JMP I DIVBAD /OVERFLOW DCM /NEGATE, ADJUST HI QUOT. JMP DVLP1 DIVN2, DVI FLOP1 SZL CLA JMP I DIVBAD /OVERFLOW DVLP1, TAD DVQUOT /QUOTIENT OF 1ST DIVISION SMA /"MINUS" (BIT 0=1)? JMP POSQUO /NO, IT'S NORMALIZED LSR 1 / UNSIGNED RIGHT SHIFT ISZ FLAC0 / PAY EXPONENT FOR SHIFT NOR2, NOP / MIGHT SKIP POSQUO, SWP DST FLAC1 /STORE ANSWER CAM ISZ T2 /NEG. ANSWER WANTED? NEGATE /YES JMP I .+1 FPNT+1 /EXIT POINT DIVBAD, BADDIV *6642 FLMUL FLDIV /MOVED TO NEW ADRS. *7341 JMS I NOR2 /SAME CODE, NEW ADRS. /SYMBOLS: FNEGSW= 4 FLOP0= 40 FLOP1= 41 FLOP2= 42 FLOP3= 43 FLAC0= 44 FLAC1= 45 FLAC2= 46 FLAC3= 47 TEMP1= 162 TEMP2= 163 DVQUOT= TEMP1 DVREM= TEMP2 T2= 157 FNORM= 7000 MULPLR= FNORM FPNT= 6600 ERROR= JMS I 126 NEGOP1= 7036 FLTPT= 7035 /HOLDS FPNT+1 NEGATE= JMS I 50 CAM= CLA MQL SWAB= 7431 MUY= 7405 DVI= 7407 LSR= 7417 DST= 7445 DCM= 7575 $$$$ PAS 3/75 $$$$