HS PF
EN

Retro-Programming: Video-Spiele, Vektor-Graphik und Wissenschaft einmal anders

News

34 Jahre alt: Die „Vectrex“ Mini Arcade Konsole.

Raumschiffe rasen durchs Weltall, ein Roboter springt über Abgründe, und Rennautos fahren um die Wette. Der Seminarraum ist voller Studierender, die an ihren Laptops ins Programmieren vertieft sind. Mittendrin steht eine antike Videospiel-Konsole. Retro-Programming, das Entwickeln von Programmen für historische Computersysteme, zeigt, wie man durch eine Zeitreise in die technische Vergangenheit wichtige Fähigkeiten für die digitale Zukunft erlernen kann.

Ein selbst entworfenes Computerspiel für ein echtes Videospiel-System zu schreiben und dabei die eigenen Programmierkenntnisse zu vertiefen – diese Chance bot sich 27 Studierenden des Bereichs Informationstechnik im Sommersemester 2016 im Rahmen einer Vorlesung bei Prof. Dr. rer. nat. Peer Johannsen. Die besondere Herausforderung dabei: Bei dem Videospiel-System handelte es sich um eine 34 Jahre alte „Vectrex“ Mini Arcade Konsole aus dem Jahre 1982. 

Eine Videospiel-Konsole aus den Anfängen des Computerzeitalters 
In den frühen achtziger Jahren begannen Videospiele, ihren Weg in private Haushalte zu finden und sich ihren Platz in den Herzen vieler Mädchen und Jungen zu erobern, und die ersten Heimcomputer standen kurz vor der Markteinführung. Peer Johannsen war eines der Kinder dieser Generation, die von Videospielen und den neuen Technologien und ihren Möglichkeiten fasziniert waren. Nach langer Überzeugungsarbeit erfüllten seine Eltern dem damals Zehnjährigen schließlich den sehnlichen Wunsch und schenkten ihm die erste Spielekonsole. Weil Konsolen zu dieser Zeit fast alle noch an Fernseher angeschlossen werden mussten, es in seinem Elternhaus aber keinen Fernseher gab, fiel die Wahl auf die Vectrex-Konsole, deren Alleinstellungsmerkmal der eingebaute Schwarz-Weiß Vektorbildschirm war, der den Anschluss an einen Fernseher überflüssig machte. 

Hintergrund: Vectrex 
Die Vectrex Mini Arcade Konsole ist eine Spielkonsole, die 1982 auf den Markt kam. Auffälligstes Merkmal ist der eingebaute 22 cm x 28 cm große Hochformat-Schwarz-Weiß-Vektorbildschirm zur Darstellung von Vektorgrafik, über den für jedes Spiel bunte Plastikfolien gesteckt werden konnten. Hergestellt und veröffentlicht wurde die Konsole in den USA von General Consumer Electric (GCE).  In Europa übernahm MB den Vertrieb.

Dem Spaß am Spielen folgte schnell die Neugier auf die dahinterliegende Technik. „Ich wollte unbedingt verstehen, wie diese Spiele funktionierten, und warum am Ende immer der Computer gewann“ erinnert sich Peer Johannsen. Das Interesse am Programmieren war geweckt, und als kurze Zeit später die ersten programmierbaren Heimcomputer zu kaufen waren, wurde das mühsam ersparte Taschengeld investiert. 

„Ich habe das beiliegende Programmierhandbuch von vorne bis hinten durchgelesen und alles so lange ausprobiert, bis es funktionierte. Auf diese Weise habe ich mir das Programmieren beigebracht“,  erinnert sich der Professor für Informatik und Software-Engineering. Da Computerspiele damals noch sehr teuer waren, wusste er sich somit zu helfen: „Ich habe bald angefangen, eigene Spiele zu schreiben, die dann meine Familie und Freunde gespielt haben, und  die ich später auch verkauft habe. Ab Mitte der achtziger Jahre war ich aktiver Teil der Spieleentwickler-Szene für die damaligen Heimcomputer. Viele Kenntnisse und Programmiertricks, die ich im späteren Berufsleben als Software-Entwickler eingesetzt habe, habe ich damals im wahrsten Sinne des Wortes spielerisch gelernt.“
Prof. Dr. rer. nat. Peer Johannsen

Eine etwas andere Vorlesung über Programmiertechniken
Von seinen Erfahrungen aus dieser Zeit konnten in diesem Sommersemester seine Studierenden in einer Vertiefungsvorlesung über fortgeschrittene Programmiertechniken profitieren.  Zentrales Thema des Kurses waren effiziente Algorithmen und Datenstrukturen. Hierbei geht es darum, zu lernen, wie man Algorithmen (also Berechnungsverfahren) so formuliert und so programmiert, dass die gewünschten Ergebnisse mit so wenigen Schritten wie möglich berechnet werden, bei gleichzeitig möglichst geringem Speicherverbrauch.

 „Ich habe die Erfahrung gemacht, dass viele Software-Entwickler heute leider kein genaues Verständnis mehr dafür haben, was ihr Programmcode auf unterer Ebene im Prozessor und im Speicher des Computers bewirkt, da diese Details durch die Verwendung moderner höherer Programmiersprachen versteckt werden.  Es fällt oft nicht auf, wenn Programme verschwenderisch mit Speicher umgehen oder viele überflüssige Berechnungen enthalten, da moderne Rechner Speicher im Überfluss zur Verfügung haben und ihre Mikroprozessoren sehr schnell sind. Und wenn einmal ein Programm nicht schnell genug läuft, dann wird ein schnellerer Rechner gekauft. Wenn der vorhandene Speicher für die Berechnungen nicht ausreicht, dann wird mehr Speicher in den Computer eingebaut, anstatt einmal zu untersuchen, ob vielleicht das Programm an sich ungünstig geschrieben worden ist und verbessert werden kann.“
Prof. Dr. rer. nat. Peer Johannsen

Auf derartige Aspekte zu achten, ist zum Beispiel besonders wichtig im Umfeld der Programmierung sogenannter eingebetteter reaktiver Systeme, einem Fachgebiet, das Bestandteil aller Studiengänge des Bereichs Informationstechnik ist. Bei eingebetteten Systemen handelt es sich um Mikroprozessoren, die kleine Teilkomponenten eines großen Gesamtsystems steuern und die hierfür in der Regel nur einen begrenzten Speicher und eine geringere Rechenleistung zur Verfügung haben als ein PC. Hier kommt es auf eine gut durchdachte und geschickte Programmierung an, um die zur Verfügung Ressourcen optimal zu nutzen.

Ein Paket mit der Post und die Idee zum Retro-Programming
Die Idee, in den praktischen Programmierübungen der Vorlesung ein Spiel für ein antikes System zu entwickeln, das nach heutigen Maßstäben einen winzigen Speicher und einen vergleichsweise langsamen Prozessor hat, entstand, als Peer Johannsen zu Beginn des Jahres per Post ein Paket erhielt. 

 „Mein Vater hatte auf dem Dachboden daheim meine alte Vectrex-Konsole entdeckt und sie mir zugeschickt. Trotz seines Alters funktionierte das Gerät immer noch. Abends habe ich einige der alten Spiele aus meiner Kindheit gespielt, und mich anschließend gefragt, wie schwierig es wohl sei, für diese Konsole ein eigenes Spiel zu schreiben und es auf dem Originalgerät laufen zu lassen.“

Ein Computerspiel muss schnell sein, damit das Spielen Spaß macht, und wenn sich auf dem Bildschirm möglichst viele Figuren auf einmal bewegen sollen, ohne dass das Bild anfängt zu ruckeln, dann müssen die hierfür notwendigen Berechnungen effizient und mit der geringstmöglichen Anzahl an Rechenschritten erfolgen. „Dieses auf einem so kleinen System wie der Vectrex-Konsole zu schaffen, ist eine Herausforderung an die eigene Programmierkunst. Mir kam der Gedanke, dass so etwas als exzellentes Unterrichtsbeispiel dienen könnte.“ Die Idee für das Vectrex-Projekt war geboren. 

 

Hintergrund: Technische Daten der Vectrex-Konsole

CPU: Motorola 6809 A Mikroprozessor

Takt: 1,5 Mhz (entspricht 1,5 Millionen Befehlsschritten pro Sekunde)

RAM: 1 Kilobyte Arbeitsspeicher, der den Programmen für Berechnungen zur Verfügung steht

ROM: 8 Kilobyte Speicher für das Betriebssystem, plus 32 Kilobyte Speicher für den Programmcode

 

Vorbereitungen und Count-Down zur Vorlesung
Es blieben wenige Wochen, in denen das 34 Jahre alte Gerät in der Elektronik-Werkstatt der Hochschule unter fachkundiger Mitarbeit von Werkstattleiter Timo Schwab restauriert und generalüberholt wurde. „Parallel zur technischen Instandsetzung habe ich mich mit anderen Retro-Programmierern in Internetforen über die Möglichkeiten zur Programmierung der Vectrex-Konsole ausgetauscht und mich in die technischen Details und das Betriebssystem eingearbeitet“. 

Das Betriebssystem der Vectrex-Konsole ist noch klein und einfach genug, um es in seiner Gesamtheit überschauen und verstehen zu können. Die Studierenden können so einen Einblick in die Grundprinzipien der Zusammenarbeit zwischen Software und Betriebssystem erhalten, denn diese sind auf dem alten System die gleichen wie bei modernen Betriebssystemen, wie z.B. Windows oder Linux. Letztere sind jedoch das Ergebnis von vielen tausend Personenjahren Entwicklung und mittlerweile so komplex, dass sie sich nicht gut als Unterrichtsbeispiel eignen, da ein vollständiges Verständnis selbst für Experten heute fast unmöglich ist. 

Bei den weiteren Vorbereitungen stand ein Sammler aus Frankfurt dem Projekt beratend zur Seite, der aus Begeisterung über das Vorhaben sogar einen Teil seiner Vectrex-Sammlung der Hochschule Pforzheim spendete. Zwei Bastler aus Großbritannien und Spanien lieferten die notwendige Hardware, um eigene Programme auf Spielekassetten speichern zu können, die dann in das Originalgerät gesteckt werden. 

27 Anmeldungen für das Vectrex Projekt
Zwei Wochen vor Beginn des Sommersemesters wurde das geplante Thema auf der Internetseite zur Vorlesung angekündigt. Innerhalb von nur wenigen Tagen war die geplante Teilnehmerzahl von ursprünglich 16 überschritten, und es hatten sich so viele Studierende angemeldet, dass ein neuer Raum für die Veranstaltung gefunden werden musste. 

In den folgenden Monaten lernten die Studierenden neben dem Entwurf effizienter Algorithmen auch wichtige Grundlagen und Prinzipien der Spieleprogrammierung, sowie die Besonderheiten des Vectrex-Systems und die Arbeit mit Vektorgraphik. „Die Entwicklung der Spiele ist als praktischer Teil in den Unterricht integriert. Die Programmierung nehmen die Studierenden am eigenen Laptop vor. Programmiert wird in Maschinensprache und in der Programmiersprache C. Auf den Laptops der Studierenden läuft ein Simulator, der die alte Spielekonsole komplett nachbildet. So kann ein geschriebenes Programm zu jeder Zeit getestet werden, bevor es auf dem echten Gerät ausprobiert wird.“ erklärt Peer Johannsen. Der Simulator und ein Debugger (Hilfsprogramm zum Auffinden von Fehlern) wurden dem Kurs von einem Entwickler aus Frankreich zur Verfügung gestellt. 

Hintergrund: Programmiersprachen und Compiler
Eine Programmiersprache ist eine formale Sprache zur Formulierung von Datenstrukturen und Algorithmen, d. h. von Rechenvorschriften, die von einem Computer ausgeführt werden können.  Als Maschinensprache bezeichnet man die Menge von Anweisungen, die direkt von einem Mikroprozessor ausgeführt werden können. Das Formulieren von Programmen in Maschinensprache ist relativ kompliziert und erfordert genaue Kenntnisse der speziellen Eigenschaften des jeweiligen Proprozessors und der verwendeten Hardware. Daher wird Maschinensprache auch als niedere Programmiersprache charakterisiert.

Heutzutage werden meist sogenannte höhere Programmiersprachen verwendet, die eine für den Menschen leichter verständliche Ausdrucksweise erlauben und von den Details der Hardware und des Prozessors abstrahieren. In höheren Sprachen geschriebene Programme können durch einen sogenannten Compiler (Übersetzungsprogramm) automatisiert in Maschinensprache übersetzt werden. Die Sprache C ist eine der ersten höheren Programmiersprachen. C ist seit den frühen 1970er Jahren auf vielen Computersystemen verbreitet. Weitere Beispiele für höhere Programmiersprachen sind  C++, Objective-C, C#, D, Java, JavaScript, Python oder Perl, von denen sich viele an der Syntax und anderen Eigenschaften von C orientieren.

RobHop, Space Assault, Brick Crusher & Co.
Das Ergebnis des Kurses kann sich sehen und vor allen Dingen spielen lassen. Entstanden sind mehr als 20 verschiedene neue Videospiele für die Vectrex-Konsole.  

Stefan Zaum, 21 Jahre, Mechatronik, 6. Semester, setze das Computerspiel „Breakout“ für die Vectrex-Konsole um. „Bei der Spieleprogrammierung in diesem Kurs wurde die eigene Programmierung direkt visualisiert. Wenn ich an irgendeiner Stelle eine minimale Änderung vornahm, war das Ergebnis unmittelbar sichtbar für mich. Das ist toll und verbesserte unsere Programmierfähigkeiten enorm. Mein Berufsziel ist die Software-Entwicklung.  Bald steht mein Praxissemester an, das ich in einem Software-Unternehmen verbringen möchte.“

Lisa Wöhnl, 22 Jahre, Mechatronik, 6. Semester, entwickelte zum Beispiel das Computerspiel „Robhob“. Ihre Heldin Yuki muss sich auf einem fremden Planeten gegen menschenfeindliche Außerirdische zur Wehr setzen.  Zur Seite steht Yuki ihr Freund, der kleine Roboter. Weil dieser beschädigt wurde, ist es Aufgabe des Spielers, die nötigen Teile zur Roboterreparatur zu sammeln. „Hier konnten wir ganz spielerisch unsere Programmierkenntnisse vertiefen, ohne nur stur vor uns hin zu arbeiten. Meine größte Motivation war dabei, mein eigenes Spiel irgendwann auf der richtigen Konsole mit meinen Freunden spielen zu können.“

Neben dem Programmcode entwarfen und fertigten die Studierenden auch farbige Overlay-Folien für ihre Spiele an und erstellten gedruckte Spielanleitungen. Ganz in der Tradition des Retro-Programming wurde das Design der Spiele und des Zusatzmaterials dem Look & Feel  der Originalspiele der achtziger Jahre angelehnt. Krönender Abschluss der  Veranstaltung war das gemeinsame Spielen der entworfenen Programme auf dem Original-Vectrex-Gerät, bei dem echtes Spielhallen-Feeling aufkam und das allen Beteiligten, inklusive ihrem Professor, großen Spaß bereitete.

„Beim  Programmieren gibt es viele handwerkliche Standardtechniken und Prinzipien. Für das Herangehen an eine konkrete neue Aufgabenstellung existiert aber oft keine allgemeingültige Patentlösung. Daher sind beim Programmieren immer auch Kreativität und originelle Ideen gefragt. Zusätzlichen zu  dem notwendigen Fachwissen versuche ich genau diese Freude am kreativen Problemlösen den Studierenden zu vermitteln und ihnen zu zeigen, wie viel Spaß Programmieren machen kann. Für diesen Zweck hat sich der Einsatz der alten Spielekonsole hervorragend geeignet.“ freut sich Peer Johannsen über das Ergebnis der Veranstaltung.

Hintergrund: Vektorgraphik
Eine Vektorgrafik ist eine Computergrafik, die ein Bild nicht durch eine feste Anzahl von Bildschirmpunkten (Pixeln) darstellt, sondern die sich aus grafischen Primitiven wie Linien, Kreisen, oder Kurven zusammensetzt. Der Vektorbildschirm der Vectrex-Konsole kann lediglich gerade Linien zeichnen, die beliebig skaliert und auf dem Bildschirm angeordnet werden können. Eine solche Technik erfordert bei der Programmierung von Spielen eine grundsätzliche andere Herangehensweise als bei pixelbasierten Spielegraphiken.

 

Weitere Informationen zum Vectrex-Projekt an der Hochschule Pforzheim

Weitere Informationen zur Vectrex-Konsole:

https://de.wikipedia.org/wiki/Vectrex

http://www.vectrex.de/

 

Danksagung
Ein herzlicher Dank geht an Herrn Helmut Müller aus Frankfurt, der mit seiner Fachkenntnis des Vectrex-Systems dieses Projekt von Beginn an beratend unterstützt hat und der großzügig einen Teil seiner Vectrex-Sammlung der Hochschule Pforzheim zur Verwendung gespendet hat.