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 / SIMTEL / CPMUG / CPMUG051.ARK / CIO.ALX < prev    next >
Text File  |  1984-04-29  |  3KB  |  177 lines

  1. ; CP/M console I/O module supporting terminal and modem in "parallel"
  2. ;
  3. ;    Terminal is attached to Disk Jockey serial port
  4. ;    Modem is PMMI S100 board
  5. ;
  6. BEGIN
  7. ;
  8. ; Entry points
  9. ;
  10.     ENTRY    CONST,CONIN,CONOUT
  11. ;
  12. ; External references
  13. ;
  14.     EXTRN    FLUSH
  15. ;
  16. ; Local data storage (initialized)
  17. ;
  18. CONNECT: DB    0    ; false - modem not connected
  19. ;
  20. ; Terminal access
  21. ;
  22. DJROM    EQU    0F800H
  23. DJCIN    EQU    DJROM+3
  24. DJCOUT    EQU    DJROM+6
  25. DJTSTAT    EQU    DJROM+21H
  26. ;
  27. ; Modem access
  28. ;
  29. PMMI    EQU    0C0H    ; base port address
  30. USTAT    EQU    PMMI    ; uart status input
  31. UCONT    EQU    PMMI    ; uart and modem control output
  32. UDATA    EQU    PMMI+1    ; uart incoming and outgoing data
  33. MSTAT    EQU    PMMI+2    ; modem status input
  34. MRATE    EQU    PMMI+2    ; timer rate regester and temp reg for int mask
  35. MINT    EQU    PMMI+3    ; input moves rate register to int mask reg
  36. MCONT    EQU    PMMI+3    ; modem control register
  37. PROCEDURE CONST
  38.     CALL    DJTSTAT
  39.     MVI    A,0FFH
  40.     RZ        ; return if terminal input data ready
  41.  
  42.     CALL    MISTAT    ; check modem input status
  43.     RET
  44. PROCEDURE CONOUT
  45.     PUSH    B
  46.     CALL    FLUSH
  47.     POP    B
  48.     CALL    DJCOUT    ; output character to terminal
  49.     CALL    MOUT    ; output character to modem if connected
  50.     RET
  51. PROCEDURE CONIN
  52.     CALL    FLUSH
  53.     LOOP
  54.     CALL    DJTSTAT
  55.     IF ( ZERO )     ; data waiting
  56.     CALL    DJCIN    ; get data from terminal
  57.     ANI    7FH
  58.     RET
  59.     FIN
  60.     CALL    MISTAT
  61.     IF ( NOT ZERO ) ; data waiting
  62.     CALL    MINP    ; get data from modem
  63.     ANI    7FH
  64.     RET
  65.     FIN
  66.     FIN
  67. PROCEDURE MISTAT
  68.     LDA    CONNECT
  69.     ORA    A
  70.     WHEN ( ZERO )   ; modem disconnected
  71.     IN    MSTAT
  72.     ANI    2
  73.     IF ( ZERO )     ; ringing
  74.     CALL    CONSEQ    ; start connect sequence
  75.     STA    CONNECT
  76.     FIN
  77.     MVI    A,0    ; no data waiting
  78.     FIN
  79.     ELSE
  80.     IN    MSTAT
  81.     ANI    4
  82.     WHEN ( NOT ZERO ) ; carrier lost
  83.     CALL    DCONSEQ    ; start disconnect sequence
  84.     STA    CONNECT
  85.     MVI    A,0    ; no data waiting
  86.     FIN
  87.     ELSE
  88.     IN    USTAT
  89.     CMA
  90.     ANI    2    ; data available (low true)
  91.     SUI    1    ; if ( DAV = 0 ) A=FF
  92.     SBB    A    ; else           A=0
  93.     FIN
  94.     FIN
  95.     ORA    A    ; set zero flag
  96.     RET
  97. PROCEDURE CONSEQ
  98.     MVI    A,7FH    ; DTR,300,ESS
  99.     OUT    MCONT
  100.  
  101.     CALL    DELAY
  102.  
  103.     MVI    A,5EH    ; 2s, NP, 8 bits, Answer
  104.     OUT    UCONT
  105.  
  106.     PUSH    B
  107.     MVI    B,150    ; 15 seconds
  108.     REPEAT
  109.     CALL    DELAY
  110.     IN    MSTAT
  111.     ANI    4
  112.     BREAK IF ( ZERO )  ; carrier detected
  113.     DCR    B
  114.     UNTIL ( ZERO )
  115.     POP    B
  116.  
  117.     CALL    DELAY
  118.     IN    UDATA
  119.     IN    UDATA    ; clear uart receiver
  120.  
  121.     MVI    A,52    ; 300 baud
  122.     OUT    MRATE
  123.  
  124.     MVI    A,5CH    ; 2s, NP, 8 bits, Normal (auto hangup if carrier lost)
  125.     OUT    UCONT
  126.  
  127.     IN    MSTAT
  128.     ANI    4
  129.     MVI    A,0
  130.     RNZ        ; return if no carrier
  131.  
  132. ;+++++++++++++ send signon message and password request
  133.  
  134.     MVI    A,0FFH    ; connect flag
  135.     RET
  136. PROCEDURE DELAY
  137.     MVI    A,250    ; .1 sec
  138.     OUT    MRATE
  139.     REPEAT
  140.     IN    MSTAT
  141.     ANI    80H
  142.     UNTIL ( ZERO )  ; timer bit low
  143.     REPEAT
  144.     IN    MSTAT
  145.     ANI    80H
  146.     UNTIL ( NOT ZERO )  ; timer bit high
  147.     RET
  148. PROCEDURE DCONSEQ
  149.     MVI    A,3FH    ; 300, ESS
  150.     OUT    MCONT    ; force hangup
  151.     XRA    A    ; connect false flag
  152.     RET
  153. PROCEDURE MOUT
  154.     LDA    CONNECT
  155.     ORA    A
  156.     IF ( NOT ZERO )  ; connected
  157.     REPEAT
  158.     IN    MSTAT
  159.     ANI    4
  160.     BREAK IF ( NOT ZERO )  ; carrier lost
  161.     IN    USTAT
  162.     ANI    1
  163.     UNTIL ( NOT ZERO )     ; transmit buffer empty (TBMT)
  164.     CPI    1    ; TBMT
  165.     IF ( ZERO )
  166.     MOV    A,C
  167.     OUT    UDATA    ; send data through modem
  168.     FIN
  169.     FIN
  170.     MOV    A,C
  171.     RET
  172. PROCEDURE MINP
  173.     IN    UDATA
  174.     RET
  175.     END
  176. END-OF-FILE
  177.