My Pico 8 fanmade handheld


The first beta version of my handheld.

Project background

Hello, I’m grhmhome and this is my first soldering project from scratch. I’m teaching myself how to solder and wanted to do more projects so I could learn more. I’m a fan of retro-gaming and enjoy the Pico 8 platform. What is Pico 8? It is software that replicates the look and feel of an old computer or game console with fake limitations. It is available for Mac, PC, Linux, and the Raspberry Pi (the hardware we are going to be using). If you are interested in learning more, check out their website here. The best part is that you don’t even need to buy Pico 8. You can play Pico 8 games using a web browser, but if you decide to make your own Pico 8 handheld, you will need to buy a copy.

Project Goals

My goals for this project were the following:

  • The console was to be designed for Pico 8 and Pico 8 only using a Raspberry Pi Zero or Zero W. It was intended to boot directly into Pico 8 and have a screen meant for Pico 8.
  • The console was to be designed using readily available parts such as a Raspberry Pi Zero W, generic buttons, perfboard, etc.
  • The project is meant to be a beginner friendly project so people who are new to soldering could use this as their first project if they wanted to.
  • The console is meant to be comfortable to hold for longer play sessions and the buttons should also feel great to press.
  • The project cad files will be open source so people can fork, modify, or do whatever else they want with the cad files. I will not provide cad files with the Pico 8 logo or any Lexaloffle branding as this project isn’t affiliated with their company.

The design work

The first design

I fired up my favorite cad software and got to work in making a basic handheld design and had to decide on the screen resolution, the number of buttons, and overall shape. Originally, I wanted a semicircle shape, but realized, that it wouldn’t work, due to the parts used, so I went with a rectangular shape with rounded edges instead. After I bought some of the supplies I would need, I measured the screen bezel, screen PCB, speaker diameter, Raspberry Pi Zero, and AA battery holder, as I needed to see how thick the console was going to be and had to make sure everything would fit.

After that, I printed a prototype shell to see if the button spacing was good enough. I was able to subtract another 5mm from the overall thickness once the parts arrived and found I had room to spare. Shrinking the handheld by 5mm made the console less bulky and more comfortable to hold. I believe comfort should be an important factor when making consoles.

The first printed shell prototype

After I printed the first prototype, I had to figure out where I want the battery holder to be. That was going to be the largest component and I needed to make sure it wasn’t going to be in the way of any of the other components. I ended up deciding on using the back-plate to hold the battery holder and be where the battery door would screw in. I added 2mm screw holes for the front half of the shell and added screw holes for the back plate. The battery holder would be on the left side of the unit away from most of the components.

Battery holder design prototype

The screen

Once the screen arrived, I had to learn how to make it work with the GPIO pins. I learned a lot about display drivers and had to scour the internet looking at ways to get my display to work properly. I opted for one display driver, but I couldn’t get that to work and since SPI was all new territory for me, I spent hours looking up other ways to get things to work, such as use another display driver, and edit source files. I found a display driver that would work perfectly after compiling, I finally got the display to work, well, sort of. The screen was displaying a bunch of glitches, and after recompiling another time, it finally worked perfectly.

Waveshare OLED 128×128 screen

The controls

Now, I was able to work on soldering the controls. I ended up buying some tactile buttons, a perfboard, and got to work. This was my first time ever using a perfboard, as my previous project involved me soldering PCB’s from a kit, and I had to research how I was going to get everything to work, so I settled on placing all the buttons in the right positions, followed by soldering each button to a wire that was soldered to a central ground jumper cable, and that ground jumper was connected to a ground pin on the gpio. The rest of the buttons also had a jumper cable soldered to them. After that, I installed a gpio controller driver, and one button refused to work. I soldered a new button, and it still didn’t work, so after replacing the jumper cable, it finally worked.

After I bought the last of the supplies needed, I soldered a 32-ohm speaker to a mono cable. I originally thought I ran out of space on the gpio, so I opted in using a usb adapter. The only issue is the sound is a bit quiet, so I might try an amplifier and use one of my 8ohm speakers, so I can have much louder audio, but for the time being, it seems to work for now.

Problems started to form

I made sure that Pico 8 would auto start when you first start up the machine and made sure the system wouldn’t boot into Emulationstation, but I quickly ran into a problem. Something was making Pico 8 think I was constantly pressing the up button. I thought, strange, this isn’t happening in Emulationstation, but had to figure a solution and fast if I wanted this project done by Sunday. What I did was removed all the jumper cables and connected them to the Raspberry Pi via SSH. Fortunately, I realized it wasn’t the buttons, or the screen causing this, but it was due to the controller gpio driver. Apparently, one of the pins, I think pin 11 was being used by both the screen driver, and controller driver, so I replaced the gpio controller driver with something that would allow me more freedom of which pin I could use, and the problem was gone.

After I reconnected everything, I found one more issue, the system performance was taking a hit, and I’m assuming it’s due to a driver conflicting somewhere, or maybe it’s something causing the hardware to throttle, but for now it at least ‘works’.

I then went back into the cad software and put in the final screw holes and was able to print the console, buttons, and assemble the first beta version. I found some glaring issues such as the buttons freely rotating so I’m making new buttons that will not rotate and they will only move forward and back.

The end

I want to thank the Pico 8 community for being supportive and having an interest in my project. The tutorial post should be available soon. I will not go over how to solder, but I will give a parts list, post links to the cad files and STL files, and will show you how to get the gpio drivers to work. The files are available here on Thingiverse: https://www.thingiverse.com/thing:4938902

Have a wonderful day.

, , , , ,