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
-------------------------