{"id":804,"date":"2021-01-10T21:12:41","date_gmt":"2021-01-10T20:12:41","guid":{"rendered":"https:\/\/blog.vincentcharles.ovh\/?p=804"},"modified":"2021-10-04T11:58:18","modified_gmt":"2021-10-04T09:58:18","slug":"tis-100-un-peu-dassembleur","status":"publish","type":"post","link":"https:\/\/blog.vincentcharles.ovh\/index.php\/2021\/01\/10\/tis-100-un-peu-dassembleur\/","title":{"rendered":"TIS-100 : Un peu d&rsquo;assembleur ?"},"content":{"rendered":"<p>Shenzhen I\/O ou EXApunks ; deux jeux du studio ind\u00e9pendant Zachtronics que j&rsquo;adore. Alors je ne pouvais pas faire l&rsquo;impasse sur TIS-100 qui est le premier jeu \u00e0 m&rsquo;avoir fait d\u00e9couvrir leurs produits et le concept g\u00e9nial de ce type de jeu. TIS est un peu la base des deux autres dans lequel nous devons d\u00e9bugguer une \u00e9trange machine en assembleur afin d&rsquo;en d\u00e9couvrir le secret de cette machine.<\/p>\n<p><!--more--><\/p>\n<p>De l&rsquo;assembleur, \u00e7a y ressemble mais ce n&rsquo;est pas \u00e7a non plus. Le jeu s&rsquo;articule autour d&rsquo;un langage de bas niveau mais avec tr\u00e8s peu d&rsquo;instruction et une syntaxe ultra simple. C&rsquo;est dans doute la simplicit\u00e9 du code qui en fait sa force. Pour optimiser le code, il ne faut pas h\u00e9siter \u00e0 remettre en cause les deux heures que l&rsquo;on vient de passer pour obtenir une partie de la solution.<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12923\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075604_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Pour ce mettre dans le bain directement, au lancement du jeu, cela ressemble au d\u00e9marrage d&rsquo;un vieux syst\u00e8me d&rsquo;exploitation. Le syst\u00e8me est propos\u00e9 avec un manuel d&rsquo;utilisation incomplet mais suffisamment annot\u00e9 pour r\u00e9soudre l&rsquo;ensemble des puzzles. Si j&rsquo;ai un conseil, RTFM : Read The Fucking Manual !<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12924\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075931_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Le menu principal (TIS-100 Segment Map) propose les puzzles de \u00ab\u00a0base\u00a0\u00bb du jeu. Les niveaux se d\u00e9bloquent au fur et \u00e0 mesure que l&rsquo;on progresse. L&rsquo;histoire \u00e9volue \u00e9galement, nous y reviendrons. Concernant la difficult\u00e9, elle augmente niveau apr\u00e8s niveau.<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12927\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075941_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Pour chaque niveau, nous avons en haut \u00e0 gauche le d\u00e9tail du programme. Sur la gauche, les entr\u00e9es (IN.1 &#8230;) et la sortie attendue (OUT). Le but du jeu est de compl\u00e9ter les \u00ab\u00a0nodes\u00a0\u00bb (12 cases programmables) afin d&rsquo;effectuer le calcul ou la transformation demand\u00e9e. Remarque : le puzzle ci-dessus fait partie des puzzles difficiles.. Vous ne commencerez pas par l\u00e0.<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12925\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075946_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>A la fin de chaque niveau r\u00e9ussi, nous retrouvons cette page indiquant le nombre de cycle n\u00e9cessaire, le nombre de \u00ab\u00a0nodes\u00a0\u00bb utilis\u00e9s ainsi que le nombre d&rsquo;instruction par cycle. Le premier challenge est de terminer le niveau puis rapidement, nous recherchons l&rsquo;am\u00e9lioration perp\u00e9tuelle de nos solutions. Les meilleurs joueurs sont ceux qui proposent la solution la plus efficace c&rsquo;est \u00e0 dire au nombre de cycle le plus bas.<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12928\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075959_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Tout le long du jeu et des puzzles, le d\u00e9veloppeur nous complique la vie en condamnent des nodes ce qui limite la fa\u00e7on de r\u00e9soudre les probl\u00e8mes. Le d\u00e9veloppeur nous propose via certains nodes de lire le \u00ab\u00a0debug\u00a0\u00bb qui laisse apparaitre pas mal de contenu qui nous permet de comprendre l&rsquo;histoire de la machine et son propri\u00e9taire. A quoi sert cette machine ? Qui a produit ce syst\u00e8me ? Pourquoi autant de bugs ? Il nous faut plus d&rsquo;indice.. Passons \u00e0 la deuxi\u00e8me partie &#8230;<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12926\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110075935_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>TIS-NET Directory contient de nouveaux challenges int\u00e9gr\u00e9s dans le jeu par le d\u00e9veloppeur mais provenant de communaut\u00e9. Pour garder de la coh\u00e9rence avec le projet initial, l&rsquo;histoire y est compl\u00e9t\u00e9e. Je reconnais certains puzzles vraiment \u00ab\u00a0hard\u00a0\u00bb. Courage pour arriver \u00e0 la fin de cette partie.<\/p>\n<p><a href=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-12929\" src=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-700x394.jpg\" alt=\"\" width=\"700\" height=\"394\" srcset=\"https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-700x394.jpg 700w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-300x169.jpg 300w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-768x432.jpg 768w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-1536x864.jpg 1536w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-540x304.jpg 540w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1-1140x641.jpg 1140w, https:\/\/blog.vincentcharles.ovh\/wp-content\/uploads\/2021\/01\/20210110080011_1.jpg 1920w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a>Je recommande ce jeu qui est simplement addictif. Il m&rsquo;a fallu environ 70 heures pour arriver au bout de l&rsquo;ensemble.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Shenzhen I\/O ou EXApunks ; deux jeux du studio ind\u00e9pendant Zachtronics que j&rsquo;adore. Alors je ne pouvais pas faire l&rsquo;impasse sur TIS-100 qui est le premier jeu \u00e0 m&rsquo;avoir fait d\u00e9couvrir leurs produits et le concept g\u00e9nial de ce type de jeu. TIS est un peu la base des deux autres dans lequel nous devons&#8230;<\/p>\n","protected":false},"author":1,"featured_media":803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[18],"class_list":["post-804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-test","tag-niveau_difficile"],"_links":{"self":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/comments?post=804"}],"version-history":[{"count":5,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/804\/revisions"}],"predecessor-version":[{"id":13128,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/posts\/804\/revisions\/13128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media\/803"}],"wp:attachment":[{"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/media?parent=804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/categories?post=804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vincentcharles.ovh\/index.php\/wp-json\/wp\/v2\/tags?post=804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}