So far we have …
- Used the User Port to blink an LED
- Got digital inputs from the user port
- Read analog signals from the control port
- Integrated our C64 with Arduino
Now let’s get our Commodore 64 onto the internet!
Why connect a Commodore 64 to the internet?

You are obviously not going to get a fast, modern web browsing experience using an 8-bit computer from the 1980s, so why connect your Commodore 64 to the internet?
While we joke about the Vic-20 featured in John Wick, I highly doubt many people would see these computers as their go-to terminals today.
As a guess, I would say the most popular uses of internet-connected C64 computers are bulletin boards, file transfer, and network games.
Bulletin Boards
Bulletin Boards, or BBS, were the social media services for a long time. Even if you didn’t actually use them, you might have heard of AOL, CompuServe, Prodigy, The Well, and so on.
These services were where you got and sent your email, had discussions, made friends, and shared files.
Back then you would use a modem connected to a phone line, today you are more likely to use the internet to “dial” one of these services.
The program I like to use for this is CCGMS.
Try Particles at particlesbbs.dyndns.org:6400
and Centronian, a Canadian BBS, at centronian.servebeer.com:6400

File transfer
If downloading files is what you are into, there are a bunch of options. BBS, as mentioned above, FTP servers, and you don’t even have to use an intermediary service, you could copy the files directly from your computer.
All you need is for both sides of the transfer to speak the same protocol. That will be FTP, Kermit, X/Y/Z-MODEM, or whatever. Fortunately CCGMS, the same program I suggest for BBS connections, can handle file transfers no problem.
Windows users can get a handy utility called Wibridge that makes the whole thing a bit more usable, allowing you to navigate to the file you need and select it for downloading.
Heck, you could even type in a BASIC program and get downloading using XMODEM if you really want to go DIY.
Network Play Games
This is an area I have little experience in on the C64, but there seems to be a whole bunch of games you can play on the system over the internet.
One game that regular readers will be unsurprised that I find inspiring is this Rogue-Like by Leif Bloomquist.
Building a C64 WiFi Modem Using ESP8266
While you can of course buy a C64 WiFi modem, if you would prefer to save some $$$ in return for putting in some effort, it is relatively straightforward.
The easiest way is to buy an Arduino-supported ESP8266 board and connect up the user port pins similarly to when we used a regular Arduino.

As well as the Ground pins we use B+C together as RX and connect those to the TX of the ESP8266, and we use M as TX connected to the RX of the ESP8266. This is as simple as we can make it, then you can get much fancier from there!
Next you will need some C64 WiFi firmware. There are two main sources of Arduino-compatible firmware. First is ZModem by Bo Zimmerman which is the gold-standard in terms if features but is temperamental to build depending on your precise ESP8266.
The second, WiFi SIXFOUR, I found didn’t compile quite correctly for me but is far simpler and just works, so I have my easily compilable fork here.
If you haven’t already, you will need the ESP8266 board definitions in your Arduino IDE:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

Once your ESP8266 is built and the firmware is uploaded, you then will need to configure it for your router and for the correct baud rate.
ZModem starts in 1200 baud, but the Arduino software I shared above will start in 300.
Here is how to get the code I shared onto your network.

Programming a Client and Server
Once you are up and running you can use the BBS terminal software etc, but how about coding your own client and server?
Here is some Python 3 code that starts a simple Telnet service on your computer.
Once that is running, on your C64 using your new WiFi modem you can connect using your computer IP address and the port, which we set to 6464. For eg.
atdt10.0.0.203:6464
After connection you can then enter D for the date, T for the time, and if you have set the API keys for the weather and YouTube, W for weather and S/V for Subscribers and Views!
On the C64 side we can then automate requesting the info using BASIC:
10 rem 1200,8n1
20 open2,2,4,chr$(8)+chr$(0):rem open the serial from user port
30 get#2,s$: print#2,""
40 rem telnet connection to proxy
50 print#2,"atdt10.0.0.203:6464"
60 rem ---------------------------------
100 rem main loop
110 print "{clear}{white}"
200 rem request the info
220 print#2,"d"; : rem date
230 gosub 2000
240 print#2,"t"; : rem time
250 gosub 2000
260 print#2,"w"; : rem weather
270 gosub 2000
280 print#2,"s"; : rem subscribers
290 gosub 2000
300 print#2,"v"; : rem views
310 gosub 2000
1000 rem ---------------------------------
1010 rem loop back to start of the main loop again
1020 goto 100
2000 rem ---------------------------------
2010 rem output the response until nothing waiting
2020 get#2,s$: print s$;:rem print these bytes
2030 if s$<>chr$(13) then 2020:rem keep going until no bytes waiting
2040 for w=1 to 1000:next
2050 return
9000 rem ---------------------------------
9010 close 2:end
Get all my code from this tutorial here at the Github Repo