SimulationsRaum Rotating Header Image

Assembler

Lehrveranstaltungen im Wintersemester

Zu meiner freudigen Überraschung bin ich im August eingeladen worden am Institut für Medienwissenschaften der Universität Paderborn die Professur für Medien, Algorithmen und Gesellschaft im Wintersemester 2016/17 zu vertreten.

Zu meinem dortigen Deputat gehören 4 Seminare, die ich zwischen Bachelor- und Master- im Medienwissenschaften- und Informatik-Studium gebe:

(mehr …)

Flappy Bird @ VC-4000 @ Classic Computing

ICM107B

Zwischen 2013 und 2015 habe ich mich in 4 Seminaren zum Signetics-2650-Assembler mit der Programmierung der frühen Computerspielkonsole VC-4000 von Interton befasst. In einer Gruppenarbeit sollte für diese Konsole ein neues Spiel entstehen – das erste seit 1982 – nämlich „Flappy Birds“. Nachdem wir die Charakter-Animation, die Steuerung und sogar die Hintergrundmusik bereits fertig hatten, wollten wir uns an die Programmierung der Röhren-Animation machen, die aus der für den Video-Chip typischen „Gittergrafik“ bestehen sollte. Hierbei haben wir dann festgestellt, dass es erhebliche Unterschiede zwischen dem von uns verwendeten VC-4000-Emulator und der Original-Hardware gibt, die dazu führten, dass Algorithmen, die im Emulator fehlerlos liefen, auf der Konsole nicht funktionierten. Um uns den zeitaufwändigen und sich ständig wiederholenden Prozess von „Programmieren – Assemblieren – EPROM-Brennen – Testen – EPROM löschen – …“ zu ersparen, sollte zunächst ein Multi-ROM-Modul, konstruiert werden, auf dem man Programm-Binaries einfach auf einer SD-Karte speichern kann, um sie von dort in die Konsole zu laden.

Dieses Modul ist nun seit einiger Zeit fertig und gerade wird eine professionelle Platine dafür konstruiert, die dann zum Selbstkostenpreis erworben werden kann. Alle notwendigen Teile lassen sich im Elektronik-Einzelhandel besorgen; die Software, alle Schaltpläne und Informationen befinden sich auf GitHub. Dort ist auch der Stub unseres „Flappy Birds“-Versuchs zu finden.

Gestern habe ich nun erfahren, dass sich ein anderer deutscher Hobbyist ebenfalls an die Programmierung des Spiels gemacht hat und dabei Erfolg hatte. (Er hat den oben geschilderten, zeitaufwändigen Entwicklungsprozess nicht gescheut). Anstatt der Gitter-Grafik bentutz er für die Hindernisse Sprites. Davon kann er zwar nur zwei gleichzeitig auf den Bildschirm bringen; diese Entscheidung liefert ihm aber 50 Byte mehr RAM-Speicher und zudem eine weniger „ruckartige“ Bewegung der Röhren. Elegant ist der „Durchlass“ zwischen dem oberen und unteren Rohr gelöst: Ein Sprite-Flag erlaubt die vertikale Spiegelung eines Sprites, so dass nur eine Hälfte gezeichnet werden muss. Das Ergebnis hat er für YouTube gefilmt:

Außerdem bietet er den Sourcecode, der Teile unseres unvollständigen Spielcodes enthält, sowie ein ROM-Image des Spiels zum Download über seine Homepage an.

Wer sowohl das fertige Multi-ROM-Modul als auch das spielbare Spiel sehen möchte, kann am übernächsten Wochenende nach Nordhorn zur „Classic Computing“ kommen – dem Jahres-Event des „Vereins zum Erhalt klassischer Computer e.V.“ Dort habe ich einen Stand (auf dem ich unseren restaurierten Sol-20 vorführe) und Mario Keller, einer der Mitentwickler des Moduls sowie der Spiel- Entwickler „Senildata“ werden ebenfalls dort sein.

Return to Fractalus

Nächstes (oder übernächstes) Semester gebe ich ein Seminar zur Geschichte, Theorie und Implementierung von Fraktalen auf Computern. In diesem Zusammenhang wurde ich heute auf eine Sammlung extrem kleiner Mandelbrot-Fraktal-Programme aufmerksam gemacht. Darunter befindet sich nicht nur ein 64 Byte großer Algorithmus in Assembler, sondern auch ein Apfelmännchen-förmiges Fraktal-Programm in C.

FraCtal

Tennis 2650

In seinem Essay Children of the Revolution. Video-Spiel-Computer als Kreuzungen der Informationsgesellschaft (print|online) berichtet Claus Pias von frühen Tennis-Computerspielen. Neben einer apokryphen Whirlwind-Demo und dem berüchtigten „Tennis for Two“ schildert er eine experimentelle Implementierung aus dem Jahr 1960, die auf einer IBM 704 vorgenommen wurde:

Weitere zwei Jahre 1960, war eine dritte Art von Ballspiel zu sehen, das Studenten des MIT für den IBM 704 geschrieben hatten. Dieser besaß eine Kette von Kontrollämpchen, über die die Funktionsfähigkeit einzelner Bauteile getestet werden konnte. Das Programm bestand nun darin, die einzelnen Teile des Rechners in einer bestimmten Reihenfolge zu testen, um so die Lämpchen nacheinander aufleuchten zu lassen und einen wandernden Lichtpunkt zu erzeugen, der rechts verschwand um links sofort wieder zu erscheinen. Drückte man dann pünktlich beim Aufleuchten des letzten Lämpchens eine Taste, so kehrte der Lichtpunkt seine Laufrichtung um, schien abzuprallen und zurückzuwandern. Die Kontrolltafel des 1BM704 war zu einer Art eindimensionalem Tennisspiel geworden. (S. 218f. der Printversion)

Wenn Computerarchäologie nicht bloße Archivarbeit sein will (über weitere Hinweise zum IBM-704-Tennisspiel würde ich mich übrigens sehr freuen!), die solche Fundstücke als Historeme birgt, sondern ihre Monumente in Vollzug setzt, um deren informatische Aspekte kennenzulernen, scheint es angebracht, dieses Experiment nachzuvollziehen. Dies habe ich in einem Assembler-Brückenkurs im Frühjahr 2014 gemacht. In 14 Tagen sollten Programmieranfänger den Signetics-2650-Assembler für den Lehrcomputer Instructor 50 erlernen, um sich im darauf folgenden Sommersemester in den laufenden Assemblerkurs einschreiben zu können. Der von Pias entdeckte „frühe[] und reine[] Hack“ (Die Pflichten des Spielers, S. 323, print|online) schien mir – gerade, weil der Instructor 50 neben seiner 7-Segment-Anzeige lediglich noch über eine binäre LED-Ausgabe verfügt, ideal, um das historische Vorbild nachzuprogrammieren.

Im Folgenden der Signetics-2650-Assembler-Sourcecode für ein Leuchtdioden-Tennisspiel für den Instructor 50:

(mehr …)

How to do things with keys

Nun ist auch die englische Version meines Vortrags zum „Programmieren als Geste“ erschienen und kann hier abgerufen werden.

Game of Memories 1.0

gom

Das hier, hier und hier bereits vorgestellte Programm „Game of Memories“, das ich im Zuge meines Signetics-2650-Assemblerkurses geschrieben habe (und das von Thomas Nückel debugged und erweitert wurde) ist nun in der finalen Version 1.0 von der Webseite des Signallabors zu laden. In der ZIP befindet sich neben dem Sourcecode (als .asm-Textdatei) auch eine .COS-Datei, die ein Binary für den 2650-Emulator „WinArcadia“ darstellt. Nur in diesem Emulator kann das Programm auch „zeigen“, was es tut, denn der kleine „Game of Life“-Klon operiert ausschließlich in einer 256 Byte großen RAM-Bank des „Instructor 50“, die er als Monitor „missbraucht“. Damit wird zum einen auf den epistemologischen Unterschied der Emulation gegenüber einer Originalhardware hingewiesen; zum anderen ruft das Programm als computerarchäologisches Re-Release die Geschichte des CRT-Computermonitors in Form einer Williams-Tube-Inszenierung auf.

gom

Lehre im Sommersemester 2016

Meine Lehrveranstaltungen im Sommersemester 2016

  • Hands on Commodore 64! Archäologie einer Computer-Plattform (BA Modul 1)
  • Artefakte des Medienarchäologischen Fundus (BA Modul IX)
  • Grafik- und Soundprogrammierung in Assembler (BA/MA Projektmodul)

(mehr …)

Erfahrung seit 1981

Interview mit Thomas Landgraf über »Sex Games« am C64*

Eines der bekanntesten Sex-Spiele für den C64 war fraglos »Sex Games«. Eine komplette Generation pubertierender Spieler hat sich durch das Spiel, das nach dem »Decathlon«-Prinzip gespielt werden musste, Handgelenke und Joysticks ruiniert, um von einer Stellung zur nächsten zu kommen. Dass sich die Programmierschmiede Landisoft damals aus zwei ebenfalls recht jungen Männern zusammensetzte, den Brüdern Thomas und Markus Landgraf, ist seit einem Spiegel-Interview auch der breiteren Öffentlichkeit bekannt. Unser Autor Stefan Höltgen hat sich noch einmal mit Thomas Landgraf, der heute in Kassel eine IT-Firma leitet, über die Geschichte des Spiels und seine Anfänge als Programmierer unterhalten.
(mehr …)

Logik-Jumper

j-game-emu1

Im Rahmen des letztsemestrigen Assembler-Programmierworkshops zum Motorola 6809 ist ein Spiel als Projekt eingereicht worden, das nun der Öffentlichkeit vorgestellt werden kann. Es handelt sich um „The J Game“ von Jan Haasch, einem Master-Studenten der Wirtschaftsinformatik an der HU Berlin. Das kleine Spiel für die MB Vectrex stellt die Rudimentärform eines Jump’n’Run-Games dar, bei dem eine Spielfigur über von der Seite herein scrollende „Mauern“ springen muss. Der Schwierigkeitsgrad (Anzahl und Abstand der Mauern, Scrollgeschwindigkeit) erhöht sich dabei sukzessive innerhalb eines Levels und von Level zu Level.

(mehr …)

Time for Medien ∩ Wissenschaften

Medienwissenschaften

In Kürze findet der Workshop „Medien ∩ Wissenschaften“ bei uns im Signallabor statt, bei dem zusammen mit Natur-, Ingenieur- und Geisteswissenschaftlern ein Lehrbuch für Medienwissenschaftler konzipiert werden soll.

Mittlerweile gibt es auch eine Timeline für die Vorträge:

(mehr …)

Lehre im Sommersemester 2015

6809-Assembler

Im Sommersemester gebe ich zwei Lehrveranstaltungen:

(mehr …)

VC-4000 Flash-ROM

In den vergangenen drei Semestern hat sich der Assembler-Kurs, den ich alldonnerstäglich veranstalten, ausschließlich um den Signetics 2650 gedreht. Zunächst wurde die Maschinensprache auf einem Lehr-Computer (Signetics Instructor 50) kennen gelernt. Im zweiten Semester haben wir die Plattform gewechselt und uns um die einzige deutsche Spielkonsole, die Interton VC-4000, gekümmert. Die Finessen des Grafik/Sound-Chips Signetics 2636 (PVI), der seltsamen Speicherverwaltung und insbesondere des von uns verwendeten Emulators „WinArcadia“ haben ihren ganz eigenen Reiz und ihre Probleme verursacht. Die Idee, zusammen einen „Flappy Birds“-Clon für die VC-4000 zu entwickeln, hat sich bis zum Ende des zweiten Kurses nicht umsetzen lassen.

(mehr …)

Call for PAPER

In der neu gegründeten Buchreihe „Computerarchäologie“ soll 2016 ein Buch mit dem Titel „Papiermaschinen“ erscheinen. Dafür benötige ich Hilfe!

Ich such nämlich handschriftlich notierte Programmcodes aus den 1970er- und -80er-Jahren (Programmiersprache egal). Zu dieser Zeit war für Kinder und Jugendliche der Zugriff auf (Heim)Computer nicht jederzeit möglich, so dass etliche Programme auf Papier „vorgeschrieben“ wurden, bevor sie dann später (in Kaufhäusern, bei Freunden, …) in die Computer abgetippt werden konnten.

In dem Buch möchte ich auf diese vergessene Programmierkultur hinweisen. Dazu sollen solche handschriftlichen Programme faksimiliert abgedruckt werden und mit Kommentaren, Hintergrundinformationen zum Programmierer, System und der „Geschichte“ dazu versehen werden. Besonders interessant sind vollständige Programme, sehr gern kurze Listings und wenn dann auch noch „Denkfehler“ darin enthalten sind, die zeigen, wie sich das Programmieren auf Papier von dem auf dem Computer unterscheidet, wäre das ein besonderer Glücksfall.

Sendet eure Listings bitte im Original an mich (ich scanne sie und ihr erhaltet sie unversehrt zurück). Bitte nehmt vorher Kontakt mit mir auf: email@computerarchaeologie.de

Als Dankeschön erhält jeder, dessen Listing aufgenommen wird, ein Belegexemplar des Buches.

VCFe 2014 & 2015

Im vergangenen Jahr haben mein Kollege Thomas Nückel und ich auf dem 15. Müncher VCFe zum Thema „Exoten“ einen Vortrag über unseren Signetics-2650-Workshop gehalten. Dieser ist jetzt als Podcast nachzuhören. Auf dem diesjährigen VCFe ist das Thema „Computer im Osten“. Ich werde wieder dort sein und die Hard- und Soft- und Paperware von Horst Völz vorstellen.

MUL

6809-Assembler

Die NOPs und HALTs digitaler Medien

Just ist ein Beitrag über meine Programmierlehre erschienen:

Stefan Höltgen:
Die NOPs und HALTs digitaler Medien. Programmierlehre maschinennaher Sprachen für Medienwissenschaftler
In: Grundlagen aus Kybernetik und Geisteswissenschaft. Internationale Zeitschrift für Modellierung und Mathematisierung in den Humanwissenschaften.
Band 55, Heft 4, Dez. 2014, S. 139-153.

Link zur Zeitschrift | PDF der Ausgabe 4/2014

How to do Things with Keys

Gestern habe ich via Skype meinen Vortrag zur Tagung in Brno gehalten. Ich habe den Talk mitgeschnitten und als Film auf YouTube hoch geladen. Die dazugehörigen Slides können hier herunter geladen werden.

Assembler im Browser

Dank schneller Rechner und Betriebssysteme sowie den Interaktionsmöglichkeiten von Java und HTML5 kann man im Browser inzwischen so gut wie alles machen, wofür man noch vor ein paar Jahren spezielle Programme benötigte. Insbesondere die Möglichkeit, Emulatoren und daran angeschlossene Programmbibliotheken nutzen zu können, erleichtert die Arbeit mit alten Systemen (vor allem in der Lehre) sehr.

heise.de berichtet heute von einem Assembler für Browser, der mehrere alte Systeme emuliert: ASM80. Das sind natürlich Z80-Systeme. Der Assembler stellt allerdings eine gute Auswahl davon zusammen.

Unser Kosmos

Vergangene Woche habe ich von einem Freund für kleines Geld einen „KOSMOS CP1„-Lerncomputer erworben. Mein System besteht aus der Grundeinheit, einer Speichererweiterung und einer Ergänzung mit Relais zur Ansteuerung von Motoren etc. Das Kassetten-Interface habe ich leider noch nicht.

IMG_3516

Der Computer ist aus mehrfacher Hinsicht interessant. Zum einen ist darin Intels vergleichsweise schneller 8049 verbaut, ein Mikrocontroller, der alle wesentlichen Elemente eines Mikrocomputers enthält, weshalb auf der Platine des CP1 nur noch ein zusätzliches IC mit dem ROM für das Betriebssystem zu finden ist. Dieses enthält ein Monitorprogramm und eine Programmiersprache, die man als „Lern-Assembler“ bezeichnen könnte. Dieser Assembler stellt 21 6-Bit-Opcodes zur Verfügung und bietet eine Adressierungsart: relative Adressierung. Letzteres mag auf das minimale RAM von 128 Byte, das im 8049 integriert ist, zurückzuführen sein, bei dem man die RAM-Bank nicht verlässt und also jedes Ziel (das wie alle Daten in Dezimalzahlen angegeben wird!) relativ anspringen kann.

Es hat allerdings auch didaktische Gründe: Die Komplexitätsreduktion sollte Jugendlichen und Kindern helfen, sich in die Programmierung in Assembler schneller einfinden zu können. Aus eigener Erfahrung weiß ich, dass gerade die Vielfalt an Adressierungsarten zu Beginn immer eine große intellektuelle Hürde darstellt. Auf relative Adressierung reduziert kann man sich schneller auf die Opcodes und ihre Funktion konzentrieren. Diese Opcodes sind im CP1 lediglich Pseudo-Opcodes, weil sie nicht nur einen vergleichsweise kleinen Ausschnitt aus dem ca. 90 Befehle umfassenden Befehlsinventar des 8049 zur Verwendung anbieten, sondern zudem auch noch „auf Deutsch“ übersetzt wurden. So heißt „Springe bedingt zu Adresse XXX“ hier SPB, aus AND wird UND und ANZ bringt den Inhalt des Akkumulators auf das 7-Segment-Display – gerade hinter diesem Opcode verbirgt sich eine ganze ROM-Routine, wie 8-Bit-Assemblerprogrammierer ahnen.

vorn

hinten

Funktionsübersicht mit Pseudo-Opcodes

Leider lässt der CP1 es nicht zu, direkt auf die Funktionen des 8049 zurückzugreifen. Dazu müsste man das ROM gegen ein eigenes Monitorprogramm austauschen; sieht man diese äußerst eigenwillige Programmierung jedoch aus archäologischer Perspektive, so zeigen sich hier vor allem bereits Makros, die eher zur Benutzung und weniger zur Analyse und zum Experiment mit der Maschine einladen. Man könnte sagen: Vom „CP1-Assembler“ ist es also nur noch ein kleiner Schritt hin zu BASIC. (Eine Perspektive, deren Vektor sonst in genau die entgegen gesetzte Richtung verläuft.)

Rechnen & Leben

Am kommenden Mittwoch werden in Wolfgang Ernsts Forschungskolloquium „Medien, die wir meinen“ die Projekte meines letztsemestrigen Assembler-Workshops vorgestellt:

Rechnen & Leben – Coding-Performance

Referenten: Dr. Stefan Höltgen, Juliane Schütte, Johannes Maibaum, Thomas Nückel

Aussterbende Computerplattformen werden heutzutage durch Emulationen scheinbar adäquat emuliert und so „am Leben“ erhalten. Doch Emulatoren können gleichzeitig mehr und weniger als die reale Hardware. Die Projekte im Seminar „Signetics 2650 Programmierworkshop“ zeigen dies auf ganz unterschiedliche Weise. Juliane Schütte hat für den „Signetics Instructor 50“, der der Seminargruppe als Referenzplattform für die Programmierung diente, eine Mathematikanwendung programmiert, mit der es möglich ist, dem eigentlich auf Binär- und Hexadezimalarithmetik beschränkten Computer das Rechnen im Dezimalsystem „beizubringen“. Sie stellt ihr Programm vor und erörtert ihre Hex-Dez-Konversionsroutine im Spannungsfeld medienwissenschaftlicher und mathematischer Fragestellungen. Johannes Maibaum hat sich auf eine Metaebene begeben und nicht in Assembler selbst programmiert, sondern einen eigenen Signetics-2650-Emulator in C für Linux programmiert. Welche Besonderheiten zwischen Quell- und Zielplattform es dabei – insbesondere unter Berücksichtigung beider Zeitverhalten und Hardwareabstraktion – zu berücksichtigen gab, diskutiert er in seinem Vortragsteil. Das Projekt von Thomas Nückel ist eine Implementierung eines „Game of Live“: Die beschränkten Ausgabeports des „Instructor 50“ haben hierbei die Nachbarschafts- und Spielregeln definiert: Sein „Game of Death“ ist ein eindimensionaler, deterministischer, binärer zellulärer Automat, auf der Basis von 8 Leuchtdioden. Zusammen mit dem Kursleiter hat er danach eine zweite Variante des „Game of Life“ programmiert: Unter dem Titel „Game of Memories“ wird ein Zellulärer Automat vorgestellt, der so nur auf dem Emulator Sinn ergibt, weil dieser die Grenzen der Darstellungsmöglichkeit des „Instructor 50“ überwindet und Speicher sichtbar machen kann. Wie alle Projekte zeigt auch dieses besonders, worin Emulation stark ist: Die „Versoftung“ von Hardware bietet den Programmentwicklern größere Freiheiten und Möglichkeiten, schränkt sie aber auch ein. An „Game of Memories“ zeigt sich die Einschränkung etwa bei der Generierung von Zufallszahlen, die auf der Originalplattform durch physikalische Ereignisse an den Ports entstehen, im Emulator aber „simuliert“ werden müssen. Nückel und Höltgen binden darüber hinaus die grafische Ausgabe Ihres Systems an die Frage der Sichtbarmachung und Epistemologie von Speicher(n) in Digitalcomputern zurück.

Länge: circa 70 Minuten
Ort: Georgenstraße 47, Raum 0.01 (Medientheater)
Zeit: 18-20 Uhr