systemXrunner

Das Bachelorprojekt systemXrunner hat sich mit eingebetteten Systemen beschäftigt - ihrem Aufbau und der Software, die auf ihnen läuft. Eingebettete Systeme werden nahezu überall eingesetzt: in Fahr- und Flugzeugen, der Medizintechnik aber auch in Alltagsgegenständen wie Waschmaschinen, DVD-Spielern und Mobiltelefonen. Weite Teile des modernen Lebens sind ohne sie daher kaum denkbar. Eingebettete Systeme können, je nach Anwendungsfall, unterschiedlich komplex ausfallen, wobei einfache Module oft zu komplexen Gesamtsystemen zusammengeschlossen werden. Diese Thematik lässt sich sehr gut an alten Spielekonsolen erarbeiten, da diese simpler aufgebaut sind als moderne Systeme, aber genug Herausforderungen und Anknüpfungspunkte für eigene Arbeiten bieten.

Wir Studierende haben uns als Ziel gesetzt eine Spiele-Cartridge für das Nintendo Entertainment System (NES) zu entwickeln, über die Spiele von einer SD-Karte gespielt werden können - Literally a Game Selection (LAGS). So kann zwischen Spielen wie Super Mario Brothers oder Legend of Zelda gewechselt werden, ohne dass eine neue Cartridge in die Konsole gesteckt werden muss. Im Zuge dessen haben wir uns zum Beispiel mit Emulatoren verschiedener Konsolen, Reverse Engineering, Hardware, Firmware etc. beschäftigt, wodurch Einblicke in die verschiedensten Bereiche geboten wurden.

Das Projekt wurde in verschiedenen Teilgruppen erarbeitet. Die Gruppen „Mikrocontroller“ und „CIC“ haben sich mit der Hardware der NES beschäftigt. Die NES besteht aus verschiedenen Einheiten, welche die Spiellogik, die Grafik und den Sound bearbeiten. Diese Einheiten benötigen die Daten eines Spiels, welche die LAGS-Cartridge bereitstellen muss. Im Projekt musste dafür geeignete Hardware ausgesucht und verbunden werden, wofür die „Mikrocontroller“-Teilgruppe gesorgt hat. Außerdem ist ein CIC-Chip verbaut, der die Lizenz der Spiele sicherstellt, womit sich die „CIC“-Gruppe beschäftigt hat. Um auf der LAGS-Cartridge Spiele auswählen und Sound abspielen zu können, war Software nötig, die die „Software“-Teilgruppe erarbeitet hat. Sie hat darüber hinaus eigene Spiele entwickelt, um sich an die Entwicklung von Firmware heranzuarbeiten.

Die Teilgruppen stellen sich hier genauer vor.

Mikrocontroller

Die erste Aufgabe im Projekt war es, ein grundlegendes Konzept für die SD-Cartridge zu entwerfen. Da es bereits ähnliche Produkte gibt, welche FPGAs verwenden, wollten wir stattdessen Mikrocontroller benutzen. Die weitere Planung gestaltete sich jedoch recht herausfordernd, denn für alle anderen Designentscheidungen gab es zunächst zahlreiche Optionen, zwischen denen es sorgsam abzuwägen galt. Die NES verarbeitet die Spiellogik und die Spielgrafik gleichzeitig in verschiedenen Modulen - daher standen wir zwischen der Wahl, entweder einen Mikrocontroller zu verwenden (der mehrere Aufgaben zugleich hätte übernehmen müssen) oder mehrere Mikrocontroller, die aber miteinander hätten kommunizieren müssen. Zudem ergaben sich einige Probleme bezüglich der Antwortzeiten unserer Hardware und wir mussten entscheiden, ob wir versuchen wollten unsere Software zu optimieren oder andere Bauteile zu verwenden, etwa separate Speicher-Chips. Aus diesem Grund war viel eigene Forschungsarbeit nötig und das Konzept durchlief einige Evolutionsstufen (00:07:47).

Ein spezieller Teilbereich war dabei die Ausarbeitung der Hardware und Implementierung der Software, um die Videospiele von der SD-Karte zu laden und auf die NES zu übertragen (00:47:46).

Um herauszufinden, wie die Lese- und Schreibzugriffe auf den RAM und ROM während eines Spiels erfolgen, werden die Speicherzugriffe der CPU der NES auf der Cartridge aufgezeichnet. Die Lese- und Schreibzugriffe werden in einem Histogramm visualisiert. Für das Vorgehen haben wir uns mit unterschiedlichen Tools zum Plotten beschäftigt (01:15:00).

CIC

Der CIC ist ein von Nintendo entwickelter Chip, der verhindern soll, dass andere Firmen Spiele ohne Lizenz für die NES entwickeln. Dies funktioniert nach dem Schlüssel-Schloss-Prinzip: Ein Chip in der NES - das Schloss - muss durch einen Chip im Spiel - den Schlüssel - freigeschaltet werden. Um also unsere eigene Spielesammlung spielbar zu machen, müssen wir diesen freischalten, sozusagen mit einem eigenen CIC umgehen. Der CIC ist ein Mikrocontroller mit 32 Nibbles RAM, 5 Registern und Instruktionen für Sprünge, Vergleiche etc. Um die Kommunikation zwischen den beiden Chips zu verstehen, haben wir die Datenströme zwischen ihnen mithilfe eines Oszilloskops und Logic Analyzers genauer untersucht. Mit einem Instruktion-Set-Simulator haben wir den CIC simuliert, um seine Arbeitsweise nachvollziehen zu können und diese selber für unseren Mikrocontroller implementieren zu können. Dabei war die größte Herausforderung nicht nur, die Kommunikation zwischen den CICs nachzubauen, sondern auch den zeitlichen Ablauf akkurat wiederzugeben. Hierfür wurde die C++-Bibliothek SystemC verwendet. Mehr dazu erfahrt ihr bei (01:00:00).

Software

Zu der Entwicklung einer funktionierenden Cartridge gehört neben der Hardware natürlich auch die passende Software. Unser Softwareteam hat sich die Erstellung einer Schnittstelle der NES-Konsole und der angepassten Cartridge zur Aufgabe gemacht. Dabei wurde ein Programm entwickelt, welches nativ auf der NES lauffähig ist und dem Spieler ermöglichen soll durch ein intuitives Menü sein Lieblingsspiel von der Cartridge auszuführen. Geschrieben wurde das Menü in der Assembly Sprache des 6502 Prozessors, welcher in der NES-Konsole verbaut ist. Unter anderem mussten die Eingaben der Controller verarbeitet und entsprechende Antworten über den Bildschirm gegeben werden. Gleichzeitig war das Speichermanagement eine Herausforderung zu meistern. Wenn ihr einen genaueren Einblick in die Entwicklung haben wollt, schaut einfach mal bei (01:33:00) vorbei.

Passend zu einer gelungenen Software für eine Retro-Konsole ist der Retro-Sound. Wie genau dieser seinen Weg in das Auswahlmenü gefunden hat, seht ihr bei (02:05:00).

Neben dem eigentlichen Auswahlmenü haben sich zwei Teilgruppen mit der Entwicklung von zwei eigenen Spielen beschäftigt: Eine Neuimplementation des allzeit beliebten Klassikers Snake und ein vollständig selbst entwickeltes Spiel dungeonXrunner, welches eine Hommage an den NES-Klassiker "The Legend of Zelda" ist (02:32:00).

Zusammenfassung

Das Bachelorprojekt systemXrunner hat uns Studierenden erlaubt, Einblicke in diversen Bereichen zu sammeln: Durch Reverse Engineering von Firmware und die Analyse von Hardware-Modulen haben wir zunächst eine Wissensbasis aufgebaut. Von dieser ausgehend haben wir unser eigenes eingebettetes System in Form von LAGS entworfen und durch hardwarenahe Programmierung in Assembly und C den Funktionsumfang der NES erweitert.