                                                             /
/   TRIPLE PRECISION DIVIDE
/
*ORG+200
TDIV, 0
     CLA CLL
     DCA DSGN     /SET SIGN OF RESULT SWITCH
     TAD DM3      /-3
     DCA ERAS-1   /TO AN INDEX LOC
     TAD I TDIV   /ADDRESS OF DIVISOR
     ISZ TDIV     /INDEX FOR EXIT
     DCA ERAS
     TAD I ERAS   /HIGH ORDER DIVISOR
     SNA
     ISZ ERAS-1
     DCA SRH
     ISZ ERAS
     TAD I ERAS   /MED ORDER DIVISOR
     SNA
     ISZ ERAS-1
     DCA SRM
     ISZ ERS
     TAD I ERAS   /LOW ORDER DIVISOR
     SZA
     JMP .+4
     ISZ ERAS-1
     JMP .+2
     HLT          /HALT ON AN ATTEMPT TO DIVIDE BY 0
     DCA SRL
/
/   NOW CHECK SIGNS OF EVERYTHING
/
     TAD ACH      /HIGH ORDER AC
     SMA          /IS IT NEGATIVE
     JMP .+3      /NO
     ISZ DSGN     /YES ... SET SIGN SWITCH
     JMS I IC72   /COMPLEMENT 72 BIT AC-MQ
     CLA CLL
     TAD SRH      /COPY SR TO -SR (MSR)
     DCA MSRH
     TAD SRM
     DCA MSRM
     TAD SRL
     DCA MSRL
     TAD SRH      /HIGH ORDER SR
     SMA          /IS IT NEGATIVE
     JMP .+5      /NO ... COMPLEMENT -SR
     ISZ DSGN     /YES ... SET SIGN SWITCH
     JMS I ICOM   /COMPLEMENT SR
     SRH
     JMP .+3
     JMS I ICOM   /COMPLEMENT MSR IF POSITIVE
     MSRH
     TAD DM36     /-36
     DCA DSHC     /TO SHIFT COUNTER
/
/   THIS BEGINS THE ACTUAL DIVIDE
/
/   FIRST SHIFT AC-MQ LEFT ONE PLACE
/
DLP, CLA CLL CML
     TAD DM6      /-6
     DCA ERAS     /TO INDEX LOC
     TAD AMQLD    /ADDRESS OF LOW ORDER MQ
     DCA ERAS-1   /TO ADDRESS INDEX LOC
/
     CLA CML
     TAD I ERAS-1 /WORD FROM 72 BIT REGISTER
     RAL          /SHIFT LEFT ONE
     DCA I ERAS-1 /NEW WORD
     CLA CMA      /-1
     TAD ERAS-1   /+ADDRESS
     DCA ERAS-1   /NEW ADDRESS
     ISZ ERAS     /INDEX ON NO OF WORDS
     JMP .-10     /MORE
/
/   CHECK TO SEE IF AC >= SR
/
     CLA CLL
     TAD SRH      /-HIGH ORDER SR
     CIA
     TAD ACH      /+HIGH ORDER AC
     SNA
     JMP .+4      /MORE TESTS IF HIGH ORDER EQUAL
     SMA          /IS AC>SR
     JMP SBTC     /YES ... GO TO SUBTRACT
     JMP INDX     /NO ... GO TO INDEX SHIFT COUNTER
     CLA CLL
     TAD SRM      /-MED ORDER SR
     CMA CML IAC  /USE LINK TO FORM 13 BIT AC
     TAD ACM      /+MED ORDER AC
     SNA
     JMP .+4      /MORE TESTS IF HIGH AND MED ORDER EQUAL
     SNL          /LINK IS NOW SIGN BIT ... IS AC>SR
     JMP SBTC     /YES ... GO TO SUBTRACT
     JMP INDX     /NO ... GO TO INDEX SHIFT COUNTER
     CLA CLL
     TAD SRL      /-LOW ORDER SR
     CMA CML IAC  /USE LINK TO FORM 13 BIT AC
     TAD ACL      /+LOW ORDER AC
     SZL          /LINK IS SIGN BIT ... IS AC>=SR
     JMP INDX     /NO ... INDEX SHIFT COUNTER
/
/   NOW SUBTRACT SR FROM AC
/
SBTC, CLA CLL
     TAD ACL      /LOW ORDER
     TAD MSRL
     DCA ACL  
     GLK          /OVERFLOW BIT
     TAD ACM      /MED ORDER
     TAD MSRM
     DCA ACM  
     GLK          /OVERFLOW BIT
     TAD ACH      /HIGH ORDER
     TAD MSRH
     DCA ACH
     ISZ MQL      /INDEX LOW ORDER MQ TO ACCOUNT FOR DIVISION
INDX, ISZ DSHC    /INDEX ON SHIFT COUNTER
     JMP DLP
/
/   DIVISION COMPLETE
/   CHECK SIGN OF RESULT
/
     CLA CLL
     TAD DSGN      /SIGN SWITCH
     RAR           /IS IT ODD
     SNL
     JMP I TDIV    /NO ... RESULT + ... EXIT
     JMS I ICOM    /YES ... COMPLEMENT RESULT
     MQH
     JMP I TDIV    /EXIT
/
/   LOCAL CONSTANTS
/
DM6, 0-6
DM3, 0-3
DM36, 0-44
AMQLD, MQL
ICOM, COMP
IC72, C72
DSHC, 0
MSRH, 0
MSRM, 0
MSRL, 0
DSGN, 0
     PAUSE 
                                                            *U*79