I uploaded a clip of the ZX Spectrum video game "Paradise Cafe" and they determined it "went against their community standards" and decided to completely remove my account to "protect the community" from a video game from the 1980s... :)
Anyway, that's why all my videos are missing from my blog! Dozens of years of content and research...gone!
Write-Output "Process completed. Moved $($parentsToKeep.Count) parent ROMs to the clean folder."
- Run the powershell script!
This will identify all "parent" roms (basically, all the ones that are either unique OR have multiple files with the same "StartsWith()" filename (e.g. 3countb.zip is the main file and 3countba.zip is a clone version) and move the unique ones to a "clean" folder inside your current execution folder.
Its not perfect (it can remove versions of games as it does not know ddragon and ddragon2 are different games altogether) but...it does clean up the library quite a bit!
The WiFi232 allows users to encapsulate telnet over serial, by connecting to a wifi network, so I theorized that it should be possible to use it to establish a ppp connection, encapsulating a full tcp/ip stack over it.
The result was a series of small videos where I created a small proof of concept for how to implement ppp over WiFi232:
WiFi232: Implementing a full tcp/ip stack over WiFi232 interface using pppd
However, while doing research, I came across tcpser, which pretty much does the “same” as the WiFi232, though it requires a full OS like Linux to run, so I thought about installing tcpser on a raspberry pi and running a ppp server off of it as well!
The result would be a self contained module that could be used to implement a dial up connection over wifi, allowing old school computers to connect and browse the internet, just like we did in the 90s!
On top of this, given that the raspberry pi zero w also has audio output, I decided to add a little speaker to it to simulate that nostalgic dial up connection sound :).
The theory was pretty straight forward:
Buy a raspberry pi zero w
Solder a breakaway dual male header to the pi (for easy access to the pins)
Wire a MAX3232 rs232 to ttl converter to your raspberry pi
Configure the wifi connection, serial port and audio out on the pi
Run tcpser to emulate a Hayes compatible modem
And bind to a tcp/ip port using netcat, and have it spawn a tty that executes the ppp service
Given that tcpser has the option to create a “phonebook”, you can create an alias that makes it so that you can associate a “fake dialup number” with your netcat localhost connection. So the result is what seems like a real dial up connection!
Doing this worked beautifully! However, I had to make a one line change to tcpser’s source code in order to get the audio to play at the right time (which is why we need to run a custom tcpser version that I change to play a wav file upon CONNECT :)).
Basically, you just have to download clone the tcpser git repository and add a system() call to run “aplay” right before the CONNECT command is sent back to the modem. It is EXTREMELY LAME...but it works, and this is just a proof of concept anyway! Heh. More detailed information can be found on this at the end of this article.
If you don’t care about the audio and just want to connect, you can just use the stock tcpser version that is available with the latest raspbian version (in my case, I installed Jessie, or version 8.0)!
Also, given that tcpser is running on the serial port, you can also use this device to connect to telnet based bbses, just like you can with the WiFi232.
See it in action
Raspberry Pi Zero W serial modem proof of concept!
Do note that the hdmi and usb converters are only required while setting up the wireless network on the pi. After you’ve done that, you can just connect to it using ssh!
Use “alsamixer” to control volume (the thin plastic speaker I used was super low, so I had to crank up the volume all the way up!) and use “aplay” to test playing a wav file.
E.g.
root@raspberrypi:~# aplay dial-up-modem-02.wav
Playing WAVE 'dial-up-modem-02.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
root@raspberrypi:~#
Enable serial-uart in config.txt
Enable an enable_uart=1 parameter in your /boot/config.txt file.
...and then create an iptables masquerade rule to NAT traffic going out of wlan0
root@raspberrypi:~# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Run pppd daemon on port 1234
We basically create a fifo and run pppd, tunneling stdin / stdout on port 1234 using netcat, and then we create an infinite while loop so that netcat reruns after each pppd disconnect or crash.
The -d /dev/serial0 parameter makes tcpser use serial0 as the serial device (so, ttyS0 on my system), -s 38400 specifies that it should use 38400 as the serial port speed, -S 38400 specifies that the connection speed reported by tcpser upon connection will be 38400bps, -l 7 specifies 7 as the log level and the last command specifies a phonebook entry.
In the above example, tcpser will respond to connections to 8013614839 by establishing a telnet connection to port 1234 on localhost, establishing a pppd connection through netcat!
And that’s pretty much it! Hopefully you found this interesting and someone can take it from here and turn this into an actual modem (maybe even selling it as an actual product? :)). - UPDATE - Check out the progress on this project, which I'm now calling WiFi2DialUp:
Here it is, Chain Reaction, the first video game I've EVER played! :)
I remember getting home from school when I was 6 (maybe 7?) years old and my sister was playing this game on a ZX Spectrum 48k! :)
I don't think I had ever seen a video game before, so it was a REALLY big deal for me to find this game a few months ago, when I asked one of the Spectrum Facebook groups about "popular isometric games on the Spectrum"!
Not the first time I've said this, but I'll repeat it again, given that the Paris Climate Agreement has been all the rage over the last few days...
Some day, liberals will finally conclude that this is "no longer a problem" but will take credit for it, saying that the reason why "it isn't a problem anymore" is that we had all these agreements and that we lowered our footprint over the years "due to their heroic efforts" :D