Does expecting the unexpected make the unexpected the expected?

User Tools

Site Tools


Section 5 - Using Virtual Modem

Getting online

Now you can proceed to check out the system specific guides on how to interface different vintage computers and devices with VModem. Once you are done, return back to this guide!

Make sure is running on the Raspberry Pi first before attempting connection!

Making Virtual Modem run at startup

After you have verified that the VModem works properly on the console, and you have tested that you are able to connect to your network, you can make VModem run automatically as a background process after the Raspberry Pi is powered on. It will run as a background process so you won't see it's output, so it's highly recommended to thoroughly test the script first.

  • Edit the /etc/rc.local file. Go to end of the file, and find the last line. It should be exit 0. Now add the following lines ABOVE it.
# Start serial port and simulate a modem
cd /boot/vmodem/
/boot/vmodem/ &

Beware the ampersand “&” at the end of the line. Without it, the boot process may not complete correctly (or at all).

  • Restart Raspberry and test the changes. After rebooting, VModem should automatically start up with system processes and start expecting connections on serial.

Supported Commands

  • HELP or ? Show quick reference
  • LOGIN Start a new shell session on serial
  • SETUP Change system settings, such as Wi-Fi settings, etc.
  • EXIT Quit Virtual Modem

Functional Hayes commands:

  • AT Tests Modem. Returns OK if successful
  • ATDn Dial number, where n is a phone number
    • ATDTn Dial number using touch tone
    • ATDPn Dial number using pulse dialing
    • Note! This command actually runs a shell script by the name of the phone number stored in the same path as vmodem. If you dial ATD1, Vmodem will run in the same directory and pass control to it. Any response you receive will be coming from When the script ends, you will be returned back to VModem.
  • ATE - Command echo to host
    • ATE0 Commands are not echoed
    • ATE1 Commands are echoed
  • ATQ Result codes
    • ATQ0 Modem returns result codes
    • ATQ1 Quiet mode. Modem gives no result codes.
  • ATV Result codes in numerical or verbose form
    • ATV0 Returns the code in numerical form
    • ATV1 Full-word result codes
  • ATX Extended result codes
    • ATX0 Disable extended result codes (Hayes Smartmodem 300 compatible result codes)
    • ATX1 Add connection speed to basic result codes (e.g. CONNECT 1200)
    • ATX2 Add dial tone detection (preventing blind dial, and sometimes preventing ATO)
    • ATX3 Add busy signal detection
    • ATX4 Add both busy signal and dial tone detection
  • ATZ Reset modem
    • ATZn Restore stored profile n

Supported Extended Modem Commands

  • AT&Cn Carrier-detect
    • AT&C0 Force DCD signal active
    • AT&C1 DCD signal indicates true state of remote carrier signal
  • AT&F Restore factory settings
    • AT&Fn Use profile n

Faked Commands (does not perform any action, always returns OK)

  • ATA Answer
  • ATH Hang up or pick-up.
    • ATH0 Go on-hook (Hang up)
    • ATH1 Go off-hook
  • ATM Speaker control
    • ATM0 Speaker always off
    • ATM1 Speaker on until carrier detected
    • ATM2 Speaker always on
    • ATM3 Speaker on only while answering
  • ATS S Register settings
    • For example, ATS0=0
  • AT&Dn Data Terminal Ready settings
    • AT&D0 Modem ignores DTR
    • AT&D1 Go to command mode on ON-to-OFF DTR transition.
    • AT&D2 Hang up on DTR-drop and go to command mode
    • AT&D3 Reset (ATZ) on DTR-drop. Modem hangs up.
  • AT&K DTE - MODEM Flow control
    • AT&K0 Local flow control off
    • AT&K1 Not used
    • AT&K2 Not used
    • AT&K3 RTS/CTS
    • AT&K4 XON/XOFF
    • AT&K5 Transparent XON/XOFF
    • AT&K6 RTS/CTS and XON/XOFF
  • AT&Sn DSR Override
    • AT&S0 DSR will remain on at all times.
    • AT&S1 DSR will become active after answer tone has been detected and inactive after the carrier has been lost


Cannot communicate on serial terminal with the vmodem script
After running the Virtual Modem script on the Raspberry Pi, and connecting it to your computer via the USB-to-Serial adapter and a null modem cable, you should be able to fire up a simple serial terminal on the computer and issue a few Hayes commands to ensure connectivity. Hayes commands are a common way to communicate with Modems, and by typing AT and pressing enter in the terminal, you should see an “OK” response. The vmodem script also recognizes other commands, such as HELP which should provide a short list of recognized commands). If you receive a garbled response after typing AT or HELP, your serial speed settings may not be the same on both ends. Make sure you have adjusted the communication speed to match. If you receive no response whatsoever, you might have a problem with the USB-to-Serial adapter or you may be using an older UART on your computer (see section 2 for more on this). If you're still unable to communicate with the VModem script, feel free to join our Discord channel (see bottom of page for link) for further support. Simple tutorials can only go so far… :)

After dialing in, system is disconnected immediately
Make sure you are using the latest version of the Virtual Modem script. An early version had an issue where the serial connection would be cut before the network connection was established. Also, be sure to make sure your serial baud settings are correct, and they match the virtual modem script. Finally, try turning off Flow Control from the Modem Settings under Advanced Settings.

After dialing in, system reports connected, but no network is available
Make sure you have updated the network device in to reflect the correct network interface. By default it is eth0. If you are using Raspberry on WIFI, you may need to change this to wlan0.

Is there any way to get it work faster than 56k?
Your serial port hardware will govern the maximum speed you can do with Virtual Modem. Please note, that Virtual Modem is a dial-up simulator. The best dial-up modems only went up to 56 kbaud, that was on a good day. You can crank it up to do a little bit faster, but you're running into limitations on what your serial port hardware can do, and faster speeds are beyond the scope of support, as going beyond your hardware limits can cause other connectivity issues that are unrelated to the virtual modem. If you would like a faster speed, you might need to look into other solutions, as this is beyond the scope of this project.

I am still having issues using your script on something else than a Raspberry Pi and Raspbian/Raspberry Pi OS
Unfortunately there is very little in terms of support with hardware and software combinations that I can offer. If it works for you, great. But if it doesn't, you will need to try the recommended hardware and software combination as highlighted in Section 2 - Shopping list and follow the instructions carefully in further sections. Unfortunately I cannot offer support with untested setups, because I will not have access to the same software or hardware as you do. And if I don't have the same hardware and software, I cannot replicate the issue in the same way as in your particular environment. If I can't replicate the issue, I'm unable to troubleshoot it and offer support. This is why we have recommended hardware and software, because it is tested known working. If you are able to replicate the issue with our recommended hardware and software, and are still having the same issue, feel free to contact us on Discord and I will be more than happy to assist.

Other issues:

  • Some computers are not capable of operating at fast serial speeds. If you're unable to connect at 57600 or faster, try slower speeds, such as 9600 baud at first. Adjust both the script and the computer to connect at only 9600 baud. If that works, work your way up to see where the limit for your specific computer is.
  • If you run into any other issues, take a note of them and look for commonalities in any steps you've taken before this step. Open up the script for editing to make sure the baud and serial port are properly set. If you're unable to figure it out, feel free to contact us at Discord. We have a channel specific for Virtual Modem support (see bottom of page).

Skip to previous sections

Get In Touch With Us!

Get support, share your thoughts and report bugs on Discord.

guides/virtual_modem/section_5.txt · Last modified: 2023-03-07 03:58 by omolini