ASMB,R,Q,C
*     NAME:   .FDV  
*     SOURCE: 92070-18221 
*     RELOC:  92070-1X221 
*     PGMR:   HLC 
* 
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      NAM .FDV,6  92070-1X221  REV.1941  790418 
      ENT .FDV
      EXT .PACK,.ZPRV 
* 
* 
*     CALLING SEQUENCE:       DLD <DIVIDEND>
*                             JSB .FDV
*                             DEF <DIVISOR> 
*                             (RESULT IN (A,B)) 
* 
*     IF UNDERFLOW OCCURS, ZERO IS RETURNED.
*     IF OVERFLOW OCCURS, (077777,177777) IS RETURNED.
*     IF UNDERFLOW OR OVERFLOW OCCUR, THE OVERFLOW BIT IS 
*     SET, OTHERWISE IT IS CLEARED. 
      SPC 3 
*                   UNPACK OPERANDS, SUBTRACT EXPONENTS.
* 
.FDV  NOP 
      JSB .ZPRV 
      DEF LIBX
      STA A         SAVE HIGH PART OF DIVIDEND. 
      STB C         (IN CASE DIVIDEND IS (A,B) )
      ERA           SAVE "E". 
      STA ESAVE 
      LDA 1         GET LO-MAN + EXP
      AND OM400     MASK OFF EXP
      STA B         SAVE LOW PART OF DIVIDEND MANT. 
      XOR 1         PRODUCE EXPONENT
      SLA,RAR       POSITION
      IOR OM200     AND FORM
      STA EXPON 
      LDA .FDV,I     GET ADDRESS OF DIVISOR.
      ISZ .FDV       BUMP RETURN ADDRESS. 
      STA D         BE CAREFUL, MAY BE ZERO.
      LDA A         RESTORE (A,B) 
      LDB C 
      DLD D,I       GET DIVISOR.
      SZA,RSS       TEST FOR DIVIDE BY ZERO 
      JMP DVZRO 
      STA C         SAVE HIGH PART OF DIVISOR.
      LDA 1         GET LO-MAN+EXP
      AND OM400     MASK TO LO-MAN
      STA D         SAVE LOW PART OF DIVISOR MANT.
      XOR 1         FORM EXP
      SLA,RAR 
      IOR OM200 
      CMA,INA       COMPUTE EXPONENT DIFFERENCE 
LARGE INA             PLUS 1
      ADA EXPON 
      STA EXPON         & STORE.
      SKP 
*                   DIVIDE THE MANTISSAS. 
* 
      LDB A         (B,A) = DIVIDEND MANTISSA.
      LDA B 
      ASR 2         DIVIDE BY 4 TO AVOID OVERFLOW.
      DIV C         FORM UPPER QUOTIENT.
      STA Q         SAVE. 
      ASR 3         DIVIDE REM BY 8 & SAVE. 
      STB R 
      LDA D         DIVIDE LOWER DIVISOR BY 8.
      CLE,ERA       TO MATCH REMAINDER AND SO THAT
      ARS,ARS       THE SIGN IS INTERPRETED RIGHT.
      MPY Q         FORM FULL REMAINDER:
      CMB,INB       REM - QUOTIENT * (LOWER DIVISOR)
      ADB R         (BUT DIVIDED BY 8)
      DIV C         FORM NEXT WORD OF QUOTIENT. (/8)
      LDB 0         ALIGN WITH FIRST WORD.
      ASR 13
      ADB Q         ADD TO FORM FULL QUOTIENT.
      SWP           IN (A,B). 
* 
*                   PACK, NORMALIZE & EXIT. 
* 
NORM  JSB .PACK       PACK RESULT 
EXPON NOP 
      STA A         RESTORE "E".
      LDA ESAVE 
      ELA 
      LDA A 
LIBX  JMP .FDV,I
      DEF .FDV
* 
*                   HANDLE DIVIDE BY ZERO.
* 
DVZRO LDA LARGE     ANY OLD LARGE + NUMBER. 
      STA EXPON 
      JMP NORM
* 
*                   TEMPS & CONSTANTS.
* 
A     NOP 
B     NOP 
C     NOP 
D     NOP 
Q     EQU A 
R     EQU B 
ESAVE NOP 
OM400 OCT -400
OM200 OCT -200
* 
      END 
                                                                          