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 / SMAFDC.Z80 < prev    next >
Text File  |  2000-06-30  |  1KB  |  67 lines

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