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

  1. ;
  2. ; SYSLIB Module Name:  SMADC
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    ma3dc,madc
  8. ;
  9. ;  MA3DC --
  10. ;    STORE REG A AS 3 DECIMAL CHARACTERS IN MEMORY
  11. ; ON INPUT, A=VALUE AND DE=PTR TO 3-BYTE BUFFER
  12. ; ON RETURN, DE PTS TO BYTE AFTER BUFFER
  13. ;
  14. MA3DC:
  15.     EX    DE,HL    ; PTR IN HL
  16.     PUSH    AF    ; SAVE A
  17.     PUSH    AF
  18.     XOR    A    ; TURN OFF LEADING <SP> FLAG
  19.     LD    (LSFLG),A
  20.     JP    PADC1
  21. ;
  22. ;  MADC --
  23. ;    STORE REG A AS DECIMAL CHARACTERS W/LEADING <SP> IN 3-CHAR FIELD
  24. ; IN MEMORY; ON INPUT, A=VALUE AND HL=PTR TO 3-BYTE BUFFER
  25. ; ON RETURN, HL PTS TO BYTE AFTER BUFFER
  26. ;
  27. MADC:
  28.     EX    DE,HL    ; PTR IN HL
  29.     PUSH    AF    ; SAVE A
  30.     PUSH    AF
  31.     LD    A,1    ; TURN ON LEADING <SP> FLAG
  32.     LD    (LSFLG),A
  33. ;
  34. ;  PRINT ROUTINE
  35. ;
  36. PADC1:    POP    AF    ; GET A
  37.     PUSH    BC    ; SAVE BC
  38.     LD    B,100    ; PRINT HUNDREDS
  39.     CALL    PAC    ; PRINT A CHAR
  40.     LD    B,10    ; PRINT TENS
  41.     CALL    PAC
  42.     ADD    '0'    ; CONVERT TO ASCII
  43.     CALL    PUT    ; PRINT
  44.     POP    BC    ; RESTORE BC
  45.     POP    AF    ; RESTORE A
  46.     EX    DE,HL    ; PTR BACK IN DE
  47.     RET
  48.  
  49. ;  BUFFER
  50. LSFLG:    DS    1    ; LEADING <SP> FLAG
  51.  
  52. ;  PRINT RESULT OF DIVISION OF A BY B W/LEADING <SP> (INTEGER DIVISION)
  53. PAC:    LD    C,0    ; SET COUNT
  54. PACL:    SUB    B    ; COMPUTE COUNT
  55.     JP    C,PACD
  56.     INC    C    ; INCR COUNT
  57.     JP    PACL
  58. PACD:    ADD    A,B    ; ADD B BACK IN
  59.     PUSH    AF    ; SAVE A
  60.     LD    A,C    ; GET COUNT
  61.     OR    A    ; ZERO?
  62.     JP    NZ,PACD1
  63.     LD    A,(LSFLG)    ; CHECK FOR LEADING <SP>
  64.     OR    A    ; 0 MEANS NO
  65.     JP    Z,PACD1
  66.     LD    A,' '    ; PRINT <SP>
  67.     CALL    PUT
  68.     POP    AF    ; RESTORE A
  69.     RET
  70. PACD1:    XOR    A    ; A=0
  71.     LD    (LSFLG),A    ; TURN OFF LEADING <SP> FLAG
  72.     LD    A,C    ; GET COUNT
  73.     ADD    '0'    ; CONVERT TO DECIMAL
  74.     CALL    PUT    ; PRINT IT
  75.     POP    AF    ; RESTORE A
  76.     RET
  77. PUT:
  78.     LD    (HL),A    ; PUT BYTE
  79.     INC    HL    ; PT TO NEXT
  80.     RET
  81.  
  82.     END
  83.