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

  1. ;
  2. ; SYSLIB Module Name:  SPHL5D
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  2.0
  5. ; Module Version Number:  1.0
  6. ; Module Entry Points:
  7. ;    PHL5DC        PHLDC
  8. ; Module External References:
  9. ;    COUT
  10. ;
  11.  
  12. ;
  13. ;  PHL5DC --
  14. ;    PRINT HL AS 5 DECIMAL CHARACTERS
  15. ;
  16.     EXT    COUT
  17.  
  18. PUTRG    MACRO
  19.     PUSH    B    ; SAVE BC, DE, HL
  20.     PUSH    D
  21.     PUSH    H
  22.     ENDM
  23. GETRG    MACRO
  24.     POP    H    ; RESTORE HL, DE, BC
  25.     POP    D
  26.     POP    B
  27.     ENDM
  28.  
  29.  
  30. PHL5DC::
  31.     PUSH    PSW    ; SAVE ALL REGS
  32.     PUTRG
  33.     XRA    A    ; A=0
  34.     STA    LSFLG0    ; TURN OFF LEADING <SP>
  35.     JMP    PHDC
  36. ;
  37. ;  PHLDC --
  38. ;    PRINT HL AS DECIMAL CHARACTERS W/LEADING SPACES IN 5-CHAR FIELD
  39. ;
  40. PHLDC::
  41.     PUSH    PSW    ; SAVE ALL REGS
  42.     PUTRG
  43.     MVI    A,1    ; A=1
  44.     STA    LSFLG0    ; TURN ON LEADING <SP>
  45. ;  PRINT HL USING LEADING <SP> FLAG LSFLG0
  46. PHDC:    LXI    D,10000    ; PRINT 10000'S
  47.     CALL    PHDC1
  48.     LXI    D,1000    ; PRINT 1000'S
  49.     CALL    PHDC1
  50.     LXI    D,100    ; PRINT 100'S
  51.     CALL    PHDC1
  52.     LXI    D,10    ; PRINT 10'S
  53.     CALL    PHDC1
  54.     MOV    A,L    ; PRINT 1'S
  55.     ADI    '0'    ; CONVERT TO ASCII
  56.     CALL    COUT
  57.     GETRG        ; RESTORE ALL REGS
  58.     POP    PSW
  59.     RET
  60.  
  61. ;  BUFFER
  62. LSFLG0:    DS    1    ; LEADING <SP> FLAG
  63.     
  64. ;  DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING <SP>S
  65. PHDC1:    MVI    C,0    ; SET COUNT
  66. PHDC2:    MOV    A,L    ; SUB E FROM L
  67.     SUB    E
  68.     MOV    L,A    ; RESULT IN L
  69.     MOV    A,H    ; SUB D FROM H W/BORROW
  70.     SBB    D
  71.     MOV    H,A    ; RESULT IN H
  72.     JC    PHDC3    ; DONE IF CARRY SET (FURTHER BORROW)
  73.     INR    C    ; INCR COUNT
  74.     JMP    PHDC2
  75. PHDC3:    MOV    A,L    ; ADD E TO L
  76.     ADD    E
  77.     MOV    L,A    ; RESULT IN L
  78.     MOV    A,H    ; ADD D TO H W/CARRY
  79.     ADC    D
  80.     MOV    H,A    ; RESULT IN H
  81.     MOV    A,C    ; GET RESULT
  82.     ORA    A    ; CHECK FOR ZERO
  83.     JNZ    PHDC4
  84.     LDA    LSFLG0    ; CHECK FOR LEADING <SP>
  85.     ORA    A    ; PRINT VALUE IF NOT (A=0)
  86.     JZ    PHDC4
  87.     MVI    A,' '    ; PRINT <SP>
  88.     CALL    COUT
  89.     RET
  90. PHDC4:    XRA    A    ; TURN OFF LEADING <SP>
  91.     STA    LSFLG0
  92.     MOV    A,C    ; GET VALUE
  93.     ADI    '0'    ; CONVERT TO ASCII
  94.     CALL    COUT
  95.     RET
  96.  
  97.     END
  98.