This is built off my Python QEMU automation for DOS/i386 testing. It's also a Dockerfile of ubuntu:25.04 with XRDP, VICE, CC65, and OpenCBM built
The current demo is of multiple C64 RX & TX instances using the ACIA RS232 feature in the VICE emulator, with an IP232 relay server as the backend.
- take an input src directory with C89 compliant C code, build the PRG using CC65, copy it to a D64
- start multiple VICE instances and track the X window ID using the D64
- take screenshots against the VICE instance name
- builds separate RX & TX src dirs
- starts one TX VICE instance with TX disk.D64
- starts one or many RX VICE instances with RX disk.D64
- connects ACIA-RS232 (Swiftlink) to IP232 Python relay server
- RX: sends 1 byte (single char) at set interval
- TX: checks buffer for byte at set interval
I built this with docker in mind. I have a linux host (can be a virtual machine) with SMB, NFS available so that the dirs/files inside of the cc65-vice-dev container can be accessed from another computer
docker isnt needed to use this, can clone the git repo, set up your venv and run pip against requirements.txt and start it locally.
i have the dir /bigpool/data/code_projects/ shared out, and navigated here , downloaded the GIT link, built the docker image, and ran the container from here
$ cd /bigpool/data/code_projects/
$ cd CC65-vice-dev
$ git clone https://github.com/xp5-org/CC65-vice-dev.git
$ docker build -t cc65vicedev ./
[+] Building 251.6s (18/18) FINISHED
$ docker image ls
REPOSITORY                        TAG       IMAGE ID       CREATED          SIZE
cc65vicedev                       latest    4fa1328959a2   46 seconds ago   1.89GB
once the image is built, run the container
-v can be omitted if you dont need to make the testrunnerapp visible outside of the container, but it will make code-edits and file copying more challenging without it
$ docker run -it -d \
  -p 3389:3389 \
  -p 8088:8080 \
  -e USERPASSWORD=a \
  -e USERNAME=user \
  -v /bigpool/data/code_projects/CC65-vice-dev:/testrunnerapp \
  cc65vicedev
it takes some time to set up & start - so if xrdp rejects right away check docker logs or try again in a minute
| RDP connect | Manually starting the app | 
|---|---|
| Connecting to the app with a web browser from any computer | 
|---|
it uses python to connect to the vice remote monitor and send key codes to memory remotely
example output from running the Rx & Tx demo. two vice instances are started and RS232 connects. One client sends a byte, and the other checks the ACIA interface for its buffer contents. occasionally a $1C is received which seems to be the keepalive equivalent
taking screenshots is slow, so there is different chars shown for the 3 RX windows due to how long it takes, 1 second per screenshot)
relay server also has statistics reset & collect before shutdown
once the clients are connected the stats can be cleared, and start tracking how many Rx/TX chars were seen from each client.