- OFRAK Tetris est un jeu de type Tetris dans le navigateur où tombent des instructions ARM ; au lieu d’assembler des blocs, on place des instructions pour créer le flux d’exécution d’un programme
- Les gadgets d’instructions qui tombent sont pivotés puis verrouillés, et seules les instructions verrouillées situées en haut de l’écran sont exécutées
- Le score est stocké à l’adresse mémoire pointée par R12, et l’on peut suivre l’état via R0 à R12, LR, PC, SP ainsi qu’un dump mémoire
- Si le temps est écoulé, qu’un accès mémoire invalide se produit ou qu’un saut vers une mauvaise adresse survient, c’est le Game over et l’exécution s’arrête
- Des options comme l’exécution pas à pas, le basculement de la musique, les instructions logiques, le mode infini, l’intervalle de chute et la taille maximale des gadgets permettent d’ajuster la difficulté et le mode d’exécution
Tetris piloté par des instructions ARM
- OFRAK Tetris est un jeu de type Tetris dans lequel tombent des gadgets composés d’instructions ARM
- L’utilisateur fait pivoter les instructions qui tombent puis les verrouille à gauche pour construire le flux d’exécution
-
Règles d’exécution
- Les instructions tombent de haut en bas
- L’utilisateur fait pivoter les instructions puis les verrouille
- Parmi les instructions verrouillées, seule celle tout en haut est exécutée
État d’exécution visible à l’écran
- L’instruction en cours d’exécution et son adresse sont affichées ensemble
- Exemple :
add PC, PC, #61 - Exemple :
00010000,00010004,00010008
- Exemple :
- On peut suivre le résultat de l’exécution en observant l’état des registres et de la mémoire
- Les valeurs de R0 à R12, LR, PC, SP sont affichées
- La zone mémoire est affichée sous forme d’adresses hexadécimales et de valeurs remplies de zéros
- Le score s’affiche sous la forme
Score: 0
Stockage du score et conditions de fin de partie
- Le score est stocké à l’adresse mémoire pointée par R12
- La partie se termine si l’un des événements suivants se produit
- Le temps est écoulé
- Un accès à une mémoire invalide a lieu
- Un saut vers une adresse invalide a lieu
- L’écran de fin affiche
Game over.ainsi qu’une zone de saisie du meilleur score
Contrôles et réglages
- Les commandes de base incluent l’exécution pas à pas, le verrouillage des gadgets, la rotation des registres, la lecture/pause de la musique et l’affichage/masquage des explications
- Une configuration des touches pour manette est également proposée
-
Single Step
-
Toggle Music
-
Lock In
-
Rotate Instructions Up / Down / Left / Right
- Toggle Game Instructions
- Dans les paramètres du jeu, on peut ajuster les conditions d’exécution et la difficulté
- Score multiplier
- Enable Logical Instructions
- Infinite mode
- Seconds between drops
- Maximum gadget size
-
Événement sur place à la DEF CON
- Les personnes présentes à la DEF CON peuvent passer au stand Red Balloon Security pour jouer à Tetris au Car Hacking Village
- Des récompenses sont prévues pour celles et ceux qui obtiendront un score suffisamment élevé
1 commentaires
Avis sur Hacker News
Du point de vue d’un programmeur qui a très peu d’expérience en assembleur, c’est un super outil pour apprendre.
J’avais ouvert une antisèche dans un autre onglet pour voir ce que faisait chaque instruction.
En revanche, j’ai été un peu déçu que ma première segfault me donne un meilleur score de -4,8 milliards :-P
Vraiment excellent ! Mon meilleur score jusqu’ici est monté à 65612.
Pour donner un retour, quand on ouvre le menu d’aide, la façon de le fermer n’est pas claire ; on dirait que seul le fait d’appuyer à nouveau sur
?fonctionne.J’aime bien la musique de Goblin, et l’interface ainsi que le code couleur sont bons pour jouer avec les instructions.
Un mode bac à sable permettant de prévisualiser l’effet de l’exécution des instructions et de modifier le programme après la fin de la partie serait assez utile pour quelqu’un qui apprend l’assembleur ARM.
En jouant quelques heures pendant que je développais ce jeu, j’ai clairement gagné en vitesse de lecture de l’assembleur ARM.
Je n’ai pas pu m’empêcher de rire en lisant « le score est stocké en mémoire à l’adresse pointée par R12 ».
Merci pour le partage, et DEFCON me manque. Je ne pourrai sans doute y retourner que l’an prochain.
J’avais la page ouverte avant les réponses, donc je n’ai pas vu les réponses avant de rafraîchir.
Les deux bonnes stratégies que j’ai utilisées jusqu’ici sont les suivantes.
D’abord, répartir le PC dans autant de registres que possible, additionner ces registres autant de fois que possible, puis stocker la somme à l’adresse 0 ou à l’emplacement du score.
Ensuite, lire dans un registre, comme entier, l’instruction assemblée à partir d’une ancienne valeur du PC ; comme elle paraît généralement négative, la rendre non négative par soustraction, puis la stocker à l’emplacement du score.
Je serais curieux de savoir quelles stratégies les autres ont essayées.
Le concept est vraiment génial, mais mon niveau de compréhension de l’assembleur est trop faible :)
Il est indiqué que le score est stocké dans R12, mais je ne comprends pas pourquoi le score est 16 alors que R12 vaut 0.
https://imgur.com/a/RY5jhTu
Dans ce cas, c’est l’adresse 0, c’est-à-dire le début du segment de données.
Le registre du score est en jaune, et la zone mémoire correspondante pointée par ce registre — autrement dit les octets réels du score — est également affichée en jaune.
Je suis à l’aise avec les ordinateurs et je connais un peu les bases de l’assembleur, mais là, wow, je n’ai rien compris.
Plus largement, je suis aussi preneur d’idées sur la façon de rendre le jeu plus clair.
Je sais qu’un manuel décrivant les instructions aiderait, mais toutes les autres idées sont les bienvenues.
Une magnifique UI/UX brutaliste.
Avant d’essayer, j’ai cliqué sur « About », ce qui a ouvert une nouvelle page affichant : « En continuant à utiliser ce site, vous acceptez l’utilisation de cookies ».
Cela ressemble à une violation du RGPD. Refuser les cookies doit être aussi simple que les accepter.
Surtout que ces cookies ne semblent même pas nécessaires au fonctionnement du site.
« Le service utilise des cookies et des technologies similaires, comme des pixels espions, des balises web, des GIF transparents et JavaScript, afin que nos serveurs reconnaissent votre navigateur web, sachent quand vous visitez et utilisez le service, analysent les tendances, comprennent notre base d’utilisateurs, et exploitent et améliorent le service … Nous pouvons également compléter les informations collectées avec des informations reçues de tiers, y compris des cookies placés sur votre appareil par des tiers. »
https://ofrak.com/privacy/#tracking-tools-and-opt-out
Dire en bas de page de supprimer les cookies via les paramètres du navigateur n’est pas une solution acceptable.
https://www.cnil.fr/en/refusing-cookies-should-be-easy-accep...
Je me demande comment builder le jeu.
J’ai regardé https://ofrak.com/docs/environment-setup.html, mais je n’ai rien trouvé de spécifique au jeu Tetris.
J’ai peut-être raté quelque chose.
J’aime vraiment beaucoup le concept.
La clé pour obtenir un score élevé semble être d’écrire 0 dans le PC.
Le code binaire de la nouvelle instruction est en effet « ajouté » à la zone mémoire affichée à droite, et on peut ensuite manipuler R12 pour maximiser le score.
C’est parce que toutes les instructions font 4 octets et que le bit de poids fort vaut toujours 1.
Quelques fois, je suis monté à environ 2 milliards, mais la moyenne reste assez basse ;)