- OFRAK Tetris ist ein Tetris-artiges Spiel im Browser, in dem ARM-Instruktionen herunterfallen; statt Blöcke zu stapeln, platziert man Instruktionen und baut so den Ausführungsfluss eines Programms auf
- Die herunterfallenden Instruktions-Gadgets werden nach dem Rotieren fixiert, und von den fixierten Instruktionen wird nur die ganz oben auf dem Bildschirm ausgeführt
- Die Punktzahl wird an der Speicheradresse gespeichert, auf die R12 zeigt; über R0~R12, LR, PC, SP und einen Memory Dump lässt sich der Zustand verfolgen
- Wenn die Zeit abläuft oder ein ungültiger Speicherzugriff bzw. ein Sprung an eine ungültige Adresse erfolgt, endet die Ausführung mit Game over
- Mit Optionen wie Einzelschritt-Ausführung, Musik-Umschalter, logischen Instruktionen, Endlosmodus, Fallintervall und maximaler Gadget-Größe lassen sich Schwierigkeitsgrad und Ausführungsweise anpassen
Tetris mit ARM-Instruktionen
- OFRAK Tetris ist ein Tetris-artiges Spiel, in dem Gadgets aus ARM-Instruktionen herunterfallen
- Die Nutzer drehen die fallenden Instruktionen und fixieren sie links, um einen Ausführungsfluss zu erzeugen
-
Ausführungsregeln
- Die Instruktionen fallen von oben nach unten
- Die Nutzer rotieren und fixieren die Instruktionen
- Von den fixierten Instruktionen wird nur die oberste Instruktion ausgeführt
Auf dem Bildschirm sichtbarer Ausführungsstatus
- Die aktuell auszuführende Instruktion und ihre Adresse werden zusammen angezeigt
- Beispiel:
add PC, PC, #61 - Beispiel:
00010000,00010004,00010008
- Beispiel:
- Anhand von Register- und Speicherstatus lässt sich das Ausführungsergebnis verfolgen
- Die Werte von R0~R12, LR, PC und SP werden angezeigt
- Speicherbereiche werden als hexadezimale Adressen und mit Nullen gefüllte Werte dargestellt
- Die Punktzahl wird etwa als
Score: 0angezeigt
Speicherung der Punktzahl und Bedingungen für das Spielende
- Die Punktzahl wird an der Speicheradresse gespeichert, auf die R12 zeigt
- Das Spiel endet, wenn eines der folgenden Ereignisse eintritt
- Die Zeit läuft ab
- Es wird auf ungültigen Speicher zugegriffen
- Es erfolgt ein Sprung an eine ungültige Adresse
- Auf dem Endbildschirm werden
Game over.und ein Eingabebereich für den Highscore angezeigt
Steuerung und Einstellungen
- Die Standardsteuerung umfasst Einzelschritt-Ausführung, Gadget fixieren, Register rotieren, Musik abspielen/pausieren und Anleitung ein-/ausblenden
- Es gibt auch Einstellungen für die Tastenbelegung von Gamepads
-
Single Step
-
Toggle Music
-
Lock In
-
Rotate Instructions Up / Down / Left / Right
- Toggle Game Instructions
- In den Spieleinstellungen lassen sich Ausführungsbedingungen und Schwierigkeitsgrad anpassen
- Score multiplier
- Enable Logical Instructions
- Infinite mode
- Seconds between drops
- Maximum gadget size
-
Event vor Ort auf der DEF CON
- Besucher der DEF CON können den Tisch von Red Balloon Security besuchen und im Car Hacking Village gemeinsam Tetris spielen
- Für Personen mit ausreichend hoher Punktzahl sind Preise vorgesehen
1 Kommentare
Hacker-News-Meinungen
Aus Sicht eines Programmierers mit sehr wenig Erfahrung in Assembly ist das ein tolles Tool zum Lernen.
Ich hatte in einem anderen Tab einen Spickzettel offen, um nachzusehen, was die einzelnen Befehle tun.
Nur dass mein Highscore wegen des ersten Segfaults bei -4,8 Milliarden lag, war etwas enttäuschend :-P
Wirklich cool! Mein bisheriger Highscore liegt bei 65612.
Als Feedback: Wenn man das Hilfe-Menü geöffnet hat, war nicht klar, wie man es wieder schließt; vermutlich geht es nur, indem man erneut
?drückt.Mir gefällt die Goblin-Musik, und auch das Interface zum Herumspielen mit Befehlen sowie die Farbcodierung sind gut.
Ein Sandbox-Modus, in dem man die Wirkung der Befehlsausführung vorab sehen und das Programm nach dem Ende des Spiels bearbeiten kann, wäre für Leute, die ARM-Assembly lernen, ziemlich nützlich.
Nachdem ich beim Bauen dieses Spiels ein paar Stunden damit gespielt habe, bin ich definitiv schneller darin geworden, ARM-Assembly zu lesen.
Bei „Der Punktestand wird im Speicher an der Adresse abgelegt, auf die R12 zeigt“ musste ich einfach lachen.
Danke fürs Teilen, und DEFCON fehlt mir. Vermutlich kann ich erst nächstes Jahr wieder hin.
Ich hatte die Seite vor der Antwort offen, daher habe ich die Antwort erst nach dem Neuladen gesehen.
Zwei gute Strategien, die ich bisher verwendet habe:
Erstens, den PC in möglichst viele Register streuen, diese Register so oft wie möglich addieren und die Summe dann an Adresse 0 oder an der Stelle speichern, an der der Punktestand liegt.
Zweitens, den aus dem alten PC-Wert zusammengesetzten Befehl als Integer in ein Register lesen, ihn dann, da er normalerweise negativ aussieht, per Subtraktion nicht-negativ machen und anschließend an der Score-Position speichern.
Mich würde interessieren, welche Strategien andere ausprobiert haben.
Das Konzept ist wirklich cool, aber mein Assembly-Verständnis ist viel zu gering :)
Es heißt, der Punktestand werde in R12 gespeichert, aber R12 ist 0 – warum ist der Score dann 16?
https://imgur.com/a/RY5jhTu
In diesem Fall ist das Adresse 0, also der Anfang des Datensegments.
Das Score-Register ist gelb, und der entsprechende Speicherbereich, auf den dieses Register zeigt – also die tatsächlichen Score-Bytes –, ist ebenfalls gelb markiert.
Ich kenne mich mit Computern aus und weiß auch ein bisschen grundlegendes Assembly, aber wow, das habe ich überhaupt nicht verstanden.
Allgemeiner würden mich auch Gedanken dazu interessieren, wie man das Spiel klarer machen könnte.
Ich weiß, dass ein Handbuch mit Erklärungen der Befehle hilfreich wäre, aber andere Ideen sind ebenfalls willkommen.
Wunderschöne Brutalismus-UI/UX.
Bevor ich es ausprobiert habe, habe ich auf „About“ geklickt; dadurch öffnete sich eine neue Seite mit folgendem Hinweis: „Wenn Sie diese Website weiter nutzen, stimmen Sie der Verwendung von Cookies zu.“
Das sieht nach einem GDPR-Verstoß aus. Cookies abzulehnen muss genauso einfach sein wie zuzustimmen.
Zumal diese Cookies offenbar nicht einmal für den Betrieb der Website erforderlich sind.
„Der Dienst verwendet Cookies und ähnliche Technologien wie Pixel-Tags, Web Beacons, Clear GIFs und JavaScript, damit unsere Server Ihren Webbrowser erkennen, feststellen können, wann Sie den Dienst besuchen und nutzen, Trends analysieren, unsere Nutzerbasis verstehen sowie den Dienst betreiben und verbessern können … Wir können die von uns gesammelten Informationen außerdem mit Informationen ergänzen, die wir von Dritten erhalten, einschließlich Cookies, die von Dritten auf Ihrem Gerät platziert wurden.“
https://ofrak.com/privacy/#tracking-tools-and-opt-out
Unten auf der Seite darauf zu verweisen, Cookies über die Browsereinstellungen zu löschen, ist keine akzeptable Lösung.
https://www.cnil.fr/en/refusing-cookies-should-be-easy-accep...
Mich interessiert, wie man das Spiel baut.
Ich habe mir https://ofrak.com/docs/environment-setup.html angesehen, aber nichts Konkretes zum Tetris-Spiel gefunden.
Vielleicht habe ich etwas übersehen.
Das Konzept gefällt mir wirklich sehr.
Der Schlüssel zu einem hohen Score scheint darin zu liegen, 0 in den PC zu schreiben.
Denn der Binärcode des neuen Befehls wird dem rechts sichtbaren Speicherbereich „hinzugefügt“, und anschließend kann man R12 manipulieren, um den Punktestand zu maximieren.
Denn alle Befehle sind 4 Byte lang und das höchstwertige Bit ist immer 1.
Ein paar Mal bin ich auf etwa 2 Milliarden gekommen, aber der Durchschnitt ist ziemlich niedrig ;)