Pico-8 on the Raspberry Pi with Game HAT
I’ve been playing with Pico-8 a lot lately. I’ve got a small Pico-8 project site to launch soon, but in the mean time I’m more occupied with getting Pico-8 running on things.
Enter Raspberry Pi, and with it the Waveshare Game HAT – this is a nifty bit of kit. A screen, controls, and battery circuit that you just plug a Raspberry Pi in to, and voila you have a portable games console.
I’ve got mine set up with Retropie and this works with the Game HAT pretty much out of the box.
Here are the tweaks needed:
Configure the display in your /boot/config.txt
This seems to vary from one Game HAT to another (according to the Retropie forum) but I found that the following config lines worked when added to the end of the config.txt:
framebuffer_width=512
framebuffer_height=384
hdmi_group=2
hdmi_mode=87
hdmi_cvt=512 384 60
Configure the buttons
The buttons on the Game HAT will work if you install the mk_arcade_joystick_rpi driver in ~/RetroPie-Setup/retropie_setup.sh and then edit /etc/modprobe.d/mk_arcade_joystick_rpi.conf to contain:
options mk_arcade_joystick_rpi map=5 gpio=5,6,13,19,21,4,26,12,23,20,16,18
Installing Pico-8
This is straight-forward. First you download the Raspberry Pi zip from your Pico-8 downloads page, extract it to your home directory, and install wiringpi:
# get Pico-8
$ cd
$ wget <your url to pico-8_0.1.11g_raspi.zip>
$ unzip pico-8_0.1.11g_raspi.zip
# install wiringpi
$ sudo apt install wiringpi
Boot to Pico-8 (and Retropie while holding L)
There are all sorts of approaches that people have detailed elsewhere online to launch Pico-8 from the Retropie launcher, but I prefer the approach of configuring this install to be Pico-8 first, and then Retropie only if we’re holding the L shoulder button at boot. This took some fiddling, but it’s quite elegant:
First, edit your /etc/profile.d/10-retropie.sh, you can do this over ssh and run sudo nano /etc/profile.d/10-retropie.sh. Replace the contents with this:
# launch our autostart apps (if we are on the correct tty)
if [ "`tty`" = "/dev/tty1" ] && [ "$USER" = "pi" ]; then
# if holding L shoulder button, start retropie
if [[ "$(gpio -g read 23)" = "0" ]]; then
bash "/opt/retropie/configs/all/autostart.sh"
else
# otherwise start pico8 by default
/home/pi/pico-8/pico8 -height 320 -width 480 -splore && sudo reboot
fi
fi
We’re using the gpio command from wiringpi to check the value of GPIO pin 23 (L shoulder button on the Game HAT). If it’s 0 (pressed) we launch the usual Retropie autostart.sh, otherwise we default to running Pico-8.
With the Pico-8 command, I’m specifying the output resolution and launching it with -splore to give us a games menu. The && sudo reboot bit means that if you exit Pico-8 using the menu options, it will then reboot the Raspberry Pi so you can get back to Pico-8 or hold L and start with Retropie.
And that’s it. If you want to make the most out of this you’ll need to have your Wi-fi configured in Retropie. There are loads of great games on Pico-8 to enjoy, and they all work really nicely with the Game HAT controls. If you plug a keyboard in you can even create your own games!
[Comments]
M1ch3L5 commented on
Hello,
i have prepared my raspi and Game HAT as described in the blog. I have installed retropi, added the configuration for the arcade_joysick_rpi, copied the Pico-8, install the wiringpi und modify the retropiscript. It works fine but i am not possible to use the joystick and the buttons in Pico-8. So my question: Is it necessary to install the mk_arcade_joystick_rpi? The retropi simulation works fine. How is the correct key configuration to use the buttons and the joystick? What i have to do?
It would be fine to get some hints.
Your Volker
omgmog commented on
Hi there, unfortunately I’m using my Pi in another project now so can’t confirm the settings.
You could try setting up the Game HAT manually as per the instructions here: https://www.waveshare.com/w/upload/2/22/Game_HAT_user_manual_en.pdf
and then follow my instructions for installing pico8 and making the changes in
/etc/profile.d/10-retropie.shHope that helps!
GitHub API rate limit exceeded. Comments available again at