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
/
CPM
/
TRS-80
/
BYTRS4AN.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
5KB
|
186 lines
;******************************************************************************
; TRS-80 Model 4 RS-232 routines
; Version 1.0 for TRS-80 Mod 1 by John A. McKown
; Revised for mod4 by Ed Richter
;These routines will allow the easy patching of BYEII
;for any type of MODEM/serial port combination. Certain
;routines must return status flags, so please be care-
;ful to set the flags as directed.
;
;This version is for the TRS-80 Model 4 RS-232 port
;hooked up to an external modem.
;
;Modification History
;
;07/14/84: Added Anchor equate to use Signalman Mark XII. This requires
; the updated BY2+SMAN.ASM overlay also. This code will also
; work with the Smartmodem or any external modem. To use the
; Smartmodem set the equate SMODEM in BYEII to true. To use
; the Anchor the SMODEM equate in BYEII and the ANCHOR equate
; here must be true. Will work with any external "DUMB" modem
; with these equates set false.
; <epr>
;
;01/01/84: Added MDQUIT routine and modified for the TRS-80 Mod IV.
; <epr>
;
;10/01/83: Routines added, no fuss, mess, or frills
;
;******************************************************************************
;
;Option to use with 300/1200 SmartModem
;If YES, also append BY2+SMDM.ASM just after this code.
;
ANCHOR EQU TRUE ;TRUE IF USING ANCHOR SIGNALMAN MARK XII
MSPORT EQU 0E8H ;OUT MASTER RESET UART/IN MODEM STATUS PORT
BPORT EQU 0E9H ;BAUD RATE PORT
USPORT EQU 0EAH ;UART STATUS PORT
DPORT EQU 0EBH ;DATA PORT
;
MDINIT EQU $+OFFSET
MVI A,0FFH
OUT MSPORT ;RESET MODEM (DATA IRRELEVANT)
CALL MDHANG ;TURN-OFF DTR, HANG-UP, SET 300 BAUD
IF NOT ANCHOR ;ANCHOR DOESN'T NEED THIS DELAY
PUSH B
MVI B,150 ;15 SECOND DELAY
;
OFFTI EQU $+OFFSET
CALL DELAY ;0.1 SECOND DELAY
DCR B
JNZ OFFTI
POP B
ENDIF ;NOT ANCHOR
;...
MVI A,0ECH ;TURN ON UART 8,NO,1,DTR,RTS
OUT USPORT ;SET UART
IF SMODEM ;IF USING 300/1200 SMARTMODEM
CALL SMINIT
ENDIF ;SMODEM
RET
;
;CHECK TO SEE IF PHONE IS RINGING
;
MDRING EQU $+OFFSET
IN MSPORT
CMA ;INVERT THE RESPONSE.
ANI 10H ;RING INDIC ON?
RET ;YES
;
;RESET MODEM TO DEFAULT (300,8,NO,1,DTR ON)
;
MDQUIT EQU $+OFFSET
CALL MDANSW ;SET 300 BAUD
MVI A,02H ;RESET UART ENABLE
OUT MSPORT
MVI A,0ECH ;SET MODEM TO STANDARD DEFAULT VALUE
OUT USPORT
RET
;
;HANGUP PHONE BY TURNING OFF DTR
;
MDHANG EQU $+OFFSET
MVI A,0FFH ;TURN OFF DTR & RTS (BITS 0 & 1 TRUE)
OUT USPORT
;
;THE FOLLOWING ROUTINE WILL RESET THE UART TO 300 BAUD
;AND ALLOW THE MODEM TO ANSWER THE PHONE WHEN DTR IS SET
;
MDANSW EQU $+OFFSET
CALL SET300 ;SET 300 BAUD
IN DPORT ;CLEAR OUT GARBAGE
IN DPORT ;DITTO
RET
;
;THE FOLLOWING ROUTINE CHECKS TO MAKE SURE WE STILL
;HAVE CARRIER. IF THERE IS NO CARRIER, IT WILL RETURN
;WITH THE ZERO FLAG SET.
;
MDCARCK EQU $+OFFSET
IN MSPORT ;GET MODEM STATUS
CMA ;INVERT THE RESPONSE
ANI 20H ;CHECK CARRIER
RET ;RETURN
;
;THE FOLLOWING ROUTINE DETERMINES IF THERE IS A CHARACTER WAITING
;TO BE RECEIVED. IF NO CHARACTER IS WAITING, THE ZERO FLAG WILL BE SET,
;OTHERWISE, 255 WILL BE RETURNED IN REGINSTER A.
;
MDINST EQU $+OFFSET
IN USPORT ;CHECK UART
ANI 80H ;ANY DATA
RZ ;NO, RETURN
ORI 0FFH ;SET PROPER DATA
RET
;
;THE FOLLOWING IS A ROUTINE THAT WILL INPUT ONE
;CHARACTER FROM THE MODEM PORT. IF THERE IS NOTHING
;THERE, IT WILL RETURN THE PREVIOUS CHARACTER RECEIVED.
;THEREFORE, USE MDINST ROUTINE TO TEST FOR A CHARACTER
;BEING AVAILABLE
;
MDINP EQU $+OFFSET
IN DPORT
ANI 7FH
RET
;
;THE FOLLOWING IS A ROUTINE TO DETERMINE IF THE TRANSMIT
;BUFFER IS EMPTY. IF IT IS, IT WILL RETURN WITH THE ZERO
;FLAG CLEAR. IF THE TRANSMITTER IS BUSY, THEN IT WILL
;RETURN WITH THE ZERO FLAG SET.
;
MDOUTST EQU $+OFFSET
IN USPORT
ANI 40H ;EMPTY
RET
;
;THE FOLLOWING IS A ROUTINE THAT WILL OUTPUT ONE CHARACTER
;IN REGISTER A TO THE MODEM. REMEMBER THAT IS REGISTER
;A NOT REGISTER C.
; *** USE MDOUTST FIRST TO SEE IF BUFFER IS EMPTY ***
;
MDOUTP EQU $+OFFSET
OUT DPORT
RET
;
;THESE NEXT ROUTINES SET THE PROPER BAUD RATES FOR THE
;MODEM. IF YOU DO NOT SUPPORT THE PARTICULAR RATE, THEN
;SIMPLY PUT THE LABEL IN FRONT OF THE SETINV ROUTINE.
;IF THE BAUD RATE CHANGE WAS SUCCESSFUL, MAKE SURE THE
;ZERO FLAG IS SET.
;
;SET UP FOR 300 BAUD
;
SET300 EQU $+OFFSET
MVI A,55H
OUT BPORT ;SET 300 BAUD
XRA A ;ZERO THE A REG
RET
;
SET1200 EQU $+OFFSET
MVI A,77H
OUT BPORT
XRA A
RET
;
;THE FOLLOWING ROUTINE RETURNS A 255 BECAUSE
;THE SERIAL PORT OR THE MODEM CAN'T HANDLE THE BAUD RATE.
;
SET110 EQU $+OFFSET
SET450 EQU $+OFFSET
SET600 EQU $+OFFSET
SET710 EQU $+OFFSET
SETINV EQU $+OFFSET
ORI 0FFH
RET
;OK, THAT'S ALL OF THE MODEM DEPENDANT ROUTINES THAT
;BYEII USES, SO IF YOU PATCH THIS FILE INTO YOUR COPY
;OF BYEII, THEN IT SHOULD WORK OUT WELL.
;
; Ed Richter
;
; END BY2-TRS4 (BUT NOT THE PROGRAM)
;
;******************************************************************************
;<NOTE> INSERT BY2+SMDM.ASM AFTER THIS STATEMENT IF NEEDED