home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / SYSLIB / SLIB3.LBR / SMTH12.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  95 lines

  1. ;
  2. ; SYSLIB Module Name:  SMTH12
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    divhd
  8.  
  9. ;
  10. ;  DIVHD -- DIVIDE HL BY DE, RESULT IN HL
  11. ;
  12. DIVHD:
  13.     PUSH    AF
  14.     PUSH    BC
  15.     PUSH    HL    ; SAVE HL
  16.     LD    HL,0
  17.     LD    (ACC),HL    ; ZERO ACCUMULATOR
  18.     POP    HL
  19. ;
  20. ;  CHECK TO MAKE SURE THAT HL > DE
  21. ;
  22.     LD    A,H
  23.     CP    D    ; H > D?
  24.     JP    C,DOVFL    ; ZERO RESULT IF H < D
  25.     JP    NZ,DNOVFL
  26.     LD    A,L
  27.     CP    E    ; L > E?
  28.     JP    C,DOVFL    ; ZERO RESULT IF HL < DE
  29. DNOVFL:
  30.     LD    B,16    ; 16 LOOPS
  31. DVHD:
  32.     CALL    SHFTLH    ; SHIFT DIVIDEND LEFT
  33.     PUSH    HL    ; SAVE DIVIDEND
  34.     LD    HL,(ACC)    ; GET ACC
  35.     CALL    SHFLCH    ; ROTATE ACC AND MOVE IN CARRY
  36.     LD    (ACC),HL    ; NEW ACC
  37.     LD    A,L    ; LOW COMPARISON
  38.     SUB    E    ; COMPARE AND SUBTRACT
  39.     LD    L,A
  40.     LD    A,H    ; HIGH COMPARISON
  41.     SBC    A,D    ; COMPARE AND SUBTRACT
  42.     LD    H,A
  43.     JP    C,DVHD0
  44.     LD    (ACC),HL    ; SAVE NEW ACC
  45.     POP    HL    ; GET DIVIDEND
  46.     LD    A,L    ; PLACE IN A 1 TO QUOTIENT
  47.     OR    1
  48.     LD    L,A
  49.     JP    DVHD1
  50. DVHD0:
  51.     POP    HL    ; GET DIVIDEND AND LEAVE LSB AT ZERO
  52. DVHD1:
  53.     DEC    B    ; COUNT DOWN
  54.     JP    NZ,DVHD
  55. DVRET:
  56.     POP    BC
  57.     POP    AF
  58.     RET
  59. DOVFL:
  60.     LD    HL,0    ; RESULT IS ZERO
  61.     JP    DVRET
  62.  
  63. ;
  64. ;  SHIFT ROUTINES
  65. ;
  66. SHFTLH:            ; SHIFT HL LEFT
  67.     PUSH    AF
  68.     AND    A    ; CLEAR CARRY
  69. SHFL:
  70.     LD    A,L    ; SHIFT LOW
  71.     RLA        ; ROTATE 9-BIT ACC LEFT
  72.     LD    L,A
  73.     LD    A,H    ; SHIFT HIGH
  74.     RLA
  75.     LD    H,A
  76.     JP    NC,OKRET
  77.     POP    AF
  78.     SCF        ; SET CARRY FOR OVERFLOW
  79.     RET
  80. OKRET:
  81.     POP    AF
  82.     OR    A    ; CLEAR CARRY FOR NO OVERFLOW
  83.     RET
  84. SHFLCH:            ; SHIFT HL LEFT, BUT SHIFT IN CARRY FLAG
  85.     PUSH    AF
  86.     JP    SHFL
  87.  
  88. ;
  89. ;  BUFFERS
  90. ;
  91. ACC:    DS    2    ; TEMP ACCUMULATOR
  92. OVFL:    DS    1    ; OVERFLOW FLAG
  93.  
  94.     END
  95.