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 / SMHL5DC.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  113 lines

  1. ;
  2. ; SYSLIB Module Name:  SMHL5DC
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    mhl5dc,mhldc
  8.  
  9. PUTRG    MACRO
  10.     PUSH    BC    ; SAVE BC, DE, HL
  11.     PUSH    DE
  12.     PUSH    HL
  13.     ENDM
  14. GETRG    MACRO
  15.     POP    HL    ; RESTORE HL, DE, BC
  16.     POP    DE
  17.     POP    BC
  18.     ENDM
  19.  
  20. ;
  21. ;  MHL5DC --
  22. ;    STORE HL AS 5 DECIMAL CHARACTERS IN MEMORY
  23. ; ON INPUT, HL=VALUE AND DE=PTR TO 5-BYTE BUFFER
  24. ; ON OUTPUT, DE PTS TO NEXT BYTE AFTER BUFFER
  25. ;
  26. MHL5DC:
  27.     PUSH    AF    ; SAVE ALL REGS
  28.     EX    DE,HL    ; HL PTS TO BUFFER
  29.     LD    (MEMPTR),HL
  30.     EX    DE,HL
  31.     PUTRG
  32.     XOR    A    ; A=0
  33.     LD    (LSFLG0),A    ; TURN OFF LEADING <SP>
  34.     JP    PHDC
  35. ;
  36. ;  MHLDC --
  37. ;    STORE HL AS DECIMAL CHARACTERS W/LEADING SPACES IN 5-CHAR FIELD
  38. ; IN MEMORY; ON INPUT, HL=VALUE AND DE=PTR TO 5-BYTE BUFFER
  39. ; ON RETURN, DE PTS TO BYTE AFTER BUFFER
  40. ;
  41. MHLDC:
  42.     PUSH    AF    ; SAVE ALL REGS
  43.     EX    DE,HL    ; HL PTS TO BUFFER
  44.     LD    (MEMPTR),HL
  45.     EX    DE,HL
  46.     PUTRG
  47.     LD    A,1    ; A=1
  48.     LD    (LSFLG0),A    ; TURN ON LEADING <SP>
  49. ;
  50. ;  PRINT HL USING LEADING <SP> FLAG LSFLG0
  51. ;
  52. PHDC:    LD    DE,10000    ; PRINT 10000'S
  53.     CALL    PHDC1
  54.     LD    DE,1000    ; PRINT 1000'S
  55.     CALL    PHDC1
  56.     LD    DE,100    ; PRINT 100'S
  57.     CALL    PHDC1
  58.     LD    DE,10    ; PRINT 10'S
  59.     CALL    PHDC1
  60.     LD    A,L    ; PRINT 1'S
  61.     ADD    '0'    ; CONVERT TO ASCII
  62.     CALL    PUT
  63.     GETRG        ; RESTORE ALL REGS
  64.     EX    DE,HL    ; DE=VALUE
  65.     LD    HL,(MEMPTR)    ; GET PTR TO NEXT BYTE
  66.     EX    DE,HL    ; ... IN DE
  67.     POP    AF
  68.     RET
  69.  
  70. ;  BUFFERS
  71. LSFLG0:    DS    1    ; LEADING <SP> FLAG
  72. MEMPTR:    DS    2    ; PTR TO NEXT MEMORY ADDRESS
  73.     
  74. ;  DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING <SP>S
  75. PHDC1:    LD    C,0    ; SET COUNT
  76. PHDC2:    LD    A,L    ; SUB E FROM L
  77.     SUB    E
  78.     LD    L,A    ; RESULT IN L
  79.     LD    A,H    ; SUB D FROM H W/BORROW
  80.     SBC    A,D
  81.     LD    H,A    ; RESULT IN H
  82.     JP    C,PHDC3    ; DONE IF CARRY SET (FURTHER BORROW)
  83.     INC    C    ; INCR COUNT
  84.     JP    PHDC2
  85. PHDC3:    LD    A,L    ; ADD E TO L
  86.     ADD    A,E
  87.     LD    L,A    ; RESULT IN L
  88.     LD    A,H    ; ADD D TO H W/CARRY
  89.     ADC    A,D
  90.     LD    H,A    ; RESULT IN H
  91.     LD    A,C    ; GET RESULT
  92.     OR    A    ; CHECK FOR ZERO
  93.     JP    NZ,PHDC4
  94.     LD    A,(LSFLG0)    ; CHECK FOR LEADING <SP>
  95.     OR    A    ; PRINT VALUE IF NOT (A=0)
  96.     JP    Z,PHDC4
  97.     LD    A,' '    ; PRINT <SP>
  98.     JP    PUT
  99. PHDC4:    XOR    A    ; TURN OFF LEADING <SP>
  100.     LD    (LSFLG0),A
  101.     LD    A,C    ; GET VALUE
  102.     ADD    '0'    ; CONVERT TO ASCII
  103. PUT:
  104.     PUSH    HL    ; SAVE HL
  105.     LD    HL,(MEMPTR)    ; GET PTR
  106.     LD    (HL),A    ; PUT BYTE
  107.     INC    HL    ; PT TO NEXT
  108.     LD    (MEMPTR),HL    ; PUT PTR
  109.     POP    HL    ; RESTORE HL
  110.     RET
  111.  
  112.     END
  113.