GameBoy Pi A+

  • Nintendo GameBoy 2.0 Spielen anno 1990 :bravo2::bravo2:





    Hallo zusammen, ich möchte euch hier mein kleines Projekt vorstellen. Vor kurzem ist mir mein alter GameBoy in die Hände gefallen und nach einem erfolglosen Funktionstest kam mir die Idee einen Pi darin zu verbauen und ein RPi-Display der Firma Watterott zu verwenden. An dieser Stelle sei auch noch ein dickes fettes Dankeschön an Herrn Watterott zu erwähnen, falls er dies hier liest, wird er wissen warum :bravo2:


    Mein Ziel ist es den GameBoy bzw. den Display-Ausschnitt nicht zu verändern, damit er von jeglichen Proportionen wie ein originaler GameBoy wirkt. Damit er auch gut funktionieren wird und auch schick aussieht, habe ich sämtliche Gehäuseteile, alle Gummis unter den Buttons und die Buttons selbst, durch Neuteile ersetzt. Für das Projekt hab ich mir bei Ebay ein Set von vier defekten GameBoys gekauft, somit konnte ich an einigen dieser Gehäuse die optimale Lage für den Pi ermitteln. Zufälligerweise war eins dieser Cases trotz des Alters von 25 Jahren in erstaunlich gutem Zustand :thumbs1: Dieses hab ich für die Restauration meines originalen GameBoy verwendet, das Gehäuse hab ich in heißem Wasser eingelegt und mit Omi´s Gebissreiniger-Tabs und einer Zahnbürste gereinigt. Das Top-Ergebnis seht ihr ja oben auf dem Foto ;) Doch nun wieder zum eigentlichen Thema.


    Die benötigte Hardware:


    1. GameBoy (defekt) http://www.ebay.de
    2. Raspberry Pi Model A+ http://www.watterott.com/de/Ra…ll-A-256MB-RAM-UK-Version
    3. Display 2.8" http://www.watterott.com/de/RPi-Display-Flex-Edition
    4. DMG Control Panel http://store.kitsch-bent.com/p…mon-ground-dmg-button-pcb
    5. Ein GameBoy Spiel zum verschließen der Rückseite (optional)
    6. Mini Audio Verstärker http://www.ebay.de/itm/PAM8403…t%3D2%26sd%3D281527846515
    7. Micro-Taster http://www.ebay.de/itm/10x-Mic…mente&hash=item48793c00ab
    8. Zwei Stecker mit Kabel für die GPIO Leiste http://www.google.de/imgres?im…0&ndsp=27&ved=0CCsQrQMwAw
    9. Stromversorgung 5V (ich hatte schon einen Lade-Akku fürs Handy)


    Optional:


    1. Gehäuse neu http://asmretro.com/dmg-shells
    2. Display-Scheibe neu http://asmretro.com/diy-gameboy-parts/screen-covers
    3. Display-Scheibe neu original http://www.ebay.de/itm/2613622…geName=STRK%3AMEBIDX%3AIT
    4. http://asmretro.com/dmg-buttons-v1


    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Benötigtes Werkzeug:


    1. Tri-Wing Schraubendreher (falls GB noch originale Schrauben hat)
    2. Lötstation, mindestens Lötkolben
    3. Dremel oder ähnliches
    4. Multimeter
    5. Satz Schlüsselfeilen
    6. Cuttermesser
    7. Heißklebepistole
    8. Isolierband


    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Ich gehe davon aus, dass ich nicht erklären muss wie man einen GameBoy zerlegt, wer es nicht genau weiß, naja, der kann dann eh aufhören weiter zu lesen :fies: Zuerst müssen wir das Gehäuse des GameBoy etwas ausweiden, dazu habe ich einen Dremel, Skalpell und einen Satz Schlüsselfeilen verwendet. Der Raspberry A+ passt wirklich sehr sehr gut rein, nachdem man ein paar Stellen bearbeitet hat. Und wer sich an meine Anleitung hält, hat auch keine Probleme das Gehäuse mit allen sechs originalen Verschraubungspunkten wieder zu verschließen, ebenfalls der Batteriedeckel hält wie beim Original.



    1. Arbeitsschritt: Rückseite bearbeiten



    So in etwa sollte die Rückseite nun aussehen. Lieber vorsichtig mit dem Dremel arbeiten als zuviel weg geschnitten ;) Der trapezförmige Ausschnitt ist für das Flachbandkabel des Flex-Displays und der kleine eckige Ausschnitt darüber ist für den einzigen zusätzlichen Button, den man zum Verlassen des Spiels benötigt. Für das Trapez hab ich mit dem Dremel und einer Mikro-Flexscheibe drei Schnitte gemacht, das geschmolzene Plastik mit einem Cuttermesser entfernt und das Loch für den Button wurde erst mit 5mm gebohrt und anschließend auf das Maß des Schalters gefeilt. Das Batteriefach wird ebenfalls mit der Mikro-Flexscheibe aufgeschnitten und mit einem kleinen Rundfräser so bearbeitet bis es (in etwa) so wie auf dem rechten Foto zu sehen ist. Da sieht man auch meine Lösung um das kleine Audio-Board zu befestigen, ein 2x2 LEGO Stein :lol: Einen weiteren LEGO Stein hab ich mit Heißkleber unter das Audio-Board geklebt. Somit, ein Klick und fest :D Durch das Loch auf der linken Seite des Batteriefachs wird später das Kabel für die Stromversorgung geführt, ich habe es mit 4mm gebohrt.



    2. Arbeitsschritt: Vorderseite bearbeiten



    An der Frontteil des GameBoys muss wirklich nicht viel mit dem Dremel weg gefräst werden. Lediglich die Fassung für die LED und vier kleine Bolzen seitlich des Displayausschnitts habe ich entfernt und schon liegt das neue Display recht gut an seinem Platz. Es reicht vollkommen aus das Display mit Doppelklebeband zu befestigen, da es später eh ziemlich eng wird halten zwei kleine Streifen Klebeband das Display an Ort und Stelle. Auf dem Foto sieht man, das ich schon das DMG Control Panel eingebaut habe, damit die Buttons da bleiben wo sie hin gehören. Sinnvoll, aber nicht unbedingt nötig, ist das Vergrößern der Aussparung für den Kontrastregler wie auf dem rechten Foto zu sehen. Dadurch lässt sich später, wenn auch etwas mühevoll, die SD-Card des Raspberrys mit einer Pinzette entfernen. Ist zwar ein Gefummel, aber immer noch bei weitem besser als das Gehäuse komplett öffnen zu müssen um an die SD-Card zu kommen. Nachdem das Frontteil bearbeitet wurde kann man schon gut erkennen, dass es wieder ein GameBoy wird :thumbs1:



    3. Arbeitsschritt: Hardware einpassen und bei Bedarf Gehäuse nacharbeiten


    Wenn die Rückseite und das Frontteil soweit bearbeitet wurden wie hier beschrieben, kann man jetzt schon mal zum Probieren den Raspberry in sein neues Zuhause setzen und falls noch irgendwo etwas klemmt, muss der Dremel nochmal ran.



    4. Arbeitsschritt: GB Mainboard bearbeiten:



    Da ich für mein Projekt mehrere defekte GameBoys in der Bucht erworben hab, allesamt mit Displayschaden, war mir es ziemlich egal wie ich die Innereien des Nintendo-Opa schänden muss :lol: Los geht´s, das originale Display vom Mainboard entfernen, dann wieder den Dremel inkl. Flexscheibe zur Hand genommen und das Mainboard, wie auf dem linken Foto zu sehen, soweit zerschneiden, dass nur noch ein schmaler u-förmiger Streifen übrig bleibt. Auf diesem Streifen habe ich in der Mitte sämtliche elektronischen Bauteile ausgelötet und danach den Micro-Taster festgeklebt, gleichzeitig ist der Heißkleber auch Isolator zwischen den Platinen. Auf dem rechten Foto sieht man, dass ich diese kleine Platine doch noch mal etwas nacharbeiten musste, weil der Raspberry nicht genügend Platz hatte. Je nachdem wie der Raspberry im GB Case sitzt, muss diese Platine individuell nachbearbeitet werden. Im rechten Foto ist das zu erkennen, in welcher Position der Raspberry später verbaut wird ebenfalls.



    5. Arbeitsschritt: Hardware einbauen und die Kabel verlegen



    Bevor der Raspberry endgültig im GB Case eingesetzt wird, sollte man noch schauen ob und wo freiliegende Kontakte sind und diese dann mit Isolierband abkleben. Wenn bis jetzt noch nicht geschehen, muss nun der GPIO-Adadpter gelötet werden. Wie zu erkennen ist, habe ich mich dazu entschieden, die 26-polige Buchsenleiste zu verbauen, da mir dann noch genau für meine Zwecke ausreichende 12 GPIOs zur Verfügung stehen. Als nächstes kommen die zwei 6-poligen Platinenverbinder an die Reihe. Dazu habe ich zuerst jeden Kabelstrang verschieden farbig markiert. Extra dazu habe ich noch aufgeschrieben welcher GPIO welche Kabelfarbe hat, denn zum Anschließen des DMG Control Panels ist dies sehr hilfreich. An der inneren GPIO-Leiste (die ungeraden Pins) habe ich die Buttons für das D-Pad angeschlossen und an die äußere GPIO-Leiste die restlichen Buttons. An den Raspberry selbst habe ich an der Unterseite Kabel für die Stromversorgung angelötet und für das Audio-Signal ebenfalls zwei Kabel nahe der Kopfhörerbuchse angelötet.


    Die Pins sind bei mir so belegt:


    PP1 ---> 5V+
    PP3 ---> Masse


    PP24 --> Audio Minus
    PP26 --> Audio Plus


    Pins bitte stets mit dem Multimeter prüfen um eventuelle Fehler auszuschließen!



    Die Stromversorgung für das Audio-Verstärker-Modul habe ich ebenfalls auf die Pins PP1 und PP3 gelötet. Jetzt kann man schon das Display im Frontteil befestigen, wie gesagt, zwei Streifen Doppelklebeband sind vollkommen ausreichend. Danach habe ich die letzten neun Kabel an das DMG Control Panel gelötet. Jetzt kann man damit beginnen alles zusammen zu bauen, bei mir war das ein ziemliches Gefummel mit den ganzen Kabeln, aber dennoch passt es irgendwie doch alles rein :D Ich habe dazu mit der Pinzette die Kabel teils einzeln an die richtige Stelle geschoben, gezogen und gedrückt bis nix mehr geklemmt hat. Die letzte Arbeit mit dem Lötkolben waren die zwei Kabel für den Lautsprecher, diese hab ich erst angelötet nachdem ich mir ziemlich sicher war das ich das Gehäuse vorerst nicht mehr öffnen muss. Leider nur ziemlich sicher gewesen, weil ich beim Einbau mit meinen Fettfingern auf das Display gelangt habe und vergessen hab es abzuwischen:no_sad: Naja, beim Spielen sieht man jedenfalls nix mehr von den Fettfingern, werd den GameBoy aber demnächst nochmal zerlegen und das Display reinigen.



    Hier ist schon das Ergebnis zu sehen. Alles eingebaut und abschließend noch ein kleines Loch ins den Batteriefachdeckel gebohrt um das Stromkabel nach außen zu führen. Wenn alles ausgiebig getestet wurde, dann heißt es:


    Glückwunsch, ein GameBoy 2.0 wurde geboren :lol:

  • Hier sind ein paar Fotos von den jeweiligen Emulatoren, da meine Aufmerksamkeit hauptsächlich auf den GameBoy-Spielen liegt, habe ich trotzdem noch weitere Spiele verschiedener Konsolen hinzugefügt. Klar fehlen zur vollständigen Bedienung eines SNES oder MegaDrive Spiels noch einige Buttons, aber meine Lieblingstitel wie die Sonic Reihe von SEGA oder Super Mario World auf dem SNES, sind trotzem spielbar weil nicht unbedingt alle anderen Buttons benötigt werden. Spiele vom NES, GBC und MasterSystem sind voll spielbar, da diese Konsolen gleich viel bzw. weniger Buttons im Controller hatten. Sobald ich die Zeit dazu finde, werde ich noch einige GameGear Spiele hinzufügen. Und damit das Ergebnis auch hübsch aussieht habe ich für die jeweilige Konsole ein passendes Hintergrundbild in die Emulationstation-Theme eingefügt.


  • Eigentlich wollte ich ja nicht so ausführlich auf die Software eingehen, aber ich hoffe das einige Leute es nützlich finden wenn ich meine Vorgehensweise etwas erkläre. Also zu allererst macht man sich eine SD-Card mit einem frischen Raspbian und lädt die Setup-Dateien von RetroPie runter oder man nimmt ein fertiges Image von RetroPie. Dies basiert bekanntlich auf Raspbian und weil ich einen RPi A+ verwende habe ich mich für ein fertiges RetroPie v1.10.1 entschieden, habe es dann noch mit


    Code
    sudo apt-get update


    auf einen aktuellen Stand gebracht und mich dann erst mal gar nicht weiter um RetroPie gekümmert, da meine Priorität erst mal auf dem Display von Watterott lag. Dieses kann ich im übrigen sehr empfehlen, weil es bezüglich Framerate beim Spielen wirklich wunderbar ist :thumbs1: Für das Display wird aber ein spezieller Kernel benötigt, der mit folgenden Befehlen installiert wird. Übrigens habe ich mir nicht die Mühe gemacht die Befehle von Hand einzugeben, dazu habe ich WinSCP inkl. Putty verwendet, weil das RetroPie von Anfang an direkt ins Frontend bootet war das auch noch ganz gut. Mit WinSCP konnte ich gewisse Dateien leichter bearbeiten als mit dem nano-Editor am Raspberry. Auch zu erwähnen ist, das ich sämtliche Arbeiten an der Software mit einem Raspberry B gemacht habe und zum Testen nur die SD Card gewechselt habe. Wer keinen weiteren Raspberry hat muss sich einen passenden WLAN Adapter kaufen um den A+ ans Web zu bringen.


    Zuerst aber noch schnell die Tastatur und die Locales auf deutsch einstellen, SD-Card expandieren und (nicht unbedingt notwendig) das Overclocking auf Medium gestellt mit


    Code
    sudo raspi-config



    Installation von "rpi-update" für das Update des Kernels:


    Code
    sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update
    sudo chmod +x /usr/bin/rpi-update



    In dieser Datei muss man den "spi-bcm2708" Eintrag entfernen oder auskommentieren:


    Code
    sudo nano /etc/modprobe.d/raspi-blacklist.conf



    Start des Kernel Updates:


    Code
    sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update


    Danach einen Neustart durchführen


    Code
    sudo reboot



    Jetzt hat man schon mal alle nötigen Treiber für das Display da diese ein Bestandteil des neuen Kernels sind. In folgender Datei


    Code
    sudo nano /etc/modules


    diese zwei Zeilen


    Code
    fbtft dma
    fbtft_device name=rpi-display speed=32000000 rotate=270


    hinzufügen. Je nachdem wie das Display eingebaut ist kann man hier noch die Drehung des Displays einstellen. Nach einem weiteren Neustart sollte jetzt schon zumindest die Hintergrundbeleuchtung des Displays funktionieren. Als nächstes braucht man noch ein Tool welches den Framebuffer auf das kleine Display leitet. Dies wird mit folgenden Befehlen installiert.


    Code
    sudo apt-get install cmake
    git clone https://github.com/tasanakorn/rpi-fbcp
    cd rpi-fbcp/
    mkdir build
    cd build/
    cmake ..
    make
    sudo install fbcp /usr/local/bin/fbcp


    Danach eventuell noch einen Neustart durchführen und mit dem nächsten Befehl sollte eigentlich auch gleich das Startbild von RetroPie zu sehen sein. Wie gesagt, ich habe es mit Putty über die SSH Verbindung gemacht.


    Code
    sudo fbcp &


    Jetzt könnte man schon RetroPie mit der Tastatur etwas konfigurieren, da am Ende ja kein Controller benötigt wird, sondern die Buttons des GameBoys. Dazu aber später mehr.


    Als nächstes hab ich mir ein kleines Script gebastelt, damit das "fbcp" beim Booten ebenfalls gestartet wird. Das Script namens RPi-Display liegt im Ordner

    Code
    /etc/init.d


    Folgenden Inhalt einfügen und speichern.


    Um auf Nummer sicher zu gehen dass das Script auch ausführbar ist, setze ich noch die Eigenschaften mit

    Code
    sudo chmod +x /etc/init.d/RPi-Display
    sudo chown root:root /etc/init.d/RPi-Display


    Der zweite Befehl setzt die Besitzer-Eigenschaften auf Root und der folgende registriert das Script im Autostart

    Code
    sudo update-rc.d RPi-Display defaults



    Nach einem Neustart sollte das Display nun automatisch starten und auch nach einer gewissen Wartezeit ist der Startbildschirm von RetroPie zu sehen. Glückwunsch :bravo2:


    Dann habe ich mit einer USB Tastatur den Input des EmulationStation Frontends kunfiguriert und handschriftlich notiert. Ist hilfreich später beim Kompilieren des Adafruit Programms. Dieses Programm hab ich hier https://github.com/adafruit/Adafruit-Retrogame als zip Datei auf meinen Laptop geladen und entpackt. Den entpackten Ordner dann mit WinSCP auf den Raspberry in den Ordner

    Quote

    /home/pi

    übertragen. In diesem Ordner von Adafruit befindet sich eine Datei namens

    Quote

    retrogame.c

    Diese beinhaltet den Quellcode den man noch entsprechend seiner Tastenbelegung anpassen muss bevor man den Quellcode kompilieren kann. Dann geht es mit folgenden Befehlen weiter


    Code
    cd Adafruit-Retrogame
    make retrogame


    Falls jemand eine neuere Version als ich verwendet, also RetroPie v2.xx, so muss man für den Button-Input noch eine Datei "10-retrogame.rules" im Ordner "/etc/udev/rules.d" mit folgendem Inhalt erstellen

    Code
    SUBSYSTEM=="input", ATTRS{name}=="retrogame", ENV{ID_INPUT_KEYBOARD}="1"


    Jetzt kann man Retrogame schon mal testen ob die Konfiguration stimmt, falls nicht muss der Quellcode erneut geändert und neu kompiliert werden. Retrogame muss immer mit Root-Rechten laufen, daher

    Code
    cd /home/pi/Adafruit-Retrogame
    sudo ./retrogame


    Wenn jetzt die Tastenbelegung richtig ist kann man mit "CTRL & C" das Programm beenden und als nächstes muss es ebenfalls in den Autostart. Dafür habe ich in der Datei "/etc/rc.local" am Ende der Datei vor der Zeile mit "exit 0" folgenden Code hinzugefügt

    Code
    /home/pi/Adafruit-Retrogame/retrogame &


    Dann wieder einen Neustart durchführen und schauen ob alle Tasten funktionieren. Im Prinzip müssten jetzt aber alle Buttons erkannt werden, da das Tool im Hintergrund auf den GPIOs lauscht. Jetzt kann man zum ausgiebigen Testen ein paar Roms in den GB-Ordner schieben und loslegen. Wie das gemacht wird sollte klar sein, und wo es Roms gibt weiß ich auch nicht :angel::angel::lol::lol:


    Ganz zuletzt habe ich mich noch um die Bildschirmeinstellungen gekümmert, damit auch alle GameBoy Spiele in voller Höhe und Breite dargestellt werden habe ich folgenden Code zur config.txt (/boot/) hinzugefügt.

    Code
    overscan_scale=1
    
    
    overscan_left=-195  	 
    overscan_right=30   
    overscan_top=-35    
    overscan_bottom=-45


    In den "retroarch.cfg" Dateien für die vorhandenen Emulatoren habe ich das Seitenverhältnis auf diesen Wert geändert.

    Code
    video_aspect_ratio = 1.25



    Damit das ganze auch noch ganz nett aussieht kann man sich für Emulationstation eine xml Datei erstellen damit auch die Covers angezeigt werden oder über das Setup Menü von RetroPie den Scraper durchlaufen lassen. Dieser fand bei mir aber kaum die richtigen Spiele. Ich habe bei meinem Super GameBoy jedoch komplett auf die Anzeige der Covers verzichtet und nur ein schönes Hintergrundbild für die jeweiligen Emulatoren eingefügt. Bei Gelegenheit werd ich noch ein paar Fotos hinzufügen.


    Trotz das der GameBoy keine weiteren Buttons bekommen hat, habe ich aber noch Spiele für ein paar weitere Emulatoren auf den Pi kopiert. Die Spiele vom GBC laufen ja logischerweise auch, die vom NES und Mastersystem ebenfalls weil die Systeme gleich viel Buttons bzw. weniger hatten. GameGear müsste theoretisch auch gehen, da hatte ich aber früher schon Probleme mit dem Emulator und ich hab diesmal drauf verzichtet. Die mir wichtigsten Spiele vom MegaDrive und SNES hab ich ebenfalls hinzugefügt obwohl diese beiden Systeme weitaus mehr Buttons zur Steuerung hatten. Aber für meine SuperMarioWorld-Hacks und die Sonic Reihe langt das allemal.


    Somit umfasst mein SuperGameBoy folgende Systeme:


    1. GameBoy
    2. GameBoy Color
    3. Nintendo NES
    4. Nintendo SNES
    5. SEGA MasterSystem
    6. SEGA MegaDrive



    Hier sind noch meine Quellen von denen ich es mir zusammen gesucht hab:


    1. RetroPie-Image http://blog.petrockblock.com/d…opie-sd-card-image-v1-10/
    2. fbTFT https://github.com/watterott/R…ter/docu/FBTFT-Install.md
    3. fbcp https://github.com/notro/fbtft/wiki/Framebuffer-use
    4. Adafruit RetroGame https://learn.adafruit.com/ret…with-raspberry-pi/buttons



    PS: Ich hab die Software-Anleitung erst nach dem Erstellen geschrieben und werde es bei Gelegenheit selbst auch noch mal testen. Falls jemand vorher den Drang dazu verspürt es zu probieren und vielleicht einen Fehler findet, bitte melden :danke_ATDE:

  • hallo klasse Arbeit die du da gemacht hast. Hat mir bei meinem Projekt sehr weiter geholfen. :D


    Dank deiner Beschreibung funktiniert nun mein Waveshare Display. Auch Retropie 2.3 und ES läuft flüssig. Nur leider hab ich ein Problem bei den Emulatoren für SNES,Gameboy, Gameboy Colour . Hier wird mir am linken Unteren Bildschirmrand ein blinkender weißer strich angezeit. Wenn ich nun meine Button betätige wird in dieser Zeile die für die Butten vom Teensy zugeordnenten Buchstaben ausgeben und sobald die Zeile voll ist springt der courser nach unten und der Bildschirm blinkt kurz auf was etwas störend beim spielen ist. Gibt es eine Möglichkeit dies zu ändern???


    [Blocked Image: http://www.dropbox.com/s/rzfqmezgbgkvqju/IMG_20150316_140150.jpg?dl=0]

  • Hallo,


    ich habe mir das gleiche Setup zusammengebaut und bin nun zufällig auf deinen Beitrag gestoßen. Ich habe das Problem, dass durch die Lösung mit fbcp die Darstellung auf dem kleinen Display doch sehr träge ist und sehr rucklig läuft. Außerdem ist die Verzögerung dadurch klar bemerkbar, sodass kein wirklicher Spielspaß aufkommt.


    Wie läuft die Sache bei dir? Mir geht es nur um die Emulation von Gameboy titeln, also eigentlich nicht wirklich was aufwendiges. Mittels HDMI läuft alles wunderbar, einen Konfigurationsfehler außerhalb von fbcp schließe ich daher aus.


    Vielen Dank im Voraus!


    Nachtrag: Es würde mich auch interessieren, wie du das Audiosignal über den GPIO bekommst.

    Edited once, last by schniko ().

  • Hallo Greengecko,
    danke für das Posting. Im Winter habe ich mich hinter meinen Lötkolben verkrochen und ein eigenes Projekt entwickelt:
    Raspberry PI Boy
    Schaut mal rein, ich freue mich auf Kommentare!