Der LolsuMini
Ich habe im Zeitraum von April bis November 2023 eine eigene Handheld-Videospielkonsole gebaut.
In diesem Eintrag zeige ich den gesamten Weg zum finalen Produkt des LolsuMini
mit 8KB ROM, 8KB RAM und einem
6502-ChipDer MOS Technology 6502 ist ein 8-Bit-Mikroprozessor von 1975. Ich nutze in meiner Konsole den WDC 65C02, eine 1983 durch CMOS verbesserte Version welche bis heute produziert wird. auf einer 1MHz Taktfrequenz.
Dieser Eintrag ist ab dem 01.08.2024 auch als Video Vortrag erhältlich.
Vorgeschichte
Schon etwa ein halbes Jahr vor Beginn des Baus am LolsuMini habe ich in 6502 Assembly für die 1985 Nintendo-Konsole NES programmiert.
Es ist dieses Interesse an Retro-Konsolen welches mich nach entdecken der
6502-Serie von Ben Eater dazu brachte an einer eigenen zu arbeiten.
Erste Erfolge
Ich fing an die Komponenten, nach Eaters Serie, sorgfältig miteinander zu verkabeln, doch nicht lange ohne Probleme.
Ich nutzte, für den Zweck einer Videospielkonsole, ein gänzlich anderes Display als Eater. Dieses hat ein SPI-Interface, die Kommandos werden also Bit für Bit nacheinander übertragen statt gleichzeitig.
Es wurde also Zeit sich in die
DatenblätterDatenblätter sind typischerweise Dokumente welche die technischen Spezifikationen von elektronischen Komponenten mit Hilfe von Diagrammen, Graphen, Tabellen und weiteren möglichst exakt erläutern sollen.
einzulesen und was eine Erfahrung das war.
Oft unverständlich formuliert und gerade beim Display teilweise sehr vage oder mit fehlenden Angaben hat es Stunden gebraucht um den Datenblättern irgendetwas zu entnehmen.
Doch nach einer gefühlten Ewigkeit von lesen, nicht verstehen, trial und error konnte ich tatsächlich sowohl das Display an machen, als auch Dinge drauf schreiben.
Der Kernel
Nun kann ich aber nicht für jedes Spiel oder jedes Objekt im Spiel neuen Code zur Erscheinung auf dem Display schreiben.
Der NES hat neben der
CPUCentral Processing Unit, Zentrale Verarbeitungseinheit auch eine
PPUPicture Processing Unit, Bildverarbeitungseinheit.
Man kann mit dieser (neben Hintergründen und weiterem) sogenannte "Sprites" definieren, welche jedes Frame gemalt werden. Ein Sprite enthält eine Referenz zur Grafikinformation, sowie Daten über Eigenschaften und Position des Sprites auf dem Bildschirm.
Nun habe ich aber ausschließlich eine CPU und kein sehr fortgeschrittenes Display. Ich habe also die Eigenschaften der PPU vom NES nachprogrammiert, sodass die CPU am Anfang eines jeden Frames Sprite-Daten aus dem RAM lädt und dem Display entsprechende Kommandos gibt.
Der gesamte Code des Kernels, so wie vieles weiteres ist erhältlich auf meinem GitHub.
Weg zum Produkt
Zuletzt musste ich die Konsole vom Steckbrett mit Labornetzgerät in eine tatsächlich tragbare Variante bringen.
Ich machte das Format für die Konsole aus (100x200x<50mm) und kaufte zwei entsprechende Lochrasterplatinen bevor ich begann ein Schema zu erstellen,
welches sowohl die Vernetzung der Komponenten als auch deren Position auf den Platinen definieren würde. Folglich war Löten angesagt... Viel Löten.
Eine Runde Löten
Das Zusammenlöten der Komponenten war besonders nervenzerreißend. Eine versehentliche Lötbrücke, keinen Millimeter dick, würde sich erst nach fertigstellung bemerkbar machen und wäre quasi unmöglich zu finden.
Trotz der vielen Kabel des 16-Bit Adress- und 8-Bit Datenbus ging es gut voran bis ich nach etwa 10 Stunden die Konsole anschalten konnte... Ohne Erfolg.
Der Fehler (eine fehlende Verbindung) war nach wenigen weiteren Stunden jedoch gefunden und die Konsole war nach Umhüllung mit Aluminiumfolie fertig!
Vielen Dank an meinen Vater, welcher mir bei diesem Schritt ausgeholfen hat.
Die Finale Konsole
Und das ist das Resultat nach 7 Monaten Blut, Schweiß und Tränen (eigentlich hauptsächlich Tränen).
Eine Handheld-Konsole, 3.6mm dick, 1MHz Taktfrequenz und 48 FPS auf einem Bildschirm der lesbar höchstens 5 FPS anzeigen kann, eine Batterie die 10.000 Stunden hält und 7.6KB nie benutzten RAM.
Vielleicht werde ich ja in einer weit entfernten Zukunft weiter daran arbeiten: besseren Bildschirm, Cartridges, Sound, die Liste geht weiter.
Doch fürs erste bin ich sehr zufrieden mit meiner Arbeit.