# Transferring Data between Standard Dial-Up Modems
## Purpose:

To transfer text or files between two standard dial-up modems, with no connection to a telephone company. This method not only doesn't require a telephone company, it might not even work correctly while connected to one.

## Advantages:

* Use any common phone cord
* Avoid using ports needed for mice and other peripherals
* Avoid the expense of a null-modem cable ($10 or more?)
* Some computers don't have the required jacks for null-modem cables
* Avoid the need for an ISP in a VPN (Virtual Private Network)
* Modems automatically determine and connect at appropriate speeds
* Null-modem cables are limited to a few feet, while phone cords can be much longer
* Transferring files using floppy disks is tedious and slow
* Some computers don't have the required hardware for removable drives (such as: USB drives, ZIP drives, external SCSI drives), or the ports could be in use for other devices.

## A simple example to get started:

Note: When typing into a typical terminal program, such as HyperTerminal, what you type will sometimes not appear in the window, but will be sent to, and appear at any other computer it's connected to. This can be fixed by changing the "Echo typed characters locally" setting. In HyperTerminal go to "File/Properties", go to the "Settings" tab, click "ASCII Setup" and it will show the dialog with the "Echo..." setting. Sometimes this setting will cause two copies of each character you type. If so, you can fix it by unchecking it.
* Make sure both computers are disconnected from the wall jacks, to make sure you don't bother the phone company.
* Connect the modems together with regular phone cord, such as the one which usually connects them to a wall jack or one which connects a telephone handset to the base, for example.
* Run "HyperTerminal" on both computers
* Set them both up to use your modems
* If you want to hear a modem, make sure its volume is turned up in Windows volume control (try the one labeled "TAD"). It most likely has a volume control slider for it, but you might have to go to "Options/Properties/Show the following volume controls:" to enable it. If it's not there, your modem should have a built-in speaker anyway. Type "ATM1L3" then Enter (that controls the modem's internal volume controls).
* Type "ATD" and press Enter on either of them
* ...and within a few seconds afterward... type "ATA" on the other one and press Enter
* You should soon hear it "training" like it does when connecting to a dial-up ISP. This step could take up to around 20 seconds, but probably much less.
* You should soon see response messages like "CONNECT" or "CONNECT 36000" in the HyperTerminal windows. You can then send data between them just like a normal connection. The easiest way to test it is to type into one window and watch it appear at the other computer.

## Optimizing your connection

If you get serious about using such a connection, you should change Windows settings for your modems. Some of these settings can improve your transfer speeds dramatically. None of these suggested settings should interfere with your usual ISP connection, so you can leave them this way.
* In Windows "Start" menu
** Go to "Settings/Control Panel/Modems"
** ...or in HyperTerminal go to "File/Properties" and click "Configure"
* On the "General" Tab of "Modems Properties":
** Select the modem you plan to use.
** Click "Properties"
* On the "General" Tab (for the modem):
** Set "Maximum speed" to 115200 (or more if possible)
* On the "Connection" Tab:
** Set "Data bits" to 8
** Set "Parity" to "None"
** Set "Stop bits" to 1
** Click "Port Settings"
** Check "Use FIFO buffers..."
** Set "Receive Buffer" to "Maximum"
** Set "Transmit Buffer" to "Maximum"
** Click "Okay"
** Click "Advanced", then
** Check "Use error control"
** Check "Compress data"
** Check "Use flow control"
** Select "Hardware (RTS/CTS)"
** Click "Okay"
* Click "Okay" or "Close"

### Data throughput

The modems won't actually transfer data between them at speeds as high as some of the "Maximum speed" settings you can select, but it can ensure that data gets transferred promptly to the modem from a COMM port, so that there's no interruption in the flow. Due to how few people are aware of this capability of modems, there is no software which supports this use in a convenient way. It would not be very difficult to add such support though. Although a modem might report a connection speed of only 36000, the effective data through-put can be much higher because most modems have built-in compression. The effective data throughput can be increased even more by using a utility such as (the free, and open source) 7-Zip.

### Actual example of effective data throughput using two 56k modems:

The file was a Windows help file (".hlp" extension) and was transferred using the "ZMODEM" protocol.
The Test Results :
| The original help file |
| Size | 3,333,654 bytes |
| Time | 404 seconds ( = 6:44) |
| Rate | 8251.62 bytes per second |
| The same file after being zipped |
| Size | 652,583 bytes |
| Time | 189 seconds ( = 3:09) |
| Rate | 3452.82 bytes per second |
Comparison :
| - | Original file | Zipped file |
| Size: | 3,333,654 | 652,583 bytes |
| Time: | 404 | 189 seconds |
| Rate: | 8251.62 | 3452.82 bytes per second |
The time to transfer a megabyte of the original file was 127 seconds which is 02:07, in minutes and seconds. The time to transfer a megabyte of the zipped file was 59.45 seconds which is just less than a minute. The effective transfer rate of the zipped version was 2.1376 times that of the original, unzipped version!

### Notes:

* A command typed to a modem must be all UPPER CASE or all lower case, but not a mixture of the two. Both "ATD" and "atd" are fine, but NOT "Atd", for example. After they've connected, you can't type or send anything at all, until you send an "escape sequence", typically +++ (3 plus signs).
* So-called "WinModems" or "software modems" might not be usable this way, because their capabilities are determined by software rather than the hardware. These modems have minimum hardware internally to help reduce their prices. "Hardware modems" were used during the testing of these connections.
* Some files don't benefit from zipping, either because they've already been zipped, or because of the nature of their data. The type of file which won't likely benefit is an installer or setup program for software, or one with any of the extensions: 7Z, ARJ, BZ, CAB, GIF, GZ, JPEG, JPG, PNG, TGZ or ZIP, for example. If you're transferring many files, then zipping can make it more convenient if done at the lowest setting (called "fast" or "store", for example).
* You should be able to hook up computers all over your house this way. The lines used can be many feet long. It's been tested with about 25 feet with no problems. This author hasn't tried this with more than two computers at once.
* There are people who are said, or implied to be experts who claim that this can't be done at all. This author prefers to read such claims after sending them to another computer through a connection between two dialup modems :D
* There are reportedly people who physically modify modems to achieve this, but modifications aren't necessary, at least not for all modems.
* Modems made for use in some countries might have some features unavailable due to government restrictions, but hopefully not any required for this purpose.

## Ideas for software to support modem-to-modem connections

* Use 7-Zip to zip sections of files to be transferred, so there's less delay before it starts sending data. The sections should probably be from 64KB to 1MB or so. The receiving computer would unzip and combine the sections as it got them.
* If it's known that one of the modems is always to be the initiator, then there's no need for a special protocol to make a connection without human intervention. If it isn't known, then each one should briefly go into answer mode to see if the other computer is trying to connect. If not, then it would go into initiate mode. Both would alternate between these two modes until a connection was made. The goal is to get the modems in the opposite modes at the same time.

## How to distinguish between "hardware modems" and "software modems"

Hardware Modems handle telephony communications more on-the-adapter-card, rather than using CPU cycles and system bus for its processing; as such, hardware modems generally have much more electronic components visible on them including DIP switches (for configuring a specific COM port to be utilized), resistors, capacitors, IC chips, etc. This type of board tends to be more expensive than Soft Modems inasmuch as more components are utilized. Performance also tends to be better with this modem type as well since more of the processing is dedicated to a local level rather than having to shell out through system bus, CPU, and other motherboard components.
Software Modems, aka WinModems, are designed with a reliance on system board components (CPU cycles, RAM, system bus) for their processing capability. However this type of adapter card is more easily configured by the operating system inasmuch as normally there are no components which could be configured by a computer user. As such, the software modem settings are configurable using the operating system interface, with such settings as COM Port, IRQ, modem volume, buffers, and other configurable settings. Usually, these settings are configured automatically by a plug-and-play operating system such as Windows with little or no configuration required by the computer user. Adversely, a hardware modem might require one to specify a specific COM Port to use, figure out an available IRQ for the modem, and other such settings, making installation and initial use more cumbersome.

## Further reading

* Serial Programming
* Communication Systems/Telephone System
* Serial Programming/Modems and AT Commands