

 Many modems, that are available for the Commodore 64 and 128, can be
classified as "dumb" modems. Unlike the Hayes standard "smart" modems, the
features of a dumb modem are almost exclusively software controlled.

 The major example of a software controlled function, is auto-dialing.
Dialing is by no means automatic. It is a semi-complicated
toggling of the modem on and offline. Despite this sounding rather
undependable, it is in fact the method that electronic phones use, when
they pulse dial.

 The following is intended as a guide for terminal programmers who wish
to write their own pulse dialing routines. The first part outlines the
dialing process. The second describes how the following process can
can be applied to the popular modems.

 The dialing process consists of the following steps:

 1: Put the modem online. A delay is now necessary, to give the telephone
    exchange sufficient time to supply a dial tone. 1.5 to 2 seconds is
    usually enough, but this might be different for your particular
    exchange.

 2: Form a PULSE COUNTER using next digit of the phone number. Digits 1-9
    are converted to the representative value 1-9 in the counter. Zero
    are represented by the representative value 1-9 in the counter. Zero
    is special. As zero doesn't convey information, the digit zero
    is converted into 10 pulses (counter = 10).

 3: The pulse loop commences. The toggling of the modem on/offline is
    timed as follows:

      a) Put modem offline for 60 milliseconds. Modem back online.
      b) Delay for 40 milliseconds.
      c) Decrement pulse counter. If pulse counter is not zero go
         back to step a).

 4: An inter-digit delay for 700 milliseconds. If all digits of
    phone number have not been dialed, go back to step 2.

 5: Wait for carrier.

 The above delays can be considered the maximum needed for dependable
dialing. I have found that 40/30/300 to be as dependable. Your range will
vary with your exchange's equipment.

 An example delay routine in BASIC:

10 t=value: rem value is milleseconds/10 eg 700 -> value = 70
20 t=t-1: if t<>0 then 10

 I've written an ML version, but, if your doing it in ML, then that's a
nice exercise (grin).


PART 2:
-------

 It seems like every modem manufacturer takes great pride in making
their modem operate differently from their competitor's. Fortunately,
through the fog, there is light. The dialing mode of nearly all 64/128
dumb modems can be classified into two categories:

 1) 1650 compatible. eg Pocket modem, 1064, 64 Modem

 2) 1660 compatible. eg Mitey Mo, HES-II


 The computer communicates with the modem via the user port, which is
hooked to the NMI generating CIA chip. The location that concerns
the programmer, is dec 56577 ($DD01) which is Data Port B of this CIA.

 The Data Direction Register at location 56579 ($DD03) controls the
direction (in or out of the computer) of the lines represented in 56577.

POKE56579,38   This is a universal POKE. In addition to the hook line, this
               sets as outputs the lines Request to Send, and
               Data Terminal Ready. These are used by modems for
               various purposes, but the POKE is common. The other 5
               lines are inputs.


 Bit 5 of 56577, and its corresponding line, are used by the
Commodore compatible dumb modems, for controlling the hook. By toggling
this bit, the modem can be put on and offline, or, if you prefer,
off and on hook.


 The on/offline POKEs in BASIC are:

 Modem             Online                       Offline

1650 compatible    POKE56577,PEEK(56577)OR32    POKE56577,PEEK(56577)AND223
1660 compatible    POKE56577,PEEK(56577)AND223  POKE56577,PEEK(56577)OR32

 As you can see, the logic for the 1650 and 1660 are exactly opposite. The
reason the change was made (the 1660 being a later design), was probably
because the 64 defaults to bit 5 on, and thus a 1650 defaults online,
even when not in use.


 This should give you information to get started. Please feel free to
leave me any questions you have.

GOOD LUCK!

Sysop Gary Farmaner.  Compuserve
