So funktioniert das Gamepad

Nachdem wir nun die Grundfunktion der PIO-Einheiten kennen, ist es erst einmal Zeit für Reverse Engineering. Ich habe seit Jahren ein altes NES-Gamepad rumliegen, das ich immer mit einem Mikrocontroller nutzen wollte – die Ziele änderten sich dabei von Zeit zu Zeit. Das aktuelle Ziel ist, mit dem Raspberry Pi Pico eine Spielekonsole zu bauen, die ähnliche Möglichkeiten bietet wie alte 8-Bit-Konsolen.

Stellenmarkt
  1. IT-Architekt*in für IT-Security - Zero Trust Architecture und Cloud Security (w/m/d)
    Landeshauptstadt München, München
  2. SAP ABAP/UI5 Entwickler (m/w/x)
    über duerenhoff GmbH, Osnabrück
Detailsuche

Die Schaltung des Gamepads zu verstehen, ist keine große Herausforderung, es ist extrem simpel aufgebaut. Die größte Herausforderung ist, den Stecker zu öffnen. Auf der Platine sind abgesehen vom fünfpoligen Kabel lediglich drei Komponenten aufgelötet: zwei Widerstände und ein Chip, dessen Funktion anhand der aufgelaserten Bezeichnung HD14021 leicht herauszufinden ist.

Bei dem Chip handelt es sich um einen 8-Bit-Parallel-Seriell-Wandler, genau passend für die acht Schalter des Gamepads. An die Konsole (oder den Mikrocontroller) angeschlossen wird der Chip über drei Leitungen, dazu kommen noch zwei für die Spannungsversorgung. Glücklicherweise ist der Chip mit 3 Volt zufrieden, zum Anschluss an den RP2040 wird also kein Pegelwandler benötigt.

So funktioniert der HD14021

Über die erste Leitung, im Datenblatt mit P/S bezeichnet, wird ausgewählt, was der Chip tut: Liegt hier der 1-Pegel an, werden die Werte der acht parallelen Eingänge in jeweils ein eigenes Register geladen. Die Register sind untereinander zu einem Schieberegister verschaltet. Liegt hingegen der 0-Pegel an, arbeitet der Chip als Schieberegister, die zuvor eingelesenen Werte werden von Register zu Register bewegt und kommen nach und nach an drei verschiedenen Ausgängen an. Gesteuert wird das Verschieben von einem Taktsignal, das die Konsole erzeugt. Unten gibt es dazu ein Bild.

Golem Karrierewelt
  1. Hands-on C# Programmierung: virtueller Zwei-Tage-Workshop
    08./09.11.2022, virtuell
  2. Green IT: Praxisratgeber zur nachhaltigen IT-Nutzung (virtueller Ein-Tages-Workshop)
    26.10.2022, virtuell
Weitere IT-Trainings

Über die drei verschiedenen Ausgänge kann der HD14021 als 6-, 7- oder 8-Bit-Wandler betrieben werden. Beim NES-Gamepad werden, wie bereits erwähnt, alle 8 Bit genutzt. Entsprechend ist der Ausgang Q8, welcher der letzten Registerstufe und damit dem parallelen Eingang P8 zugeordnet ist, auf den Stecker und damit zur Konsole geführt. Die genaue Funktion des Chips ist im Datenblatt beschrieben, das leider nur als relativ schlechter Scan verfügbar ist. Zudem ist es nur noch über Archive für Datenblätter zu finden, beim Hersteller Hitachi existiert es nicht mehr.

  • Schaltplan des NES Gamepads. (Bild: Johannes Hiltscher/Golem.de)
  • So funktioniert der HD14021: Die Register übernehmen Daten bei fallender Taktflanke. Ist P/S auf 1-Pegel, werden die Werte an den Pins P1 bis P8 übernommen (oben), sonst die aus dem vorhergehenden Register (unten). (Bild: Johannes Hiltscher/Golem.de)
  • Die Platine im Gamepad ist recht übersichtlich. Oben die Leiterbahnen mit aufgedruckten Schaltkontakten und Pull-up-Widerständen, unten die Bestückungsseite mit Parallel-Seriell-Wandler HD14021 (Bild: Johannes Hiltscher/Golem.de)
So funktioniert der HD14021: Die Register übernehmen Daten bei fallender Taktflanke. Ist P/S auf 1-Pegel, werden die Werte an den Pins P1 bis P8 übernommen (oben), sonst die aus dem vorhergehenden Register (unten). (Bild: Johannes Hiltscher/Golem.de)

Aus dem Datenblatt geht hervor, dass die Register neue Werte immer mit der fallenden Signalflanke (1-0-Wechsel) des Taktsignals übernehmen. Jedes Register ist einem der acht Eingänge zugeordnet, die mit P1 bis P8 bezeichnet sind. Im seriellen Modus wird der Inhalt jedes Registers ins nächsthöhere verschoben, der Wert aus dem P1-Register landet also im P2-Register und so weiter. Nach acht Takten sind die Werte aller Register über den Ausgang Q8 ausgegeben worden, das höchstwertige Bit von Eingang P8 zuerst. Auch zum Einlesen der an den Pins anliegenden Werte scheint das Taktsignal erforderlich zu sein.

Ein Blick auf die Platine

Jetzt müssen wir nur noch herausfinden, wie das Steuerkreuz und die Buttons des Gamepads an den Chip angeschlossen sind – wo und in welcher Form also die jeweiligen Daten zu erwarten sind. Dazu habe ich den Schaltplan der Platine mit Kicad nachgezeichnet. Insgesamt gibt es hier acht Kontakte, die mit den typischen Gummimatten einen Schalter bilden. Jeder Schalter ist mit einem Eingang des Parallel-Seriell-Wandlers verbunden.

  • Schaltplan des NES Gamepads. (Bild: Johannes Hiltscher/Golem.de)
  • So funktioniert der HD14021: Die Register übernehmen Daten bei fallender Taktflanke. Ist P/S auf 1-Pegel, werden die Werte an den Pins P1 bis P8 übernommen (oben), sonst die aus dem vorhergehenden Register (unten). (Bild: Johannes Hiltscher/Golem.de)
  • Die Platine im Gamepad ist recht übersichtlich. Oben die Leiterbahnen mit aufgedruckten Schaltkontakten und Pull-up-Widerständen, unten die Bestückungsseite mit Parallel-Seriell-Wandler HD14021 (Bild: Johannes Hiltscher/Golem.de)
Schaltplan des NES Gamepads. (Bild: Johannes Hiltscher/Golem.de)

Über einen Pull-up-Widerstand ist jeder Eingang zudem mit der Versorgungsspannung verbunden, wodurch er auf dem 1-Pegel liegt. Wird eine Taste gedrückt, schließt dies den entsprechenden Kontakt, der Eingang wird auf Masse und entsprechend den 0-Pegel gezogen. Eine gedrückte Taste erkennen wir also an einer 0 im entsprechenden Bit. Herauszufinden, welchem Bit die einzelnen Tasten zugeordnet sind, ist reine Fleißarbeit. Dazu müssen nur die entsprechenden Leitungen auf der Platine verfolgt werden, heraus kommt der oben abgebildete Schaltplan.

Jetzt müssen die Daten also nur noch vom Gamepad mittels PIO in den Mikrocontroller.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 DIY & Raspberry Pi Pico: Den Pico mit programmierbarem IO und NES-Gamepad steuernDas PIO-Programm 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8.  


Aktuell auf der Startseite von Golem.de
Core-i-13000
Intel präsentiert Raptor Lake mit bis zu 5,8 GHz

Auf der Innovation hat Intel die 13. Core Generation vorgestellt. Kernzahl, Takt und Effizienz sollen deutlich steigen.

Core-i-13000: Intel präsentiert Raptor Lake mit bis zu 5,8 GHz
Artikel
  1. Ukrainekrieg: Meta stoppt ausgefeilte russische Desinformationskampagne
    Ukrainekrieg
    Meta stoppt ausgefeilte russische Desinformationskampagne

    Gefakte Webseiten deutscher Medien machen Stimmung gegen die Russland-Sanktionen. Die falschen Artikel wurden über soziale Medien verbreitet.

  2. Star Wars: Lego bringt großes Set der Razor Crest aus The Mandalorian
    Star Wars
    Lego bringt großes Set der Razor Crest aus The Mandalorian

    Aus fast 6.200 Teilen besteht das große Lego-Set der Razor Crest. Sie ist teuer, nicht aber für ein Star-Wars-Set.

  3. Creative Commons, Pixabay, Unsplash: Rechtliche Fallstricke bei Gratis-Stockfotos
    Creative Commons, Pixabay, Unsplash
    Rechtliche Fallstricke bei Gratis-Stockfotos

    Pixabay, Unsplash, CC ermöglichen eine gebührenfreie Nutzung kreativer Werke. Vorsicht ist dennoch geboten: vor Abmahnmaschen, falschen Quellenangaben, unklarer Rechtslage.
    Eine Analyse von Florian Zandt

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • AMD Ryzen 7000 jetzt bestellbar • CyberWeek: PC-Tower, Cooling & Co. • Günstig wie nie: Asus RX 6700 XT 539€, Acer 31,5" 4K 144 Hz 899€, MSI RTX 3090 1.159€ • AMD Ryzen 7 5800X 287,99€ • Xbox Wireless Controller 49,99€ • MindStar (Gigabyte RTX 3060 Ti 522€) [Werbung]
    •  /