home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / simtel20 / syslib / slib3.lbr / SPHL5DC.Z80 < prev    next >
Encoding:
Text File  |  1986-02-06  |  1.6 KB  |  90 lines

  1. ;
  2. ; SYSLIB Module Name:  SPHL5DC
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.2
  6.  
  7.     public    phl5dc,phldc
  8.  
  9.     EXT    COUT
  10.  
  11. PUTRG    MACRO
  12.     PUSH    BC    ; SAVE BC, DE, HL
  13.     PUSH    DE
  14.     PUSH    HL
  15.     ENDM
  16. GETRG    MACRO
  17.     POP    HL    ; RESTORE HL, DE, BC
  18.     POP    DE
  19.     POP    BC
  20.     ENDM
  21.  
  22.  
  23. ;
  24. ;  PHL5DC --
  25. ;    PRINT HL AS 5 DECIMAL CHARACTERS
  26. ;
  27. PHL5DC:
  28.     PUSH    AF    ; SAVE ALL REGS
  29.     PUTRG
  30.     LD    B,0    ; B=0 FOR NO LEADING <SP>
  31.     JP    PHDC
  32. ;
  33. ;  PHLDC --
  34. ;    PRINT HL AS DECIMAL CHARACTERS W/LEADING SPACES IN 5-CHAR FIELD
  35. ;
  36. PHLDC:
  37.     PUSH    AF    ; SAVE ALL REGS
  38.     PUTRG
  39.     LD    B,1    ; A=1 FOR LEADING <SP>
  40. ;
  41. ;  PRINT HL USING LEADING <SP> FLAG IN B
  42. ;
  43. PHDC:    LD    DE,10000    ; PRINT 10000'S
  44.     CALL    PHDC1
  45.     LD    DE,1000    ; PRINT 1000'S
  46.     CALL    PHDC1
  47.     LD    DE,100    ; PRINT 100'S
  48.     CALL    PHDC1
  49.     LD    DE,10    ; PRINT 10'S
  50.     CALL    PHDC1
  51.     LD    A,L    ; PRINT 1'S
  52.     ADD    '0'    ; CONVERT TO ASCII
  53.     CALL    COUT
  54.     GETRG        ; RESTORE ALL REGS
  55.     POP    AF
  56.     RET
  57.  
  58. ;
  59. ;  DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING <SP>S
  60. ;
  61. PHDC1:    LD    C,0    ; SET COUNT
  62. PHDC2:    LD    A,L    ; SUB E FROM L
  63.     SUB    E
  64.     LD    L,A    ; RESULT IN L
  65.     LD    A,H    ; SUB D FROM H W/BORROW
  66.     SBC    A,D
  67.     LD    H,A    ; RESULT IN H
  68.     JP    C,PHDC3    ; DONE IF CARRY SET (FURTHER BORROW)
  69.     INC    C    ; INCR COUNT
  70.     JP    PHDC2
  71. PHDC3:    LD    A,L    ; ADD E TO L
  72.     ADD    A,E
  73.     LD    L,A    ; RESULT IN L
  74.     LD    A,H    ; ADD D TO H W/CARRY
  75.     ADC    A,D
  76.     LD    H,A    ; RESULT IN H
  77.     LD    A,C    ; GET RESULT
  78.     OR    A    ; CHECK FOR ZERO
  79.     JP    NZ,PHDC4
  80.     OR    B    ; 0 = NO LEADING <SP> (A=0, A OR B = 0 IF B=0)
  81.     JP    Z,PHDC4
  82.     LD    A,' '    ; PRINT <SP>
  83.     JP    COUT
  84. PHDC4:    LD    B,0    ; TURN OFF LEADING <SP>
  85.     LD    A,C    ; GET VALUE
  86.     ADD    '0'    ; CONVERT TO ASCII
  87.     JP    COUT
  88.  
  89.     END
  90.