The Commodore Modem/1200 (Model 1670)

The Commodore 1670, also known as the “Modem/1200”, is Commodore’s first Hayes-compatible modem: It connects directly to the phone line and supports pulse and tone dialing for 1200 and 300 baud duplex connections. There were two revisions, the original 1670 and the “new” 1670, a.k.a. CR-1670. (The unit in this article is the later revision.)

Historical Context

Year Name Model Description
1982 VICMODEM 1600 connected to phone’s handset connector; manual dialing through phone; Motorola MC14412
1982 AUTOMODEM 1650 connected to phone line, pulse dialing in software; Motorola MC14412
1985 MODEM/300 1660 added tone dialing support by feeding SID output into modem; Texas Instruments TMS99532A
1987 MODEM/1200 1670 Hayes command set; pulse and tone dialing in hardware; 300/1200 baud support; U.S. Robotics chipset

Photos

On the front, there is the user port connector.

On the back, there are

  • two phone line connectors. “LINE” is connected to the telephone network, and an existing telephone can be connected to the “PHONE” line.
  • four DIP switches (default to down):
DIP Description
1 Auto Answer Enable down: auto-answer on second ring disabled
2 Carrier Detect Enable down: carrier detect on pin H-K of edge connector (needed for Plus/4)
3 Speed Indicate Enable down: speed indicate on pin J of edge connector
4 Data Terminal Ready down: DTR always on (instead of computer controlled)

The label on the bottom says:

C= COMMODORE
MODEL NO. 1670
SERIAL NO. CA1111714
COMPLIES WITH PART 68, FCC RULES; FC

REGISTRATION NUMBER BR98YV-19442-MDE

RINGER EQUIVALENT 0.4A 0.6B; JACK (USOC) RJ11
CERTIFIED TO COMPLY WITH CLASS B LIMITS,

PART 15, SUBPART J OF FCC RULES. SEE

INSTRUCTIONS IF INTERFERENCE TO RADIO

RECEPTION IS SUSPECTED.
FCC ID BR98YV1670

MADE IN USA 310476-03

The board is marked “COMMODORE CR-1670 MODEM” and “A/W 311956 REV 4”.

The 1670 is based on a U.S. Robotics (“USR”) chipset:

  • U2: © USR'85 U2J2 / OKI C49-387 / JAPAN 7X2033: This is an OKI MSM80C49-387RS, a 80C49 microcontroller with 2KB of mask ROM and 128 bytes of RAM. “387” indicates which ROM image it contains.
  • U3: © USR'85 U3J2 / OKI C49-388 / JAPAN 7Y2013: This is an OKI MSM80C49-388RS, another 80C49 microcontroller, with a different ROM image (“388”).
  • U4: © USR86 / USR101 16-249 / S8749 / 35561: This socketed IC is probably the ROM that holds the bulk of the modem’s firmware.

There is a speaker glued to the top shell that allows monitoring the audio data on the line.

The modem comes with a phone cable.

Box


Manual

More Box Contents

Disk


The Hayes/AT Interface

  • ATI/ATI0 (product code) prints

      121
    
      OK
    
  • ATI1 (ROM checksum) prints

      1003
    
      OK
    
  • The manual defines registers (ATSn=a, ATSn?) 0-8, 10-12 and 16. Except for 16 (self test), they are identical to other U.S. Robotics modems – as late as the 1997 Sportster Flash x2!

  • Register 9 is undocumented. Later U.S. Robotics manuals document it as:

    Sets the required duration, in tenths of a second, of the remote modem’s carrier signal before recognition by your modem. (default: 6)

    On the 1670, register 9 reads back as 6, so it may as well be the same feature.

  • The registers just seem to map to the 128 bytes of RAM of one of the 80C49 microcontrollers, they wrap around at 128, e.g. 130 is the same as 2. Here is a complete dump after power-on; much of the data may be random, but note the current AT command (S19?) starting at register 0x11 (17):

      00000000  00 00 2b 0d 0a 08 02 1e |..+.....|  
      00000008  02 06 07 46 32 00 02 00 |...F2...|  
      00000010  00 53 31 39 3f ff ff 00 |.S19?...|  
      00000018  12 01 00 00 00 00 02 04 |........|  
      00000020  20 00 00 04 00 00 20 a4 | ..... .|  
      00000028  00 80 00 00 00 00 50 01 |......P.|  
      00000030  00 00 00 00 00 00 04 00 |........|  
      00000038  20 80 00 00 02 00 00 00 | .......|  
      00000040  98 02 00 00 00 40 02 80 |.....@..|  
      00000048  05 00 10 00 00 7f 47 81 |......G.|  
      00000050  00 00 0a 00 86 10 02 63 |.......c|  
      00000058  d4 23 30 24 bd 63 6e 63 |.#0$.cnc|  
      00000060  00 08 00 00 00 00 04 00 |........|  
      00000068  6b 00 00 00 e5 66 00 08 |k....f..|  
      00000070  80 60 00 65 01 3b 00 07 |.`.e.;..|  
      00000078  01 80 65 00 00 0a 01 00 |..e.....|
    
  • Like all Bell 212A-compatible modems, when on a 1200 baud call, the data rate between the modem and the C64 is actually 1219 bits/sec. The manual states that it is necessary to specify this manual bitrate when using the KERNAL’s software RS232 implementation:

    OPEN2,2,2,CHR$(0)+CHR$(0)+CHR$(61)+CHR$(1)

    Modern versions of CCGMS won’t work with the 1670 for this reason.

Open Questions

  • How to dump the ROM chip? I had no success reading it as a 2764..27512.
  • How to dump the ROM of the 80C49 microcontrollers?

2 thoughts on “The Commodore Modem/1200 (Model 1670)”

  1. I might misremember, but I think that for the microcontroller to execute code from an external ROM of the regular 27xx type or similar you would need at least a chip that latches parts of the address bus due to multiplexing being used.

    To read the external rom I would assume that you would either want to use custom software for some universal programmer, use custom software for any device with loads of GPIO pins, and emulate how the microcontroller accesses an external ROM.

    P.S. IIRC The microcontroller can also have external ram. Not unthinkable that the external chip both contains rom and ram if more ram might had been needed. Not that likely, but still.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.