aad+@ANDREW.CMU.EDU (Anthony A. Datri) (10/19/87)
We've got two dmf32's on a 785 running vms 4.4 or so, and we've been having trouble making them work as terminals. Is there some unobvious magic to this? anthony a datri scribe systems ad0r@tb.cc.cmu.edu
SYSTEM@CRNLNS.BITNET (10/19/87)
Anthony, I am appending a copy of a program that we received a few years ago. It makes it possible to use a DMF32 modem port for a local terminal after you have manufactured an appropriate cable (described in the source code). I hope this helps. Selden E. Ball, Jr. (Wilson Lab's network and system manager) Cornell University NYNEX: +1-607-255-0688 Laboratory of Nuclear Studies BITNET: SYSTEM@CRNLNS Wilson Synchrotron Lab ARPA: SYSTEM%CRNLNS.BITNET@WISCVM.WISC.EDU Judd Falls & Dryden Road HEPnet/SPAN: Ithaca, NY, USA 14853 LNS61::SYSTEM = 44283::SYSTEM (node 43.251) --------------------------- 1 SETMODEM SETMODEM allows the RTS and DTR bits on ports 0 and 1 of a DMF32 to be turned on. This is necessary if one wants to 1) connect a a local terminal to port 0 or 1 of a DMF32, 2)use only a 4 wire cable, and 3)Use a special purpose pigtail on port 0 and 1 to strap one of the forced high lines (RTS or DTR) to Carrier Detect. If carrier Detect is not high, terminals will not talk to a DMF32 on ports 0 or 1. To use SETMODEM define it as a foreign command, ie. $SETMODEM:=$SETMODEM and $SETMODEM ddcu: where ddcu: is the PHYSICAL device name of port 0 or 1 of a DMF32, ie TXA0: or TXA1: ---------------- PROGRAM SET_MODEM C+ C The function of this program is to turn on the modem control lines C DTR and RTS comming from the DMF-32. This is necessary because the C DMF-32 port 0 and 1 require carrier detect (pin 8) to be present in order to C work. We achieve this by hooking up a special null modem cable with RTS C (pin 4) strapped to carrier detect (pin 8) so as to fool the DMF-32 into C thinking that a modem is attached. C C Now if we were using a complete RS232 cable with all the wires running C from a DMF-32 to a VT100, this would not be necessary. However, C we typically run only 4 wires, and ports 0 and 1 are unique in that they C will not work unless carrier detect is present. C C The function of this program is to force RTS and DTR high so that they C can be used for strapping to other lines which want to see a high signal. C Both lines are force high so that a general purpose modem fakeout pigtail C can be used: Pin 4 (RTS)-to- pin 5 (CTS) and pin 20 (DTR) -to- pin 6 (DSR) C -to- pin 8 (CAR). Note dip switch 8 on the DMF32 is closed which ties pin 6 C to pin 8 internally. C C Written by: James G. Downward 19-Jul-1983 Make DMF32 work right C C- CHARACTER*5 Cterminal ! Integer*2 TTchan ! For assigning channel INTEGER*2 IOSB(4),PP1(2) ! For QIO IOSB and param block INTEGER*4 P1 ! param block needs long word INTEGER*4 SYS$ASSIGN ! INTEGER*4 SYS$QIOW ! INTEGER*4 LIB$GET_FOREIGN ! EQUIVALENCE (P1,PP1(1)) ! only want upper half EXTERNAL IO$_SETMODE, ! For QIO function code - IO$M_SET_MODEM, ! - IO$M_MAINT ! EXTERNAL TT$M_DS_DTR,TT$M_DS_RTS ! Control bits to set Istatus=LIB$GET_FOREIGN(Cterminal,'Terminal: ',Ilength) IF(.NOT. Istatus) THEN ! If can not get command WRITE(*,5) ! then warn user 5 FORMAT(' SETMODEM -- FATAL. No terminal specified') GOTO 9999 ! Common exit END IF ! c Cterminal='TXA0:' Istatus = SYS$ASSIGN(Cterminal(1:Ilength),TTCHAN,,)! Assign channel IF(.NOT.Istatus) THEN ! If assign fails then let WRITE(*,10)Cterminal(1:Ilength) ! user know which term coule 10 FORMAT(' SETMODEM -- FATAL. Channel could not be ', - 'assigned to terminal ',A) ! not be properly set up WRITE(*,20)Istatus ! and give the error code 20 FORMAT(' Error status = ',Z10) GOTO 9999 ! common exit END IF ! C C The set modem function is not well explained in the manual. C Here is how I think it works. A quad word is passed as a parameter C of the QIO call. Nothing matters now in this quad word except the C bits set in the high order part of the word (bits 16-31) but C who knows what VMS will use the rest of the bits for. C If one has not explicitly set the terminal to be connected to a modem, C one may issue the QIO call to set and unset the various modem control C signals. The bits to set to turn on or off these signals are defined C by TT$M_DS_RTS, TT$M_DS_DTR, and TT$M_DS_SECTX. These bit values C should be applied to either the low byte of the bits 16-31 of the C quad word to enable the modem control bits to turn on, or the C high byte (bits 24-31) of the high order part of the quad word C to turn the modem control bits off. Other TT$M_DS_XXXX values C seem defined in TT$DEF, but who knows what they are for. C C Set to Set modem on bits but don't flag terminal as using modem C PP1(2)=%loc(TT$M_DS_rts).or.%loc(TT$M_DS_DTR) C C Pp1(2)=pp1(2)*(2**8) ! Shift right 8 to turn off bit C IO_FUNC = %LOC(IO$_SETMODE) .OR. ! Set the I/O function code - %LOC(IO$M_SET_MODEM) .OR. ! - %LOC(IO$M_MAINT) ! Istatus = SYS$QIOW (, %VAL(TTCHAN), ! Issue the QIO - %VAL(IO_FUNC), ! - IOSB,,, ! - %REF(P1),,,,,) ! IF(.NOT. Istatus) THEN ! If things do not work WRITE(*,30)Cterminal(1:Ilength) ! let everyone know which 30 FORMAT(' SETMODEM -- FATAL. Modem control bits could not', - ' be set for terminal ',A) ! terminal failed to be set WRITE(*,40)Istatus ! And give user the error code 40 FORMAT(' Error status = ',Z10) END IF ! Istatus = SYS$DASSGN ( TTCHAN) ! Deassing the channel 9999 END -------------------------