home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / pcpursut / pisrc.ark / A.ASM next >
Assembly Source File  |  1988-07-14  |  2KB  |  152 lines

  1.  
  2. ;***********************************************************************
  3. ;*             A.ASM - linkage to IMP                   *
  4. ;***********************************************************************
  5. ;
  6.     PUBLIC    TIMER_,    J_CRLF_, J_INMDM_, J_ILPRT_, J_SNDCHR, J_SNDSTR
  7.     FUNC    DELAY_
  8.     FUNC    PRINTF_
  9. ;
  10. I$MDCTL1 EQU    011FH        ; In modem control port
  11. I$MDDATP EQU    0133H        ; In modem data port
  12. O$MDDATP EQU    013DH        ; Outmodem data port
  13. ;
  14. A$MDRCV    EQU    0147H
  15. C$MDRCV    EQU    014AH
  16. A$MDSND    EQU    014DH
  17. C$MDSND    EQU    0150H
  18. ;
  19. NULL    EQU    0
  20. CR    EQU    'M'-40H
  21. ;
  22. TIMER_:    LXI    H,0        ; Put 0 into HL
  23.     MOV    A,B        ; Get time into A in hundreths of a second
  24.     MOV    L,A        ; And put it into hl
  25.     DAD    H        ; X2
  26.     DAD    H        ; X4
  27.     DAD    H        ; X8
  28.     DAD    H        ; X16
  29.     DAD    H        ; X32
  30.     PUSH    H        ; Put  into de
  31.     POP    D
  32.     DAD    H        ; X64
  33.     DAD    D        ; *96 which is close to 100
  34.     PUSH    H        ; Put on stack for call
  35.     CALL    DELAY_        ; Call 'c' routine
  36.     POP    D
  37.     RET
  38. ;
  39. ; Send character in  (B) to the modem
  40. ;
  41. J_SNDCHR:
  42.     CALL    WAITRDY        ; Wait for output to be ready
  43.     MOV    A,B
  44.     JMP    O$MDDATP    ; Send character
  45. ;
  46. WAITRDY:CALL    I$MDCTL1
  47.     CALL    A$MDSND        ; Get status
  48.     CALL    C$MDSND
  49.     JNZ    WAITRDY        ; Loop until uart is clear
  50.     RET
  51. ;
  52. ; Send string pointed to by hl to modem, string ends with $
  53. ;
  54. J_SNDSTR:
  55.     MOV    A,M        ; Get character
  56.     CPI    '$'        ; Is it a $ sign
  57.     RZ
  58. ;
  59.     MOV    B,A
  60.     CALL    J_SNDCHR    ; Output character
  61.     INX    H
  62.     JMP    J_SNDSTR
  63. ;
  64. ; Print an inline string
  65. ;
  66. J_ILPRT_:
  67.     XTHL
  68. ;
  69. LP:    MOV    A,M
  70.     ORA    A        ; End of string?
  71.     JZ    DONE
  72. ;
  73.     CALL    SENDOUT
  74.     INX    H
  75.     JMP    LP
  76. ;
  77. DONE:    XTHL
  78.     RET
  79. ;
  80. SENDOUT:PUSH    B
  81.     PUSH    D
  82.     PUSH    H
  83.     MOV    E,A
  84.     MVI    C,02
  85.     CALL    0005
  86.     POP    H
  87.     POP    D
  88.     POP    B
  89.     RET
  90. ;
  91. ; Max 0.1 sec. wait for modem character
  92. ;
  93. J_INMDM_:
  94.     PUSH    H
  95.     LXI    H,003FH
  96.     CALL    TIMECALC    ; Get timeot time
  97.     MOV    B,H
  98.     MOV    C,L
  99.     POP    H
  100. ;
  101. TRYAGAIN:
  102.     CALL    TRYRECV
  103.     JNZ    NOCHAR
  104. ;
  105.     CALL    I$MDDATP
  106.     ANI    7FH
  107.     RET
  108. ;
  109. NOCHAR:    DCX    B
  110.     MOV    A,B
  111.     ORA    C
  112.     JNZ    TRYAGAIN
  113. ;
  114.     STC
  115.     RET
  116. ;
  117. TIMECALC:
  118.     LDA    010B
  119.     PUSH    D
  120.     PUSH    H
  121.     POP    D
  122. ;
  123. LP2:    DAD    D
  124.     DCR    A
  125.     JNZ    LP2
  126. '
  127.     POP    D
  128.     RET
  129. '
  130. TRYRECV:CALL    I$MDCTL1
  131.     CALL    A$MDRCV
  132.     JMP    C$MDRCV
  133. ;
  134. ; Send newline to display
  135. ;
  136. J_CRLF_:
  137.     PUSH    B
  138.     PUSH    D
  139.     PUSH    H
  140.     LXI    H,NEWLINE
  141.     PUSH    H
  142.     CALL    PRINTF_
  143.     POP    H
  144.     POP    H
  145.     POP    D
  146.     POP    B
  147.     RET
  148. ;
  149. NEWLINE:DB    CR
  150.     DB    00
  151. ;
  152.