The Quest for the Perfect PICO-8 handheld
Ever since PICO-8 was created people have longed for a physical form of what is still a fantasy console.
On my long quest for the perfect PICO-8 handheld I've owned no less than six handhelds (plus experiments with iPhones and DIY Pi Zero solutions). Until I finally reached the handheld endgame with the Waveshare GPM280. Here's my take on all of them:
|PocketChip||Officially supported by Zep||Terrible keyboard, unplayable game controls|
|"||Screen is pixel-perfect (with a bit of border)||Really bulky|
|"||Hacker vibes||Unfinished look|
|"||Not enough perf for demanding carts|
|Clockwork Pi||Good performance||Bulky|
|"||Good controls||Low rez plastic screen that scratches easily|
|"||Nice OS||Need to assemble|
|"||Video driver issues|
|GPi Case||Great build quality||Pi 0 doesn't have enough perf even for 30 fps carts|
|"||Good looks||Slow boot times|
|"||Screen has great colors||Low resolution, soft picture|
|RG280V||Tiny form factor a good fit for PICO-8||No Wi-Fi|
|"||Great build quality||Uneven scaling|
|"||Great controls||PICO-8 emulator not 100 % compatible|
|"||Screen has great colors||Progress on emulator stalled|
|ZPG Pro (OGA Clone)||Great performance||No Wi-Fi|
|"||Runs real PICO-8||OS is lacking|
|"||Great screen||Screen has big borders if you want pixel-perfect|
|"||Good build quality||Can't use alternative OS without patching|
|GPM280||Best screen yet for PICO-8, 286 dpi||2 hour battery life|
|"||Great looks and tiny form factor||More expensive than RG280V|
|"||Runs real PICO-8|
|"||Wi-Fi access to splore|
TL;DR: Do you like your pixels razor-sharp? Do you like PICO-8? Then get this handheld.
This is the new Game & Watch
This is the Game Boy Micro
And this is the new Waveshare GPM280.
Looks good, don't you think?
And it runs PICO-8 perfectly. The screen, oh, yes the screen. In a word: razor-sharp pixels.
128x128 is such an oddball resolution. Practically no screens in use can scale that resolution easily, the only exceptions are 1024x768 screens and the iPhone 4's 960x640 retina screen. The solution to this conundrum? A smartphone-like high DPI screen plus an intelligent scaling algorithm. An approach taken by the upcoming Analogue Pocket for example. But that won't run PICO-8.
Take a look. On the bottom is the pixel-perfect iPhone 4 screen (5x integer scale), on the top is the GPM280 screen. Also notice the 45° diagonals, on the RG280V they don't look right because of uneven scaling. Here they are perfect. (Right-click on this picture to enlarge.)
Here is another comparison (Right-click to enlarge). Oh, yeah, razor-sharp pixels. How is this possible? Again, high DPI: 286 DPI to be exact. That's almost iPhone territory.
A responsive D-Pad with some clickyness and buttons with plenty of travel. All good.
The Pi 3 (in the compute module variant) handles 60 FPS carts with ease. No complaints here.
This one is really unfortunate. You get two hours of play time. The select and start buttons also show the battery status with green, blue and red LEDs. If it's close to drained the LED starts blinking. The battery will only charge when the power button is in the off-position. Try turning off the Wi-Fi when not in use. If it weren't for the battery situation I would declare this to be the perfect PICO-8 handheld.
I didn't manage to add PICO-8 to recalbox but I succeeded with Batocera. That OS is much more polished anyway. It does have out of the box support for PICO-8 but it's an PICO-8 emulator with some compatibility issues, not the real deal. Let's fix that.
I created an nifty installer package so you can install PICO-8 with very few steps. That includes extra features like shortcuts, sharp picture scaling and swappable controls.
Pixelpunker's PICO-8 Installer
How to install
Download [Batocera for the CM3] and write it to a MicroSD card using the Raspberry Pi Imager. Use a SD card marked A1 or A2 (Application class).
- Download GPM280 DTBO and unzip it to the overlays directory. Edit config.txt and add the following lines to the end of the file:
dtparam=spi=off dtparam=i2c_arm=off gpio=0-27=a2 dtoverlay=dpi24 enable_dpi_lcd=1 display_default_lcd=1 dpi_group=2 dpi_mode=87 display_rotate=3 dpi_output_format=0x7F217 hdmi_timings=480 0 26 16 10 640 0 25 10 15 0 0 0 60 0 32000000 1 extra_transpose_buffer=2 hdmi_ignore_edid=0xa5000080 dtoverlay=gpm280-pwm-audio
Turn on the Game Pi Micro. Once you are on the home screen, access the menu with the menu key and connect to your local Wi-Fi under Network Settings/Hostname
Turn on security under System Settings/Security
- Now reboot under Quit/Restart System. Write down your IP address under Network Settings. Now write down your password under System Settings/Security.
Login to your Lexaloffle-Account and download the PICO-8 zip file for the Raspberry Pi to your downloads folder.
Enter this command in Windows Terminal, Mac Terminal or a Linux Terminal.
It will ask for your password you noted earlier. Now type (and enter your password again)
ssh [email protected]_IP cd /userdata/ wget https://github.com/Pixelpunker/Pico-Host/releases/download/0.1/install-pico8.sh chmod +x install-pico8.sh ./install-pico8.sh
After successful installation the system reboots.
Your new home screen.
PICO-8 is properly installed with the following additional features:
- Sharp scaling
- Left and right triggers additionally function as ❎ and ⭕
- Press select for a screenshot
- Hold select for 0.5 s for a video
Launch PICO-8 in splore mode by choosing 'console' You can also swap controls between "Xbox style" ❎⭕ (which is the PICO-8 default) or "Nintendo Style" ⭕❎.
Browse screenshots and gifs you took with the select key directly on your Game Pi Micro.
Play PICO racer using the shoulder buttons.
Have fun. The fantasy console is no longer a fantasy. It's in your hands.
Low-Rez pixel art is the great equalizer.
Anyone can do low-rez pixel art and make it look at least decent.
There was a high school teacher that taught his students how to code homebrew games on the Game Boy Advance via emulators and a flash cart.
While this teachers deserves applause, ultimately all the student projects looked amateurish next to commercial Game Boy Advance games.
The fuze basic for the Nintendo Switch also appeals to students but it relies on a pre-packaged library of professional 3d assets. Simply reusing professional assets leads to a mish-mash of styles. Your own artwork next to these assets also looks unflattering.
The low rez resolution and reduced color palette of pico-8 makes for more visual consistency. Yes professional pixel artists will still produce better looking games but the beginners art does not look like crap in comparison either.
You can still be a one-man shop like in the days of bedroom coding in the UK of the eighties. Instead of being at least a artist/coder duo.
Experience all game genres in bite-sized chunks.
As today's big games are too time-consuming for many of us in the later stages of adulthood, PICO-8 games take 30 minutes to 2 hours to complete and can always be finished in one evening. What's more, they are so focused because of the size restrictions there is never any filler. Most of them are pure joy. Not a drag, not a grind.
The pico-8 community is vibrant. There are many passing trends, but pico-8 has been around for 6 years now.
In a sense retro computing is timeless because if I read an issue of retro gamer from 2012 it features the same stories it does today. Once old, those simple games don't really get any older. They become classics. And so PICO-8 is timeless too.
PICO-8 vs vintage computing.
Some prefer to work with real hardware constraints and code for the C64, the Game Boy, the NES. But if most players run those games inside emulators anyway what's the point? PICO-8 also has arbitrary constraints, but they are more fun.
Summary: great hardware, lackluster software.
Retrododo gave a bit of a rant about the ZPG Pro which I think is a bit unfair because he was talking about the problems with chinese retrohandhelds in general and there are certainly shoddier ones than the ZPG Pro.
The case looks very slick, nintendo-ish in quality. The analog stick is great, it is the same as in the Nintendo Switch. Very satisfying and ergonomic to hold with its rounded edges, the plastic feels great to the touch. The glass front of the screen has rounded curves at the edges which looks very premium, like a high-end smartphone. The display is top-notch. Even greater colors and brightness than my funnyplaying IPS mod on the original GBA.
The buttons feel good but not great. The D-Pad has a good size. I hear that the silver metal version has more clicky buttons, but the newer rose gold metal version, the only version yet with built-in wifi, has the same buttons. I'd say they are halfway between mushy and clicky. I wish they had a bit more resistance.
I was disappointed that my yellow plastic version has no wifi although it was originally planned. I hear that the new rose-gold metal version finally has wifi but I find the extra expense for the metal case a bit excessive. And I don't like metal cases anyway.
The hardware is great. What is so-so is the software. First you need to find it. As there is no obvious manufacturer homepage I first found some builds on comments in youtube videos and finally, on rghandhelds.com. That server was so slow that it took more than 24 hours to download. Luckily I'm not on DSL with forced reconnects.
I was also bummed that although the ZPG Pro is based on the same chip as the Odroid Go Advance I couldn't simply use images for that system. As they haven't open-sourced their OS fork yet you can't tell what changes they made. Well, you could manually compare their fork of EmuElec with EmuElec for the OGA if you are very bored.
To get PICO-8 working was another story. The latest version of EmuElec for the ZPG Pro I found was 3.8, but 3.9 has added support for PICO-8 so I compared revisions on Github to find the changes they made in 3.9. Out of the box the image is blurry as hell, you seriously need to fix that if you want pixel-perfect.
Finally out of the box the menu key was not mapped to anything. I fixed that in my config below (which is specific to the ZPG Pro and not other OGA based handhelds):
When you are done you have pixel-perfect PICO-8 goodness with 100 % compatibility and speed. Too bad about the wifi, so splore browses local files only.
These two lines belong in your gamecontrollerdb.txt:
# PICO-8 // add SDL2 game controller mappings to this file 19000000010000000100000001010000,odroidgo2_joypad,a:b1,b:b0,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftx:a0,lefty:a1,guide:b10,leftstick:b12,lefttrigger:b11,rightstick:b13,righttrigger:b14,start:b15,platform:Linux, 19000000010000000200000011000000,odroidgo2_joypad_v11",a:b0,b:b1,x:b3,y:b2,leftshoulder:b4,rightshoulder:b5,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftx:a0,lefty:a1,guide:b12,leftstick:b14,lefttrigger:b13,rightstick:b15,righttrigger:b16,start:b15,platform:Linux,
This month a new handheld was released: the Anbernic RG280V. With it's diminuitive form factor and 2.8 inch screen is it the most pico PICO-8 handheld yet?
It's driven by a slightly underpowered 1 Ghz chip, the same as is used in the RG350 or even the GCW Zero from 2013. Not enough for more advanced consoles but for emulating handhelds like Game Boy Color or Neo Geo Pocket it's just right. And with the new Tac08 emulator it can even run PICO-8 games pretty faithfully.
The screen looks great, it has an even greater resolution than the RG350 so scaling issues are almost non-existent. The colors are vibrant. Build quality is top notch. The controls feel very satisfying. Although it's so small compared to a Xbox controller, the actual D-Pad is almost the same size.
The only drawbacks at the moment are some sound issues and compatibility with the PICO-8 library is not at 100 % yet. Still, the emulator is making great progress and it is only a matter of time before these issues will be resolved.
Note: it is recommended to install the pwswdpp extension for the Opendingux OS to enable several shortkeys like screen scaling, brightness and a standby mode. Also download a backup copy of the OS from rghandhelds.com so you can use a brand-name sd card.
There‘s a great gamer & game developer magazine called wireframe. Issue 12 contains a PICO-8 special.
For some reason the PDF is free which is great. It‘s very much in the style of Edge magazine. Very polished & professional. It has great pointers for getting started. Check it out pico-people.
This is not a bug per se but still has the potential to break PICO-8.
I was surprised to learn that the most recent version of Buildroot has completely removed the WiringPi package. It says:
> ### BR2_PACKAGE_WIRINGPI:
> The author of wiringpi has deprecated the package, and completely removed the git tree that was serving the sources, with this message:
> Please look for alternatives for wiringPi
The Pocket Popcorn Computer
There's a new kickstarter for the Pocket Popcorn computer, a small linux handheld that builds on designs from the original PocketCHIP. This time the keyboard looks quite useable and it has a high-quality 5 inch display. With it's full HD resolution we could display PICO-8 with a perfect 8x scale. What's more it seems it could be binary compatible with the PocketCHIP build of PICO-8. By the way, the red color below is from the configurable RGB lighting and could be any color you like.
Currently there is a discussion for the right keyboard layout, if some of you could post their suggestions here. I think we need a better cursor key layout that is suitable for gaming.
The device is slated for an August 2020 release. Well. Let's hope.
After upgrading to Pico-8 0.1.12C I noticed pixels were a bit blurry, even with the explicit option -pixel_perfect 1
Well, it seems the reason is not PICO-8 but a recent Windows 10 update. I have systemwide DPI set to 125 % and Windows therefore tries to scale the PICO-8 window a bit.
I fixed that by right clicking on the PICO-8 shortcut, settings, Compatibility, Button "Change High DPI-Setting".
In the following dialog turn on both checkboxes:
PICO-8 iPhone Shell
This is a work-in-progress iPhone Shell for PICO-8 featuring
- real gamepad controls (digital and analog)
- pixel-perfect scaling
- low latency (run loop reading input runs 60 times a second)
Note: I am abandoning this project because I now use the ClockworkPi Gameshell.
It uses the Gamepad API that was introduced with iOS 11 and was tested with the following MiFI-Controllers:
|Kanex GoPlay Sidekick||Yes|
|SteelSeries Stratus||Yes after Firmware Update|
|Logitech PowerShell Controller||No|
No more touch support at the moment.
On the iPhone SE you have pixel-perfect scaling. Since the iPhone SE's display is 640 pixels wide you can do a 5x integer scale for razor sharp pixels. For a more full-screen experience turn the phone sideways.
Click to start the game (necessary to enable audio).
You can test it out on your phone:
To Change the Game
Load your PICO-8 cart and export it as html with this command
Keep the mygame.js file and throw away the other files. Change line 66 in iPhone.html to reference your exported cart.
- Use new fullscreen API in iOS 12/13
- Test other bluetooth controllers in iOS 13
- Does saving to home screen work now? (Pinning the website to the homescreen used to disable Gamepad functionality)
At the beginning of their draw cycle some carts use
Is that for performance reasons? Does it perform better if you call rectfill with your background color? Or is it because the color option for cls was introduced in a later version of pico-8?