

Es ist wieder soweit, ich habe den Dremel und Lötkolben geschwungen, dieses mal ging es einem Gameboy Pocket an den Kragen!
Auch hier galt wieder die Maxime: äußerlich möglichst unverändert, maximal großer Bildschirm, geringer Preis.
Der Plan
Gameboy Pocket-Umbau zum Retropie-Handheld.
Die nackten Fakten
- kompaktes Gameboy Pocket-Gehäuse, äußerlich nahezu unverändert
- Raspberry Pi Zero W (mit Wifi und Bluetooth)
- USB- und HDMI-Schnittstellen und die Micro-SD-Karte von außen zugänglich
- großes 2,8″-TFT-Display direkt per GPIOs angesteuert
- 1500mAh Li-Ionen-Akku für 3,5 Stunden Betrieb
- funktionierende original Ein-Aus-Schalter, Lautsprecher, Lautstärkeregelung, Kopfhöhrerbuchse und Ladebuchse
- 2 zusätzliche Schultertasten (für 4-Feuertasten-Konsolen-Emu)
Das Resultat
Der Pi Boy Pocket lebt!





Die Teile
Teiletechnisch gibt es einige Analogien zum Projekt des älteren, großen Bruders.
Ihr benötigt:
- einen (defekten) Gameboy Pocket (Ebay, ca 10 Euro)
- Raspberry Pi Zero W (ohne „H“, also ohne 40pol. Pinleiste, geizhals.de, 10 Euro)
- Micro-USB-OTG-Adapter, für kurzen Tastatur-Anschluss (z.B, 1,50 Euro bei Ebay)
- 2,8″-TFT-Display, mit ILI9341-SPI-Ansteuereung (6 Euro aus China, Ebay)
- Powerbank-Ladeelektronik (Ebay, 1 Euro aus China)
- Ladekabel mit 2,5/0,8 mm Hohlstecker, es passt ein für den Odroid-U3 (Pollin,1 Euro)
- Li-Ionen-Akku, z.B. NP95 für Fuji-Kamera (1500mAH), (Ebay, 5 Euro, Deutschland)
- Für den Analog-Soundausgang: ein paar Widerstände und Kondensatoren auf einem Stück Punktrasterleiterplatte, ca 1 Euro
- 1W-Digitalverstärker PAM8403 (Ebay, 1 Euro aus China)
- 2 Taster 10x10mm (Elektronik-Mehl, ca. 3 Euro)
- SD-Karte (min 2GB, ab 4 Euro)
- Magnete, um das Gehäuse zusammenzuhalten (Pollin, 1 Euro)
- (Flachband)Litzen, um alles mögliche zu verbinden. Z.B. alte IDE-Festplattenkabel (40pol,)
Summe: 40 Euro
Das Werkzeug
- Dremel mit Bohr- Fräs- und Schleifaufsätzen
- Lötkolben mit Bleistift-Spitze
- Satz kleine Feilen
- Heißklebepistole
- Sprühlack dunkelgrau
- Nagellackentferner acetonfrei
Das Gehäuse
Zunächst habe ich das Gehäuse geöffnet (6 Triwing-Schrauben, davon 2 im Batteriefach nicht vergessen). Danach habe ich alle Schrauben der Platine entfernt und diese herausgenommen sowie die Displayscheibe vorsichtig von innen herausgedrückt (ggf. mit nem Fön erwärmen, um den Kleber zu erweichen).

An folgenden Stellen habe ich die Gehäusehälften mit dem Dremel (hauptsächlich Stirnfräsenaufsatz) bearbeitet, siehe Bilder:
- Batteriefach entfernt, Schraubenhalterungen stehen lassen, um das Gehäuse wieder zusammenschrauben zu können.
- Den nicht sichtbarer Teil desSpielmodulschacht etwas verbreitert, so dass der Raspi dort hineinpasst.
- Den inneren Displayrahmen flachgeschliffen. Hierbei fallen leider auch die 4 oberen Gehäuseverschraubungen weg.
- Den Displayausschnitt seitlich vergrößert (einen schmaler Steg in der Vertiefung für die Scheibe stehen lassen, damit diese genug Auflagefläche hat). Zum Abschätzen das neue Display von innen gegen das Gehäuse halten, dann sieht man, wo Material entfernt werden muss, damit das Display ganz sichtbar ist. Wichtig: rundum einen schmalen Steg stehen lassen, damit die Displayscheibe überall aufliegen kann.
- Ausschnitte für 2 weitere seitliche Taster: 10x10mm-Taster, dazu die Öffnung der Gamelink-Buchse in der oberen Gehäusehälfte erweitert sowie auf der anderen Seite die Öffnung für den Kontrast-Regler in Ober- und Unterhälfte vergrößern.
- Am Raspi habe ich die hinteren Schraubenlöcher im 90-Grad-Winkelaufgefräst sowie den kleinen Kunststoffbügel zur Befestigung des Kamera-Flachbands abgeklippt.
- Die Micro-SD-Karte ragt über die Raspi-Platine hinaus, hier habe ich vorsichtig einen passenden Schlitz ins Gehäuse gefräst, so ist die SD-Karte von außen erreichbar und sitzt trotzdem schön fest in der Halterung.
So passt der Raspi ins Gehäuse.
Die Gameboy-Platine
Bei der Hauptplatine habe ich den Teil des Ein-Aus-Schalters, des Lautstärke-Potis sowie der Kontaktflächen für die Buttons stehen lassen. Den Rest habe ich mit dem Dremel ausgeschnitten (im Freien machen, faserverstärkte Platine!) und alle nicht mehr benötigte Bauteile abgelötet.
Die Kontaktflächen , auf die die Buttons drücken, haben je einen Massen- und einen Schaltkontakt. Diese habe ich an den Durchkontaktierungen der Platine abgegriffen. Die Masse-Durchkontaktierungen liegen nahe beieinander, ich habe sie zu einem „Common Ground“ verbunden und mit nur einer Litze auf die Masse zum Raspi geführt.
Die 8 Schaltkontakte habe ich auf die GPIOs des Raspis gelegt, siehe Schema.
Die Tasten lassen sich mit dem Retro-Game-Skript von Adafruit als Tastatur-Tasten ansprechen, siehe „Die Software“
Das Display
Mit vergrößertem Displayausschnitt am Gehäuse lässt sich ein 2,8″-Display unterbringen. Im Gegensatz zum vorherigen Projekt steuere ich das Display direkt per SPI (über die GPIO-Kontakte) an. Somit ist die Bildqualität deutlich besser und der Stromverbrauch wird gesenkt im Vergleich über die zusätzliche Signalwandlung und Rückwandlung über den TV-Out.
Ich habe mich für ein Display mit ILI9341-Treiberchip entschieden. Dieser ist sehr gängig und lässt sich nicht nur über notro/fbtft-„Treiber“ in
Raspbian ansprechen, sondern wird auch beim 2,8″ Adafruit-Display verwendet, für das ein schneller Treiber komfortabel per Skript installiert werden kann.
Das Adafruit-Skript basiert auf dem Treiber, der sehr tief konfiguriert werden kann. Mehr dazu unter „Die Software“.
Viele Displays werden mit zusätzlichem Frontglas für die Touch-Bedienung geliefert. Damit wird das Display allerdings zu dick, um es zwischen Gehäuse und Gamboyplatine (->Lautstärkepoti und Ein-Aus-Schalter) zu bekommen. Das Touch-Glas ist nur aufgeblebt und lässt sich mit dem Fingernagel vom Display lösen. Dann muss man noch das Flachbandkabel vom Touchscreen abschneiden.
Ich habe mir ein 2,8″-Display auf einer Platine mit ausgeführter Stiftleiste bestellt und so erstmal das Display mit Jumperkabeln mit einem weiteren Raspi mit Stiftleiste getestet. Für den Einbau ist die Platine zu groß. Ich habe ein Flachbandkabel (1mm Rasterweite, selten) auf die Platine gelötet, wo auch das Flexkabel aufgelötet ist. Das andere Ende auf die GPIOs des Raspi Zero (ohne Stiftleiste). Das ist ziemlich fummelig, die Rasterweite ist war bei meiner Displayplatine 0,8mm, da wird es mit dem 1,00mm-Kabel schon eng. Direkt ans Flexkabel des Displays würde ich nicht löten, die Gefahr ist zu groß, das Flexkabel zu verbrennen oder etwas abzureißen.
Nachdem die direkte Verbindung auch funktionierte, habe ich die Platine bis auf das kleine Stück mit dem aufgelöteten Flexkabel abgesägt.
Alternativ kauft man ein nacktes (ohne Platine) Display und verbindet es mit dafür vorgesehenen Adapterplatinen, die Lötpunkte im 2,54mm-Raster bereitstellen. Das macht das ganze deutlich einfacher. Zu beachten ist, dass das Rastermaß von Display und Adapterplatine passen muss. Es gibt sie zum Löten oder mit Klemmkontakt.
Hier die Belegung des Displays. Die Bezeichnungen können abweichen, deshalb die gängigsten:
| GPIO Header Pin | Kennzeichnung Display |
| 22 | DC/RS/A0 |
| 24 | CS |
| 19 | MOSI/SDA |
| 21 | MISO/SDO |
| 23 | SCLK/CLK |
| 25 | GND |
| 3 | RESET |
| 1 | 3,3V |
| 1 | LED |

Das Reset-Signal liegt auf einem GPIO-Pin mit 3,3V Dauerplus. Das kann auch GPIO 2 sein, da dieser über einen Pullup-Widerstand verfügt.
Die LEDs liegen direkt auf Masse und 3,3V. Es wird kein Vorwiderstand benötigt, da 3,3V exakt der Arbeitspunkt der LEDs (lt. Datenblatt) ist. So weit ich das verstanden habe, bietet der Adafruit-Treiber auch keine PWM-Steuerung über einen GPIO. Möglich wäre noch, die Anode der Hintergrundbeleuchtung über ein niederohmiges (100Ohm) Rändel-Poti zu führen und dies im Batteriefach zu verbauen.
Die Lackierung
Die original Lackierung der Gameboy-Scheibe passt von der Höhe her sehr gut, an den Seiten ist sie für das neue Display zu breit. Also weg mit der seitlichen Lackierung und einen schmaleren Rand nachlackieren.
Dazu habe den oberen und unteren Streifen der Lackierung (die soll bestehen bleiben) auf voller Breite mit Tesa abgeklebt. Die seitliche Lackierung habe ich mit acetonfreiem Nagellackentferner und einem Tuch/Q-Tips entfernt. Wichtig ist, dass es acetonfreier Reiniger ist. Acton greift nicht nur die Lackierung, sondern auch den Kunststoff an und der wird dann matt.
Die Stromversorgung
Mittlerweile dürfen keine „nackten“ Li-Ionen-Akkus mehr per Flugpost (=Ebay aus China) verschickt werden, was die Beschaffung einzelner Akkus nicht einfacher macht. Alternativ lassen sich günstig Akkus für Kameras usw. aus Deutschland beziehen. Ich nutze den Akku „NP95“, der für Fuji-Kameras verwendet wird. Um das Plasikgehäuse erleichtert, läuft sie nun an der Ladeelektronik einer Einzellen-Powerbank.
Der 5V-Ausgang der Powerbank-Platine geht auf den original Ein-Aus-Schalter. Dessen Schaltkontakt versorgt dann den Raspi als auch den Sound-Verstärker.
Eingangsseitig bekommt die Powerbank-Platine ihren Strom vom original 2,5/0,8mm Hohlstecker an der Unterseite des Pockets.
Als Ladekabel bietet sich fertig konfektioniert, USB auf Hohlstecker, das Kabel eines Odroid U3 an.
Der Sound
Der Raspi Zero verfügt eigentlich über keinen analogen Soundausgang. Allerdings lässt sich der Analogsound über den PWM-Ausgang ausgeben. Der Raspi verfügt über 2 PWM-Ausgänge (wofür einer jedoch je nach Display/Displaytreiber für die Helligkeitsregelung genutzt wird). Im Zweifelsfalle muss man sich mit Monosound zufrieden geben.Hinter dem PWM-Ausgang kommt noch eine kleine Filterschaltung, die man kompakt aus diskreten Bauteilen auf einer Punktrasterplatine erstellen kann. Dessen Ausgang geht über das Lautstärkepoti auf eine kleine Verstärkerplatine und parallel auf den Kopfhöhrerausgang.
Schaltbild der Filterschaltung: siehe Adafruit. Man kann die Dioden weglassen. Man benötigt also jeweils 2x
270 Ohm Widerstände
150 Ohm Widerstände
10uF Elkos
33nF Kondensatoren
Das ganze lässt sich platzsparend und mit kurzen Lötstrecken auf einer Lochrasterplatine unterbringen. Die kleine Schaltung kommt an die Stelle, an der die ursprüngliche Verstärkerschaltung des Pockets saß, also gegenüber des Lautsprechers.



Darüber habe ich den Digitalverstärker PAM8403 plaziert, er wird von einer Schraube gehalten. Leider habe ich kein passendes Foto. Vllt. wenn ich den Pocket mal wieder aufschraube…
Der Verstärker verfügt über eine Mute-Schaltung, sobald man den entsprechenden Pin auf Masse legt. Das soll passieren, sobald eine Kopfhörer eingesteckt wird. Die originale Kopfhöhrerbuchse hat einen „Stecker-ist-drin“-Kontakt. Leider wir der Kontakt geöffnet, wenn man einen Stecker einsteckt. Genau das Gegenteil von dem, was ich am Mute-Eingang des Verstärkers brauche. Also den Mute-Kontakt des Verstärkers als auch den „Stecker-ist-drin“-Kontakt der Buchse auf ungenutzte GPIO-Pins legen.
Dazu ein kleines C++-Programm schreiben, das nichts anderes tut, als das eingehende Signal zu invertieren. Also eine „NOT“-Schaltung. Siehe „Die Software“.
So sieht die Schaltung dann in Gänze aus:

Die Software
Retropie Installieren
Zunächst habe ich das aktuellste Image von Retropie für den Raspi 0/1 heruntergeladen und mittels Win32 Disk Imager auf die Micro-SD-Karte kopiert.
Nach dem Kopieren des Images kommt die Karte in den Raspi. Dieser ist mit USB-Tastatur und HDMI-Bildschirm verbunden.
Erster Start und Tastatur einrichten
Nach dem ersten Start, bei dem die Partitionsgröße automatisch angepasst wird, habe ich die Tastatatur in Retropie als Eingabe konfiguriert:
| Keyboard | Retropie |
| Cursor auf | up |
| Cursor ab | down |
| Cursor links | left |
| Cursor rechts | right |
| A | A |
| Q | B |
| S | X |
| W | Y |
| Enter | Start |
| Leertaste | Select |
| Leertaste | Hotkey |
WLAN und SSH einrichten
SSH aktivieren
Wählt im Menü „Retropie“ den Eintrag Raspi-Config aus. Im Konsolen-Menü wählt ihr dann den Eintrag interfacing options >> SSH >> Enable
Konsole nutzen
Installiert das Terminal-Tool Puty auf einem Beliebigen PC/Laptop im gleichen Netzwerk wie der PiBoy. Ruft das Programm auf und gebt als Hostnamen „retropie“ ein.

In der Konsole werdet Ihr nach User und Kennung gefragt:
username: pi
password: raspberry
Alle weiteren Einstellungen auf dem Retropie könnt ihr nun bequem über Puty auf einem PC/Laptop erledigen. Nach jedem Neustart des Raspis müsst ihr die Verbindung über Puty neu aufbauen!
Display installieren
Nutzt hierzu die Anleitung von Adafruit für das Installations-Script.
Wählt im Installationsmenü folgende Einstellungen aus:
PiTFT Selection: #1
Rotation: #2
Appearance: PiTFT as HDMI Mirror
Nach einem Neustart solltet ihr nun das Retropie-Menü auf dem Display sehen!
Retrogame installieren
Das Retrogame-Script von Adafruit mapt die Gameboy-Buttons auf Tastaturkommandos.
Installiert das Script nach der Anleitung von Adafruit.
Anschließend müsst ihr die retrogame.cfg editieren. Startet dazu in der Putty-Konsole den Editor „nano“:
sudo nano /boot/retrogame.cfg
Fügt in der retrogame.cfg nun folgende Zeile hinzu und speichert anschließend mit Strg+X. Mit „Y“ das Speichern bestätigen.
LEFT 5 # Joypad left RIGHT 6 # Joypad right UP 19 # Joypad up DOWN 26 # Joypad down LEFTSHIFT 16 # 'A' button Q 12 # 'B' button W 21 # X S 23 # Y SPACE 20 # 'Select' button ENTER 4 # 'Start' button F12 20 4 # F12 wenn Space und linke Schulter ESC 21 23 # ESC wenn linke und rechte Schulter
Soundausgang einstellen
Die beiden PWM-GPIO-Pins des Raspis müssen aus Sound-Ausgang konfiguriert werden. Dies geschieht über die config.txt.
Startet dazu in der Putty-Konsole den Editor „nano“:
sudo nano /boot/config.txt
Fügt in der config.txt nun folgende Zeile hinzu und speichert anschließend mit Strg+X. Mit „Y“ das Speichern bestätigen.
dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4
Nun müsst ihr noch die Sound-Ausgabe im Mixer hochstellen
Kopfhörer-Erkennung
Hier gibt es sicherlich noch Optimierungsmöglichkeiten, ich bin kein Entwickler.
Zunächst eine Bibliothek installieren (WiringPi), mit der man die GPIOs ansprechen kann. WiringPi hat (leider) die Besonderheit, die GPIOs nach eigenem Muster zu nummerieren.
Installiert WiringPi:
sudo apt-get install git git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
Ruft den Editor nano auf
sudo nano /home/pi/RetroPie/kopfhoerer.c
Fügt folgenden Code ein uns speichert anschließend mit Strg+x ab, mit „Y“ bestätigen.
#include <stdio.h>
#include <wiringPi.h>
// NOT-Schaltung von GPIO 11 (0)auf GPIO 13 (2)
int main (void)
{
wiringPiSetup () ;
pinMode (0, OUTPUT) ;
pinMode (2, INPUT) ;
if (digitalRead (0) == 0)
{digitalWrite (2, 1) ;}
else
{digitalWrite (2, 0) ;}
delay (1000) ;
}
return 0 ;
}
Danach das C++-Programm kompilieren
gcc -Wall -o /home/pi/RetroPie/kopfhoerer /home/pi/RetroPie/kopfhoerer.c -lwiringPi gcc -Wall -o kopfhoerer kopfhoerer.c -lwiringPi
Testweise ausführen
sudo /home/pi/RetroPie/kopfhoerer
Fügt für den Autostart folgende Zeile in die etc\rc.local ein:
#Kopfhoerererkennung
sudo /home/pi/RetroPie/kopfhoerer &
Strom sparen
Der Akku ist mit 1500mAh recht knapp bemessen. Leider habe ich noch keinen größeren gefunden, der ins Gehäuse passt. Daher ist Stromsparen angesagt!
So wie der Raspi dasteht, zieht er knapp 300mA am 5V-Ausgang der Ladeelektronik.
Beherzigt ihr alle Stromspar-Tricks, verringert sich der Strombedarf auf etwa 210mA! Das ergibt einiges an Akkulaufzeit.
Mit dem verbauten Akku kann ich dann knapp 3,5 Stunden zocken.
Wenn das nicht reicht, kann man einfach ein USB-Netzteil oder eine Powerbank an die Micro-USB-Stromversorgung des Raspis hängen. Dann aber bitte den Schiebeschalter auf „AUS“ stellen, sonst versucht die Ladeelektronik auch noch ihren Teil dazu beizutragen. Könnte ungesund für die Ladeelektronik sein…
Kopfhöhrerbuchse nutzen
Steckt ihr einen Kopfhöhrer ein, wird der Lautsprecher-Verstärker in den Mute-Modus versetzt. Spart 15mA!
LED ausschalten
Die LED auf dem Raspi lässt sich ausschalten. Bringt 5mA.
Fügt dazu in der config.txt folgende Zeilen ein:
# LED ausschalten
dtparam=act_led_trigger=none
dtparam=act_led_activelow=on
Retropie-Stromsparmodus aktivieren
Ohne ausgeführtem Emulator hat die Retropie-Oberfläche eine recht hohe Prozessorlast. Im Menü gibt es eine Stromspar-Eintrag. Hier „Instant“ auswählen. Bringt 40mA!
WLAN aus- und anschalten
Ist der Raspi mittels WLAN mit einem Router verbunden, zieht das WLAN-Modul auch im Leerlauf Strom. Schaltet man das WLAN-Modul aus, spart man 20mA
Mittels 2er kleiner Skripte lässt sich das WLAN aus- und einschalten. Um die Skripte von der Retropie-Oberfläche direkt aufrufen zu können, legt die Skripte in den ROM-Ordner für DOSBOX-Spiele ab:
Verzeichnis home\pi\RetroPie\roms\pc
wlandown.sh
sudo ifconfig wlan0 down
wlanup.sh
sudo ifconfig wlan0 up
Fügt für den Autostart folgende Zeile in die etc\rc.local ein:
#WLAN ausschalten
sudo /home/pi/RetroPie/roms/pc/wlandown.sh








