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

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