Das PIO-Programm

Die Funktion des Programms ist recht einfach: Es muss zuerst den P/S-Eingang des Wandler-Chips auf 1-Pegel setzen, einen Taktzyklus erzeugen, den Eingang wieder auf 0-Pegel setzen und dann 8 Bits einlesen, wobei parallel das Taktsignal erzeugt wird. Dann sind die Daten des Gamepads komplett ausgelesen und können in die Empfangs-FIFO geschrieben werden.

Stellenmarkt
  1. DevOps/IT Operations Engineer (w/m/d) Container Platform
    ING Deutschland, Nürnberg
  2. SAP FICO Berater (m/w/x)
    über duerenhoff GmbH, Raum Frankfurt am Main
Detailsuche

Das Taktsignal könnte erzeugt werden, indem abwechselnd der entsprechende Pin mittels Set auf 0 und 1 gesetzt wird. Das hat aber zwei Nachteile: Der erste ist, dass die Ausgabe etwas komplizierter nachzuvollziehen wird, da das P/S-Signal ebenfalls mittels Set erzeugt wird. Jedes Set muss passende Werte für beide Pins ausgeben, da die PIO-Hardware sie als eine Einheit sieht. Der zweite Nachteil ist, dass einige Befehle benötigt werden, die eigentlich nichts Sinnvolles tun. Genau für solche Fälle gibt es die Funktion Side Set.

Mittels Side Set kann jeder Befehl die Werte von bis zu fünf Pins setzen – zusätzlich zu seiner eigentlichen Funktion. Außerdem sind Side Set und der Set-Befehl unabhängig, sie können unterschiedliche Pins ansprechen. Anhand des Codes (ich habe wieder alles als Git-Repository bereitgestellt) lässt sich das am besten erklären, er ist in nes_gamepad.pio zu finden:

  1. .program NES_controller_interface
  2. .side_set 1
  3.  
  4. .wrap_target
  5. set PINS, 1 side 0 [3]
  6. set X, 7 side 1 [3]
  7. set PINS, 0 side 1 [3]
  8.  
  9. readBits:
  10. in PINS, 1 side 0 [3]
  11. jmp X-- readBits side 1 [3]
  12.  
  13. irq 0 side 1 [3]
  14.  
  15. .wrap

Golem Karrierewelt
  1. C++ Programmierung Basics: virtueller Fünf-Tage-Workshop
    24.-28.10.2022, virtuell
  2. Blender Grundkurs: virtueller Drei-Tage-Workshop
    12.-14.12.2022, Virtuell
Weitere IT-Trainings

Betrachten wir zunächst einmal die einzelnen Befehle, zu den eckigen Klammern und den Zeilen mit Punkt kommen wir noch. Zuerst wird mittels Set eine 1 für das P/S-Signal auf die Pins geschrieben – wo sie herauskommt, bestimmt ein Konfigurationsregister, auch dazu später mehr. Mittels Side Set wird der Takt-Pin auf 0 gesetzt. Um mehrere Pins zu setzen, wird die dem jeweiligen Binärwert entsprechende Zahl genutzt. Beispielsweise würde eine 9 bei vier Pins die beiden mit der höchsten und niedrigsten GPIO-Nummer auf 1 setzen, die beiden anderen auf 0.

Danach wird der Wert 7 in das Arbeitsregister X geladen, das von der folgenden Schleife zum Zählen der Durchläufe genutzt wird. Zusätzlich wird mittels Side Set der Takt-Pin wieder auf 1 gesetzt – der erste Taktzyklus ist beendet, die Daten von den Pins sind ins Register geladen. Um das Schieberegister des HD14021 auslesen zu können, setzt der folgende Befehl den P/S-Pin wieder auf 0, das Taktsignal bleibt auf 1, um nicht bereits das erste Bit hinauszuschieben.

Eine Zählschleife für die Eingabe

Das passiert erst in der Schleife: Es wird ein Bit in das Eingabe-Schieberegister (Input Shift Register, ISR) der SM gelesen, gleichzeitig der Takt-Pin wieder auf 0 gesetzt. Dadurch verschiebt der HD14021 alle Bits um eine Position, im nächsten Schleifendurchlauf lesen wir den Eingang P7 aus. Dafür springt der folgende Jmp-Befehl zum Einlesebefehl zurück, sofern der Wert in X nicht 0 ist. Der Wert in X wird um eins verringert und mittels Side Set das Taktsignal wieder auf 1 gesetzt, um den Taktzyklus zu beenden.

Sprungziele lassen sich mittels sogenannter Labels festlegen, beliebige Folgen von Zahlen und Buchstaben, die mit einem Doppelpunkt enden. Das verbessert die Lesbarkeit. Ist der Wert im Register X bei 0 angekommen, wird der Sprung nicht ausgeführt, das Programm läuft nach unten weiter zum Interrupt-Befehl. Damit werden die Prozessoren informiert, dass neue Daten vorhanden sind. Das Taktsignal bleibt wieder auf 1, um den Zustand des HD14021 nicht zu verändern.

Aber halt, wie kommen denn die gelesenen Daten in die Empfangs-FIFO?

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 So funktioniert das GamepadNoch mehr Befehle sparen 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8.  


Aktuell auf der Startseite von Golem.de
Cloudgaming
Google Stadia scheiterte nur an sich selbst

Die Technik war nicht das Problem von Alphabets ambitioniertem Cloudgaming-Dienst. Das Problem liegt bei Google. Ein Nachruf.
Eine Analyse von Daniel Ziegener

Cloudgaming: Google Stadia scheiterte nur an sich selbst
Artikel
  1. Tiktok-Video: Witz über große Brüste kostet Apple-Manager den Job
    Tiktok-Video
    Witz über große Brüste kostet Apple-Manager den Job

    Er befummle von Berufs wegen großbrüstige Frauen, hatte ein Apple Vice President bei Tiktok gewitzelt. Das kostete ihn den Job.

  2. Copilot, Java, RISC-V, Javascript, Tor: KI macht produktiver und Rust gewinnt wichtige Unterstützer
    Copilot, Java, RISC-V, Javascript, Tor
    KI macht produktiver und Rust gewinnt wichtige Unterstützer

    Dev-Update Die Diskussion um die kommerzielle Verwertbarkeit von Open Source erreicht Akka und Apache Flink, OpenAI macht Spracherkennung, Facebook hilft Javascript-Enwicklern und Rust wird immer siegreicher.
    Von Sebastian Grüner

  3. Vantage Towers: 1&1 Mobilfunk gibt Vodafone die Schuld an spätem Start
    Vantage Towers
    1&1 Mobilfunk gibt Vodafone die Schuld an spätem Start

    Einige Wochen hat es gedauert, bis 1&1 Mobilfunk eine klare Schuldzuweisung gemacht hat. Doch Vantage Towers verteidigt seine Position im Gespräch mit Golem.de.

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 • LG OLED TV 2022 65" 120 Hz 1.799€ • ASRock Mainboard f. Ryzen 7000 319€ • MindStar (G.Skill DDR5-6000 32GB 299€, Mega Fastro SSD 2TB 135€) • Alternate (G.Skill DDR5-6000 32GB 219,90€) • Xbox Series S + FIFA 23 259€ • PCGH-Ratgeber-PC 3000€ Radeon Edition 2.500€ [Werbung]
    •  /