Commodore 64 twitter bot inspired by @bbcmicrobot
These are initial notes on a project to create a Commodore 64 Twitter bot which runs users' tweets on an emulator and returns a video of the execution in a similar style to my BBC Micro Bot.
- vice
- xvfb
- ffmpeg
- c64 KERNAL files
- pulseaudio
A key piece of this project is to get a C64 emulator running programs and generating video purely via Linux command line. VICE looks like the best emulator for the job.
We don't want to run VICE in headless mode because we want video output to capture. However in the cloud we have no display to attach to and even trying to load VICE causes it to segfault.
The solution is to use X virtual framebuffer (xvfb) as the X server for the headless c64 cloud instance and capture the Display to video using ffmpeg x11grab as follows:
Xvfb :99 -screen 0 1280x1024x16
DISPLAY=:99 x64 &
ffmpeg -f x11grab -y -r 50 -video_size 718x546 -i :99.0 0,27 -pix_fmt yuv420p output.mp4
It works! Here's a screenshot of video back from a VICE Commodore 64 emulator running on an AWS EC2 instance:
Using the Twitter API we can take tweet text containing a Commodore 64 BASIC program listing and then convert it into a .prg file ready for autorun on the emulator.
It is important to note that by default the C64 is in PETSCII character mode. To allow for mixed case we are going to prepend the user's code with a POKE to switch to mixed case mode.
poke 53272,23
Next use the petcat
utility included with vice to tokenize the basic code:
petcat -w2 -o basic.prg -- input.bas
Using the Autostart C64 plus disk, the idea is to load the disk, copy the basic program you outputted onto the autostart disk, and then begin execution. This command will do this all automatically:
DISPLAY=:99 x64 -default -parallel8 1 -autostartprgmode 2 -8 "/home/working/autostart.d64" -autostartprgdiskimage "/home/working/autostart.d64" -autostart "/home/mark/basic.prg"
That's all for now... let me know if you have any corrections / suggestions