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:
; Tennis 2650 ; Version 0.1 (11.04.2014) ; Dr. Stefan Höltgen, Fachgebiet Medienwissenschaft, HU Berlin ; stefan@hoeltgen.org ; ; Programmbeschreibung: Ein einfaches Tennisspiel auf den acht Leuchtdioden des ; Signetics Instructor 50, das von zwei Spielern gespielt werden kann und über ; die INTERUPT- und SENS-Taste gesteuert wird. ; ; REGELWERK: ; ; 1. Der rechte Spieler beginnt das Spiel ; 2. Kommt der Ball an der äußeren gegenüberliegenden Leuchtdiode an, muss er ; innerhalb eines kurzen Zeitraums durch Betätigen der Schäger-Taste zurück- ; gespielt werden. ; 3. Wird der Ball nicht rechtzeitig angenommen, erhält der Gegenspieler einen ; Punkt und den nächsten Aufschlag. ; ; STRUKTUR: ; ; Label (Adresse) Beschreibung ; ; START (0000) Sprung zur Hauptschleife ; INT (0100) Interupt-Handling ; INIT (0100) Initialisierung der Register ; MAIN (010C) Hauptschleife ; TOLFT (0150) Ball-Lauf nach links ; TSENS1 (0163) Testen der SENS-Taste ; TORGHT (0190) Ball-Lauf nach rechts ; SUBROUTINEN Unterprogramme ; WAIT (0300) Warteschleife ; AUFL (0310) Links schlägt auf ; TSENS2 (0314) Testen der SENS-Taste ; AUFR (0330) Rechts schlägt auf ; LLOSE (0350) Links verliert ; RLOSE (0400) Rechts verliert ; ; VARIABLEN: ; ; R0: Zwischenspeicher ; R1: Ballregister ; R2: Schleifenregister ; R3: Schleifenregister ; ; PROGRAMM: ; ************************************************************************************** ;ADR Label Opcode Mnemonic Kommentar ; 0000 START 1F 01 00 BCTA,UN INIT ; INT überspringen ; 0007 INT 76 20 PPSU 20 ; INT-Taste deaktivieren 0009 1F 01 50 BCTA,UN TOLFT ; Sprung zu TOLFT ; 0100 INIT 77 02 PPSL 02 ; COM=logisch 0102 76 20 PPSU 20 ; INT-Taste deaktivieren 0104 04 00 LODI,R0 00 ; Allzweckregister 0106 05 01 LODI,R1 01 ; Ballregister laden ... 0108 F1 WRTD,R1 ; ... und ausgeben 0109 06 00 LODI,R2 00 ; Schleifenregister 010B 07 00 LODI,R3 00 ; Schleifenregister ; ; Hauptschleife ; 010D MAIN 1F 03 30 BCTA,UN AUFR ; Rechts beginnt ; 0150 TOLFT 3F 03 00 BSTA,UN WAIT ; Warteschleife 0153 D1 RRL,R1 ; Ball bewegen 0154 F1 WRTD,R1 ; Ball auf dem Feld darstellen 0155 01 LODZ,R1 ; Pos. in R0 zwischenspeichern 0156 44 80 ANDI,R0 80 ; Ball schon ganz links? 0158 1C 01 50 BCTA,01 TOLFT ; Wenn nicht, zurück 015B 06 71 LODI,R2 71 ; Dauer innere Schleife 015D 07 C2 LODI,R3 C2 ; Dauer äußere Schleife 015F TSENS1 B4 80 TPSU 80 ; SENS-Taste gedrückt? 0161 1D 01 90 BCTA,00 TORGHT ; ja, dann zu TORGHT 0164 FE 01 5F BDRA,R2 TSENS1 ; nein, dann weiter innere ... 0167 FF 01 5F BDRA,R3 TSENS1 ; ... und äußere Schleife 016A 1F 03 50 BCTA,UN LLOSE ; verpasst: zu LLOSE ; 0190 TORGHT 3F 03 00 BSTA,UN WAIT ; Warteschleife 0193 51 RRR,R1 ; Ball bewegen 0194 F1 WRTD,R1 ; Ball auf dem Feld darstellen 0195 01 LODZ,R1 ; Pos. in R0 zwischenspeichern 0196 44 01 ANDI,R0 01 ; Ball schon ganz rechts? 0198 1C 01 90 BCTA,00 TORGHT ; Wenn nicht, zurück 019B 74 20 CPSU 20 ; INT-Taste aktivieren 019D 06 71 LODI,R2 71 ; Dauer innere Schleife 019F 07 C2 LODI,R3 C2 ; Dauer äußere Schleife 01A1 FA 7E BDRR,R2 7E ; innere Schleife 01A3 FB 7C BDRR,R3 7C ; äußere Schleife 01A5 1F 04 00 BCTA,UN RLOSE ; verpasst: zu RLOSE ; ; SUBROUTINEN ; ; Warteschleife (0,5 Sekunden): ; 0300 06 71 LODI,R2 71 ; Dauer äußere Schleife 0302 07 C2 LODI,R3 C2 ; Dauer innere Schleife 0304 FA 7E BDRR,R2 7E ; innere Schleife 0306 FB 7C BDRR,R3 7C ; äußere Schleife 0308 17 RETC,UN ; RETURN ; ; Links schlägt auf: ; 0310 AUFL 74 80 CPSU 80 ; SENS-Bit löschen 0312 05 80 LODI,R1 80 ; Ball linkes Aufschlagfeld 0314 F1 WRTD,R1 ; ... anzeigen 0315 TSENS2 B4 80 TPSU 80 ; SENS-Taste gedrückt? 0317 1C 03 15 BCTA,00 TSENS2 ; Nein, dann zu TSENS 031A 1F 01 90 BCTA,UN TORGHT ; Ja, dann zu TORGHT ; ; Rechts schlägt auf: ; 0330 AUFR 74 20 CPSU 20 ; Interrupttaste freigeben 0332 05 01 LODI,R1 01 ; Ball rechtes Aufschlagfeld 0334 1B 7E BCTR,UN 7E ; Warte auf INT-Druck ; ; Links verliert: ; 0350 LLOSE 05 00 LODI,R1 00 ; Ball vom ... 0352 F1 WRTD,R1 ; ... Spielfeld löschen 0353 3F 03 00 BSTA,UN WAIT ; Pause 0356 05 0F LODI,R1 0F ; Vier Gewinnerlämpchen ... 0358 F1 WRTD,R1 ; ... rechts anzeigen. 0359 3F 03 00 BSTA WAIT ; Pause 035C 05 01 LODI,R1 01 ; Ball auf Aufschlagfeld ... 035E F1 WRTD,R1 ; ... anzeigen 035C 1F 03 30 BCTA,UN AUFR ; Rechts schlägt auf ; ; Rechts verliert: ; 0400 RLOSE 76 20 PPSU 20 ; INT-Taste deaktivieren 0402 05 00 LODI,R1 00 ; Ball vom ... 0404 F2 WRTD,R1 ; ... Spielfeld löschen 0405 3F 03 00 BSTA WAIT ; Pause 0408 05 F0 LODI,R1 F0 ; Vier Gewinnerlämpchen ... 040A F1 WRTD,R1 ; ... links anzeigen. 040B 3F 03 00 BSTA WAIT ; Pause 040E 05 00 LODI,R1 00 ; Ball vom ... 0410 F1 WRTD,R1 ; ... Spielfeld löschen 0412 1F 03 10 BCTA,UN AUFL ; Links schlägt auf