COLUMNS Host net 508, Node:5084 Tel. int+55 421284 Ignaat Simons Chopinlaan 3 7333GA Apeld
Host net 508, Node:508/4 Tel. int+55 421284
7333GA Apeldoorn Netherlands
HAYES modems and compatables.
In the world of modem freaks and slowly on in the industrial
world, the HAYES modem is a defacto standard.
The official standards like RS232c (USA) and V24/V28 (CCITT)
describe the Physical part of a data circuit, while the V25
(CCITT) describes the A(uto) C(call) U(unit) function. The
speeds and usage of the modems are laid down by the CCITT V-
standards, mainly in the V21 till V36 books.
Due to the different country and telephone company laws,
modems are different and not compatable with each other,
exept modems of one vendor. Some years ago, it was very
unwise to make a connection with two different modems, even
if they claimed to be according a V-xx norm. Mostly this
was no problem, because a data transport was mainly between
two predefined points via a leased line or switched network.
The connection was buildup manual, or made automatic via
autocall function ACU (V25/RS232).
The HAYES-300 modem (I think this was the start), besides
the Physical RS232/V24/V28 norm did specify the modem
control command level between modem and terminal via the AT
leadin and the +++ command to return from
a data state to the command state. Also it describes the
handling of automatic speed detection. This command set
enables operators and application programmers to buildup a
connection via normal conversation. As it could be
programmed, the connection via a switched network was
possible automatical via simple statements like "CALL John".
The original HAYES-300 was not using call procedures like
108/1 or 108/2 (DTR circuit). With the HAYES-1200, this
command set was extended to cope with more than one line
speed, the BELL 103 and BELL 212A. The last one more or less
compatable with the CCITT V22 norm. Also the automatic speed
selection in 'answering' mode was build in. With the HAYES-
2400, the set was dramatically extended with three speeds,
BELL-103, BELL-212A and the CCITT V22 and V22bis norms. So
handling also in 'answering' mode an automatic selection. As
the BELL-212A and V22 uses a PSK (four-level phase shift
keying) and V22bis uses QAM (Quadrature Amplitude
Modulation) technic, which were designed for synchronous
modems, the HAYES-modem translates the asynchrone data into
a synchronous way by inserting and consequently removing a
STOP bit in periods where no character is send. The HAYES-
1200 is not compatible with the BELL-212A/V22 synchronous
modems. The HAYES-2400 is also in this aspect compatible and
serves also the formal Half duplex (RTS/CTS-handling). As
the HAYES-1200 did serve only the CCITT 108/2 mode, the
HAYES-2400 supports also the 108/1 mode. Really you can say,
the HAYES-2400 is a complex intelligent unit. Despite the
well written handbook of HAYES, it is a hard job to make a
compatible one. From all modems (compatibles) I have seen,
there are a few which come close to the HAYES, the most are
As my job is Faultfinder (Support), I really was very
pleased, HAYES did implement in the HAYES-2400, a really
complete circuit test via the S16-register, even with remote
commands, so the fully V54 norm of CCITT. As most Hobbyist
but even profesionals have big problems with reliable
circuit connections, and more the solvation of it, a modem
without this feature nowadays isn't worth the word MODEM so
certainly not the word HAYES.
What is "compatible". Really nothing if not exactly said
with WHAT. "HAYES compatible" is to vaque. "HAYES command
set compatible" is better. Most modems, so not all, are only
compatible with a "subset of HAYES command set". But also
most "hayes" modems have commands not existing with hayes.
Some unlucky vendors did use commands or registers not used
with hayes-1200 at that time, but later used in the HAYES-
2400. (Bad Ques).
The best I can say most of the better clones are more or
less compatible upto HAYES-1200.
As I don't know if besides HAYES-1200 and the HAYES-2400,
also a HAYES-300 exists, I further only refer to this two,
from which both I have the specifications. In Europe a lot
of 'hayes' modems with only the V21 and V23 speeds exists,
which are similar, but absolute not connectable, with the
BELL-103 and BELL-202 norm modems.
As most application programs only use a small set of the
HAYES-command set, most clones will run with these packages
such that the user is pleased, not to use his fingers and
ear to make a connection. This if he has a user friendly
telephone company (are there), but mostly the results are
hopeless in peak hours, if there is a mismatch between the
modem commands and the terminal commands. I had a modem and
a terminal program and on some day no nice CALL
was succesfully. With finger and ear there was no problem.
Reaction of the terminal was "BUSY". The real point was, the
modem did not pickup in ATX2 mode the dial tone from the
Telephone company, so didn't start dialling. As the modem
had not a speaker (for cheapness), I could not use the ATM1
command, to follow the connection process. The dial signal
was strong enough, but the frequency was a little ouside
3. The HAYES set.
With this I hope, without copying the whole 250 pages of
both Hayes handbooks, to give enough information to
understand the HAYES-set and the differences.
Hayes propose to use as terminal program, the Hayes Smartcom
II Version 2.1.
3.1. The Physical DCE/DTE-lines.
With DTE is meant the Data Terminal Equipment (Your terminal
or Host computer) and with DCE the Data Circuit
(termination) Equipment (all equipment between two modems
RS232 plugs). The HAYES-1200B is the 1200 type but as a card
to be fitted into an IBM-PC. The same for HAYES-2400B.
The pin assignments must be in accordance to ISO 2110.
Pin # Circuit Towards Description 1200 2400
1 AA 101 N/A prot. ground x x
7 AB 102 N/A signal ,, x x
2 BA 103 DCE transmit data x x
3 BB 104 DTE receive data x x
4 CA 105 DCE request to send x
5 CB 106 DTE clear to send H x
6 CC 107 DTE data set ready R x
20 108.1 DCE connect data set x x
20 CD 108.2 DCE data term. ready x x
22 CE 125 DTE ring indicator x x
8 CF 109 DCE data carrier detected x x
23 CI 112 DTE select altern. rate x
12 CI DTE as previous (Bell212) x x
24 DA 113 DCE TX-clock (DTE source) x
15 DB 114 DTE TX-clock (synchr.) x
17 DD 115 DTE RX-clock (synchr.) x
Remark: x means served by the modem.
H means tied to +10 volt (True).
R means tied to pin 8.
Pin 20 (DTR) can be simulated in the 1200 and
1200B type with a dipswitch.
Pin 6 and 8 can be forced to true in the 1200
and 1200B type with a dipswitch.
3.2. The telephone line.
On the telephone lin level some distinction can be made on
the HAYES-2400, between jack type RJ12/RJ13 (multi line
jack) and the RJ11/RJ41S/RJ45S (single line jack). The 1200
only supports the RJ11 (single line), RJ12/RJ13 (multi
line), which can be set by dipswitches. This typically is
different per country. In the USA and some other countries,
the telephone set remaines connected in parallel to the
modem. In other countries like the Netherlands the telephone
set is switched of, as soon as the modem goes off-hook.
3.3. The modulation frequencies and call setup phase tones.
The following information is not exactly the HAYES-modem
information, but a hopefully readable extract from the
CCITT-norms. As I have not the Bell-norms, more or less the
USA norms are deducted from other documents.
The frequencies used with the different baudrates are:
3.3.1. For the F(requency) S(hift) K(eying) methodes.
These can be used as well as Synchrone.
Norm Send Receive Answ. mode
'0' '1' '0' '1' tone
Bell-103(ORG) 1070 1270 2025 2225 1270 300 FD
Bell-103(ANS) 2025 2225 1070 1270 2225 300 FD
Bell-202(main) 2200 1200 2200 1200 2025 1200 HD
Bell-202(back) 487 387 487 387 - 0-150 HD
V21 (ORGinate) 1180 980 1850 1650 980 300 FD
V21 (ANSwer) 1850 1650 1180 980 2100 300 FD
V23-1 (main) 1700 1300 2100 1300 2100 600 HD
V23-2 (main) 2100 1300 1700 1300 2100 1200 HD
V23 (back) 450 390 450 390 - 0-150 HD
Remark: '0'= "start bit" = "space"
'1'= "stop bit" = "mark"
FD = Full Duplex, HD = Half Duplex.
Important is, the modems use filter technics to seperate
the transmit channel and receive channel. Some autoanswering
modems also by filter technics decide in which mode they are
3.3.2. Automatic answering sequence (V25).
If ringing is received on the line, the CE/CT125 circuit
(pin 22) will be raised true. If CD/108 circuit was true,
the modem goes OFF-HOOK. If not the modem waits for a true
signal on CD/108 (pin 20), before it goes OFF-HOOK. The
modem remains after 'off hook', for 1.8-2.5 sec. silent and
then transmits the 2100 Hz. answer tone during 2.6-4.0 sec.
or till 100msec. after a response from the calling station.
At least now 75 msec. silence is maintained. The 2100 Hz is
intended to disable network echo cancellers or echo
suppressors and is reversed in phase every 425-475 msec. Now
the circuit CC/107 (pin 6) is set true to indicate to the
terminal, a connection is ready. The calling modem reacts on
the answer tone also by setting circuit CC/107 (pin 6) true.
A response normally as mentioned is the frequency of a
binary '1'. If the equipment of the telephone company does
not have echo control devices, the 2100 Hz tone may be
replaced by any other tone e.g. directly the binary '1'.
Only after this sequence (or in ommission of it) directly
the autospeed modems will determine the baudrate norm. In
Europe, with its V23-splitbaud rate complexity, there are
Hayes compatibles trying to select at the moment after the
answer sequence to select: V21, V23 (viditel), V22 and
V22bis. This means actually a detection criteria for carrier
frequencies at 980/1180 (V21), 450/390 (V23) and 1200
V22(bis) modulated with 600 baud. At the same time all kind
of frequencies like 2100, 550, 1800 Hz. and busy tone, dial
tones around 425 Hz. has to be ignored.
3.3.3. For the D(iferential) P(hase) S(hift) K(eying)
and the Q(uadrature) A(mplitude) M(odulation) methodes.
These methodes are primarly for synchrone transmission, but
asynchrone is allowed by inserting extra stop bits between
Norm Send Rec. Guard tone Mode Methode
V22 (ORG) 1200 2400 - 600/1200 FD DPSK
V22 (ANS) 2400 1200 1800(550) 600/1200 FD DPSK
V22(bis) (ORG) 1200 2400 - 1200/2400 FD QAM
V22(bis) (ANS) 2400 1200 1800(550) 1200/2400 FD QAM
Bell-212A (ORG) 1200 2400 - 1200 FD DPSK
Bell-212A (ANS) 2400 1200 - 1200 FD DPSK
The guard tone is only send in the high channel (2400 Hz.
carrier, so by the answering modem, but can be disabled per
country. The 550 guard tone is another option. Basically
the Bell-212 and the CCITT-V22 are the same. But in detail
there are differences. Which, I don't know yet for sure, it
may be the scrambled '0' instead '1's (see lateron). But in
the HAYES-2400, there is a command ATBn, with which the
BELL-212 (n=1) or V22 (n=0) is selected. This only for the
1200 baud FD mode. The V22bis is fully compatible with the
V22 norm. The difference between V22 (600/1200 baud) and
V22bis (1200/2400 baud) is V22 works with 2 dibits and
V22bis with quadbits. The way of working of PSK/QAM modems
is to complex to explain here, but it is important to know
that a phase change of the modulated carrier of:
0 degrees is equal to dibit 01
90 degrees is equal to dibit 00
180 degrees is equal to dibit 10
270 degrees is equal to dibit 11
These first two bits in the V22bis quadbit are compatible
with the dibits of V22, to remain compatabilty for fallback
mode. The V22bis has another 4 levels of detection by means
of a quadrature amplitude modulation technic.
3.3.4. Automatic answering mode V22(bis).
At calling time the sequence as described above with the FSK
type modem is valid for the V22(bis). The called modem
reacts instead or after the answer sequence with unscrambled
binary '1's at 1200 bit/sec. and well in the upper channel
(2400 Hz. carrier). This till it detects scrambled '0' or
'1's in the lower channel (1200 Hz. carrier). The calling
modem remains silent till it for 155 msec. detects
unscrambled '1's in the upper channel, after which it
remains silent for 456 msec. and then transmit unscrambled
double dibits 00 and 11, if in V22bis mode, for 100 msec.
followed by scrambled binary '1's or if in V22 mode it
transmits direct scrambled binary '1's (*). Here the
distinction 1200/2400 baud is made by the calling modem. The
called modem reacts with scrambled '1's preceded, if V22bis
with the unscrambled double dibit 00 and 11. At the moment
of detection of the double dibits, the circuit CI/112 (pin
12) is set true (indicating 2400 baud). In both cases the
scrambled '1's are observed for 600 msec. after which the
circuit CF/109 (pin 8) is set true. If V22 (1200) the data
transfer is started under control of CA/104 (pin 3). In the
V22bis mode (2400), first scrambled binary '1's are send
form both sides for 200 msec. on 2400 bit/sec. mode. Noted,
that till now all was transmitted on 1200 bit/sec. After
this 200 msec. also the V22bis mode is ready for data
I know it is confusing, but so it works. To make it more
difficult, the (*) mentioned in the text is true for V22bis
and for V22 alternative A and B only. For V22 alternative C,
for the '1's you have to read '0's. As the V22 norm is very
confusing on some aspects, one remark has to be made. In V22
(not V22bis) 3 alternatives can be selected. Alternative A
and B are compatible with V22bis, but alternative C not. The
difference is the scrambled binary '0's stead '1's of the
calling modem. So the real difference between alternatives
A/B and C is, that alternative C includes the possibility
for mode V, for anisochronenous data upto 300 bit/sec. Which
manufacturer tells me which alternative as mentioned in V22
he serves. Or has this to do with the Bell-212 norm. Who can
tell? Has this to do with the famous ATBn command in the
HAYES-2400 modem? See above.
Be carefully with these V22 and Bell-212A norms. As
explained before only the 2400 baud (V22bis) is compatible.
The 1200 sometimes works, but sometimes not. E.g. I had an
USA RIXTON 212 modem, not corrected for the European market.
Also I had a Dutch designed (DATAD) V22(bis) V23 and V21
modem and an English (PACE) for the same speeds. The RIXTON
works pretty most at the time with both the DATAD and PACE
modem. But sometimes it goes wrong and the Eurpeans connects
at 2400, which is strange, but true. With an original HAYES-
1200 (with no ATBn) command as the HAYES-2400 has, nearly
the same result. The two Europeans hardly are connectable at
1200 baud to each other. This has in my opinion to do with
the way of speed selection. We try to come out of this
3.4. Some advise on real physical level.
If you are ggiing into communications with modems and you
have no Telecomfreak-friend close to you and you want no
nervous breakdown in the near future, have at least a
"breakbox", self made or from the shop. This to follow the
different DTE/DCE levels. If you want to log a HAYES session
to evaluate the connection process or data exchange process,
make from your old computer a "DATASCOPE". (See Appendix A
for some suggestions). An other advise is to standardise
your cable set. As some manufactures make a mash of the V24
or RS232C pins, you have not to follow it. On telephone
line level it is handy to have in your surrounding a scope
or frequency counter.
3.5. Connection of the terminal to the HAYES.
The Hayes modem has a minimum and a maximum baud rate. If
you connect a terminal to the modem, make sure you have the
right pins connected in relation with the dipswitches. Also
if you have selected e.g. 108/2 mode, be sure your terminal
program support them. It is possible to connect only the
pins 2,3 and 7. So in this case the DTR and the DCD are
forced true. In general I don't like this methode. With the
Hayes-1200, RTS and CTS are not used, so only full duplex is
possible. With Hayes-2400 you have to use these signals only
if you use the Half Duplex mode (Synchrone mode). Otherwise
RTS (pin 4) is neglected and CTS (pin 5) is set true.
So if you have connected the terminal properly, at the time
you give an 'A' or 'a', the modem decides what the baudrate
is and set the terminal interface UART according to it.
Hayes is very street forward. This speed is maintained till
after the , which always finishes a command
line. With the next A from a new AT command line, a new
speed can be defined. There is one other possibility. In
auto answer mode or if a call is made, the baudrate can be
else as the speed in the last passed command mode. This on
real modem level, the baudrate detection selects another
speed. The Hayes reacts with the connect code on this last
command mode speed and than switches to the new speed. To
give an example. Suppose the terminalspeed is 2400 baud. A
dial is made towards a 1200 baud only modem. The Hayes will
start the connect phase as described in 3.3.2. but finally
will get a connection on 1200 baud. So he will react towards
the terminal with 2400 baud with 'CONNECT' or '1', switches
back to 1200 baud, which the terminal has to follow,
otherwise it result in a terminal/modem mismatch. Also a
+++ on 2400 baud will not be accepted.
Only 1200 baud, from this moment on. So suppose the
established call at 1200 baud is broken. The Hayes will,
after the carrier disappear, fall back into command mode
still in 1200 baud. The terminal has to give an AT
on 2400 baud if it wants the original 2400 baud connection
3.6. The differences in the Hayes command set.
Very short a comparision between HAYES-1200 and HAYES-2400
modem will be given and only per command a short functional
recoqnition. First however the Hayes command-input line. It
starts with AT or at (no mix of UPPER/lower) and ends with a
cariage return from now on indicated with . The only
exeption is the A/ command, which needs no . During
commandline editing backspace (hex '08') is accepted. One or
more commands can be given after one leading AT. The max.
length of the input string however is 40 char.
Blanks can be inserted for more readability.
Command. What does it. Hayes-1200 Hayes-2400 Return code
AT Attention y y OK
A/ Repeat last comm. y y depends
A Off hook (ANS) y y none (data)
Bn 1200 (V22/Bell) - n=0-1,1 OK
Cn TX off/on n=0-1 - OK
D Dial y y see modifier
En Echo off/on(comm) n=0-1 n=0-1,1 OK
Fn Echo off/on(data) n=0-1 - OK
Hn Hook on/off/spec. n=0-2 n=0-1 none (data)
In prod.code/prom-cc n=0-1 n=0-2 info
Ln Speaker (L/M/H) - n=0-2,1 OK
Mn Speaker off/on n=0-2 n=0-3,1 OK
On Online only O n=0-1 none (data)
P Set pulse dial y y OK
Qn Result code Y/N n=0-1 n=0-1,0 OK
Sr=n Set reg. r to n r=0-16 r=0-27 OK
Sr? Display reg. r r=0-16 r=0-27 contents r
T Set touch dial y y OK
Vn Result code N/W n=0-1 n=0-1,1 OK
Xn Dial process n=0-1 n=0-4,4 OK
Yn Long disconn. - n=0-1,0 OK
Zn Reset only Z n=0-1 OK
&Cn DCD on/carrier - n=0-1,0 OK
&Dn DTR modes - n=0-3,0 OK
&F Load factory set - y OK
&Gn Gaurd tone - n=0-2,0 OK
&Jn RJ-jack sel. - n=0-1,0 OK
&Mn Asynch./Synchr. - n=0-3,0 OK
&Pn Pulse ratio - n=0-1,0 OK
&Rn CTS mode - n=0-1,0 OK
&Sn DSR mode - n=0-1,0 OK
&Tn Test local/remote - n=0-8 OK
&V Display conf/tel - y OK
&Wn Write conf. MOS - n=0-1 OK
&Xn Line clock mode - n=0-2,0 Ok
&Yn Sel. default prof.- n=0-1 OK
&Zn Store teleph. nr. - n=0-3 OK
Remark: n=0-2,1 means, n can be 0,1,2 and 1=default.
If n=0 this may ommitted. (ATV0 equal to ATV).
All numbers are in decimal (max.=255).
Dial What does Hayes-1200 Hayes-2400
P Pulse dial y y
R Reverse to ANSW y y
Sn Dial stored tel. - n=0-3
T Touch dial y y
W Wait 2e dialtone - y
. Pause y y
! Flash - y
@ Wait for silence - y
; Return to comm. y y
Reg. What does it. Hayes-1200 Hayes-2400
S0 Ring to answ.on 0-255 0-255,00
S1 Ring count 0-255,00 0-255,00
S2 Escape code 0-127,43 0-127,43 ASCII
S3 Cariage return 0-127,13 0-127,13 ASCII
S4 Line feed code 0-127,10 0-127,10 ASCII
S5 Back space code 0-127,08 0-127,08 ASCII
S6 Wait for dial tone 0-255,02 0-255,02 Sec.
S7 Wait for carrier 1-30,30 1-30,30 Sec.
S8 Pause time comma 0-255,02 0-255,02 Sec.
S9 Carrier detect time 1-255,06 1-255,06 1/10 Sec.
S10 Lost carrier time 1-255,07 1-255,14 1/10 Sec.
S11 DTMF dialing speed 50-255,70 50-255,95 mSec.
S12 Escape code guard 0-255,50 0-255,50 1/50 Sec.
S13 UART status reg. y y
S14 Option reg. y x'AA'
S15 Flag reg. y y
S16 Modem test 0-2,0 bit settings
S17 res. - res.
S18 Modem test time - 1-255,00 Sec.
S19 Res. - Res.
S20 Res. - Res.
S21 Bit mapped options - 00
S22 Bit mapped options - x'76'
S23 Bit mapped options - 07
S24 Res. - Res.
S25 Detect DTR change - 0-255,05 1/100 Sec.
S26 RTS to CTS delay - 0-255,01 1/100 Sec.
S27 Bit mapped options - x'40'
Remark: 1-255,01 means, range 1 till 255, 01=default.
All numbers are in decimal (max.=255).
x'76' is hexadecimal.
Return codes Hayes-1200 Hayes-2400
0 OK y y
1 CONNECT y y
2 RING y y
3 NO CARRIER y y
4 ERROR y y
5 CONNECT 1200 y y
6 NO DIALTONE - y
7 BUSY - y
8 NO ANSWER - y
9 reserved - -
10 CONNECT 2400 - y
Appendix A. Datascope.
A datascope looks to both the RXD and the TXD line of a
V24/RS232C line. So only follows what happens on the line.
There are very nice commercial packages as FELINE, HP etc.,
but they are expensive and they use mostly a special POD to
connect to the V24 line. Most of them you have to preset on
one speed and than to start the logging.
If you have an old computer with better two speed
programmable UART or a SIO chip and you can program them in
Assembler/basic/pascal or C, you can make your one one.
The next story is a simplified logunit only to log
datastreams preceded with a AT-string. Most of the
application programs works in terminal session as well
filetransport in a half duplex mode. Or better, never the TX
and RX line transports a character. So basically in default
you have to look to the TXD-line, and look at 2400 baud for
a character x'41','06', '78' or '01'. At that moment you
know that probably the speed is 2400, 1200, 600 or 300 baud.
You get on line speeds 600 and 1200 a framing error, because
the stop-bit is not detected. Now depending the detected
speed you have to wait (time-out) till the rest of the
character is passed, then you have to change the speed of
your comm-port, and await for the 'T', If it is a 'T' than
you have the speed, if not wait on 2400 baud for the
posibilities as described above. The basic idee behind this
is really simple. If you listen with 2400 bit/sec to a 300
bit/sec send character, the start bit is detected and will
serve for the startbit and 7 bits char. bits (so 7 zero
bits). The eights char. bit is formed of the LSB bit and
well 1/8 portion of it. The second portion will be the stop
bit. So if on the line really is transmitted a 600 bit/sec
char., the same is true with 1/4 portions. Furthermore you
have to look to both the TXD and RXD line, if on one a char.
is received. If so you put this char. in its own buffer and
in the other one a x'00'. Lateron you can print it out, one
line from buffer RXD, one line from buffer TXD in Hex or
ASCII (or both) outfit.
Go on on the same speed till you didn't receive for 30 sec.
any character on both lines and start again with AT
synchronisation. In fact the HAYES inside micro computer is
doing the same. Don't try to write the buffer to disk at
first instance, because you need a DMA at least, but also 2
buffers. So buffer it in memory only. You can try to write
to disk in the silence just before the new AT string.
E-Mail Fredric L. Rice / The Skeptic Tank