Build your own 9600 Baud C64 WiFi Modem For $10

To start, I’d like to say a huge thanks to Eightbitswide, xxValiumxx, and Paul Rickards for their extremely helpful contributions to this cause!

The esp8266 WiFi Modem design has been really popular with C64 enthusiasts. I’ve been able to get my hands on one, and hack around with some of the available firmware to get 9600 baud working flawlessly. Maybe I should call this unit the “StrikeWiFi”? Anyway, Here’s how to build it:

Parts needed:

  • NodeMCU Esp8266 IoT board (though any board with GPIO breakouts including 4 and 5 should work). Here’s a link to one.
  • C64 Userport Plug

Skills/Tools Needed: Wire and soldering iron. A project board wouldn’t hurt, but not necessary.

Download and install the latest drivers for the NodeMCU Esp8266:

Download the firmware and Windows flasher tool:

To flash with windows, open the flasher tool, use the device manager to find your com port, add that to the com port box, and then add the juno12.bin file from the rar archive to the bin selector. Hold the flash button on the esp8266mod while simultaneously hitting the download button in the program. I keep holding the flash button down during the whole write process, though I don’t know if that’s necessary.

If you’re not using Windows, or have some other Arduino style flashing tool, you can use the .ino file I’ve included in the modded firmware .rar file.

Now that the esp8266 has been flashed, let’s wire this up:

Note: You can use the C64’s 5volt power or external power from the esp8266 usb plug. Either works, though there are theories that the esp8266’s current draw might tax the C64’s 100ma 5v supply. I haven’t noticed any problems with this, but do what you feel is best.

Make the following connections using the following pinouts as a reference.

ESP8266Mod Pinout

C64 User Port Pinout

Esp8266 GND -> C64 User Port Pin N (Gnd)

Esp8266 TxD (GPIO1/TXD0) -> C64 User Port B and C (RxD. Yes, Short B and C together)

Esp8266 RxD (GPIO3/RXD0) -> C64 User Port M (TxD)

Esp8266 GPIO4 -> C64 User Port K (CTS)

Esp8266 GPIO5 -> C64 User Port D (RTS)

Esp8266 GPIO2 (d4) -> User Port H (DCD)


Add a wire from M to 5 on user port plug
Add a wire from B,C to 7 on user port plug
Add a wire from L to 6 on the user port plug

Optional power from C64: Connect C64 pin 2 (+5v) to Esp8266 Vin

First Boot! Follow these steps in order:

  • Load CCGMS 2017, select User Port, and select 300 baud
  • Go back to terminal mode
  • Power on the device if using external power and hit enter
  • A menu should show up from the modem letting you know it’s alive!
  • Hit F8 to go to Ascii mode (Anscii mode) and enter your ssid and password with the following terminal commands: at$ssid=ssid and at$pass=password
  • F8 to go back to the Graphics terminal and type atc1 to connect. This may take a few attempts to connect.
  • Use the commands at&p0 and at&k1 . Without doing these 9600 baud will lock up your c64
  • Change the baud rate by using the command at$sb=9600
  • Go back to the Terminal F7 Menu and select Up9600 Baud / 9600 Baud
  • Go back to the terminal, and you should be able to see at and ok reponses.
  • Use at&w to write these settings to the esp8266.
  • All done. Now your settings should be set every time you boot CCGMS 2017!

If you would like to manufacture your own Strikelink WiFi boards, use the gerber files here to order for Elecrow or your favorite supplier. If you sell these, I just ask that you keep the prices reasonable. It would be great to see a number of worldwide retro stores offering these.


46 thoughts on “Build your own 9600 Baud C64 WiFi Modem For $10

  1. Pingback: Commodore 64 Wifi Modem | /dev/blog

  2. Cool project! I see you’re not using level shifters for 5v and 3.3v sides. There was a lot of discussion on this last year if this would damage the ESP but it seems like verdict is it will work. I personally use level shifters to make sure I’m matching voltages.

    I’ve successfully powered my ESP01 from the C64 5v user port with no issues (but then again I am using a 1764 power supply).

    For those interested in building the virtual modem firmware from source, the original code lives at


    • These accept voltages from 3.3-5v, so no worries. These nodemcu esp8266s have regulators built in and can actually accept 9v!! So at 5v we’re pretty safe. Thank you again Paul for your work on the firmware.

      • Firstly, I’m not Paul 🙂 Secondly, the instructions I’ve listed show how to hook up the rts/cts lines and which type of ESP8266 module to use.

  3. Pingback: Commodore 64 - Un modem Wifi pour 10€ - Amiga France

  4. Thank you for the resources! I built the modem using a WemosD1 mini pro (it provides an external antenna connector, if needed) and the SparkFun level shifters and it’s working great. Also put it into a small box adding a reset switch for the ESP and another one that shorts pins 1 and 3 for the C64 reset.
    Powering the ESP from 5V user port is not enough in my case (it’s more like 4.7V than 5..) so I used the 5V user port pin only as the high voltage reference for level shifters (ground is common).
    My only concern is that the ESP does’t power on with external power until the C64 is powered too, is it normal?
    Is it safe to start the C64 and then connecting power supply to the esp?

    Bonus question: why nobody developed a commodore Telegram client? how cool would it be?


    • Hi Marco, I’m not sure if it’s normal for the external power not to power the esp8266 without the c64 on. That doesn’t sound normal to me. Are you sure pin 2 of the user port is not connected in some way? I would connect external power to the esp8266 first in most cases, and power the c64 last. I’m not sure what a telegram client is, so i can’t answer that. 😦

      • I’m using pin 2 only as voltage reference for the “high” side of the level shifter (esp8266 3.3V pin on the “low” side).
        If I connect the modem to an external power supply I have to switch on the C64 and to reset the esp before getting its led turned on..
        Does the led indicate power or serial communication?

        Thank you again!

      • The LED indicates power to the esp8266 and no connection to a host. So, it’s basically saying “READY” when it’s blue. It turns off when connected to a BBS. I havent used a level shifter in my design so i cant say how it should behave. Sorry.

      • I think I found the issue, I had to change the led pin definition in the code since it was supposed to be pin 12. In my case (wemos) the bulit-in is on pin 2 instead.
        For nodeMCU it should be pin 16.
        Now it blinks while connecting and works correctly.
        Did you modify your code too?
        Anyways it seems to be dead until I power on the C64 and reset the modem..

  5. Pingback: The Modular WifiModem64 |

  6. Pingback: Fixing WifiModem64 Version 1.0 |

  7. I’ve got a few esp8266’s in the mail, but they’re the 8-pin ones, which only have GPIO’s 0 through 4. Is the GPIO5 really necessary, and if it is, is there an alternate version of the firmware that uses GPIO2 or 0?

  8. Hi, I am trying to configure the software CCGMS 2017 Final to work at 9600, but this wifi modem seems unable to go more than 300. Even If i set 2400 and like modem userport 300-2400, it doesn’t work. the software not stuck but the modem is. I tryed, at the point you tell to switch at 9600, to select UP9600 and 9600 as speed, but no luck.
    Please can you help me?

    • You need to set the modem to the correct speed, and THEN the software. They need to work together, and one does not influence the other. So, if you’re using my modem, use at$sb=9600 in terminal mode, and then switch to 9600 in the F7 menu in ccgms. When using 9600 baud, make sure to set in terminal mode at&k1 and at&p0, then at&w to write your settings to the modem so it will stay at 9600 baud. Check the modem documentation i posted for more info.

      • Hi, thanks for the answer. Yes I done exactly in that way. Now I am able to work at 2400 but always using user port as modem. If I set at&p0 and at&k1 it is ok, no errors. When I set at$sb=9600 I see the message that tell me that the serial speed will change in 5 seconds, so I go in setting page F7 and select up9600 and 9600 as speed. When I go back to the terminal, the cursor seems frozen even if I press enter, afer some seconds some sqare with diagonal strips appear and that’s it. But the software works. So I have to press the reset on the wifi module and go back to 2400 baud and user port modem. I tryed to set as modem up9600 but 2400 baud and at&p0 and at&k1, but after I set as modem up9600, whan I go back in termina mode, the software crash. I don’t know if ot can hel to find the issue but I had to use the new version of esp8266_flasher.exe because the one that come into your file gave me an error at the end. The new one worked fine.
        I am using a Breadboard to create the circuits because to print the board I was asked 140 by a uk company or 35 by a cina one but I have to wait a lot, so I want to check if all work and eventually buy the china service.
        Thank you so much and Happy Easter, whatever it means to you.

      • Hi Admin, great the project
        I built everything as it is and it works only until 2400, I have the same problem as Mario Izzo, I could give some suggestion. Thank you.

      • Make sure you set at&k1 and at&p0, then at$sb=9600, then wait for it to say switching to 9600 baud in 5 seconds, then switch over in ccgms.

  9. Hi!

    How hard would it be to modify the firmware so we can add three LEDs to this design, for “on the hook”, send and receive status? I think these are important and most old modems had them.

    Finally, any chance to wire up a piezo to be able to hear the handshaking sound? That’d make it so much more real !

    Unfortunately i am coding illiterate and cant do this on my own ☹️

    Thanks for this, I teally appreciate your instructions and my build of it is working great!

    • There’s one small change you can make in the firmware to change the gpio pin that the led is connected to. At this time I forget what it is. I was unaware of it when i first did the firmware mods, so that’s why ii just left it was it was. Maybe someone else can chime in with their experience with that. When you refer to most old modems, you definitely are not talking about old Commodore modems, which didn’t have them at all 🙂 So it never mattered much to me.

      No piezo option, as there’s no audio taking place. no modulation/demodulation of audio takes place in the emulated internet of things world.

      Glad your build is working for you!!

  10. Nodemcu ESP-12F – $3.54
    2×12 Pin 24 Pin Card Edge Connector – $1.49
    Prototype PCB- $0.20

    Nostalgia of seeing my original C64 get back online – Priceless
    Thanks for the instructions.

  11. Pingback: DIY project – StrikeWiFi modem for C64 – iamretro

  12. I just built a modem using a WEMOS D1 mini and it did not work like the NodeMCU does. The reason is because of the difference in the placement of a 470-ohm resistor differs between the two designs. I speculate it was a mistake made on the WEMOS because where they moved it to it is not even necessary; but I digress.

    Anyway, the NodeMCU places a 470-ohm resistor in the line between the TXD pin of the USB chip and the RXD0 pin of the ESP8266. And since the external pin of the NodeMCU is directly connected to the EPS8266, this allows an external driver (the C64) to force the serial signal to the desired level even though the output of the USB chip is also trying to drive it as well. The fight is won by the C64 due to the resistor giving it the advantage.

    But the WEMOS for some reason instead uses the 470-ohm resistor in the serial line running from the TXD0 pin of the ESP266 to the RXD pin of the USB chip. Without the benefit of the 470-ohm resistor in the preferred line, the C64 is having to directly fight the output of the USB chip… and with no advantage, I’m afraid it loses.

    But there is a solution that makes fighting totally unnecessary! The ESP8266 allows you to swap UART pins to another pair with a simple command. I used the alternative set of pins for the serial port on the ESP8266.

    Software-wise, it’s an easy fix. In the .ino file, each time you see:
    … add the following line after it:
    Serial.swap(); // Swap to GPIO13/15
    Make sure to find all three occurrences.

    Hardware-wise it’s also pretty easy:
    Esp8266 TxD (GPIO15) -> C64 User Port B and C (but through a switch*)
    Esp8266 RxD (GPIO13) -> C64 User Port M

    *Note: The switch is necessary on GPIO15 because it must be left floating when you power on or reset the ESP8266. Otherwise, it doesn’t boot properly. A normally-closed momentary switch is nice if you have one available, but a toggle or slide switch works perfectly well too.

    I just spent half an hour on the Afterlife BBS at 9600 baud using the above mods, so I can report that the WEMOS D1 mini works as a suitable replacement for the NodeMCU with the above changes.

    • I dont know how the rs232 works on the pet. You’d need to make sure you’re using the correct pinout and possibly a different firmware. Check with bo zimmerman. He may know the answer.

  13. Ah, thankyou for this, I have no way to etch my own boards so made one with a D1 mini and a bit of veroboard.

    Interestingly, on the D1 mini, all the required pins are along one side of the module so you can assemble it this way with no visible wires!

    Works nicely on my C128D in both 64 and 128 mode (though for some reason I seem to have difficulties with floppy access in 128 mode, though as I use the SD2IEC for everything it doesn’t really matter)

    • In 128 mode, you will have disk drive access issues on the 1571 because of the 3 lines needed for 9600 baud. Remove those and you will be able to use your 1571 as usual. Glad it worked for you with the D1 mini!

  14. Pingback: APPLE-1 UART & Wi-Fi MODEM – SYS64738

  15. Hello is it possible to remap the pins. The esp8266 i don’t has smaller pins on it. I got enough pins but was wondering.

    The pins you have are

    #define SWITCH_PIN 0 // GPIO0 (programmind mode pin)
    #define LED_PIN 12 // Status LED
    #define DCD_PIN 2 // DCD Carrier Status
    #define RTS_PIN 4 // RTS Request to Send, connect to host’s CTS pin
    #define CTS_PIN 5 // CTS Clear to Send, connect to host’s RTS pin

    I don’t have D12 for the led status. And the rest of the pins are looks like GPIO0 for the D3, GPIO12 that is D6, GPIO2 that is D4, GPIO4 that is D2, GPIO5 that is D1. Or I’m wrong and the pins are just Digital pins?


  16. Pingback: How to build a commodore 64 WiFi modem and how to connect to BBS (Bulletin Board System) – Commodore projects and retro games

  17. I’ve been checking some schematics and probing my NodeMCU 0.9 and I’d say that it’s PROBABLY INADVISABLE at least to power that one from the user port’s +5V. C64 specs and guides say that the port can handle a current draw of 100mA max, while the NodeMCU 0.9 seems to pull ~135mA when powered from 5V via it’s Vin pin. I’ve found a spec table of the NodeMCU that says it may draw 170mA even, but that might just be from the 3.3V regulator instead of Vin, not sure. Both are well above the specified maximum though.

    I’ll be trying to make a simple rectifier for the 9VAC though, maybe that one provides enough power for the NodeMCU. I’ll post an update once I figure out if it works at all, accompanied with a schematic if it does!

    • Well, you do what you feel is best. I’ve (at least I feel I have) stated that you can use external power if you don’t feel comfortable with using the 5v supply off the C64 to power a wifi module. That said, the current draw has seemed much lower than advertised, and I’ve been running mine for 3 years off the user port 5v supply with zero issues.

  18. I’m curious if this little unit would work on a vic-20? Or has this already been asked and confirmed to work/not work.
    And would the same principle work on other 8bit computers? (Atari, ti-99, etc)

    • The principle would work as the firmware originally done by paul rickards has been used with these wifi modules and has been run on many different types of 8 bit computers. However, the connections to the actual machine itself for tx,rd,cts,rts, and dcd are most likely different.

  19. I also make this modem using a CH340 clone of ESP8266.
    You must use a different flasher program from :
    and then everytjing else is the same. The speed updated to 9600 and the power comes from the user port. I also add the reset 1-3 pin button and made the board vertical, saving space and for future option of connecting an LCD screen in top of the board. I was too impatient to wait for a ready board and I used a perforated board and I made the connections using cables. I didnt use the DCD connection to GPIO2 and everything works ok.

    The experience in the BBS is amazing!

    Thank you very much for this.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s