Monthly Archives: February 2018

RS232 to TTL adapters with all signals, including DCD

I have been experimenting with hooking up low-cost ESP8266 WiFi modules to the Radio Shack Color Computer (or anything with an RS-232 port) using cheap RS232-to-TTL adapters. Most of these adapters only support 3-wire RS-232 (transmit, receive and ground). This is fine for most uses of the CoCo’s built-in Serial I/O port (bitbanger) since it is only a 4-pin DIN connector with TX, RX, GND and CD, and most things do not rely on carrier detect.

But, for the Deluxe RS-232 Program Pak, a hardware 6551 UART chip is used and that chip requires to see carrier detect before it will receive any data. A workaround is to simply tie some of the TTL converter pins together to make it always present DCD to the RS-232 Pak:

This works fine if you are just connecting to remote systems, but if you want to run a BBS, those often rely on carrier detect to know if a caller is online. If a caller disconnects without properly logging off, the system may sit there forever (worst case) or until some software timeout is reached and the system resets. During that time, it would be possible for the next person connecting to resume that session.

This was a real and common issue with BBSes back in the 1980s, for this very reason – lack of carrier detection.

Another issue is the lack of hardware flow control. There could be times when the ESP8266 could try to send data faster than the computer could process, and there is no way (other than XON/OFF, which can’t be used for binary transfers) to tell it to pause sending.

I have found RS232-to-TTL adapters that provided 5-wire signals (adding RTS and CTS), which is needed for this hardware flow control. Those are a bit more costly (I found one for $9 on Amazon), and still do not address the carrier detect issue.

Once again, David Chesek comes to the rescue. He located an adapter that supports all the RS-232 signals, including RI (ring indicator). It is available for $11.50 plus shipping from a company in Las Vegas called Pololu (and might even be manufactured there):

Pololu RS-232 to TTL adapter with all signals. (Photo taken from

I took a gamble (pun intended) and ordered a few. I will report back as soon as I receive them and have had a chance to try them out.

Meanwhile, knowing such a thing exists, I did more searching and found a similar one on e-Bay from a seller called MDFLY. They have them for $3.25 plus shipping, and are shipped from California:

eBay seller MDFLY RS-232 to TTL adapter with all signals. (Photo taken from their eBay listing.)

The board layouts are quite different, but the functionality should be similar. I will be comparing both of these (and noting shipping time) when I have them.

With either one of these boards, properly wired to additional pins on a full ESP8266 development module, it should be able to provide hardware flow control and carrier detect. (Sorry, the ESP-01 module only has two I/O pins, so we’d have to pick and choose what to support on that one — like DTR and DCD for BBS use, or CTS/RTS flow control.)

More to come…

CoCo RS-232 Pak to 3-wire (TX, RX and GND) RS-232 device.

The Radio Shack Deluxe RS-232 Operation Manual (Tandy).pdf for the Color Computer is based on a 6551 UART chip.  The Pak provided a DB-25 with the following signals:

  • 1 – Frame Ground (not used)
  • 2 – Transmit Data (TX)
  • 3 – Receive Data (RX)
  • 4 – Request to Send (RTS)
  • 5 – Clear to Send (CTS)
  • 6 – Data Set Ready (DSR)
  • 7 – Signal Ground (GND)
  • 8 – Carrier Detect (DCD)
  • 20 – Data Terminal Ready (DTR)

Built-in serial ports disappeared from modern computers a long time ago, but USB RS-232 adapters are available in case one is ever needed. For our 1980s Color Computer, RS-232 is one of the only available interfaces to the outside world.

The built-in 4-pin DIN connector (marked Serial I/O) is not a real serial port. Instead, it is just a set of pins that can be toggled on and off (to RS-232 voltage levels) through software. By writing software with the proper timing, this port can send out serial data. This technique is called “bit banging” and it was very common in systems of this era. (And, today, if you use an Arduino, the “SoftwareSerial” routines which turn any I/O pin into a serial port are doing the same thing.)

There are many modern things that use serial for communication, but they are doing so at chip-level voltages – called TTL level (transitor-transitor level). An example of this would be the I/O pins of a Raspberry Pi or Arduino. There are also a myriad of small devices that work over a TTL-level serial port, such as USB interfaces, WiFi modules, Bluetooth, and many more.

To interface one of these with an old computer with an RS-232 port, you can use an RS-232 to TTL adapter such as this one from Amazon:

RS232-to-TTL adapter.

Amazon Link

This device has a DB-9 RS-232 port on one side, and pins on the other that represent the common signals of Transmit (TX), Receive (RX), Ground (GND) and voltage. Voltage is usually 5v or 3.3v depending on the device and what it will connect to. (An Arduino UNO has 5v I/O pins. A Raspberry Pi and some other models of Arduino use 3.3v pins.) The adapter has to match. Some are smart, and adjust based on the voltage they are given. Thus, if you are hooking an RS-232 device to an Arduino, you would power this TTL adapter from a 5V pin of the Arduino, and it should operate at 5v. Some adapters claim to adjust, so if you hook them up to a 3.3v pin on an Raspberry Pi, they work at 3.3v. The RS-232 side should be the same (traditional RS-232 voltage levels) in either case.

I have recently been experimenting with devices such as the ESP8266, which is a tiny (and cheap!) module that provides WiFi for about $2, and interfaces with TTL level serial. Using the CoCo’s built-in Serial I/O (bitbanger port) and a cable, I was able to hook the CoCo to one of these RS-232 TTL adapters and then hook that to the ESP8266. It worked great, limited only by the baud rate of the bitbanger! (Most older CoCo 1/2 terminal programs could only go about 1200 baud. The CoCo 3 has at least one terminal program, Twilight Term, that can operate a 9600 through the bitbanger port.)

ESP8266 development board to RS232 converter.

Since the bitbanger port only has TX, RX, CD and GND (and CD is not really used unless software specifically uses it), hooking it up like this worked well. But, when trying to connect to the more robust RS-232 Pak (which can operate at speeds of up to 115200 baud), I ran into some problems.

The 6551 can transmit data just fine, but in order for it to receive, it expects to see a carrier detect signal (DCD). If you just hook up the RS-232 Pak cable to the TTL adapter, using only TX, RX, and GND, that signal will not be active and terminal programs will not read any of the incoming data. You can send, but not receive.

In order to make this work, you have to trick the RS-232 Pak into thinking there is a DCD signal. From exploring various mailing lists, Facebook groups, and web postings, I found several suggestions on how to do this. The overall method looked like this:

RS-232 port modification to make it operate without needing real DCD and other signals.

By tying certain lines together on the end that goes to the RS-232 Pak, the Pak will think there are signals present that really are not there. This makes it work, since it now thinks there is a carrier detect.

The above modification can be done on an RS-232 to TTL adapter with a soldering iron and a bit of wire. A small solder blob can be used to connect pins 7 (RTS) and 8 (RTS), then another blog can connect pins 1 (DCD) and 6 (DSR), then a jumper wire can be ran from that solder blob over to 4 (DTR).

Dave Chesek did a modification on is cable and it looked like this: (And apologizes to Dave if he isn’t proud of his soldering skills. They are much, much nicer than what I can do!)

David Chesek’s modification to the RS232-to-TTL adapter, connecting pins 7+8 (RTS+CTS) with solder, and pins 1+6+4 (DCD+DSR+DTR) with solder and a jumper wire.

Once that is done, you can use a DB25-to-DB9 cable (I ordered one from Amazon) and connect it to one of these RS232-to-TTL adapters (I ordered one from Amazon) using a gender changer (I ordered one from Amazon) or a serial cable that already had the proper ends on them. (The one I used was a Male to Female cable, so I needed the gender changer.)

This modification is enough to trick the RS-232 Pak into allowing receiving of data.

For those that don’t solder, you can also order some DB9-to-terminal block adapters like this:

DB9 adapters from Amazon.

Amazon Link

I picked up a pair for around $8 because I wanted to find out which of the various suggestions would actually work. Through process of elimination, I found that the DCD+DSR+DTR was needed, but RTS+CTS was not. (And, some RS-DOS terminal programs worked with just DCD+DTR, which was one of the suggestions I was given.)

I hooked up short jumper wires like this:

Minimal wiring required to get an RS-232 Pak to talk to a 3-wire RS-232 interface (TX, RX and GND).

For the CoCo’s RS-232 Pak, this works great for various RS-DOS programs I tested (Greg-E-Term, Ultimaterm) and OS-9/NitrOS-9 (Supercomm).

I had read that the RS-232 Pak won’t send without a certain signal being present, but from my experiments this week, this does not seem to be the case. Only the DCD situation must be taken care of.

With this information, you can now get an RS-232 Pak out to an RS232-to-TTL adapter and then hook up various devices. In the case of my ESP8266 experiments, I was powering the TTL adapter off the ESP8266 module. If I were trying to use something stand-alone, like an HC-05 bluetooth module, I would need an additional 5v or 3.3v power source to power the module and the adapter.

Let the games begin!


Help needed with 6551-based RS-232 Pak to 3-wire without DCD


  • 2018-02-05: Thanks to Dave Chesek, this issue has been solved. He took the wiring diagram below and modified his RS232-to-TTL adapter with a  bit of solder. He put a blob connecting pins 7 (RTS) and 8 (CTS), and then soldered together 1 (DCD) and 6 (DSR) then ran a jumper wire from those two over to 4 (DTR). It worked fine. My efforts to do this with jumper wires must not have been making good connection (perhaps one of my DB9 pin holes is not as deep – TX, RX and GND all worked fine with the jumper wires). I will do a bit more investigation to see what the minimum required. Thanks, Dave!
  • 2018-02-06: See the complete writeup.

The 6551 serial chip will not receive unless DCD is active. Modern adapters do not provide DCD. I am trying to find a way to do this so I can hook my WiFi device (which only has TX, RX and GND) to the RS-232 Pak.

I have been trying to jumper wires to fake the DCD signal but nothing has worked. I do not know if my Pak is defective, since I have nothing else to connect it to for testing,

Many sites suggest a wiring example like this:

Has anyone done this? Nothing modern has DCD so surely there is a simple solution figured out long ago.

Add USB for $4

I just wanted to pass along something I learned about last year. There is an inexpensive chip that handles USB host operations, allowing you to plug in devices like keyboards, mice, joysticks, etc. The chip is about $4 in quantities of one, and much cheaper if you order in bulk.

I found a company in the UK that uses this chip on a small circuit board that lets you plug in a USB device, and then get output via serial commands. You can hook this up to an Arduino and read a modern keyboard or mouse, for example. They have various firmware loads you can put on it to handle different protocols.

Just passing it along… I will have more to say on this soon.

WiFi CoCo for $15 (or for any retro computer with an RS-232 port)


  • 2018-02-04: Removed an apparently necessary step.
  • 2018-02-05: Added crude drawing showing how I wired things up.

If you want to get your Tandy / Radio Shack Color Computer (CoCo) on the internet (or any other 80s computer with a serial port), here is a dirt cheap way you can do it.

Cheap WiFi: The Early Years

Just a few years ago, adding WiFi to an Arduino meant buying a $60 add-on. My solution at the time was to get a much cheaper Ethernet and then use a cheap TP-LINK WiFi router hooked to it. I later found a source for a $10 Ethernet shield that made the overall cost even lower.

In 2014, the internet lit up with the discovery of the ESP8266 – a complete “WiFi on a chip” solution for under $5! Initially, all documentation was in Chinese but folks managed to figure out how to use it and, as they say, the rest is history.

Today the ESP8266 family of products is used in all kinds of things. There are now internet-enabled light switches, and front-ends for 3-D printers, and many other devices that get online thanks to this low-cost solution.

And, this includes all these retro computing platforms!

Cheap WiFi: How To

If you want to experiment, you can order an ESP8266 development board from Amazon for $8.79. This contains the low-cost ESP8266 module and then runs out all the various connection to pins, and also has a USB-Serial adapter built in. This USB port allows you to plug it up to a Mac or PC and upload new firmware, or use the device directly through a serial connection.

Here is the module I purchased. You can find many variations, some costing more, and others costing less. I wanted one I could get direct from Amazon using 2-day Prime delivery, but if you don’t mind waiting, you can find a similar part shipped from China for about $4.

An ESP8266 development board, available for under $9 from Amazon. (And much less from China!)

Since my 1980s computers do not have a USB port, I needed a way to hook them up to the old-style RS232 serial port instead. For that, I bought a cheap RS232-to-TTL adapter. Here is the one I purchased for around $7, shipped from Amazon with 2-day Prime shipping. I see there are some for a few bucks less which might work just as well, and if you don’t mind waiting a few weeks to get something shipped from China, I have seen them for about .67 cents!

RS232-to-TTL adapter.

Now all I had to do was connect the two modules together using some jumper wires. I needed four wires to connect Voltage (mine needed 5v), Ground, Transmit and Receive. You can buy a bundle of these wires for just a few dollars.

Once connected, it looked like this:

ESP8266 development board to RS232 converter.

I can power the module using a standard micro USB cable and charger (just like you might already have for an Android phone or Raspberry Pi or some models of Arduinos).

After this, all I needed was a NULL Modem cable to connect that DB9 connector to the Serial I/O port of my Color Computer. In my case, I used a “Driverwire cable” which has a 4-pin DIN connector on one end and a DB9 on the other. I needed to use a NULL Modem adapter to get the signals talking.

ESP8266 ESP-12E devkit wired to DB9-to-TTL adapter and connected to a CoCo Drivewire (null modem) cable.

Cheap WiFi: ZIMODEM Software

The final step I needed to do was to install different firmware on the ESP8266. The firmware that comes on the module does allow you to type certain “AT” commands and connect to WiFi and remote systems, but I wanted something easier and more compatible. I found this ZIMODEM firmware:

This makes the ESP8266 look like an old-style Hayes Smartmodem. Instead of using commands to dial a phone number, the commands will “dial” a remote telnet BBS. i.e., instead of:

ATDT 515-555-1212

…you can dial a telnet connection:


There are new commands added to display all nearby WiFi base stations, and connect to them. There’s even a command to retrieve a file from a web server! You can find full documentation on the ZIMODEM website.

Any terminal program can be used to make these types of connections. You can also configure it to receive incoming connections, and when someone telnets to your IP address, you will see a “RING” (just like the smartmodems did) and can have the system answer. Yep, it would be very easy to put an old-school BBS on the internet with this!

I was able to use this to connect an old Radio Shack CoCo to a remote BBS using the Greg-E-Term terminal program over the bitbanger port at 1200 baud (oooh, speedy).

Building and Installing ZIMODEM

I got these steps from the Amazon page for the ESP8266 part I purchased. I have edited them with additional notes and links.

Instruction & Steps of How to use:

  1. Download the latest version of the Arduino IDE. Today, there are versions of the IDE that run in a web browser (I have not tried these), as well as ones available for Mac, Windows and Linux. I used one for Windows 10, downloaded from the Microsoft Store.
  2. Install the IDE. (Well, duh…)
  3. Configure the Arduino IDE with support for the ESP8266:
    1. Go to File->Preferences and copy the URL below to get the ESP board manager extensions:
    2.  Go to Tools > Board > Board Manager> Type “esp8266” and download the Community esp8266 and install.
    3. Set up your chip as:
      • Tools -> Board -> NodeMCU 1.0 (ESP-12E Module)
      • Tools -> Flash Size -> 4M (3M SPIFFS)
      • Tools -> CPU Frequency -> 80 Mhz
      • Tools -> Upload Speed -> 921600
      • Tools–>Port–> (whatever it is)
  4. Download and run the ESP8266 flasher program from Github:Win 32-bit:
  5. To test that things are working, in Arduino IDE, look for the old fashioned Blink program (File->Examples->ESP8266->Blink). Load, compile and upload. If it worked, the module will have a blinking LED, indicating it is now running software you build using the Arduino IDE.
  6. Now all you have to do is download the ZIMODEM software, then open the main “zimodem.ino” file in the IDE (the other files will open in different tabs, automatically), and build and load it to the ESP8266.

UPDATE: I did not need step 4 when I recreated these steps on my Mac, so maybe they are not even needed on the PC side these days.

These steps worked for me, but I want to go back through them (as well as finding Mac instructions and Linux if someone can assist me with that) and add photos and more details.

FTP, IRC, TELNET and more! Oh my!

ZIMODEM was created for Commodore computers, and has some special features in it for translating normal ASCII to Commodore’s PETASCII. It also comes with steps on how to use it with a Commodore from BASIC (with some assembly language routines used for high-speed reading and writing to the modem – sound familiar?). They have source code for various internet utilities such as:

  • WGET (get a file from a website)
  • FTP
  • IRC (chat)
  • TELNETD (for connecting to the Commodore remotely and using BASIC over the Internet)
  • WEATHER (a two player network game from the Commodore PET days)
  • …and others.

With DriveWire on the CoCo, some of this exists but only for OS-9. It is my hope that we can easily port these BASIC programs (and even replicate the assembly language routines) over to the CoCo and do the same thing.

More to come…