home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / smadc.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.6 KB  |  85 lines

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