x2¶
x2 was USRobotics' 56k modem standard from 1997, the rival of K56flex, before V.90 replaced both. USRobotics' Courier and Sportster modems had it, and its I-modem and Total Control equipment were the servers. Its specification was never published.
D-Modem answers an x2 modem as the server, on a digital line, with
AT+MS=X2. A modem that does not offer x2 gets V.34 instead.
A Courier modem connects to it with error correction and data
compression (CONNECT .../ARQ/x2/LAPM/V42BIS) at 32000 bit/s down and
24000 up. Only that first speed is done so far (see
What is missing).
What D-Modem knows about x2 was learned by watching calls between the original firmware of a Courier modem and of an I-modem, both running in an emulator. For the details, see the technical details.
How an x2 call goes¶
- V.8, as for V.34. The server marks its V.8 reply as an x2 server's.
- V.34's line measurements start, and the server's first message is marked as an x2 server's. The customer's modem answers with a short x2 message instead of measuring the line.
- The customer's modem sends its V.34 training; the server answers with its own digital training: a fixed pattern, two-level training, repeated words, the frame alignment, then frames of ones.
- They exchange their settings in short records with a checksum, and the customer's modem ends with V.34's E.
- In data mode the server sends frames of 6 digital values. At 32000 bit/s each frame carries 24 bits: 19 choose one of 9 levels for each of the 6 values, and 5 are signs. The sixth sign carries no data. The customer's modem sends V.34 data back (24000 bit/s).
About 12.7 s into the data the Courier renegotiates its upstream to 28800 bit/s, and in its answer the server switches to the higher speed the Courier asks for in it: 54666 bit/s on a good line, less on a worse one (46666, 50666, 52000 or 53333 bit/s), and again when the Courier asks again later (52000, then 53333, then 54666 on a line 6 dB down). The server waits for the Courier to start: if it switched first, the Courier would drop the call. Like the I-modem, the server sends ones for about half a second around the switch before the data goes on.
What is missing¶
D-Modem knows five of the higher speeds, the ones the I-modem used: 46666, 50666, 52000, 53333 and 54666 bit/s. If the Courier asks for another, the call drops. At 46666, 50666 and 54666 the calls hold with every line arriving; at 53333 the Courier takes none of D-Modem's frames, though their levels match the I-modem's (it then asked for 54666 and the call went on). A-law lines are not done yet either.
The sixth sign of each frame carries no data, and the customer's modem does not check it. During training D-Modem uses the I-modem's own rule for it, so its training matches the I-modem's octet for octet. In data mode it keeps the signal balanced around zero, which agrees with the I-modem's choice about 87% of the time; the Courier behaves the same either way.
How it was tested¶
The Courier's original firmware, in courier-emu's emulator, calls
D-Modem's test program courier_peer over a digital line. The Courier
reports CONNECT 49333/ARQ/x2/LAPM/V42BIS (its own way of naming the
speed) and prints the text D-Modem sends it. With courier_peer
sending a numbered line every second, all of them arrive, before and
after the switch to 54666 bit/s, until the emulator's run ends at about
110 s. The unit test x2_test
checks the records against the ones the I-modem and the Courier sent,
and the data frames against a decoder.