modem

The ritual before CONNECT

modem runs a real Bell 103 connection between two machines over their sound cards. Getting there takes a moment: a faithfully performed dial-up overture goes first - off-hook, dial tone, DTMF, ringback, the ANSam answer tone and its phase reversals - then a real 300 baud connection underneath.

The overture is a reconstruction. The connection is real.

Fast data-over-sound tools such as minimodem already move bytes across a room quicker than this ever will, and that is not what this is for. They have no interest in the dial tone, the DTMF, the answer tone or the negotiation, because none of it makes them faster. This performs exactly the parts a fast tool has no reason to want.

Dial

Press Dial and two real sessions connect right here, cross-wired in software: dial tone, DTMF, ringback and the answer tone, then a real 300 baud connection, both transcripts filling in as it goes - all through your speakers. No microphone, no second machine.

Sound help

If Dial looks like it is running but nothing plays: check the mute switch and the volume, then try Resume sound below. This tracks what the audio pipeline has actually done, not just whether a button responded.

    One device - both ends live, right here

    Two real sessions, cross-wired in software exactly as the binary's own split-screen demo wires them - the link never crosses the air, so this is genuinely DEMO MODE, the same honesty the terminal app's own status bar carries. Answer picked up and originate dialled automatically the moment you press Dial; redial with different digits below, or hang up and stop whenever you like.

    IDLE - press ATDT to dial

    ORIGINATE · 1270/1070 Hz

    IDLE

    ANSWER · 2225/2025 Hz

    IDLE

    Two ways to try this

    Split screen is the default, so anyone can watch a full handshake without a second machine. The real thing is two machines, one end each, sound genuinely crossing the room.

    One device

    Run modem with no flags and both ends open in one window, originate on the left and answer on the right, sharing one spectrum. The link between them is wired in software rather than crossing the air, so the status bar says [DEMO MODE] - not an apology, the same honesty this whole project runs on. It appears whenever the link is not acoustic, and only then.

    Two devices

    The real thing needs one machine per end, speakers and microphone facing. Like a real modem, you choose which end you are: the calling machine runs modem --single --acoustic, the receiving machine runs modem --single --acoustic --answer and waits for a call. Dial from the calling machine with ATDT<digits>. Whichever end dials becomes originate and whichever end answers becomes answer, so the two land in opposite Bell 103 bands automatically - originate on 1270/1070 Hz, answer on 2225/2025 Hz - and each can hear the other, exactly as a Hayes modem's own originate/answer switch worked.

    What each part of the handshake was for

    Play the whole overture at once, rendered live by the same code that runs the connection above - not a recording - or preview any stage on its own below. Dialling itself is decorative throughout this section: there is no real telephone network behind it, so the far end always answers regardless of what is dialled.

    Idle

      Get modem

      Native binaries for Linux, macOS and Windows are built by the project's release workflow.

      No release has been tagged yet - the releases page will list binaries once one has.

      View the source on GitHub

      The technical record, the prior art, and why this exists