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 >
Wrap
Text File
|
1984-04-29
|
3KB
|
177 lines
; CP/M console I/O module supporting terminal and modem in "parallel"
;
; Terminal is attached to Disk Jockey serial port
; Modem is PMMI S100 board
;
BEGIN
;
; Entry points
;
ENTRY CONST,CONIN,CONOUT
;
; External references
;
EXTRN FLUSH
;
; Local data storage (initialized)
;
CONNECT: DB 0 ; false - modem not connected
;
; Terminal access
;
DJROM EQU 0F800H
DJCIN EQU DJROM+3
DJCOUT EQU DJROM+6
DJTSTAT EQU DJROM+21H
;
; Modem access
;
PMMI EQU 0C0H ; base port address
USTAT EQU PMMI ; uart status input
UCONT EQU PMMI ; uart and modem control output
UDATA EQU PMMI+1 ; uart incoming and outgoing data
MSTAT EQU PMMI+2 ; modem status input
MRATE EQU PMMI+2 ; timer rate regester and temp reg for int mask
MINT EQU PMMI+3 ; input moves rate register to int mask reg
MCONT EQU PMMI+3 ; modem control register
PROCEDURE CONST
CALL DJTSTAT
MVI A,0FFH
RZ ; return if terminal input data ready
CALL MISTAT ; check modem input status
RET
PROCEDURE CONOUT
PUSH B
CALL FLUSH
POP B
CALL DJCOUT ; output character to terminal
CALL MOUT ; output character to modem if connected
RET
PROCEDURE CONIN
CALL FLUSH
LOOP
CALL DJTSTAT
IF ( ZERO ) ; data waiting
CALL DJCIN ; get data from terminal
ANI 7FH
RET
FIN
CALL MISTAT
IF ( NOT ZERO ) ; data waiting
CALL MINP ; get data from modem
ANI 7FH
RET
FIN
FIN
PROCEDURE MISTAT
LDA CONNECT
ORA A
WHEN ( ZERO ) ; modem disconnected
IN MSTAT
ANI 2
IF ( ZERO ) ; ringing
CALL CONSEQ ; start connect sequence
STA CONNECT
FIN
MVI A,0 ; no data waiting
FIN
ELSE
IN MSTAT
ANI 4
WHEN ( NOT ZERO ) ; carrier lost
CALL DCONSEQ ; start disconnect sequence
STA CONNECT
MVI A,0 ; no data waiting
FIN
ELSE
IN USTAT
CMA
ANI 2 ; data available (low true)
SUI 1 ; if ( DAV = 0 ) A=FF
SBB A ; else A=0
FIN
FIN
ORA A ; set zero flag
RET
PROCEDURE CONSEQ
MVI A,7FH ; DTR,300,ESS
OUT MCONT
CALL DELAY
MVI A,5EH ; 2s, NP, 8 bits, Answer
OUT UCONT
PUSH B
MVI B,150 ; 15 seconds
REPEAT
CALL DELAY
IN MSTAT
ANI 4
BREAK IF ( ZERO ) ; carrier detected
DCR B
UNTIL ( ZERO )
POP B
CALL DELAY
IN UDATA
IN UDATA ; clear uart receiver
MVI A,52 ; 300 baud
OUT MRATE
MVI A,5CH ; 2s, NP, 8 bits, Normal (auto hangup if carrier lost)
OUT UCONT
IN MSTAT
ANI 4
MVI A,0
RNZ ; return if no carrier
;+++++++++++++ send signon message and password request
MVI A,0FFH ; connect flag
RET
PROCEDURE DELAY
MVI A,250 ; .1 sec
OUT MRATE
REPEAT
IN MSTAT
ANI 80H
UNTIL ( ZERO ) ; timer bit low
REPEAT
IN MSTAT
ANI 80H
UNTIL ( NOT ZERO ) ; timer bit high
RET
PROCEDURE DCONSEQ
MVI A,3FH ; 300, ESS
OUT MCONT ; force hangup
XRA A ; connect false flag
RET
PROCEDURE MOUT
LDA CONNECT
ORA A
IF ( NOT ZERO ) ; connected
REPEAT
IN MSTAT
ANI 4
BREAK IF ( NOT ZERO ) ; carrier lost
IN USTAT
ANI 1
UNTIL ( NOT ZERO ) ; transmit buffer empty (TBMT)
CPI 1 ; TBMT
IF ( ZERO )
MOV A,C
OUT UDATA ; send data through modem
FIN
FIN
MOV A,C
RET
PROCEDURE MINP
IN UDATA
RET
END
END-OF-FILE