Garage collective | Building a handheld console
Client: Garage Collective
Published: Physical project
Role: Designer and Maker
Context
I love making games! My main job is to teach how to make games, and my main hobby is to make them, at Garage Collective. Needless to say that a majority of my time awake, I’m thinking about games, playing them or making them π
After releasing DrakkenRidge, in September 2025, I needed a break from VR. I’ve been mulling the idea of making new 2D “pixel-art” games, a return to my old field of expertise!
For that purpose, I’ve re-installed a bunch of emulators (mostly RetroPie) and been re-engaging with various Genesis/Megadrive/SNES/GBA titles, for “inspiration” as they say! (and yes, Zelda The Minish Cap graphics on GBA absolutely rule!).

Only “some” of the hardware that I own…
Aside the Raspberry Pie that runs my emulators, I also own a MASSIVE variety of consoles, handhelds, etc. that allow me to play retro-games as the Good Lord intended (!!!). Some are my consoles of old, that stayed in a pristine condition (I’m pretty caring after my stuff) and some others are new emulators, or dedicated machines like several Evercade or a variety of HyperMegaTech (yep, that’s the name!) consoles.
When it comes to gaming, I’m as much in love with the hardware as in with the software (I also love, and made, some board games).
I know how to make games, but never tried to make hardware… Something that had to be corrected!
The opportunity
One of the class that is offered in the department I teach in, GAME 347, introduces students to physical computing, the world of microcontrollers, etc. It’s a class that follows another I used to teach (but haven’t in a long time) and that I’ve always been curious about. Well, this summer of 2026, it was offered as a Summer class, and since I wasn’t teaching at that time, I was free to sit-in: I had no more excuse to not explore my interest for the hardware side!
First Steps

A rudimentary Star Wars game, inspired by the Kessel Run : how may parsecs will you be able to run?
No surprise, the class was a blast to take! The first couple assignments were about getting familiar with Microcontrollers, an opportunity for me to prototype a very simplistic Arduino game, the “Kessel Run” that plays the iconic Star Wars tune when the game ends.
However, the bulk of the class is dedicated at producing a much more ambitious final project. In my case, building a console, from scratch, that can play the type of games I teach my students to make in my Introduction to Game Dev class.
So let’s dive into it.
The Tutorial: How to build the console
First, here’s a quick introduction of what this tutorial is about:
Let’s start with the “Statement of Requirements”. I wanted the console to be:
- Easy to build by non-hobbyists (that would be me, or most of my students interested in the project)
- Relatively cheap to build (at the time of this tutorial, it’s around $50 to build, not counting the 3D printing costs)
- More powerful than what’s already sold (like the Mewbit, the Elecfreak or the Kitronic Arcade Max)… more on that later…
- Able to play custom games, or be plugged into a computer to change/edit installed games
- Compatible with Microsoft MakeCode Arcade games.
I originally started with this existing tutorial, the “MakeTato” but while mine uses the same processor, my own build ended up streamlining the process a lot, leading to a different device, that I called the RetroMate.

My own breadboarded “Maketato” that looks like a prop from a Cyberpunk movie!
Bill of Materials
To follow this tutorial, you need the exact same parts that I’m using: different parts may require different drivers, or wiring process, and unless you can solve the issues yourself, you won’t be able to follow the instructions… Since my students, and audience, is most likely in the US, I sourced my parts through Amazon.
- Screen:LCD display module, 1.8 inch 128*160 chip ST7735. This one is the trickiest: make sure the driver is ST7735 and NOT ST7735 s, as the S version uses a different driver and renders everything in reversed black and white!
- Microcontroller: Presoldered header Raspberry Pico RP2040 chip, dual-core ARM Cortex M0+ processor. Make sure you get the PICO 1 (RP2040) and NOT the Pico 2.
- Battery: 2 pack LiPo Battery module, USB-C rechargeable 1200mAh. 3.3V/5V output.
- LED lights: 10 pcs 4pin RGB module for Arduino, rated 5V. Make sure whatever LED you buy is rated 5V (or 3.3V, but you’ll need to change the wiring) since we won’t solder a resistance to them.
- Thumbstick: 6 pcs 5D Rocker Joystick. As long as they have the 4 directional channels (up, down, left, right) and a ground pin, any other provider should do.
- Buttons: 4 pcs 2*4 Matrix Keypad Board. You could very well use a 2*2 Matrix, but I wanted to space some buttons a bit more on the face plate. Technically, we will be only using 4 out of those 8 buttons.
- Wires: 10 cms female-to-female Dupont jumper wires. You could go with longer lengths, but I found that 10cm is easier to pack in the enclosure.
- Speaker: 4 pcs Metal shell round internal magnet speaker, 2W 8Ohm.
- Screws: M2 screw assortment Kit.
You will also need a solder iron, and a few male-to-female Dupont wires to solder the speaker to the wires.
The wiring diagram
Believe it or not, but ordering the right parts is the most difficult part of this tutorial! The rest is pretty straight-forward π
First, to save you some time looking online, here’s the pinout diagram of the Raspberry Pico RP2040:

(Open the image in a new tab for a bigger version)
Then, all you have to do is assemble all the elements you have purchased following this wiring diagram (refer back to the pinout diagram if there’s any confusion).
Use the dupont wires to connect all the pins of the PICO to its screen, thumbstick, buttons and speakers.

(Open the image in a new tab for a bigger version)
I would recommend to start with the screen, while plugging your PICO to its own USB power supply. Then flash the firmware (read next step) and test. Once you are sure the screen is working, move on to the thumbstick, test, then move on to the buttons.
Then I would suggest moving on to connecting the LiPo power supply to VSYS and GROUND, then the LED to the 3.3V and GROUND pins of the battery.
Then, finally, solder the male end of 2 dupont wires (I suggest RED for POWER (+) and BLACK for GROUND (-)) like so:
FLASHING THE FIRMWARE
Once everything is wired (or, as I recommended, at least the screen) you will have to flash the firmware onto the Pico RP2040. The firmware includes everything it needs to run MakeCode Arcade games, as well as configuration files for the screen, buttons, etc.
Plug your Pico in the USB port while pressing the BOOTSEL button (the little white-ish button on the face of the RP2040 board).

The BOOTSEL button forces the chip to boot into its built-in USB mass-storage bootloader. This is what you need in order to drag and drop uf2 files.
It should mount your Pico as a USB hard drive. Download the Custom firmware retroMate_firmware.uf2 from this link and drop it to the root. Let it reboot. Then redo the same thing (press BOOTSEL while inserting in the USB port) and drop arcade-functionalityTest.uf2 from this link.
This file isn’t a game, but a quick testing file I made that allows to check that everything is working well: it displays an image of the earth, a red square that you can move with your thumbsticks, a signal letting you know when you press A or B, and a repetitive melody that plays on a loop. (Please note that the speaker is very very tenuous. I’ll be trying to fix this and will update the tutorial when I have an easy to integrate solution).

For some of the prototypes, I had to solder, so I ordered a set of “helping hands” online. Now it looks like Doc Octopus is playing with the RetroMate!
If everything is working as intended, you should get something like this. Now, let’s move to the shell!
The Shell / enclosure
I’ve designed a shell/enclosure to host all the electronics. The STL file can be downloaded at this link.
The file is composed of multiple components: The bottom shell, with support pillars to attach the various electrical components onto, the front plate, a individual screen plate and the buttons.
I decided to print the front plate in one color, the bottom shell in another (to make the whole design look less “blocky” and the buttons and the screen plate in black PLA+. The reason for the screen plate is that I hated how small and square-ish the screen looks like, so the black plate gives the visual illusion that our console have a more “modern” screen format (scroll down the tutorial for pictures of the finished project).

While they are not provided in the STL, I’ve modeled the various electronic components to their true specifications, to fit everything tightly and minimize the footprint of the console.
3D printing the shell
Here, the process will vary. I have an ELEGOO Centauri Carbon 3D printer, so my splicer looks like this. Yours may look different.
Just make sure to flip the front plate 180 degrees, so that it’s face down on your heated bed. As I mentioned earlier, I personally chose to print some of the various elements in different colors, but you don’t have to π
For me, the total printing time is just south of 3 hours.
Assembling the console
At this point, we are almost done! All you have to do is carefully assemble everything together.
Using the M2 screws you purchased, you will start by attaching the LiPo battery module to the pillars at the bottom of the shell. Then move on and secure the LED to its own pillars. You can then move to attaching the thumbstick and the buttons to their own pillars, like in the following picture:

Start with the elements at the bottom of the shell, and work your way up.
One tricky part will be how to position the Pico RP2040: I’ve opened a slot on the bottom shell, so that you can open the console, and insert the USB cable in case you want to flash new games. You need to make sure that both the BOOTSEL button and the USB port are accessible through the bottom shell slot. What worked for me was to put the Pico sideways, like so:

Both the USB port, and the BOOTSEL button are accessible though the bottom shell slot (sort of…)
After that, you can finish by securing the screen. I originally planned to secure the speaker to the front plate, but since I know that I’m going to iterate on it, right now, I just tuck it on the side (see previous assembled picture)… I know, I’m a barbarian! π
Finished product
You are done! Close the shell, turn on the console, and enjoy your very own gaming on the go!
You can drop any game you made, by exporting them for the RP2040 on makeCode: put your RetroMate in Storage mode (BOOTSEL) and just drop your .uf2 file… Et Voila! π
I will make a tutorial on how to make and upload MakeCode Arcade games next, so stay tuned! π

Your very own handheld console, playing your very own games: what’s better than that?
POST-MORTEM
What went right?
- The console is functional, plays games, the controls work reasonably well (they won’t put to shame a proper GameBoy, of course)
- It looks pretty cool: it’s a bit blockier than I’d like, but without a PCB, it’s the smallest, thinnest I could get
- It’s easy to build, there’s a minimal amount of soldering, and I tried to provide a very precise wiring diagram, which is the essential part of this build
- The original Statement of Requirements is fulfilled, save for one point, which leads me to…
What went wrong?
- While I could reasonably think the RP2040 was an upgrade against everything else on the market, I realized it wasn’t: it is less performant than the Atmel SAMD51J19A, as I discovered when exploring Microsoft’s GitHub’s posts. This means that large, ambitious games with a lot of sprites will trigger a significant FPS frop on the RetroMate. Oh well, this means a V2.0 of this tutorial with a better microcontroller is due in the future!
- The speaker is way, way too tiny. I’ve tried to add an Amp to it, but being a beginner in my electronics journey, I wasn’t able to figure out the correct wiring. I will be providing an update soon!
What did I learn?
- I think I discovered a new hobby: I loved tinkering, figuring out solutions to my problems. I’m still very much limited by my inexperience, but I feel like this is the beginning of a new hobby!
I intend to keep building stuff adjacent to gaming, and bolster my knowledge of electronics. It is such a fun, rewarding activity when, at the end of it, you are holding in your hands the fruits of your work. - 3D printing is magical: how didn’t I acquired a printer sooner is beyond me! π