{"id":1416,"date":"2020-04-01T06:00:47","date_gmt":"2020-04-01T04:00:47","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=1416"},"modified":"2020-04-01T06:00:47","modified_gmt":"2020-04-01T04:00:47","slug":"recuperez-les-caracteres-redefinis-de-tous-les-logiciels-2-deux-exemples-rush-hour-et-the-hellion","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/04\/01\/recuperez-les-caracteres-redefinis-de-tous-les-logiciels-2-deux-exemples-rush-hour-et-the-hellion\/","title":{"rendered":"R\u00e9cup\u00e9rez les caract\u00e8res red\u00e9finis de tous les logiciels : 2 &#8211; Deux exemples &#8220;Rush Hour&#8221; et &#8220;The Hellion&#8221;"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"> par Andr\u00e9 C. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comme nous l&#8217;avons vu dans l&#8217;article pr\u00e9c\u00e9dent, peu importe\nque le logiciel \u00e0 traiter soit prot\u00e9g\u00e9 ou non, l&#8217;essentiel est qu&#8217;il soit\npossible de le faire tourner sur un \u00e9mulateur et de pouvoir r\u00e9aliser un dump de\nla m\u00e9moire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Disons que si le logiciel n&#8217;est pas prot\u00e9g\u00e9 (ou s&#8217;il a \u00e9t\u00e9\nd\u00e9verrouill\u00e9), il est plus facile de savoir s&#8217;il est \u00e9crit en Basic ou en\nlangage machine, s&#8217;il tourne en mode TEXT ou HIRES, s&#8217;il utilise les zones\nnormales de stockage des caract\u00e8res et les proc\u00e9dures normales d&#8217;affichage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il y a trois grandes cat\u00e9gories de logiciels&nbsp;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ceux dont les caract\u00e8res sont red\u00e9finis\nuniquement lors du lancement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ceux dont les red\u00e9finitions \u00e9voluent au fil de l&#8217;ex\u00e9cution. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ceux dont les caract\u00e8res ne sont pas red\u00e9finis (oups&nbsp;!). <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1) Logiciels dont les caract\u00e8res sont red\u00e9finis uniquement lors du lancement<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cette cat\u00e9gorie, j&#8217;ai pris comme exemple &#8220;Rush\nHour&#8221; de Fabrice F. En effet ce logiciel est particuli\u00e8rement astucieux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour contourner les difficult\u00e9s d&#8217;un cahier des charges tr\u00e8s\nlourd, Fabrice a recopi\u00e9 les caract\u00e8res utiles du jeu 0 dit &#8220;normal&#8221;\ndans le jeu 1 dit &#8220;semi-graphique&#8221; (dont les caract\u00e8res d&#8217;origine\nsont \u00e9videmment \u00e9cras\u00e9s). Pour l&#8217;affichage de texte standard, il faudra\nd\u00e9sormais utiliser le mode &#8220;semi-graphique&#8221;&nbsp;!\n\nLes 96 caract\u00e8res du jeu 0 \u00e9tant\n&#8220;disponibles&#8221; ont \u00e9t\u00e9 red\u00e9finis pour afficher les sprites de divers\nv\u00e9hicules. Notez que ce programme n&#8217;est pas prot\u00e9g\u00e9 et que son listing est bien\ndocument\u00e9.\n\n\n\n<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Proc\u00e9dure&nbsp;dans Euphoric&nbsp;:<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\"><li>Lancez Euphoric, chargez &#8220;Rush Hour&#8221; (RUSHHOUR.TAP) et lancez-le.<\/li><li>Avancez dans le jeu, dans mon exemple, jusqu&#8217;au &#8220;Level 11&#8221; (choix &#8220;Harder&#8221;).<\/li><li>Pressez la touche F9 pour g\u00e9n\u00e9rer un dump m\u00e9moire. Renommez par exemple en DumpRH.BIN<\/li><li>Pressez F12 pour g\u00e9n\u00e9rer une recopie d&#8217;\u00e9cran au format .BMP. Renommez par exemple en RushHourLevel11.BMP<\/li><li> Laissez Euphoric en attente. <\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"> <strong>Proc\u00e9dure dans votre \u00e9diteur hexad\u00e9cimal&nbsp;:<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ouvrez le mod\u00e8le d&#8217;en-t\u00eate SAVJ0TXT.TAP\n(voir article pr\u00e9c\u00e9dent). CTRL+A puis CTRL+C pour copier les 23 octets du\nfichier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ouvrez un nouveau document. CTRL+V pour y\ncoller l&#8217;en-t\u00eate. Modifiez cet en-t\u00eate uniquement pour le renommer (par exemple\nRHJ0TXT).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ouvrez le fichier DumpRH.BIN de &#8220;Rush\nHour&#8221;. Allez \u00e0 l&#8217;offset #B500 et s\u00e9lectionnez les #0300 octets du jeu 0,\npuis tapez CTRL+C pour copier cette zone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allez \u00e0 la fin de l&#8217;en-t\u00eate dans le\nnouveau document. CTRL+V, pour y coller le jeu 0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sauvegardez votre jeu sous le nom\nRHJ0TXT.TAP (Rush Hour, Jeu 0, mode TEXT).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Faites la m\u00eame chose pour le jeu 1\n(SAVJ1TXT.TAP, RHJ1TXT, #B900, #0200 octets, RHJ1TXT.TAP).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Toujours dans votre \u00e9diteur hexad\u00e9cimal,\nr\u00e9glez l&#8217;affichage pour 40 octets par ligne, afin qu&#8217;une ligne dans l&#8217;\u00e9diteur\ncorresponde \u00e0 une ligne de l&#8217;\u00e9cran Oric et allez en #BB80 (d\u00e9but de l&#8217;\u00e9cran\nTEXT).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">8.\u00a0\u00a0\u00a0\u00a0\u00a0 Reprenez la fen\u00eatre d&#8217;Euphoric qui \u00e9tait rest\u00e9e en attente et placez l\u00e0 imm\u00e9diatement \u00e0 gauche de la zone d&#8217;affichage des codes Ascii de votre \u00e9diteur (voir la figure ci-dessous). Vous avez maintenant la correspondance entre les v\u00e9hicules de &#8220;Rush Hour&#8221; \u00e0 gauche et les codes Ascii utilis\u00e9s pour l&#8217;assemblage des sprites\u00a0! <\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/RecupCaract2.zip\">RecupCaract2<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/RecupCaract2.zip\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2) Logiciels dont la red\u00e9finition des caract\u00e8res \u00e9volue au fil de l&#8217;ex\u00e9cution<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cette\ncat\u00e9gorie est semblable \u00e0 la pr\u00e9c\u00e9dente, sauf que les caract\u00e8res sont red\u00e9finis\npour chaque phase du jeu !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;exemple\nle plus frappant est &#8220;The Hellion&#8221; avec 101 \u00e9crans o\u00f9 se meuvent les\nsprites d&#8217;objets tr\u00e8s diff\u00e9rents en quantit\u00e9 invraisemblable. En fait, les 101\ntableaux de &#8220;The Hellion&#8221; repr\u00e9sentent un cas extr\u00eame de\nred\u00e9finitions \u00e0 r\u00e9p\u00e9tition.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce\nlogiciel fonctionne en mode TEXT et les 2 jeux de caract\u00e8res sont partiellement\nred\u00e9finis.\n\nVous trouverez le programme (HELLION.WAV, HELLION.TAP\n&amp; HELLION.DSK au choix), ainsi que les fichiers utilis\u00e9s ou produits dans\ncet exemple dans le zip qui accompagne cet article.\n\n\n\n<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Proc\u00e9dure dans Euphoric<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Il\nfaut traiter &#8220;The Hellion&#8221; comme s&#8217;il s&#8217;agissait d&#8217;une s\u00e9rie de 101\nprogrammes ind\u00e9pendants, mais r\u00e9unis \u00e0 la queue-leu-leu. La proc\u00e9dure suivante\ndevra donc \u00eatre r\u00e9p\u00e9t\u00e9e pour chaque tableau&nbsp;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pressez\nla touche F9 (sauvegarde d&#8217;un dump de la m\u00e9moire) au d\u00e9but de chaque tableau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Puis, le plus vite possible, pressez la touche F12 pour avoir une recopie de l&#8217;\u00e9cran correspondant \u00e0 ce dump (le plus rapidement possible car les sprites se d\u00e9placent tr\u00e8s vite). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Et enfin pressez F11 pour geler la s\u00e9rie de tableaux, le temps de renommer le fichier &#8220;DUMP&#8221; en &#8220;DumpH-xx.bin&#8221; ainsi que la recopie d&#8217;\u00e9cran en &#8220;Hellion-xx.bmp&#8221;, xx \u00e9tant le n\u00b0 du tableau. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Proc\u00e9dure dans votre \u00e9diteur hexad\u00e9cimal :<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Chacun des fichiers\n&#8220;DumpHxx.bin&#8221; sera trait\u00e9 dans votre \u00e9diteur Hexad\u00e9cimal pour en\nextraire les deux jeux de caract\u00e8res et afficher la zone d&#8217;\u00e9cran TEXT. Prenons\npar exemple le fichier DumpH04.bin&nbsp;:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Ouvrez le\nmod\u00e8le d&#8217;en-t\u00eate SAVJ0TXT.TAP. CTRL+A puis CTRL+C pour copier les 23 octets du\nfichier.<\/li><li>Ouvrez un\nnouveau document. CTRL+V pour y coller l&#8217;en-t\u00eate. Modifiez cet en-t\u00eate pour le\nrenommer (par exemple &#8220;H04J0TXT&#8221;).<\/li><li>Ouvrez le\nfichier &#8220;DumpH04.bin&#8221;. Allez \u00e0 l&#8217;offset #B500 et s\u00e9lectionnez les\n#0300 octets du jeu 0, puis tapez CTRL+C pour copier cette zone.<\/li><li>Allez \u00e0 la\nfin de l&#8217;en-t\u00eate dans le nouveau document. CTRL+V, pour y coller le jeu 0.<\/li><li>Sauvegardez\nvotre jeu 0 par exemple sous le nom H04J0TXT.TAP (Hellion, tableau &#8220;Wave\n4&#8221;, Jeu 0, mode TEXT).<\/li><li>Faites la\nm\u00eame chose pour le jeu 1 avec le mod\u00e8le SAVJ1TXT.TAP et sauvegarder le jeu 1\npar exemple sous le nom H04J1TXT.TAP (Hellion, tableau &#8220;Wave 4&#8221;, Jeu\n1, mode TEXT).<\/li><li>Toujours\ndans votre \u00e9diteur hexad\u00e9cimal, r\u00e9glez l&#8217;affichage pour 40 octets par ligne,\nafin qu&#8217;une ligne dans l&#8217;\u00e9diteur corresponde \u00e0 une ligne de l&#8217;\u00e9cran Oric et\nallez en #BB80 (d\u00e9but de l&#8217;\u00e9cran TEXT).<\/li><li>Reprenez la\nfen\u00eatre d&#8217;Euphoric qui \u00e9tait rest\u00e9e en attente et placez l\u00e0 imm\u00e9diatement \u00e0\ngauche de la zone d&#8217;affichage des codes Ascii de votre \u00e9diteur (voir la figure ci-dessous).\nVous avez maintenant la correspondance entre les &#8220;feux tricolores&#8221; de\n&#8220;The Hellion&#8221; \u00e0 gauche et les codes Ascii utilis\u00e9s pour l&#8217;assemblage\nde ces sprites \u00e0 droite&nbsp;! <\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Si on compare le jeu 0 obtenu\n\u00e0 partir de ce tableau&nbsp; &#8220;Wave\n4&#8221; avec le jeu 0 natif de l&#8217;Oric, on constate que deux caract\u00e8res\nseulement sont red\u00e9finis : { (Ascii 123)\net } (Ascii 125) (et cette\nred\u00e9finition varie d&#8217;ailleurs d&#8217;un tableau \u00e0 l&#8217;autre). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour le reste, les sprites\naffich\u00e9s sont form\u00e9s avec des caract\u00e8res du jeu 1 (un attribut #09 est plac\u00e9 au\nd\u00e9but de chaque ligne d&#8217;\u00e9cran).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le tableau &#8220;Wave\n4&#8221; (voir la figure ci-dessus), les objets volants (des feux tricolores)\nsont red\u00e9finis avec les caract\u00e8res 1&nbsp;2&nbsp;3&nbsp;4 ou 5&nbsp;6&nbsp;7&nbsp;8 ou 9&nbsp;:&nbsp;;&nbsp;&lt; dispos\u00e9s verticalement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est plus compliqu\u00e9 pour\nl&#8217;oiseau du bas de l&#8217;\u00e9cran, car celui-ci vole et plusieurs sprites se succ\u00e8dent\npour r\u00e9aliser cette animation. J\u2019ai d\u00e9tect\u00e9 des images red\u00e9finies avec =&nbsp;&gt;&nbsp;? sur une 1e ligne et @&nbsp;A&nbsp;B en dessous, ou C&nbsp;D&nbsp;E et F&nbsp;G&nbsp;H ou I&nbsp;J&nbsp;K et L&nbsp;M&nbsp;N ou O&nbsp;P&nbsp;Q et R&nbsp;S&nbsp;T ou U&nbsp;V&nbsp;W et X&nbsp;Y&nbsp;Z. L&#8217;animation est donc\nr\u00e9alis\u00e9e avec 5 images. Avec 6 caract\u00e8res red\u00e9finis par image, cela fait 30\ncaract\u00e8res red\u00e9finis rien que pour l&#8217;oiseau&nbsp;! <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans tous les cas (feux\ntricolores ou oiseau) un attribut de couleur est plac\u00e9 juste \u00e0 gauche de\nchacune des lignes des sprites, ce qui permet d\u2019obtenir des sprites\nmulticolores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour ne pas alourdir cet\narticle, je ne montre que ce tableau &#8220;Wave 4&#8221;. Mais dans le tableau\nsuivant &#8220;Wave 5&#8221;, chaque sprite est d\u00e9fini par les m\u00eames 4 caract\u00e8res\n1&nbsp;2&nbsp;3&nbsp;4 ou 5&nbsp;6&nbsp;7&nbsp;8 ou 9&nbsp;:&nbsp;;&nbsp;&lt; dispos\u00e9s sur deux lignes. Or\nces caract\u00e8res ont \u00e9t\u00e9 red\u00e9finis entre temps puisque les dessins affich\u00e9s sont\ndiff\u00e9rents. L&#8217;oiseau qui ressemble comme deux gouttes au pr\u00e9c\u00e9dent est affich\u00e9\n\u00e0 partir des m\u00eame 5 jeux de red\u00e9finitions que pr\u00e9c\u00e9demment !\n\nJe ne suis pas all\u00e9 plus loin dans mon analyse des 101\ntableaux de &#8220;The Hellion&#8221;. Mais si certains sprites vous int\u00e9ressent,\nvous devriez pouvoir les r\u00e9cup\u00e9rer sans difficult\u00e9 en suivant mes indications.\n\n\n\n<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3) Logiciels dont les caract\u00e8res ne sont pas red\u00e9finis<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Avant\nde vouloir r\u00e9cup\u00e9rer des caract\u00e8res red\u00e9finis, il serait sage de s&#8217;assurer\nqu&#8217;il y en a. La pr\u00e9sence de sprites sur l&#8217;\u00e9cran ne signifie pas que des\ncaract\u00e8res ont \u00e9t\u00e9 red\u00e9finis. C&#8217;est, la plupart du temps, le cas pour les\nprogrammes qui tournent en mode Hires et qui sont, quasiment \u00e0 coup s\u00fbr, \u00e9crits\nen langage machine. En effet, le Basic n&#8217;est pas assez rapide pour faire\n\u00e9voluer des sprites sur l&#8217;\u00e9cran (ni m\u00eame des caract\u00e8res via la commande CHAR).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour\ncette cat\u00e9gorie de logiciels, il s&#8217;agira plut\u00f4t de r\u00e9cup\u00e9rer des sprites. Mon\nprochain article&nbsp;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&#8220;R\u00e9cup\u00e9rez les sprites de tous les logiciels en HIRES&#8221; montrera comment s&#8217;y prendre sans avoir \u00e0 d\u00e9sosser le langage machine.<\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">A bient\u00f4t\u2026 <\/p>\n","protected":false},"excerpt":{"rendered":"<p>par Andr\u00e9 C. Comme nous l&#8217;avons vu dans l&#8217;article pr\u00e9c\u00e9dent, peu importe que le logiciel \u00e0 traiter soit prot\u00e9g\u00e9 ou non, l&#8217;essentiel est qu&#8217;il soit possible de le faire tourner sur un \u00e9mulateur et de pouvoir r\u00e9aliser un dump de la m\u00e9moire. Disons que si le logiciel n&#8217;est pas prot\u00e9g\u00e9 (ou s&#8217;il a \u00e9t\u00e9 d\u00e9verrouill\u00e9), [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1471,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,347,22,359,369],"tags":[668,899],"class_list":["post-1416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-atmos","category-ceomag","category-emulateur","category-sedoric","tag-ceomag359","tag-truc-software"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=1416"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1416\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=1416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=1416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=1416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}