Was kann mit einem
Computer mit elektromagnetischen Relais ohne Eingabegeräte und mit Ausgabegeräten getan werden - nur mit einem Speicherauszug von acht Registern?
Spiele natürlich!
Alte Leute spielten auf MK-61/52-Taschenrechnern, die nur wenig offensichtlicher sind.

Errate die Nummer
Ich habe mit dem Spiel begonnen, bei dem der Computer mit halber Division die vom Spieler verborgene Ganzzahl von 0 bis 100 finden sollte.
Der Computer schreibt seine Vermutung in Register A und stoppt dann.
Die Werte aller Register können dank der im Relais eingebauten LEDs angezeigt werden:

Jetzt muss der Player den Programmcode im ROM ändern und die in das Register D geladene Konstante ersetzen. Wenn keine 0 vorhanden ist, bedeutet dies, dass die Annahme größer ist als die von Ihnen angeforderte Zahl. Ansonsten weniger. Danach müssen Sie auf die Schaltfläche "Arbeit fortsetzen" klicken. Nach Überprüfung von Fall D verwendet der Computer beim nächsten Versuch die vorherige Annahme als Ober- oder Untergrenze.
Die erste Version des ProgrammsMOVI B, 1 ; 00: 10000001 00000001 MOVI C, 101 ; 01: 10000010 01100101 Loop: ADD A, B, C ; 02: 01001000 00011010 SHR A, A ; 03: 01111000 00001100 HALT ; 04: 00010000 00000000 MOVI D, guess ; 05: 10000011 iiiiiiii OR F, D, D ; 06: 01101000 00110011 JMP NZ, Greater ; 07: 11100111 00001010 MOV B, A ; 08: 00011001 00000000 JMP Loop ; 09: 10000111 00000010 Greater: MOV C, A ; 0a: 00011010 00000000 JMP Loop ; 0b: 10000111 00000010

Der Nachteil des ersten Programms besteht darin, dass die Verwendung unpraktisch ist. Dies lässt sich anhand des Fotos des ROMs verstehen. Es ist nicht einfach, so kleine Kippschalter während des Spiels zu wechseln (aber Sie müssen auch sicherstellen, dass das Programm es nicht versehentlich verderbt).
Also habe ich mir eine andere Eingabemöglichkeit ausgedacht. Zum Debuggen
ist neben jedem Register
ein Kippschalter vorgesehen , um seinen Wert zurückzusetzen. Das Wechseln ist viel bequemer als das Ändern des ROM.
Jetzt betritt der Computer die Einheit im Voraus in Register D, und der Spieler verwirft sie entweder (wenn die Vermutung unter der beabsichtigten Zahl liegt) oder lässt sie unverändert (wenn die Vermutung größer ist).
Die endgültige Version des Programms MOVI B, 1 ; 00: 10000001 00000001 MOVI C, 101 ; 01: 10000010 01100101 Loop: ADD A, B, C ; 02: 01001000 00011010 SHR A, A ; 03: 01111000 00001100 MOVI D, 1 ; 04: 10000011 00000001 HALT ; 05: 00010000 00000000 OR F, D, D ; 06: 01101000 00110011 JMP NZ, Greater ; 07: 11100111 00001010 MOV B, A ; 08: 00011001 00000000 JMP Loop ; 09: 10000111 00000010 Greater: MOV C, A ; 0a: 00011010 00000000 JMP Loop ; 0b: 10000111 00000010
Subtraktionsspiel (Bashe-Spiel)
Ein weiteres klassisches Spiel, das unerfahrene Programmierer häufig implementieren, ist das Bachet-Spiel.
Darin wechseln sich zwei Spieler aus einem Haufen mit anfänglich N Gegenständen ab und nehmen mindestens einen und nicht mehr als M Gegenstände. Der Verlierer ist derjenige, der nichts zu nehmen hat.

In meiner Version wird das Spiel mit einem Computer geliefert. Anfänglich eine Reihe von 21 Elementen (z. B. 21 Übereinstimmungen). Die Spieler nehmen 1 bis 3 Spiele in ihrem Zug und derjenige, der das letzte Spiel bestreitet, gewinnt.
Das Spiel hat eine Gewinnstrategie für den ersten Spieler - lassen Sie immer die Anzahl der Spiele, die ein Vielfaches von vier ist. Da 0 auch ein Vielfaches von vier ist, kann der zweite Spieler das Spiel nicht auf diese Position bringen, was bedeutet, dass er verliert.
Der Computer geht an zweiter Stelle und überlässt den Menschen eine Chance, macht aber keine Fehler. Und wenn der Spieler keine Gewinnstrategie verfolgt, wird der Computer dies tun.
Die erste Version des Programms MOVI A, 21 ; 00: 10000000 00001101 Loop: HALT ; 01: 00010000 00000000 MOVI B, move ; 02: 10000001 000000mm SUB A, A, B ; 03: 01011000 00001001 AND C, A, 3 ; 04: 01100010 10001011 MOVI Z, C, 1 ; 05: 10010010 00000001 SUB A, A, C ; 06: 01011000 00001010 JMP Loop ; 07: 10000111 00000001
In der ersten Version wurde der gleiche Ansatz verwendet wie beim „Erraten der Zahl“ - in Ihrem Zug mussten Sie die Anzahl der Übereinstimmungen in einer der Anweisungen codieren. Sie könnten sogar alle Spiele gleichzeitig zählen und nehmen, und der Computer wird nichts bemerken.
Aber dann habe ich auch dieses Programm umgeschrieben. In drei Registern (B, C, D) gibt der Computer jeweils 1 ein, und der Spieler muss 0, 1 oder 2 davon zurücksetzen. Die restlichen Einheiten sind die Streichhölzer, die er nimmt. Betrug ist auch möglich, wenn Sie alle drei Register zurücksetzen (als ob Sie nichts nehmen).
Die endgültige Version des Programms MOVI A, 21 ; 00: 10000000 00010101 Loop: MOVI B, 1 ; 01: 10000001 00000001 MOVI C, 1 ; 02: 10000010 00000001 MOVI D, 1 ; 03: 10000011 00000001 HALT ; 04: 00010000 00000000 SUB A, A, B ; 05: 01011000 00001001 SUB A, A, C ; 06: 01011000 00001010 SUB A, A, D ; 07: 01011000 00001011 AND C, A, 3 ; 08: 01100010 10001011 MOVI Z, C, 1 ; 09: 10010010 00000001 SUB A, A, C ; 0a: 01011000 00001010 JC Exit ; 0b: 10110111 00001101 JNZ Loop ; 0c: 11100111 00000001 Exit: HALT ; 0d: 00010000 00000000
Natürlich stellte sich heraus, dass das Programm etwas länger war, aber die Verwendung ist viel bequemer.
Außerdem plane ich, das ROM fertigzustellen (jetzt gibt es nur noch 32 von 64 möglichen Wörtern) und ein Eingabegerät in Form einer Matrix von Kippschaltern hinzuzufügen. Vielleicht kannst du dann wenigstens Tic-Tac-Toe machen.