;*********************************************************************** ; ; ; ; MBYE (Modular 'BYE') ; Otrona Attache Specialized Routines ; v1.1 (04/08/84) by Donald Larson ; Modified from..... ; ; MBYE (Modular 'BYE') ; Zilog Z80-SIO/DART USART/UART routines ; v2.1 (02/21/84) by Kim Levitt ; ; ; ;---------------------------------------------------------------------- ; ; This particular version was skeletonized and reworked for the Otrona ; Attache. The program will utilize escape codes to the display driver ; instead of direct hardware sets to prevent difficulties with Valet. ; Also note that this will require a rework on the Otrona standard modem ; ("Communications") cable. The pin for CTS must be moved to pin 8 ; from pin 5 on the DB-25 (25 pin) connector. This will allow the ; BYE to monitor the DSR (data set ready) lead (which tracks with ; carrier detect). Therefore the correct cable would be: ; ; Attache' Modem ; 15 pin 25 pin ; ; 1 --------- Protective Ground ----------- 1 ; 2 --------- Transmitted Data ------------ 2 ; 4 --------- Received Data --------------- 3 ; NOTE ===> 5 --------- Clear to Send --------------- 8 ; 8 --------- Signal Ground --------------- 7 <---+-+ ; 9 --------- Data Terminal Ready --------- 20 | | ; 10 --------- Request to Send ------------- 4 | | ; 11 --------- Received Data Return ---------------+ | ; 12 --------- Clear to Send Return -----------------+ ; ; NOTE: this is where you change the standard lead from pin 5 in the ; standard cable to pin 8 as shown. ; ; This version was tested with a Hayes Smartmodem 1200 and an 8:16 ; using CP/M 2.2.5. If there are any bugs, please call by voice ; days at (312) 867-6400 X 451. ; ; I have still been unable to use the Attache's (R)eal (T)ime ; (C)lock for forced logoff, etc. I'd like to talk to anyone ; coming up with a method of doing so. Please give me a call. ; ; - Donald Larson ; ;----------------------------------------------------------------------- ; ; 04/08/84 Editted, skeletonized and reformatted for ; specific use with the Otrona Attache. Used ; with MBYE v 3.2. - Donald Larson ; 02/21/84 Removed exclaimation mark from comment - Kim Levitt oops! ; 02/20/84 Added comments for XEROX 820-II & BigBoards, ; code for DARTs and modified SIOs to read RI - Kim Levitt ; 02/02/84 Fixed and renamed to work with MBYE 3.0 - Kim Levitt ; (Also added conditional equates 8116, CTC and KAYPRO.) ; 11/27/83 Altered and renamed to work with BYE3 - Irv Hoff ; 08/04/83 Updated for use with ByeII version 1.6 - Paul Traina ; 07/19/83 Improved operation of modem initialization. - Paul Traina ; 04/18/83 Added option to use 300/1200 Smartmodem. - Don Brown ; 04/14/83 Added option for alt. CTC baud set format. - Paul Traina ; 02/21/83 Initial version. - Steve Fox ; ;----------------------------------------------------------------------- ; BASEP: EQU 0F0H ;Set Base port for SIO (data port) ; ; The following define the port addresses to use. ; DPORT: EQU BASEP ;Data port SPORT: EQU BASEP+1 ;Status/Control port ; ; ; The following are SPORT commands (output these to SPORT) ; ; WR0: RESCHN: EQU 00011000B ;Reset channel RESSTA: EQU 00010000B ;Reset ext/status RESERR: EQU 00110000B ;Error reset ; WRREG1: EQU 00000000B ;WR1 - No interrupts WRREG3: EQU 11000001B ;WR3 - Rx 8 bits/char, Rx enable WRREG4: EQU 01000100B ;WR4 - 16x, 1 stop bit, no parity ; ; WR5: DTROFF: EQU 01101000B ;DTR off, Tx 8 bits, Tx enable, RTS off DTRON: EQU 11101010B ;DTR on, Tx 8 bits, Tx enable, RTS on ; ; ; The following are SPORT status masks ; DAV: EQU 00000001B ;Data available TBMT: EQU 00000100B ;Transmit buffer empty DCD: EQU 00100000B ;Data carrier detect (using modifed cts) OE: EQU 00100000B ;Overrun error FE: EQU 01000000B ;Framing error ERR: EQU OE+FE ;Overrun and framing errors ; ; This routine should turn off everything on the modem, hang it up, and ; get it ready to wait for a ring. (DTR off) ; MDINIT: MVI A,RESCHN ;Reset channel (DTR, RTS off) OUT SPORT MVI A,4 ;Setup to write register 4 OUT SPORT MVI A,WRREG4 ;set 16x clock, 1 stop bit, no parity OUT SPORT MVI A,1 ;Setup to write register 1 OUT SPORT MVI A,WRREG1 ;set no interrupts OUT SPORT MVI A,3 ;Setup to write register 3 OUT SPORT MVI A,WRREG3 ;set Rx 8 bits, enable recv OUT SPORT MVI A,5 ;Setup to write register 5 OUT SPORT MVI A,DTROFF ;leave DTR OFF initially OUT SPORT RET ;Return ;..... ; ; ; The following routine will raise DTR. (and RTS) ; MDANSW: MVI A,5 ;address WR5 OUT SPORT MVI A,DTRON ;raise DTR, RTS OUT SPORT RET ;Return ; ; ; 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: MVI A,RESSTA ;Reset status OUT SPORT IN SPORT ;Get status ANI DCD ;Check for data 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 register A. (Error conditions are ; checked, and, if present, the character is ignored.) ; MDINST: IN SPORT ;Get status ANI DAV ;Got a character? RZ ;Return if none MVI A,1 ;else, check error bits OUT SPORT ;(address RR1) IN SPORT ;read RR1 ANI ERR ;mask error bits JZ MDINST1 ;no error, ok MVI A,RESERR ;else, reset error bits OUT SPORT IN DPORT ;clear out garbage XRA A ;say no data RET ;and return MDINST1: ORI 0FFH ;say we got one RET ;...and return ;..... ; ; ; The following is a routine that will input one character from the ; modem port. If there is nothing there, it will return garbage... so ; use the MDINST routine first. ; MDINP: IN DPORT ;Get character ANI 7FH ;Strip parity RET ;Return ;..... ; ; ; The following is a routine to determine if the transmit buffer is ; empty. If it is empty, it will return with the Zero flag clear. If ; the transmitter is busy, then it will return with the Zero flag set. ; MDOUTST: IN SPORT ANI TBMT ;Mask it RET ;Return ;..... ; ; ; 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: OUT DPORT ;Send it RET ;Return ;..... ; ; ; 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 ORI 0FFH / RET. If the baud rate change was successful, make ; SURE the Zero flag is set (XRA A). ; ; SET110: MVI A,01 ;Send code for 110 baud JMP SETBAUD ; SET300: MVI A,04 ;Send code for 300 baud JMP SETBAUD ; SET600: MVI A,05 ;Send code for 600 baud JMP SETBAUD ; SET1200: MVI A,06 ;Send code for 1200 baud JMP SETBAUD ; SET2400: MVI A,07 ;Send code for 2400 baud JMP SETBAUD ; SET4800: MVI A,08 ;Send code for 4800 baud JMP SETBAUD ; SET9600: MVI A,09 ;Send code for 9600 baud JMP SETBAUD ; SET19200: MVI A,0AH ;Send code for 19,200 baud ; SETBAUD: PUSH PSW ;Preserve baud code (just in case) MVI E,ESC ;First, send escape CALL SCONOUT MVI E,'@' ;Next set for write to CMOS ram CALL SCONOUT MVI E,8 ;Communications address CALL SCONOUT POP PSW ;Get back baud code PUSH PSW ;Again, just in case MOV E,A CALL SCONOUT ;Write it MVI E,ESC ;Send escape (again) CALL SCONOUT MVI E,'<' ;Tell machine to reset to CMOS speed CALL SCONOUT POP PSW XRA A RET ;Return ; ;..... ; ; This routine uses a BDOS call for direct console I/O. ; SCONOUT: MVI C,6 ;BDOS direct console i/o function CALL BDOS RET ; ;.... ; ; The following routine returns a 255 because we were not able to set to ; the proper baud rate because the serial port can't handle it. ; SET450: SET710: ORI 0FFH ;Make sure zero flag is not set RET ;Return ; ;..... ; ; Ok, that's all of the modem dependent routines that MBYE uses, so if ; you patch this file into your copy of MBYE, (using Wordstar's ^KR ; function) then it should work out well. (Be sure to set the SMODEM and ; SM1200 equates in the main program section to indicate if you are ; using a Hayes Smartmodem or compatible or not.) ; ;***********************************************************************