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 / SLIB2.LBR / SLHLFDC.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  80 lines

  1. ;
  2. ; SYSLIB Module Name:  SLHLFDC
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    lhlfdc
  8.  
  9.     EXT    LOUT
  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. ;  LHLFDC --
  25. ;    PRINT HL AS DECIMAL CHARACTERS IN N-CHAR FIELD ON LST:
  26. ;    FLOATING PRINT, WHERE FIELD SIZE IS FROM 1 TO 5 CHARS
  27. ;
  28. LHLFDC:
  29.     PUSH    AF        ; SAVE ALL REGS
  30.     PUTRG
  31.     LD    B,1        ; B=1 FOR LEADING <SP>
  32. ;
  33. ;  PRINT HL USING LEADING <SP> FLAG IN B
  34. ;
  35.     LD    DE,10000    ; PRINT 10000'S
  36.     CALL    PHDC1
  37.     LD    DE,1000        ; PRINT 1000'S
  38.     CALL    PHDC1
  39.     LD    DE,100        ; PRINT 100'S
  40.     CALL    PHDC1
  41.     LD    DE,10        ; PRINT 10'S
  42.     CALL    PHDC1
  43.     LD    A,L        ; PRINT 1'S
  44.     ADD    '0'        ; CONVERT TO ASCII
  45.     CALL    LOUT
  46.     GETRG            ; RESTORE ALL REGS
  47.     POP    AF
  48.     RET
  49.  
  50. ;
  51. ;  DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING <SP>S
  52. ;
  53. PHDC1:    LD    C,0        ; SET COUNT
  54. PHDC2:    LD    A,L        ; SUB E FROM L
  55.     SUB    E
  56.     LD    L,A        ; RESULT IN L
  57.     LD    A,H        ; SUB D FROM H W/BORROW
  58.     SBC    A,D
  59.     LD    H,A        ; RESULT IN H
  60.     JP    C,PHDC3        ; DONE IF CARRY SET (FURTHER BORROW)
  61.     INC    C        ; INCR COUNT
  62.     JP    PHDC2
  63. PHDC3:    LD    A,L        ; ADD E TO L
  64.     ADD    E
  65.     LD    L,A        ; RESULT IN L
  66.     LD    A,H        ; ADD D TO H W/CARRY
  67.     ADC    A,D
  68.     LD    H,A        ; RESULT IN H
  69.     LD    A,C        ; GET RESULT
  70.     OR    A        ; CHECK FOR ZERO
  71.     JP    NZ,PHDC4
  72.     OR    B        ; 0=NO LEADING SP (A=0, A OR B = 0 MEANS B = 0)
  73.     RET    NZ
  74. PHDC4:    LD    B,0        ; TURN OFF LEADING <SP>
  75.     LD    A,C        ; GET VALUE
  76.     ADD    '0'        ; CONVERT TO ASCII
  77.     JP    LOUT
  78.  
  79.     END
  80.