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:

; 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

 

Über Stefan Höltgen

siehe: http://about.me/hoeltgen

Dieser Beitrag wurde unter Computer, Computer- & Videospiele, Porgrammiersprachen, Technikgeschichte/RetroTopie abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.