Category Archives: Zimodem

CoCoWiFi fork of ZiModem updated to current 3.5 build.


  • 2019-05-03: I’ve had a report of my build not allowing you to type. I have seen this before, and am investigating this. Anyone else having issues? Also, I missed something in my merge which may have affected over-the-air updates (AT&U). I am pushing out a new build. Also, added a screen shot showing 3.5. Also, note about no ESP32 build.
  • 2019-05-04: I started over with Bo’s unmodified source code, then did my changes to zimodem.ino and zcommand.ino. I am still seeing the issue where, via USB serial connection, I can’t type of my TTL-to-RS232 adapter is hooked up. Without it, it works fine. I need to do some testing via the CoCo with it’s bitbanger and RS-232 Pac ports to see what behavior I get. In the meantime, I appreciate your feedback.

Yesterday I updated my fork of Bo Zimmerman’s ZiModem. My custom fork is 100% his code, with only some configurations changed to make it default to standard RS-232 signals instead of inverted like the Commodore uses. (Basically, it’s what his “Guru modem” firmware defaults to, and the over-the-air update changed to point to builds on my service. Guru modem only builds for ESP32, so eventually I just need to figure out how to modify the project so it builds Guru modem for ESP8266, I think.)

NOTE: I only built for the NodeMCU-12E ESP8266 module and the generic ESP8266 (whatever that is) module. I did not have ESP32 libraries installed so there is no build for that currently.

If you want to pull the source code and build it directly through the Arduino IDE, you can find my fork here:

The binaries I built are located here:

I also wrote up some instructions for updating that firmware from a PC, Mac or Linux machine without having to build it with the Arduino IDE. (I had to use these steps myself, since I couldn’t remember how it worked.)

NOTE: If you have the ESP8266 wired up to a TTL-to-RS232 adapter, you may find that firmware updates will not work. On my device (using the full-signal TTL adapter and a NodeMCU ESP8266), I had to unplug the 3.3V power wire that goes from ESP8266 pin to the TTL-to-RS232 board. That was enough to make firmware updates work. I’m still not sure why having the TTL adapter hooked up affects loading firmware over USB, but apparently it does.

A final option is to use the ZiModem built-in over-the-air update capability, which we haven’t gotten to test yet since this is the first time I’ve updated firmware for the CoCoWiFi fork. That is done through the command:


That should grab the latest build on my server. I believe it reads a .txt file from my server to get the version number and builds the filename out of that, then downloads that filename. You can also specify the version manually. Currently, there is a 3.4 build and a 3.5 build available on my site.


Please let me know if this works for you. You should see the startup banner (1200 baud) show 3.5:

ZiModem (CoCoWiFi config) 3.5

Original instructions on this WiFi modem for $10 can be found here:

Good luck!

Building Zimodem for ESP-32 with USB console support

If you are using a NodeMCU-32S module like the one I ordered from Amazon:

HiLetgo ESP-WROOM-32 ESP32 ESP-32S Development Board 2.4GHz Dual-Mode WiFi + Bluetooth Dual Cores Microcontroller Processor Integrated with Antenna RF AMP Filter AP STA for Arduino IDE…/B…/ref=cm_sw_r_cp_tai_X5iFAbW6CD3ZJ

…you may want todo a few tweaks to the ZIMODEM. ZIMODEM is setup to build for Tools->Board->NodeMCU-32S.

There are two major differences in building Zimodem for the ESP8266 and the ESP-32:

  1. The ESP-32 ZIMODEM has more functionality. There are multiple serial ports on the module, and more I/O pins. By default, the ESP-32 build will have a separate debug port (the USB console) from the communication (the TX/RX pins it uses). If you want to use the USB terminal for testing, rather than debug output, you can make two quick hacks:
    1. In zmodem.ino at around line 43, disable the debugPrintf as follows:

      //#define debugPrintf Serial.printf
      #define debugPrintf doNothing

      That will make it use the ESP32 code, and disable debug output.

    2. In pet2asc.h, comment out the Hardware Serial port initialization and make it use use the standard Serial port:

      //static HardwareSerial HWSerial(2);
      #define HWSerial Serial

      That will make the HWSerial port be the same one used by the USB console.

There is probably a better way, but this was the first time I got it going.

After that, the build you make will be controllable via USB port or the RS-232 port.