My Hacking Simulator runs on a Cyberdeck
- 1899 words
- 10 min
And in typical cyberpunk fashion, I had to put the deck together from whatever parts I could find.
I finally got my hands on a ClockworkPi uConsole - this is a highly portable & modular Linux computer, with smarts coming from the Raspberry Pi Compute Module series. I've also barely gotten my game to run on a Compute Module 3.
I won't bury the lede, here are some pictures of the complete set-up.
The game
The featured game is Botnet of Ares, a hacking simulator where you can exploit millions of devices. It plays like a Command & Control interface for a real-life botnet, and lets you deploy compromised devices in order to gain more power, expand your botnet or affect the world.
Here it is barely running on the uConsole, on the RPi CM3. It would run just fine on the CM4, but I don't have the right adapter - more on that later.
What is a uConsole?
To put it simply, the uConsole is a handheld modular Linux computer. The processing and RAM come from various Compute Modules. Out of the box, it has a display, keyboard, trackball, USB & HDMI connectivity. Radio-wise, it's got Wifi and Bluetooth by default, and a 4G modem if you get the expansion for it.
Expansion cards, yes! The uConsole main board has a connector for expansions, which can add additional I/O to the unit. This is similar to what the Framework laptop is doing.
I've got a couple of expansion boards, both made by hobbyists within the uConsole community: the uEther, which provides Ethernet & Type C USB, as well as a USB hub expansion which provides three external + two internal ports.
The batteries are mounted on a separate board, which makes it fairly easy to swap out. I'm running it with the default 7000mAh capacity, but people have been modding the battery board to use much chunkier 10000mAh cells.
The cyberdeck
I've been hunting for a uConsole in the UK for months. I believe ClockworkPi runs their business in an asset-light manner, without holding much inventory - as far as I can tell the kits ship as soon as they're done being fabricated. This unfortunately leads to very long lead times, to the point where the community resorts to divining shipping time estimates from crowd-sourced order numbers.
Consequently, resellers are putting these for sale online at some very silly prices. I got myself a decent deal in the end, only paying an £80 premium compared to getting that same device straight from the source. Sigh.
Here's the only listing on eBay in Europe at the time of writing. It does come with a lot of gadgets admittedly, but the listing price is double what all that kit costs new. It used to be listed for over £1,000 just a few weeks ago. Siiiigh.

My cyberdeck
The R-01 it came with
The uConsole I was able to source in the UK shipped with a R-01 Core module, which contains a single-core RISC-V CPU running at 1.0GHz, and no GPU. So this would be no good for running games - in fact, the Doom port that shipped with the default firmware ran at single-digit FPS.
It can also browse the web, but just barely, and Qutebrowser did not play well with JavaScript. The R-01 is great if you're really into RISC-V, or if all you need is a tiny Linux terminal with decent battery life (I think I got more than 8 hours of runtime out of mine).
CPU usage gets pretty high by simply running cmatrix
in the background - this thing really isn't made to drive this display quickly.
Nonetheless, I was determined to make do with what I can get. It had been a long while since I did an electronics project, and I was craving a challenge.
I went to Farnell and got myself a Raspberry Pi Compute Module 3+ Lite, a Raspberry Pi Compute Module 4 with 4 gigs of RAM, and some SD cards.
CM4 mishaps
The motherboard in the uConsole was originally designed to connect directly to a CM3. The uConsole, however, is a newer product, shipping with the Compute Module 4. Unfortunately the Raspberry Pi Foundation, for very good reasons, radically changed the connector design from the CM4 onwards, to the dismay of electronic engineers worldwide. So, I need an adapter if I want to use my CM4.
The official adapter works, but I don't have it, and the lead times for it are similar to those of the uConsole. So I ordered the Waveshare CM4-to-CM3 adapter which famously does not work with the uConsole for various unspecified reasons.
I then spent several days of my spare time finding out in excruciating detail why the Waveshare adapter doesn't work. This is documented in my thread on the ClockworkPi forums. To summarize, the adapter swaps around the video output ports (needs a recompiled Linux kernel), does not connect two out of four data lanes for said video output (needs some very fine rewiring), and the power management IC doesn't cold start reliably (dunno what that needs yet).
So while I'm waiting for the official adapter to arrive and/or a community solution to crop up, I decided to see if I can get Godot to run on the CM3.
CM3 success
Coincidentally, the CM3+ has roughly the same specs as my first ever Raspberry Pi, which cost me £27,750, three years of my life and came with a free degree in electronics engineering. These specs include a quad-core ARM CPU running at 1.4GHz, 1GB of DDR2 RAM, and a VideoCore IV GPU. This ought to be plenty fast for running 2D games!
The community software support for the various Raspberry Pis is very good, and the CM3 indeed works great. After flashing Rex's Debian Trixie image the device boots straight away and is surprisingly responsive given its age. It's fairly usable for browsing the web & great for anything terminal based.
In my preferred configuration, with the uEther expansion, it's a decent secondary computer when I'm working on embedded software - right now I'm developing firmware for 5G wireless routers, and sometimes I need to SSH into them without losing connection on my main PC. This is pretty much the ideal machine for that.
Getting Botnet of Ares to run
Here comes the rub - the open source Mesa drivers for the CM3 GPU only support OpenGL ES 2, whereas Godot 4 needs at least OpenGL ES 3. Godot 3 does have fallback support for GLES2, but I don't really want to port the whole game just for this.
However, Godot 4 also comes with support for the Vulkan graphics API. And to my surprise, Botnet of Ares does run!
The framerate however is atrocious - between one and three. I'm honestly amazed it runs at all given the API incompatibility situation.
I do want to make it run faster on what I have. As it stands, it is just about playable on the CM3, but the CPUs are running close to maxed out.
After spending a couple of days figuring out how to cross-compile the game engine for the Pi, I was able to create a debug binary I can profile.

The result? llvmpipe
is taking up 99.7% of the total runtime - that's the Mesa software back-end. This means that all the rendering is being done in software on the CPU, and the GPU is not being used at all.
Making it run properly
The CM4, which I need an adapter for, does indeed support GLES3, so I'm confident the game would run well. However, I'm still waiting for my adapter to arrive, or for the community to build an alternative - there are a couple projects in the works, though they are mostly focused on adding PCIE support for use with the CM5.
I tried running a Godot 3 demo project, and I'm getting fairly stable 30FPS on the legacy renderer - the hardware is definitely capable enough, it just needs the right software. Porting Botnet of Ares to Godot 3 would be far too much work though.
However, while doing research for this article I did find some work in progress support for GLES2 in Godot 4.0 - I may give that a go when I have some more time, as I'm already set up to cross-compile the game and editor. There's also an open source Vulkan 1.0 driver for the Pi 3 and below - but getting Godot to use this seems a bit daunting.
Conclusion
In the end, I did accomplish my goal of running Botnet of Ares on the uConsole. The binary I cross-compiled should run great on the official CM4 hardware, but unfortunately I could not test that as I'm missing the correct adapter.
I'd like to keep trying to get Godot 4 running well on the CM3 though! It's what I have, and there are a few promising avenues I haven't dived into yet.
What makes the uConsole so compelling to me is that it's a computer that you can truly make your own. You can pick the best compute module for your needs, balancing processing power with battery life. You can swap the expansion boards, and the batteries are easy to change. Most importantly, the uConsole community provides great support for the hardware long after its release, and the Raspberry Pi ecosystem works great on this device.
It's the first handheld I've touched that feels like mine.
tagged Botnet of Ares and Development