The Challenge
I want to have a Commodore 128 VICE emulator start up, run some arbitrary BASIC code, and get a snapshot of the output. There are a few settings configurable from the command line to accomplish this:
+sound
(without this option you will get and error"pa_simple_new(): Connection refused"
because you’re *probably* not going to have a PulseAudio option for your remote linux box)-limitcycles
10000000
(intentionally timeout the machine after 10 million cycles… ~10 seconds)-exitscreenscreenshotvicii
– this is just-exitscreenshot
for non-128 emulators-keybuf
so that you can “type” in your program to the BASIC emulator
Installing and Running VICE
In Ubuntu the VICE package can be installed with sudo apt install vice
. You still have a couple of issues: First you have nothing to send your display to. I remedied this with Xfvb
(the package is lowercase x, but the executable is uppercase)
sudo apt install vice xfvb
Xfvb :1 & # if you exit your session, you'll have to kill this off or point to it again
export DISPLAY=:1 # use Xfvb for your "display"
At this point, if you try to run on Ubuntu, you’ll be missing ROMs for the various components (basic
and the kernal
are two of them). They don’t install with the vice
package because they’re not appropriately licensed (understatement) for the Ubuntu distro. If you try to run the emulator without them, you’ll get something like the following:
*** VICE Version 3.4 ***
Welcome to x128, the free portable C128 Emulator.
Current VICE team members:
Marco van den Heuvel, Fabrizio Gennari, Groepaz, Errol Smith, Olaf Seibert,
Marcus Sutton, Kajtar Zsolt, AreaScout, Bas Wassink, Michael C. Martin,
David Hogan.
This is free software with ABSOLUTELY NO WARRANTY.
See the "About VICE" command for more info.
C128MEM: Error - Couldn't load kernal ROM `kernal'.
Error - Machine initialization failed.
Exiting...
Segmentation fault
Getting and installing the ROMs
You can download the ROMs from the release source file on the project page. I used the vice-3.4 source. Download/upload the file to your Ubuntu machine and then untar and copy the rom files from the vice-{version}/data
directory to /usb/lib/vice
:
tar -zxvf vice-3.4.tar.gz
cd vice-3.4/data
sudo ls **/* | grep -v '\.' | sudo xargs -I {} cp -Rp --parents {} /usr/lib/vice
Run a test script
The following code should have the emulator draw a circle and then capture to the horribly named haha.png
:
x128 -keybuf "10 graphic 1
20 scnclr
30 circle 1,100,100,30
run
" -sound -limitcycles 10000000 -exitscreenshotvicii haha.png
Next Steps
I don’t know… Hook up a lambda? Write a crude server that listens on a COM port? One thing I’m happy about discovering is the -keybuf
argument, because I know now that I can inject BASIC (keystrokes to enter BASIC) into an emulator from a source code file without having to worry about the disk or tape image formats.