Building a Game Boy Pocket Color

I’ve always thought the Game Boy Pocket was the sleekest looking model of the Game Boy line. Even after the Game Boy Color came out with its undeniably sharper looking color screen, I thought the GBC itself looked quite bulky and ugly in comparison. And apparently I’m not alone in thinking this, because over the last couple of years there have been several projects to recreate the GBC so it fits inside a GBP shell. I decided to build one of these ultimate Pockets for myself.

Continue reading “Building a Game Boy Pocket Color”

Adding 2 MB RAM to Amiga 500 revision 3

The RAM expansion I’ll talk about in this post is this one, designed by PeteAU with improvements by Mathesar, over at the English Amiga Board. When fully populated and with the use of a Gary adapter, it is capable of adding 1.5MB of slow RAM and 512k of chip RAM to an A500. If you don’t need/want the chip RAM part you only have to use the Gary adapter and connect two pins on it with corresponding pins on the expansion board. No cutting of traces at all!

Continue reading “Adding 2 MB RAM to Amiga 500 revision 3”

Disabling the audio filter on revision 3 Amiga 500

All Amiga computers, the A500 included, have a low-pass filter applied to the audio output. On most of them this filter is able to be toggled on or off in software, but on the Amiga 1000 as well as the revision 3 A500 it is permanently on. This post describes how to permanently disable it instead.

Continue reading “Disabling the audio filter on revision 3 Amiga 500”

Repairing and restoring an Amiga 500 “Space Invaders” keyboard

With the early revision A500 resurrected again, it soon become obvious that there were more things to fix on it. One of the first things I noticed was that the keyboard was in need of repair. For one thing it was disgusting looking, with dirt and grime all over, and someone had used a pencil to draw crosses on most of the keys for whatever reason. But more importantly, some of the keys didn’t seem to work.

Disgustingly filthy keyboard
Continue reading “Repairing and restoring an Amiga 500 “Space Invaders” keyboard”

Resurrecting an Amiga 500 from the green screen of death

For the past 15 or so years I have been in possession of an Amiga 500 that only boots up to a green screen. I was supposed to buy it off of a friend, but it already had the issue when we tested it out so I got it for free. The machine had been my friend’s older brother’s back in the day. Other than that I didn’t know much about it. I only knew that a green screen meant it was some sort of memory issue, as I’d have learnt from asking about it on some forum (likely eab) at the time. That sounded too complicated to fix for me back then, so I just put it away and mostly forgot about it.

Continue reading “Resurrecting an Amiga 500 from the green screen of death”

Getting rumble on the 8BitDo SN30 Pro+ to work properly with Linux

TLDR: After having owned the controller for a while I noticed that every time you install a new kernel update the fixes are undone again, and have to be re-applied. I also discovered that the controller UID is the same for all SN30 Pro+ controllers. So I’ve made the following script that fixes everything automatically instead. Save it somewhere, check that the config file paths are correct, install xpadneo using the github instructions, then run the script as root.

#!/bin/bash

if [[ $EUID -ne 0 ]]; then
    echo "This script must be run as root"
    exit 1
fi

# Config file paths
MP_PATH="/etc/modprobe.d/99-xpadneo-bluetooth.conf"
UDEV_PATH="/etc/udev/rules.d/99-xpadneo.rules"
ENV_PATH="/etc/environment"

# Look for already applied fixes
MPFIXED=$(grep -c "disable_ff=2" $MP_PATH)
UDEVFIXED=$(grep -c "RUN+=\"/bin/sh -c 'echo xpadneo udev: \$kernel > /dev/kmsg && { echo \$kernel > /sys/bus/hid/drivers/hid-generic/unbind; echo \$kernel > /sys/bus/hid/drivers/microsoft/unbind; echo \$kernel > /sys/bus/hid/drivers/xpadneo/bind; }; '\"" $UDEV_PATH)
ENVFIXED=$(grep -c "8BitDo SN30 Pro+" $ENV_PATH)

if [[ $MPFIXED -eq 0 ]]; then
  # Turn off trigger rumble
  echo "options hid_xpadneo debug_level=0 disable_ff=2 trigger_rumble_damping=4 fake_dev_version=4400 combined_z_axis=n" >> $MP_PATH
  echo "Applied fix to $MP_PATH."
else
  echo "Fix already applied to $MP_PATH. Skipping."
fi

if [[ $UDEVFIXED -eq 0 ]]; then
  # Apply dirty fix to udev rules
  sed -i 's/RUN/#RUN/g' $UDEV_PATH
  echo "RUN+=\"/bin/sh -c 'echo xpadneo udev: \$kernel > /dev/kmsg && { echo \$kernel > /sys/bus/hid/drivers/hid-generic/unbind; echo \$kernel > /sys/bus/hid/drivers/microsoft/unbind; echo \$kernel > /sys/bus/hid/drivers/xpadneo/bind; }; '\"" >> $UDEV_PATH
  echo "Applied fix to $UDEV_PATH"
else
  echo "Fix already applied to $UDEV_PATH. Skipping."
fi

if [[ $ENVFIXED -eq 0 ]]; then
  # Add SDL_CONTROLLERCONFIG environment variable
  echo "SDL_GAMECONTROLLERCONFIG=\"050000005e040000e002000030110000,8BitDo SN30 Pro+,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,\"" >> $ENV_PATH
  echo "Added 'SDL_CONTROLLERCONFIG' variable to $ENV_PATH."
else
  echo "'SDL_CONTROLLERCONFIG' variable already present in $ENV_PATH. Skipping."
fi

Original post follows:

I recently bought an 8BitDo SN30 Pro+ since my old gamepad was an ancient Logitech Dual Action. I wanted a gamepad that was wireless as well as having support for XInput. When I heard about the SN30 Pro+ I couldn’t contain myself, so I went and bought it the same day after reading a bit about it and how it works on Linux. It’s not officially supported, and there wasn’t really much definitive information regarding Linux compatibility, other than that the older SN30 Pro worked fine and it works on the raspberry pi. So I just took a gamble and bought it.

Continue reading “Getting rumble on the 8BitDo SN30 Pro+ to work properly with Linux”

Moving the server’s physical location, and carrier-grade NATs.

So for the past several years, my server that is hosting this blog has been located at my father’s place. The only real reason for this was because his upload speed was 100Mbit/s and the one I have at home is 100Mbit down, but only “up to” 10Mbit/s upload. So even though it made it slower to access files on the server from my own home compared to if I just had it located there, it made more sense to have it at my father’s since it would mean that everyone that accesses it has the potential of downloading from it at 100Mbit/s.

But now, an era has passed, and my father is switching to a new ISP. In fact, he’s switching to the same ISP that I have at home, ComHem. Which means the upload speed at his place will also be “up to” 10Mbit/s. So after learning this I decided that it was time to move the server to my home instead, since now the upload speed will be the same regardless. And it also means that while I am at home I have gigabit access to the files which is nice.

Continue reading “Moving the server’s physical location, and carrier-grade NATs.”

Game Collection Manager project

TLDR: I made a Game Collection Manager in Python/QT. Check it out.

A few months ago I wanted to play something from my collection, but I couldn’t decide what. I now have over 500 games in my collection, so it can be a bit overwhelming to choose. But since I already had my collection in a spreadsheet on Google docs, I thought what if I just download that as csv files and write a simple Python application that chooses for me. This idea eventually grew into a bigger project which manages a game collection. Oh and yeah, I didn’t actually play anything that day…

Continue reading “Game Collection Manager project”