=======
PREFACE
=======

If you are reading this, you probably have a modem.

Your modem may be equipped with MNP error correction/compression protocols
(probably MNP 4 or 5 - will be explained soon).

MNP can help you work faster. In addition to its error-free connection, it has
features that increase the effective modem speed beyond its rated value.

If you do have MNP, chances are you are NOT using it correctly - you probably
do not communicate as fast as you can. In other words, you are probably paying
Bezeq more than you should.

Using MNP correctly requires that you set various options in various locations
(your modem, your communication program and your file transfer protocols).
You must set ALL options correctly to make MNP work. Moreover, your
communicating partner (the BBS) must also set all ITS options correctly. The
defaults that come with your modem and your software do not help - they are
usually wrong.

This article is intended to help you determine these settings so that you can
utilize your modem to its best.

The basic idea is very simple. First, you must get your modem to work in its
highest speed (in other words, setup MNP correctly); then you must make sure
that your computer and software do not become a bottleneck and slow the modem
down. This simple idea is not very easy to implement, however, so read
carefully.
 
One last remark. There are many brands of MNP modems in the market, and even
more communication programs and file transfer protocols. I cannot cover all
of them. The modem discussion will be based mainly on the Everex EV-941,
which I own and know the best. The software part will discuss Telix, Telemate,
Puma, Bimodem and DSZ. I will mention some other modems and software packages,
but your favorite one may not be among them. READ ANYHOW: if you understand
the basic ideas, you will probably be able to implement them for other
hardware or software items.


=================
SOME MODEM BASICS
=================

So that we can all understand each other, let me draw some basic facts. They
are not necessarily exact, but they are good enough for this discussion. If
you are familiar with these facts, you can skip this and the following
section.

Let's assume that YOUR computer wants to send some data to MY computer. Here
is what happens:

Your computer sends the data to its own "Serial Adapter" (or "RS232 card").
It sends the data in parallel - one full byte at a time (all bits together),
along with some control information.

Your serial adapter converts the data from parallel to serial representation.
In other words, the bits that form the byte (which entered your adapter at the
computer side together) leave it at the connector side one after the other.
The adapter is asynchronous, which means that it adds a "Start" bit, "Stop"
bit(s) and perhaps a parity bit to each sequence of bits that form a byte (I
will not discuss this any further).

Your Serial adapter narrows the eight-bits-per-byte-plus-control computer data
to a fewer number of lines, but is still creates digital data, which can be
transmitted over special (and short) lines only. This is why your adapter is
connected to a modem. The modem translates the digital data to voices that can
be transmitted over a standard telephone line.
 
On the other side of the phone line, my modem listens to the incoming voices,
translates them to serial bits and feeds the bits into my serial adapter. This
adapter converts the sequence of bits into parallel bytes, which are read by
my computer.
 
To summarize:
 
-     Your computer creates parallel bytes;
-     Your serial adapter receives parallel bytes and creates serial bits;
-     Your modem receives serial bits and creates voices;
-     My modem receives voices and creates serial bits;
-     My serial adapter receives serial bits and creates parallel bytes;
-     My computer receives parallel bytes.

(By the way, "internal" modems - such as the Everex EV-941 - combine the
serial adapter and the modem into a single card: they receive parallel data
and send voices, and vice versa. This is transparent to the software, since
the single-card modem emulates a serial adapter connected to an external
modem, and there is no difference on either the computer or the telephone line
side).


=======================
SOME MORE MODEM DETAILS
=======================

Let's get closer and examine some points in higher detail.

Your serial adapter is "Full Duplex", and so is probably your modem. This
means that they can receive and transmit data at the same time (the serial
adapter actually has two physical lines - one for outgoing bits, one for
incoming - as well as some control lines; the modem usually uses two basic
frequencies, one for transmitting and one for receiving).

Your software, serial adapter and modem must be able to tell when each of them
is ready to communicate. In other words, there must be a standard method of
"Handshaking" between all parties. This is done in several methods. 

First, there are several control lines between the serial adapter and the
modem (these lines can also be set and/or sensed by the software on the
computer side of the serial adapter). Of these control lines I will mention
four:

-     DSR (Data Set Ready) - Modem-to-computer: Used by the modem to tell the
      serial adapter and the computer that the modem is ready (but not
      necessarily able to receive new data).

-     CTS (Clear To Send) - Modem-to-computer: Used by the modem to tell the
      serial adapter and the computer that the modem is able to receive new
      data.

-     DTR (Data Terminal Ready) - Computer-to-modem: Used by the serial
      adapter to tell the modem that the adapter (and computer) is ready (but
      not necessarily able to receive new data).

-     RTS (Request To Send) - Computer-to-modem: Used by the serial adapter 
      to tell the modem that the adapter (and computer) is able to receive new
      data. 

Not all four lines are used by all modems, but MNP modems usually use all
four, as I'll explain later.

There is an alternate way of handshaking between the communicating parties.
Instead of relying on extra hardware lines, this method uses special ASCII
values that are sent as standard data but have a unique meaning. These values
are usually XON (hex 11), which means "start", and XOFF (hex 13), which means
"stop". Using XON/XOFF has several disadvantages: it slows down the
transmission (because handshaking comes in sequence rather than in parallel
with the data), and more important - the XON/XOFF characters, being used for
handshaking, are "swallowed" and cannot be transmitted as part of the normal
data.

One more thing you should know about modems is that they usually work in two
modes. In normal mode, everything you send to the modem is transmitted over
the phone to the other partner. The modem may also operate in "Command" mode;
in this case, the data you send to the modem is interpreted as modem commands
(the switch between normal and command mode will not be explained here, since
it is usually done for you by your communication program). Most modems use the
Hayes command language, in which all commands start with the characters "AT".
The Hayes language is not uniform - every manufacturer has its own implement-
ation of the language, particularly for such exotic things as MNP control,
which is what this document is all about. I cannot therefore give exact rules
that match all modems, and you will have to figure out your own commands if
your modem is different than mine.


====================
COMMUNICATION SPEEDS
====================

I said "communication speeds" and not "communication speed" on purpose. Each
modem has a rated maximum speed. This is somewhat misleading, because there
are several speeds involved, and the final communication speed depends on
more than one factor.

The modem speed itself is measured in Bits Per Second, or BPS. This is the
number of bits per second sent or received by the modem over the telephone
line. The most common speed today is 2400 BPS (1200 is used by older or
cheaper modems, while 9600 is becoming quite common).

(You may also hear the term "modem Baud rate". IGNORE IT. This measures the
number of modem status changes per second. 2400 BPS modems have usually a
Baud rate of only 600, and use special techniques such as frequency shifting
to squeeze in more bits per change in status).

The modem speed (BPS) refers to the PHONE side of the modem. The speed on the
other side, between the modem and the computer, is not necessarily the same.
MNP modems are usually capable of talking to the computer faster than they
talk between themselves; we'll soon see why this is necessary.

When the modem-to-computer and modem-to-modem speeds are different, some
handshaking techniques (explained above) must be used to ensure that the
computer does not "overrun" the modem beyond its actual capabilities and vice
versa.

To complicate things a little more, the BPS speed measures the actual number
of bits that flow between modems. MNP effective transfer rate can be faster,
because less bits are needed to transmit the same amount of data.

There is one thing you must remember. THE ACTUAL TRANSMISSION SPEED IS THE
SPEED OF THE SLOWEST COMMUNICATING PARTNER. If your modem can talk 2400 and
my can talk 1200, the actual speed will be 1200: this is straightforward. What
is less obvious is that if your modem can talk to my modem at an effective
speed of 3000 (actually 2400 enhanced by MNP) but your (or my) computer-to-
modem speed is fixed at 2400, the final speed will only be 2400 - and neither
of us may be aware of it.

Communication is a two-partners game. You may set all your speeds correctly
on your side, but this is not good enough. I must set my speeds right as well.
SYSOPS PAY ATTENTION: There is a whole world out there waiting for you to
setup your communication parameters correctly!


===============
SOME MNP BASICS
===============

MNP, or Microcom Networking Protocol (today supported by many more brands
beside Microcom), was originally intended to ensure error-free communication
between modems regardless of phone line conditions. MNP is divided into
classes. In the first (and earliest) classes, the error-free communication was
obtained at a price of reducing the effective speed (which is quite obvious
if you think about it). Newer classes use special techniques that result in
error-free data transfer while actually INCREASING the communication speed
(moderately to considerably).

MNP classes 1 and 2 reduce the transfer speed, and are not worth discussing.

MNP class 3 is the first class that resulted in an increased transfer rate.
This was done by communicating between the modems using SYNCHRONOUS "packets"
without start and stop bits, although the data transfer on the other side of
the modems (between the modems and the computer) is still synchronous. There
is still some overhead involved, so the effective transfer rate of MNP 3 is
about 108%, or up to 260 bytes per second for an 2400 BPS modem, compared to
240 bytes for non-MNP (assuming 1 start bit, 1 stop bit and no parity). These
speeds, by the way, are ideal and are never reached because of other limiting
factors, but you can get quite close.

MNP class 4 uses synchronous packets as well, and optimizes these packets by
eliminating unnecessary data and adjusting to line conditions. The effective
transfer rate of MNP 4 is up to 120%, or about 260 bytes per second for 2400
(assuming there are not too many errors - remember that the communication is
supposed to be error-free as well as faster).

MNP class 5 adds data compression to MNP 4. A real-time adaptive compression
algorithm is used, which means that the modem adjust the algorithm all the
time to match the data being transferred. Unlike the previous classes, which
provide a constant speed factor, compression depends of course on the data
being transmitted. MNP 5 is considered to have an effective rate of 200%,
which makes a 2400 BPS modem behave like a 4800. 

There is a catch, however. If your modem does mainly file transfers from a
BBS, chances are that you will not gain much by compression (to put it in
other words, if the already-compressed .ZIP or .ICE etc. files in the BBS can
be squeezed any further, the file compression method should probably be
changed!). Some publication suggest that you would be better off WITHOUT data
compression in this case, since compression does have its price, which means
that you should revoke MNP 5 and go back to using MNP 4. My own experience is
that MNP 5 does not harm file transfers that much, and you should probably
keep it on to take care of interactive BBS work, but your case might be
different - feel free to experiment and let me know the results.

This is as far as I will go. There are several further MNP classes (the latest
one I heard of is MNP 10, which makes a 2400 BPS modem behave like 19200!),
but the idea is the same, and modems above MNP 5 are still not that common.

One thing I didn't say, but should be obvious, is that MNP is a two-way
business - both communicating modems must use the same MNP level when they
communicate (the modems may negotiate and agree upon a certain level when they
make the first connection).


====================================
HOW TO SPEED THINGS UP - BASIC IDEAS
====================================

Enough with the theory - let's start doing something useful.

The things you should do to make your communication faster can be summarized
as follows:

1.    PURCHASE AN MNP MODEM (at least MNP 4, probably 5).

2.    PURCHASE A FAST-ENOUGH COMMUNICATION PROGRAM, that will not cause a
      bottleneck on your computer (notice that I said "purchase", not "steal"
      or "borrow"!).

3.    MAKE YOUR MODEM USE MNP (4 or 5 - as I said, I don't have a good advise
      here). This is rather easy, but remember that most MNP modems do NOT use
      MNP as a default, so you have to do some manual work.

4.    MAKE YOUR SERIAL ADAPTER TALK TO THE MODEM AT A HIGHER RATE THAN THE
      MODEM'S NOMINAL RATE. The manuals suggest 4800 for a 2400 modem; I
      myself am more optimistic and use 9600.

5.    MAKE SURE YOUR MODEM STAYS AT THE HIGH MODEM-TO-ADAPTER SPEED and does
      not revert to the modem-to-modem nominal speed when the connection is
      made.

6.    MAKE SURE YOUR COMMUNICATION PROGRAM STAYS AT THE HIGH SPEED and does
      not revert to the modem nominal speed when the connection is made.

7.    USE HARDWARE-LEVEL HANDSHAKING (CTS/RTS) between the modem and your
      communication program. Do NOT use XON/XOFF handshaking.

This is all you have to do, but you must make sure you do EVERYTHING specified
here. If you do a partial job, you'll end up without any gain in speed (the
better case) or with unreadable garbage on your screen (the worse case).


============================================
HOW TO SPEED THINGS UP - A PRACTICAL EXAMPLE
============================================

For the hardware part, let me assume that you have purchased an Everex EV941
modem with MNP 5 (this is NOT a recommendation - there may be better bargains
in the market). I'll also discuss some other modem setup possibilities.

For the software part, you may use the communication program that comes
bundled with your modem (Everex comes with something called "BitCom"), but
there ARE much better bargains in the market, and some of them are shareware,
so you can experiment and purchase the one you like. I'll mention two:

-     Telix seems like a fairly good choice. It is FAST, not too large, has
      built-in ZMODEM and a powerful script language, and is not too annoying
      to use.

-     Telemate is considered to be a good choice, since it allows a kind of
      multitasking (you can browse a file while you download so you can decide
      on-the-fly what to download next). If your computer is slow, Telemate
      may not be fast enough and may become a bottleneck (something a
      communication software should never be), and it also eats up too much
      of your precious RAM, but it is still worth considering.

I have also experimented with some other packages (including Procomm, Procomm
Plus which is used at my work but is NOT shareware, Boyan, Qmodem and GT1500).
Most of them can be used quite easily with MNP.

A communication program is not complete without some external file transfer
protocols. There are about a dozen of them around, but I'll discuss only
three: Puma, which is fast and elegant; Bimodem, which is quite amazing (it
is truly full-duplex - allows you to upload and download simultaneously at
full speed, and even chat with your friend at the same time); and DSZ, which
contains several protocols including ZMODEM and is preferred by many users.


===========
MODEM SETUP
===========

In the following lines I'll discuss only those modem settings that are
important for proper MNP operation. There are more options that I will not
mention.

Commands that have an alphabetic character immediately following the AT code
are usually common among all modems. Commands that start with AT& are less
common, and there are some variations. Commands that start with AT\, AT% or
AT* are unique, and probably have other codes in other modems.

ATB1        (Mandatory, default). Selects the Bell 212A protocol.

ATE1        (Mandatory, default). Echoes the commands to the screen; some
            communication programs require it, for others it does no harm.

ATQ0        (Mandatory, default). Suppresses "quiet" modes, and causes command
            responses to be sent by the modem (most communication programs
            require it to tell when a communication has been made, etc.).

ATV1        (Recommended, default). Causes command responses to be displayed
            in English words rather than in numeric codes.

ATX4        (Recommended, default). Causes the modem to wait for dial tone
            before dialing, and to detect BUSY and NO ANSWER conditions. some
            modems may not support it.

AT&C1       (Mandatory, default). Causes the modem to indicate Data Carrier
            Detect (DCD) only when there is actually a modem on the other
            side (DCD is not explained in this article).

AT&D2       (Mandatory, default). Causes the modem to hang up when the DTR
            line is down (DTR is explained above).

AT&S1       (Mandatory, NOT default!). Causes the modem to keep the DSR line
            up only when the modem is active (DSR is explained above). BE
            CAREFUL: Other modems use AT&S for other things (Motorola 82240,
            for example, uses it for front switch settings control).

AT\C1       (Mandatory, NOT default!). Enables an internal modem buffer to be
            used while the modems negotiate MNP. If not used, the first
            characters in the transmission may be lost.

AT\G0       (Mandatory, default). Disables XON/XOFF flow control between the
            two modems. Setting AT\G1 will cause problems with some file
            transfer protocols (such as Bimodem).

AT\J0       (Mandatory, NOT default, VERY important!). Turns "baud adjust"
            off. The default (AT\J1) causes your modem to adjust the speed by
            which it communicates with your computer (the RS232 side) to the
            nominal modem-to-modem speed at connect time, which eliminates all
            MNP speed gains (your 2400 modem will talk "effective-4800" to the
            second modem, but only 2400 to your computer!). Setting AT\J0
            keeps the speed between the modem and the serial port constant
            (how to set this speed initially is explained below). Other modems
            use other commands for this, such as AT&I1.

AT\K5       (Mandatory, default). Causes a Break signal to be sent and
            received in sequence with the data, which is important for file
            transfers. Other modems use other commands for this, such as
            AT*Y2.

AT\N3       (Mandatory, NOT default!). Causes the modem to work in "auto-
            reliable" mode, which means that it will try to use MNP and fall
            back to non-MNP if the other modem is not compatible. The default
            (AT\N1) DISABLES MNP altogether. Other modems use other commands
            for this, such as AT&E4 or AT&E6.

AT\Q3       (Mandatory, NOT default, VERY important!). Causes hardware-level
            handshaking (RTS/CTS) between your modem and your computer. If the
            modem and the serial adapter speeds are different (such as when
            AT\J0 is specified), handshaking MUST be enabled. DO NOT use
            XON/XOFF handshaking (AT\Q1), because it will cause problems with
            some file transfer protocols. Other modems use other commands for
            this, such as AT&K2.

AT\V1       (Recommended, NOT default!). Causes the modem replies to indicate
            if a reliable (MNP) connection has been made - you should probably
            want to know what kind of connection you have established.

AT\X1       (Mandatory, NOT default!). Enables XON/XOFF characters to be sent
            to the other modem as data. The default (AT\X0) will swallow
            XON/XOFF and will cause problems with some file transfer
            protocols.

AT%C1       (Up to you - I use it; NOT default). Enables data compression
            (uses MNP 5 rather than MNP 4). If you can prove that MNP 5 slows
            down file transfers considerably, I'll be glad (?) to switch back
            to AT%C0.

ATDT        (Recommended). This has nothing to do with MNP, but you may be
            able to use touch-tone (DTMF) dialing without being aware of it,
            and it is a real time saver. Even if you can't, try to ask Bezeq -
            you may be surprised.

AT&W0       You probably do not want to type all those setup strings every
            time, so save them once with AT&W0, and indicate to your
            communication program that your modem initialization string is
            simply ...

ATZ         Which is easy to remember and use.

AT&V        (View setting). Use this to check your non-MNP modem settings.

ATI6        (Inquire modem). Use this to check your special MNP modem settings
            (why use two different codes is beyond me).


===========
TELIX SETUP
===========

If you are using Telix as your favorite communication program, there are
several things that you should do to make it work properly with MNP.

First, bring up the Telix setup menu (Alt-O), and select "Terminal options".

Within "Terminal options", select option A and set the default baud rate to
9600 (!) if your modem is 2400 MNP. This will ensure that the serial-adapter-
to-modem speed is high enough not to cause a bottleneck.

Then select the appropriate options to turn XON/XOFF flow control OFF, CTS/RTS
flow control ON, and DSR/DTR flow control OFF. Do not use any other
combination of flow control!

Now go back to the configuration menu and select "Modem and dialing". Set the
modem initialization string to ATZ^M (provided that you have saved your
setup!), and set Auto Baud detect to OFF.

Finally, go to your dialing directory and define ALL entries to have a speed
of 9600 (even if you know for sure they are only 1200 or 2400).

Now start working. You should notice that the speed indication in the status
line always says 9600, whether you are idle or communicating. If it is (and
if you manage to work), you probably did everything right.

(What happens is that Telix talks to your modem at a constant speed of 9600
BPS and uses CTS/RTS flow control to avoid overruns; your modem talks to the
other modem as fast as it can, taking advantage of MNP if available, and is
not delayed by your computer's hardware or software).

There is one small problem. If you upload or download with Telix's internal
protocols, the estimated transfer time will be incorrect, because it will be
based on the assumption that your modem is actually 9600 BPS. This is a small
price to pay in order to be able to work faster.


==============
TELEMATE SETUP
==============

First of all, use Telemate only if your computer is fast enough and has enough
free memory - writing programs in C using Vermont Views results in very good
programs but does not contribute to their size and performance.

Go to Telemate's options menu (use your mouse or Alt-O).

Select "Dial setup", and turn "Auto Baud detect" OFF.

Select "Terminal", and turn XON/XOFF flow control OFF and RTS/CTS flow control
ON.

Select "Communication", and set the modem initialization string to ATZ^M
(provided that you have saved your setup!). In addition, set the "Baud rate"
(which by now you know should say BPS, not Baud) to 9600 (!) if your modem is
2400 MNP. This will ensure that the serial-adapter-to-modem speed is high
enough not to cause a bottleneck.

Do not forget to save your setup.

Finally, switch to your dialing directory and define ALL entries to have a
speed of 9600 (even if you know for sure they are only 1200 or 2400).

Now start working. If you left your status line on, you should notice that the
speed indication in the status line always indicates 9600, whether you are
idle or communicating. If it is (and if you manage to work), you probably did
everything right.

Unlike Telix, Telemate adjusts its estimated upload/download times as it
works. Therefore, only the initial estimated transfer time will be incorrect
(because it will be based on the assumption that your modem is actually 9600
BPS), but after a few blocks the estimate will be corrected.


==========
PUMA SETUP
==========

If you are using Puma as an external protocol, you can have MNP speed AND a
correct estimate of the file transfer time.

Run PUMASET to configure Puma, and choose "Change default options". In this
menu, select the following:

-     UART Baud - "current" (assuming you always call Puma when your
      communication program is operating).

-     Effective Baud - 2400 (assuming your modem is 2400). This figure is used
      for estimating the file transfer time.

-     CTS/RTS handshake - "fast".


=============
BIMODEM SETUP
=============

Bimodem is a protocol you cannot live without if you plan on being a honest
person and upload at least once in a while.

Like Puma, Bimodem can be configured to use MNP and estimate times correctly.

To do this, run BICONFIG (either directly or from BIMENU). Select "Terminal
options" and set the following:

-     "Baud (yack!) rate to base estimate on" - type here your nominal modem
      speed (e.g. 2400). This figure is used for estimating the file transfer
      time. Note that if you use MNP, your effective BPS rate will be faster,
      and the estimated time will be too long.

-     "CTS/RTS hardware flow control" - set to "Y".

The next time you are asked why you always download and never upload, do not
use the "I don't have time" or "I don't have money" excuses - they do not work
well with Bimodem.


=========
DSZ SETUP
=========

DSZ is a famous yet not-very-user-friendly file transfer package that supports
several protocols, most importantly ZMODEM. It is a must if you use a
communication program that does not have internal ZMODEM, and there are those
out there who use it even with Telix or Telemate, because DSZ is supposed to
be faster and better (you can try it and judge for yourself).

The following comments are based on the DSZ version dated April 11, 1990
(known as DSZ0411). They are probably relevant to other versions as well.

DSZ is command-line oriented and does not have a separate setup mode. The DSZ
documentation has the courtesy of stating that it has a "handshake XX"
command-line option (which can be abbreviated to "ha"), but it does not
indicate what values this mysterious XX can take (this is part of the
package's user-friendliness). If you dig deep enough, you find that the value
relevant to MNP is "handshake cts". The DSZ command for ZMODEM downloading
should therefore look something like:

      DSZ ha cts rz -rr <other options>

note that there is no hyphen before "ha", and that you must use lowercase
characters.

DSX has another option that may be relevant, called "estimate". If you
indicate the effective BPS rate to DSZ (such as 2400 when using non-MNP or
2900 when using MNP), DSZ will show a correct estimated transfer time;
otherwise the estimate will be based on the RS232 speed (9600) and will be
incorrect. If your file transfer is long enough, you may have enough time to
locate where exactly on the screen DSZ gives its estimate - somewhere towards
the end of its numerous line-mode messages.
 

=======================
A FINAL WORD FOR SYSOPS
=======================

As you have probably guessed by now, I am NOT a SYSOP and probably never will
be (I am too old, too busy and too poor).

I therefore have no idea what to do on your side of the game to make MNP work.

We users can do everything we can, but if you do not setup your end correctly,
we will never gain speed.

If any of you out there knows what to do with all those Front Doors and Remote
Accesses an QBBSes and FileDoors and other Buzzwords to make them utilize MNP,
please share this information with other SYSOPs, so that you and us (who cares
about you and us? - me!) can save some time and money.


========================
A FINAL WORD TO EVERYONE
========================

I don't want to have too many mistakes in this document. If you find one, or
if you want to add your own comments, please let me know.

You spent some money on your equipment - I hope this will help you use it
cheeper and faster.

