VMODEM
                           Technical Reference Manual



                     Copyright (c) 1995 by Raymond L. Gwinn
                                26 Tanager Place
                          Beckley, West Virginia 25801
                               All Rights Reserved

                                 August 10, 1995


                              CompuServe: 71154,575
                             InterNet: ray@gwinn.com
                              Voice: 1-304-255-7900
                               FAX: 1-304-255-7902
                      BBS: 1-304-255-7903 or 199.248.240.2















                                  INTRODUCTION

     The Virtual Modem is a concept that the author believes will change
     the way serial data communications is done and thought of.  It is
     going to bring the Internet alive more then ever before.  Perhaps it
     will not be this implementation of a Virtual Modem, but the concept
     will remain and be used for a long time.  The concept of the Virtual
     Modem was born from the desire to make the SIO support BBS available
     via Internet.  In only a few minutes, I was convinced the Virtual
     Modem was a solution of a multitude of problems that Internet access
     poses.

     The Virtual Modem removes most of the complexities and mysteries of
     the Internet by allowing common, well understood, programs to be used
     to access the Internet highway.  Users can use programs like PmComm
     and TE/2 to download files from a BBS (across the Internet) using
     common protocols like ZMODEM.  The dialing directories of terminal
     programs can contain Internet addresses instead of phone numbers for
     easy access to remote sites.

     BBS SysOps can simply declare one or more of their BBS's
     communications ports as a Virtual Modem and users can then "dial" in
     over the Internet and no BBS software changes should be necessary.  Is
     your BBS ready for 20 million new users that can access it without
     making a long distance call?  This Virtual Modem implements protocols,
     including a Telnet server which allows most anyone on Internet to
     access your system.

     Users transferring large volumes of data across phone lines (like
     FidoNet echomail) can now use the Internet highway instead.  Again,
     software changes should be minimal, if any at all.

     Vmodem is unique in that it has a dual personality of both Server and
     Client.  The Server/Client personality is determined by the direction
     of the connection (outgoing or incoming).




     ii

                                TABLE OF CONTENTS

     WHAT IS VMODEM  . . . . . . . . . . . . . . . . . . . . . . . . .    1

     DISTRIBUTION, ORDERING AND SUPPORT  . . . . . . . . . . . . . . .    2
          Distribution and Ordering  . . . . . . . . . . . . . . . . .    2
               SIO Distribution and Support BBS  . . . . . . . . . . .    2
          Support  . . . . . . . . . . . . . . . . . . . . . . . . . .    2

     GETTING IT GOING  . . . . . . . . . . . . . . . . . . . . . . . .    5
          TCP/IP Required  . . . . . . . . . . . . . . . . . . . . . .    5
               TCP/IP Sockets  . . . . . . . . . . . . . . . . . . . .    5
               The default port number . . . . . . . . . . . . . . . .    5

     The SIO.SYS command line  . . . . . . . . . . . . . . . . . . . .    5

     THE VIRTUAL MODEM . . . . . . . . . . . . . . . . . . . . . . . .    7
          AT Commands Supported  . . . . . . . . . . . . . . . . . . .    7
          S Registers Supported  . . . . . . . . . . . . . . . . . . .    8
          Result Codes . . . . . . . . . . . . . . . . . . . . . . . .    8
               NO CARRIER  . . . . . . . . . . . . . . . . . . . . . .    8
               NO DIALTONE . . . . . . . . . . . . . . . . . . . . . .    8
                 . . . . . . . . . . . . . . . . . . . . . . . . . . .    8
               BUSY  . . . . . . . . . . . . . . . . . . . . . . . . .    8
               CONNECT 57600/ARQ/VMP . . . . . . . . . . . . . . . . .    8
               CONNECT 57600/ARQ/TEL . . . . . . . . . . . . . . . . .    8
               RING  . . . . . . . . . . . . . . . . . . . . . . . . .    8
               RINGING . . . . . . . . . . . . . . . . . . . . . . . .    8
          Caveats  . . . . . . . . . . . . . . . . . . . . . . . . . .   10

     SECURITY  . . . . . . . . . . . . . . . . . . . . . . . . . . . .   11
          Discussion . . . . . . . . . . . . . . . . . . . . . . . . .   11
          Vmodem's Implementation  . . . . . . . . . . . . . . . . . .   11
          Developers Information . . . . . . . . . . . . . . . . . . .   11

     DIALING EXAMPLES  . . . . . . . . . . . . . . . . . . . . . . . .   12

     Telnet  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   13
          IBM's Telnet Client  . . . . . . . . . . . . . . . . . . . .   13

     Development and Debugging Tools . . . . . . . . . . . . . . . . .   14
          Vmodem's Semaphores  . . . . . . . . . . . . . . . . . . . .   14
          The Poor Man's Line Monitor (PMLM.EXE) . . . . . . . . . . .   14
          VIEWPMLM.EXE . . . . . . . . . . . . . . . . . . . . . . . .   15
          SIO's Utility (SU.EXE) . . . . . . . . . . . . . . . . . . .   15
               IRQs that currently free for use  . . . . . . . . . . .   15

     Appendix A, Hardware Port and IRQ Assignments . . . . . . . . . .   16
          Addresses and IRQs for COM1 and COM2 . . . . . . . . . . . .   16
          Defacto standard for COM3 and COM4 . . . . . . . . . . . . .   16
          Addresses and IRQ for COM3 through COM8 on the PS/2  . . . .   16

     Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   17




                                                                          1












                                 WHAT IS VMODEM

     Vmodem is a software implementation of a modem, referred to as a
     Virtual Modem.  Basically, it attempts to fake out other software
     (like terminal programs) into believing they are accessing a real
     modem.  Vmodem will turn any Terminal into a Telnet Client, and any
     BBS into a Telnet Server.

     Normal (real) modems provide an interface that allows terminal
     programs to pass digital information across telephone lines.  Vmodem
     does the same thing from the application (terminal) program's point of
     view.  However, the other side of Vmodem is not a phone line, but a
     digital network like Internet.  Thus, Vmodem allows the hoards of
     communications programs to pass information across Internet instead of
     using phone lines.

     In addition to acting as a Telnet server, Vmodem uses a newly designed
     protocol for communications networks, called the Virtual Modem
     Protocol (VMP).  At this time, no other programs have implemented VMP,
     thus Vmodem is required on both ends of the connection to use the VMP. 
      However, VMODEM.EXE will accept inbound Telnet connections from any
     system, meaning a BBS under vmodem can be accessed by just about
     anyone with an Internet connection.

     Future implementations of Vmodem may access networks other than
     Internet and use TCP/IP implementations other than IBM's.  The current
     implementation of Vmodem works only on Internet, using the Internet
     Access Kit (IAK) that is included with OS/2 V3 and IBM's TCP/IP (for
     OS/2) version 2.0, with the August 1994 CSD applied.

     A single invocation of Vmodem can service all of the Internet ports
     defined in the SIO command line.




     2

                       DISTRIBUTION, ORDERING AND SUPPORT

     Distribution and Ordering

     Vmodem is a part of a larger package collectively known as SIO.  The
     entire package collectively known as SIO is ShareWare.  It is not free
     software or freeware.  See LICENSE.TXT and ORDER.TXT for additional
     information.  The ShareWare version of SIO is distributed
     electronically.  One may check their favorite electronic hangout for
     the latest version of SIO.  The latest copy of the ShareWare version
     is always posted for downloading from the BBS at 1-304-255-7903 or
     199.248.240.2.  ShareWare versions of SIO can also be downloaded from
     the CompuServe Forum OS2BVEN, library 4.

     Registered versions of SIO are distributed by US Mail and
     electronically from the SIO Distribution and Support BBS.  Users
     desiring to register electronically, may call the BBS and register on
     line (1-304-255-7903 or 199.248.240.2) and immediately download their
     registered version of SIO.  Use the ORDER command at the main BBS
     prompt.

     Registrations/Orders can also be placed by phone, mail, FAX, and
     email.  See the front cover of this manual for the phone numbers and
     addresses.  Also see ORDER.TXT for and order form that may be used.

     Support

     Only product support is provided, user support for Vmodem is NOT
     provided.  That is, help with application program configuration, modem
     init strings etc, is not provided.  Product information such as bug
     reports, suggestions, and information about incompatibilities are
     welcome.  They should be sent to one of the following addresses.


                                      Email
                              CompuServe 71154,575
                             Internet ray@gwinn.com
                               FAX 1-304-255-7902
                       BBS 1-304-255-7903 or 199.248.240.2




                                                                          3

                                   QUICK START


     If some of your applications do not work, it is probably due to the
     timing difference between the virtual modem and real modems.  These
     type of problems are NOT bugs in Vmodem, but in the application itself
     and should be reported to the support department for the application
     program.  Thus, messages saying that application XYZ does not work are
     probably of no value and may be ignored.

     The Good Stuff Starts Here:

     If you do not have TCP/IP up and running on your system, forget it,
     there is no quick start.  If TCP/IP is running on your system then
     read on.

     Users of the IBM Internet Access Kit (IAK) and IBM's SLIP be sure to
     execute MODE COMn DTR=ON somewhere before you attempt to dial in.

     First, you must define one or more Virtual Modem ports in the SIO.SYS
     command line and reboot.  DO NOT DEFINE A PORT THAT IS CONNECTED TO A
     REAL MODEM AS AN INTERNET PORT.  Defining a Virtual Modem port simply
     requires that you use the word "Internet" instead of the I/O port
     address in the SIO command line.  Do not forget to assign the DOS
     reflection stuff if you will use the port from DOS sessions.  An SIO
     command line example using COM4 as a Virtual Modem is:

     DEVICE=SIO (COM1,3F8,4) (COM4,INTERNET:2E8,NONE:3)

     The ":2E8" and the ":3" in the command line tells SIO to reflect data
     to DOS sessions on virtual I/O port 2E8 and virtual IRQ3.  The "NONE"
     in the command line indicates that no real IRQ is used.

     After you have made the SIO command line changes, and rebooted, you
     must first activate TCP/IP.  Users of the IBM Internet Access Kit must
     initiate a connection in the normal manner before Vmodem will start. 
     After TCP/IP is activated, type Vmodem at any OS/2 prompt.  The Vmodem
     display attempts to simulate a modem display.  An activity log will
     start at the bottom of the display and scroll up to the bottom of the
     simulated LED display.  If you wish, you can use "START /min Vmodem"
     to invoke Vmodem in your TCP/IP start up scripts, TCPEXIT.CMD is the
     best place.  Hit Control C if you wish to terminate Vmodem, but you
     must leave it running if you want Virtual Modem support.




     4


     Once Vmodem is started, any access to COM4 (in this example) will go
     out over the Internet.  Bring up your favorite terminal program,
     configured for COM4, and type "AT?" for a list of supported AT
     commands.  To dial out, type ATDT inetaddr.com, of course you must use
     a real Internet address.

     As of this writing, there are several BBSes available for incoming
     calls using Vmodem.  Their Internet addresses are:

        199.248.240.2             SIO Support in Virginia
        199.100.191.2             Bob Juge in Houston Texas
        199.67.41.2               PCBOARD, Clark Development
        198.69.157.10             Steve Haynes, in Virginia
        bbs.tfb.com               File Bank BBS
        bbs.multinet.com          Paul Breedlove, Multinet
        199.3.36.205              Steve Schmidt in Chicago Illinois
        198.96.20.209             Steven Bonisteel in Canada
        bbs.fidouk.org            Jon Morby in England
        198.17.249.111            Pete Link in USA
        199.165.149.4             Pete Person in Washington State
        bbs.adam.anet.cz          Tomas Kucera in Prague, CZ
        202.12.87.130             Russell Coker, in Australia
        volvo.datacomm.com        Tony Wagner, West Coast USA
        198.70.175.40             Bob Palmer, Belton MO
        199.190.72.11             Patty and Roger Morris, LA
        203.4.149.97              Dave Blears, Australia
        204.91.224.2              Bridgewater, New Jersey
        199.227.57.1              Steve Tower, Florida (I think)
        tgax.com                  Sysop Adam Shiffman
        bbs.os2bbs.com            Pete Norloff, OS/2 Shareware BBS
        vegas.roc.servtech.com    Mike Utell
        204.177.236.30            Stephen Albinda
        os2nw.inetnw.com          Dennis Peterson
        blast.neta.com            Blastronics
        #os2nw.inetnw.com         OS/2 Northwest BBS, Bellevue, WA
        131.252.72.105            The PSU Econometrics Lab BBS
        199.1.42.100              Gary Butters, Irving Texas
        bbs.abaforum.es           David Llamas, Barcelona Spain
        142.222.15.220            Mohawk College, Hamilton Ontario Canada
        gateway.execnet.com       Ken Prevo
        204.157.224.247           Leroy Devries
        155.212.31.34             Richard Ploski
        snoval.aa.net             Larry Devers, Seattle WA
        199.1.42.117              Chuck Hogard, Grand Prairie, Tx
        october.com               Bob Quinlan, Sunnyvale, CA
        198.110.68.22             Walter Martin Braunohler
        204.191.50.2              Jim Wright
        199.3.29.10               Gene Angel
        bbs.gco.com               Bill Cook, Greater Chicago Online
        onestop.donet.com         Anthony Cogan
        hightech.iadfw.net        Brent Alberts, Dallas Texas




                                                                          5

                                GETTING IT GOING


                                 TCP/IP Required

     The current (first) implementation of Vmodem and works only with the
     Internet Access Kit (IAK) that is included with OS/2 V3 and IBM's
     TCP/IP V2.0 with the August 1994 CSD applied.  Contact IBM for
     information about obtaining their TCP/IP and the CSD update.

     Prior to executing Vmodem, you should have TCP/IP installed and
     operational on your system.  The author is far from an Internet or
     TCP/IP expert (more like a novice) so you are on your own in getting
     TCP/IP up on your system.

     Users of the IBM Internet Access Kit (IAK) and IBM's SLIP be sure to
     execute MODE COMn DTR=ON somewhere before you attempt to dial in.

     The Virtual Modem Protocol (VMP) that is implemented by Vmodem uses
     TCP/IP Sockets.  The default port number used by Vmodem is 3141 (the
     first 4 digits of pi, un-rounded).  However, this default port number
     can be overridden by using the SERVICES file in the TCP/IP ETC
     directory.  If the user defines a "Well-Known Port" called "vmodem"
     (lower case) in the SERVICES file, then that port will be used instead
     of 3141.  The port number 3141 has been assigned to the Virtual Modem
     Protocol (VMP) by the Internet Assigned Numbers Authority (IANA).  The
     name associated with port 3141 is "vmodem" (without the quotes). 
     Likewise, the Telnet Server in Vmodem can be directed to use any port
     number by adding a "Well-Known Port" called VMOTelnet to your SERVICES
     file.  The Telnet Server defaults to port 23 (the standard Telnet
     port).

                            The SIO.SYS command line

     If you do not already know what SIO.SYS is, you should start with the
     SIO Users Manual which should be a part of the same package that
     contained this manual.  The Vmodem specific part of the SIO command
     line is only documented here.

     The changes to the SIO command line to define a Virtual Modem Port(s)
     is simple.  All one does is to replace the I/O port number with the
     word "Internet" (without the quote marks).  I/O port number are
     usually hexadecimal numbers like 3F8 (for COM1) and it is this number
     that is replaced with the word "Internet".  A command line example for
     a Virtual Modem on COM4 that will only be accessed by native OS/2
     programs is as follows:

     DEVICE=SIO.SYS (COM1) (COM4,INTERNET,NONE)

     The "NONE" in the above simply states that no IRQ is being used.




     6


     If one wishes to access the Virtual Modem from DOS and/or Windows
     sessions, the command line is a little more complicated.  You must
     tell SIO where to present the information to the DOS/Windows session. 
     That is, you must tell SIO (really VSIO) the virtual I/O port number
     and the virtual IRQ that the DOS/Windows application uses to access
     the port.  Continuing to use COM4 as the example should be changed to:

     DEVICE=SIO.SYS (COM1) (COM4,INTERNET:2E8,NONE:3)

     This command line will present a standard COM4 to the DOS and or
     Windows session(s).




                                                                          7

                                THE VIRTUAL MODEM

     Starting the Virtual Modem is about as simple as it can be.  Simply
     type VMODEM or START /MIN VMODEM at any OS/2 prompt, there are no
     required command line parameters.  Vmodem then just sits there and
     displays some minimal activity reports.  Vmodem does have one optional
     command line parameter, a log file name.  If a log file name is given,
     all information displayed on the Vmodem screen is written to the file.

     Once started, and with the above mentioned additions to the SIO
     command line, application programs should see a relatively simple
     modem that implements a very basic set of AT commands.  Most of the AT
     commands of a real modem simply do not apply in the environment that
     the Virtual Modem is being used in.  For example, flow control is
     automatic (done by TCP/IP) so the virtual modem needs no flow control
     commands.

     Remember, the Virtual Modem has no memory, so any needed modem init
     string needs to be presented each time an application program is
     executed.

     AT Commands Supported

          ?    Display a list of supported AT commands.

          DT   Dial the following internet address.

          En   Command mode local echo. E0 disables echoing, E1 enables
          echoing.

          Fn   Local echo after connection. F0 enables (half duplex), and
          F1 disables.  This command is currently disabled.

          Hn   On/Off hook control. H0 or H alone to hang up, H1 go off
          hook.

          Mn   Incoming connect notify.  M0 or M alone inhibits speaker
          sounds, and M1 enables speaker sound when an incoming connect is
          detected.

          Sr=n Set S register r to n.  The supported set of S registers is
          given below.

          Sr=? Display the current value (setting) of S register r.

          S?   Display supported S register information.

          Z    Virtual modem reset.

          &Cn  Carrier detect operation, &C0 always on, &C1 normal.

          &Sn  DSR operation, &S0 always on, &S1 normal.




     8


          &T   Allows specification of a quoted string that Vmodem will
               report to a remote as the terminal type for Telnet sessions.
               ie AT&T"ANSI".  This setting is reset to "ANSI" when ATZ is
               executed.

          &V   View virtual modem settings.


     S Registers Supported

          S0   Zero disables automatic answer, non-zero enables automatic
          answer.

          S7   Number of seconds to wait for carrier (connection) when
          dialing.

          S19  Set inactivity timer (automatic disconnect) in minutes (0
          disables).  This S register is currently ignored by Vmodem.

          S38  Duration in seconds before disconnect when DTR drops.  This
          S register is currently ignored by Vmodem.


     Result Codes

          NO CARRIER.  This result is returned when a dialing timeout
          occurs or when an established connection terminates.  The timeout
          interval is specified by S register 7.

          NO DIALTONE.  This result code means that Vmodem could not obtain
          address information from the name server (or HOSTS file), or that
          the given Internet address is invalid.  This result code is also
          returned if TCP/IP is not responding.

          BUSY.  This result means that a connection to the vmodem port was
          established at the remote site.  However, no available
          communications ports (COM1, COM2 etc) were available to assign
          the connection to.

          CONNECT 57600/ARQ/VMP.  This result means the dialing and session
          establishment occurred without problems and is ready for user
          data flow using the Virtual Modem Protocol.  The given bit rate
          of 57600 is given only to satisfy the application program.  The
          actual data rate is not know to Vmodem.

          CONNECT 57600/ARQ/TEL.  This result is the same as above except
          the protocol being used is Telnet. 

          RING.  This result means that an incoming connection has been
          made with a remote system and that the local Vmodem is sending a
          ring indication to the assigned communications port (COM1 etc).

          RINGING.  This result means that an outgoing connection has been
          made with a remote system and that the remote Vmodem is sending a




                                                                          9

          ring indication to the communications port.




     10


     Caveats

     The modem command mode escape sequence, usually +++, is not
     implemented by the Virtual Modem.  Once the Virtual Modem enters data
     mode, the only way to return to command mode is to drop DTR.  This is
     why the DTR override AT command is not supported.  Implementation of
     the escape (+++) feature would have a severe impact on processor
     overhead and Virtual Modem throughput.

     Numeric result codes are not currently implemented, they may be at a
     future time.

     Some application programs (like ProComm) translate letters into
     numbers. I have not found a way to use ProComm's dialing directory to
     pass alphabetic strings like those used in Internet addresses.

     Other applications (like TE/2) will pass alphabetic strings when they
     are enclosed in double quotes.  Thus, an Internet address can be
     entered into TE/2's dialing directories in the form "vmbbs.xyz.com". 
     The trailing quote is not really necessary as a trailing carriage
     return will also terminate the address.




                                                                         11

                                    SECURITY

     Discussion
          Some believe that logging onto a BBS via Internet is not as
          secure as logging onto the same BBS using phone lines.  There are
          rumors of "sniffer" programs on the Internet looking for credit
          card numbers, passwords and the like.  The phone line analogy of
          a sniffer is a tapped phone line.  The author has heard the
          rumors, but has never heard of a confirmed case of a sniffer that
          really worked.

          Vmodem attempts to remove the problem of passwords being sent in
          the clear by implementing a "Shared Secret" password encryption
          method, an Internet standard (see RFC 1321 and RFC 1725). 
          Depending on the BBS implementation, the "Shared Secret" may (or
          may not) be your password.  Contact your BBS Sysop, or BBS
          supplier if you have questions about the details.

          The way the Shared Secret works is that the BBS sends a unique
          string each time a connection is made.  The contents of the
          unique string is not important so long as it is unique
          (different) each time a logon occurs.  Your Shared Secret
          (probably your password) is then appended to the unique string
          and processed by something called the MD5 algorithm that produces
          yet a third string which is sent back to the BBS.  The BBS also
          processes the unique string and the Shared Secret by the MD5
          algorithm and compares the result to the one received from the
          user.  If they match, then the BBS can proceed without directly
          asking the user for their password.  The unique string and the
          MD5 processing insure that a logon sequence is NEVER the same and
          the Shared Secret is never directly send across the network.  The
          SIO support BBS supports the Shared Secret login.

     Vmodem's Implementation

          Vmodem allows the user to specify the Shared Secret as a quoted
          string in the dialing command.  For example, if Vmodem processes
          the following:

               ATDT 199.248.240.2 "Hi There"

          The Shared Secret is "Hi There" (the Shared Secret does not
          include the quote marks).  If Vmodem process the above ATDT
          command and sees the unique string from the BBS, then a proper
          response is returned to the BBS.  The reader should note that the
          Shared Secret is case sensitive.  That is "hi there" is NOT the
          same as "Hi There".


     Developers Information

          A document for developers describing the Share Secret
          procedure and source code for the MD5 algorithm is available
          from the author.  Send requests for MD5.ZIP via email to
          ray@gwinn.com.




     12

                                DIALING EXAMPLES

     Vmodem will translate any "*" (asterisk) in the dialing string to a
     "." (dot).  Some terminal programs refuse to pass the dot, but should
     pass the asterisk because it is a key on telephone keypads.

     The following are a few dialing examples to numeric type internet
     addresses.


     ATDT199.100.191.2              Bob Juge in Houston Texas
     ATDT 199.67.41.2               PCBOARD, Clark Development
     ATDT 199*3*36*205              Steve Schmidt in Chicago Illinois
     atdt198.96.20.209              Steven Bonisteel in Canada
     ATDT194*70*36*10               Jon Morby in England


     Vmodem implements two different Internet protocols, Telnet and VMP. 
     VMP is Vmodem to Vmodem only, but is true binary while Telnet it not. 
     The Internet protocol that Vmodem uses when making an outgoing connect
     is specified in the ATDT command by preceding the Internet address
     with a pound sign "#".  If the pound sign precedes the Internet
     address, then VMP is used. Otherwise, Telnet is used.  Again, the
     reader should note that VMP should be used only when you know your are
     connecting to another Vmodem on the remote.

     The following are a few dialing examples to non-existent internet
     addresses using host names.  At least I believe they do not exist.

     ATDT vmbbs.gwinn.com     (use Telnet protocol)

     ATDT #vmbbs.gwinn.com    (use VMP protocol)

     ATDTvmbbs.internet.com

     ATDP "BBS.INTERNET.COM"

     ATDT VMBBS.INTERNET.COM

     ATDT vmbbs.internet.com 1234

     In the above example, the user is specifying a port override. 
     Normally Vmodem will attempt a connect on port 3141 (the official port
     for vmodem).  In this case, the dialer is telling Vmodem to use port
     1234 instead of 3141.




                                                                         13

                                     Telnet

     Vmodem implements a Telnet server meaning that inbound Telnet
     connections are accepted.  The "well-know name" for the Telnet server
     is VMOTelnet.  The default port is the standard Telnet port, 23.  The
     port used by the Telnet server can be changed by adding a line to the
     SERVICES file in your ETC directory and assigning VMOTelnet to another
     port.  This can also be done to disable the Telnet server part of
     Vmodem.

     The best Telnet Client to use to connect to a Vmodem Telnet Server is
     a terminal program also executing under Vmodem.  Vmodem can
     concurrently act as a Client and Server, meaning Vmodem can connect to
     itself on the same system.  This feature is a very good testing tool. 
     Of course, you can connect from a remote system as well.

     IBM's Telnet Client

     IBM's Telnet seems to be a little finicky, but I did get it to connect
     and work with a Vmodem host.  I executed IBM's Telnet with the
     following command line:

               telnet -t ANSI -c NONE

     In addition, after Telnet loads I had to enter the following:

               toggle crlf

     BE SURE TO ENTER THE ABOVE COMMAND AFTER EXECUTING IBM'S TELNET. 
     Things are really screwy if you do not.




     14

                         Development and Debugging Tools

     Vmodem's Semaphores

     Vmodem creates two system semaphores for each supported port.  One of
     the semaphores is useable by 16 bit code, the other is usable by 32
     bit code.  Both the 16 and 32 bit semaphores are set and cleared at
     the same time.  The names are \SEM\VMODEMn and \SEM32\VMODEMn, where n
     is the port number (1 or more decimal digits).  The semaphores are set
     at load time and when a disconnect occurs.  The semaphores are cleared
     when Vmodem starts "ringing" a communications port indicating an
     incoming connect attempt.  Programs can test the semaphore(s) and
     spawn a program to process an incoming call (connect).

     The Poor Man's Line Monitor (PMLM.EXE)

     PMLM is basically of interest to developers of comm applications and
     those providing technical support for those applications.  This SIO
     utility is released largely (in self defense) in the hope that some
     users can diagnose their own problems.  PMLM's feature of saving trace
     information to disk will only work with registered and beta versions
     of SIO.

     PMLM provides basic line monitoring for OS/2, DOS and Windows comm
     programs.  All characters sent or received by application programs are
     displayed in the upper portion of the screen.  Receive characters are
     displayed as "white on blue" and transmitted characters are displayed
     "yellow on violet".  Line signals, such as CTS are displayed as "dim
     white on red" when turned off and "bright white on red" when turned
     on.  In addition, a signal's transition to OFF is displayed in lower
     case and a signal's transition to ON is displayed in upper case.

     Status information is displayed in the lower part of the screen.  A
     bright white display means the signal is on, a dim white indicates
     that the signal is off.  In addition, when bright,  Rxoff and Txoff
     indicate the SIO has sent (Txoff) or received (Rxoff) an Xoff, and an
     Xon is pending.

     When a DOS or Windows session uses a comm port, an additional line of
     signal status appears.  This status line shows the state of the
     virtual UART's signals.  Only the signals which MAY be different from
     the real UART's signals are shown.

     "Rx Chars" and "Tx Chars" reflects the number of characters in SIO's
     receive and transmit buffers respectively.

     The last line on the screen shows the keys (from the keyboard) that
     PMLM will recognize.  The bright character shows the key to hit for
     the associated function.  The font keys will not work in a windowed
     OS/2 session.




                                                                         15


     PMLM's command line requires one parameter, the comm port number, and
     optionally accepts an additional parameter giving a save trace file
     name.  For example, PMLM 1 COM1INFO.TEC will monitor COM1 and save ALL
     of the communications traffic in the file COM1INFO.TRC.  The trace
     files created by PMLM contain exactly the same information that is
     displayed by PMLM, video attributes and all.

     VIEWPMLM.EXE may be used to view trace files created by PMLM. 
     VIEWPMLM.EXE requires one parameter, the trace file name.  The user
     can use the keys UP, DOWN, PAGEUP, PAGEDOWN, HOME, and END to navigate
     the saved trace file.  Registered SIO users may send VIEWPMLM.EXE
     (along with saved trace files) to anyone for technical support
     purposes.

     VIEWPMLM can be used in native DOS, in DOS sessions under OS/2, and in
     OS/2 sessions.  This means that even those developers and support
     people need not have OS/2 to view the captured communications data
     created by PMLM.

     SIO's Utility (SU.EXE)

     This utility program has several useful commands.  You can obtain a
     list of the available commands by typing SU at any command line prompt
     without any parameters.  One very useful command is SU IRQS.  This
     command will show IRQs that currently free for use.  Commands are
     provided allowing user control (missing from MODE) are available. 
     Status commands provide a wealth of diagnostic information.




     16

                  Appendix A, Hardware Port and IRQ Assignments

     I have obtained the following information from various sources. 
     Accuracy is not guaranteed.  In fact, nothing in this document is
     guaranteed.

     Addresses and IRQs for COM1 and COM2

          COM1 uses 03F8h and IRQ4
          COM2 uses 02F8h and IRQ3

     Defacto standard for COM3 and COM4 for PC, XT and AT

          COM3 uses 03E8h and IRQ4
          COM4 uses 02E8h and IRQ3

     Addresses and IRQ for COM3 through COM8 on the PS/2

          COM3 uses 3220h and IRQ3
          COM4 uses 3228h and IRQ3
          COM5 uses 4220h and IRQ3
          COM6 uses 4228h and IRQ3
          COM7 uses 5220h and IRQ3
          COM8 uses 5228h and IRQ3

     All PCs (known to the author) prior to the PS/2 and EISA only use 10
     bits to address hardware I/0 ports.  Systems prior to the PS/2 and
     EISA can not address the standard PS/2 addresses for COM3 through
     COM8.  If an AT or below attempts to address COM3 through COM8 using
     the PS/2 addresses, only the low 10 bits of the address are used. 
     That is, the high 6 bits of the address will be ignored by the
     hardware.  This means that any reference to COM3 through COM8 will
     actually address ports 220h through 22Fh on older PCs.

     One should avoid expansion boards that use ports 220h through 22Fh
     unless the expansion board is a serial I/O board. 

     SIO will (attempt to) determine the hardware architecture (ISA/EISA
     and PS/2) that it is being executed on and use the appropriate
     hardware port addresses for COM1 thru COM4 as defaults.




                                                                         17

                                      Index

     Addresses and IRQ for COM3 through COM8 on the PS/2 . . . . . . . . 16
     Addresses and IRQs for COM1 and COM2  . . . . . . . . . . . . . . . 16
     Appendix A, Hardware Notes  . . . . . . . . . . . . . . . . . . . . 16
     AT Commands Supported . . . . . . . . . . . . . . . . . . . . . . .  7
     BBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
     Caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
     Defacto standard for COM3 and COM4  . . . . . . . . . . . . . . . . 16
     Default port number . . . . . . . . . . . . . . . . . . . . . . . .  5
     Development and Debugging Tools . . . . . . . . . . . . . . . . . . 14
     DIALING EXAMPLES  . . . . . . . . . . . . . . . . . . . . . . . . . 12
     Distribution  . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
     GETTING IT GOING  . . . . . . . . . . . . . . . . . . . . . . . . .  5
     IBM's Telnet Client . . . . . . . . . . . . . . . . . . . . . . . . 13
     Ordering  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
     PMLM.EXE  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
     Result Codes  . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
     S Registers Supported . . . . . . . . . . . . . . . . . . . . . . .  8
     SECURITY  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
     Semaphores  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
     SIO's Utility (SU.EXE)  . . . . . . . . . . . . . . . . . . . . . . 15
     Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
     TCP/IP Required . . . . . . . . . . . . . . . . . . . . . . . . . .  5
     TCP/IP Sockets  . . . . . . . . . . . . . . . . . . . . . . . . . .  5
     Telnet  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
     The SIO.SYS command line  . . . . . . . . . . . . . . . . . . . . .  5
     THE VIRTUAL MODEM . . . . . . . . . . . . . . . . . . . . . . . . .  7
     VIEWPMLM.EXE  . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
     WHAT IS VMODEM  . . . . . . . . . . . . . . . . . . . . . . . . . .  1