{"id":1405,"date":"2020-03-01T06:00:00","date_gmt":"2020-03-01T05:00:00","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=1405"},"modified":"2020-03-01T06:00:00","modified_gmt":"2020-03-01T05:00:00","slug":"recuperez-les-caracteres-redefinis-de-tous-les-logiciels-1-methode","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/03\/01\/recuperez-les-caracteres-redefinis-de-tous-les-logiciels-1-methode\/","title":{"rendered":"R\u00e9cup\u00e9rez les caract\u00e8res red\u00e9finis de tous les logiciels : 1 &#8211; M\u00e9thode"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>par Andr\u00e9 C.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Dans les deux articles pr\u00e9c\u00e9dents (&#8220;R\u00e9cup\u00e9rez les \u00e9crans des logiciels prot\u00e9g\u00e9s&nbsp;: 1 \u2013 M\u00e9thode&#8221; et &#8221; 2 &#8211; Application : D\u00e9mo Talisman&#8221;) nous avons vu comment mettre \u00e0 profit le dump de la m\u00e9moire g\u00e9n\u00e9r\u00e9 par les \u00e9mulateurs. Cela s&#8217;applique aussi \u00e0 la r\u00e9cup\u00e9ration des polices de caract\u00e8res. A priori, on pourrait croire que la proc\u00e9dure ne pr\u00e9sente aucun int\u00e9r\u00eat pour les programmes non-prot\u00e9g\u00e9s, puisqu&#8217;on peut d\u00e9j\u00e0 acc\u00e9der au contenu de la m\u00e9moire. Mais, comme vous le verrez, il peut \u00eatre indispensable d&#8217;\u00e9tablir un rapport entre ce qu&#8217;on voit \u00e0 l&#8217;\u00e9cran et ce qu&#8217;il y a en m\u00e9moire. D&#8217;o\u00f9 l&#8217;int\u00e9r\u00eat du dump. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Limites et difficult\u00e9s<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Souvent, les caract\u00e8res ont \u00e9t\u00e9 red\u00e9finis en vue de cr\u00e9er une\npolice de caract\u00e8res (par exemple pour faire un \u00e9cran-titre). Mais ce n&#8217;est pas\ntoujours le cas et m\u00eame si vous parvenez tr\u00e8s facilement \u00e0 r\u00e9cup\u00e9rer les jeux 0\net\/ou 1, vous ne serez pas forc\u00e9ment au bout de&nbsp;\nvos peines&nbsp;:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>En effet, les caract\u00e8res sont souvent red\u00e9finis\nen vue d&#8217;\u00eatre assembl\u00e9s pour former des sprites. Il faut donc savoir comment \u00e7a\ns&#8217;organise. Solution&nbsp;: Le d\u00e9bogueur de votre \u00e9mulateur Oric (touche F11 avec\nEuphoric) vous permet d&#8217;examiner l&#8217;\u00e9cran et de comprendre comment sont form\u00e9s\nles sprites (avec quels caract\u00e8res et quelle disposition).<\/li><li>Autre difficult\u00e9, les programmes red\u00e9finissent\nsouvent les caract\u00e8res au fur et \u00e0 mesure des tableaux du jeu. Un bon exemple\nest donn\u00e9 par &#8220;The Hellion&#8221; (voir les articles &#8220;Les 101 \u00e9crans\nde The Hellion&#8221; de Simon G. (CEO-mag n\u00b0240 \u00e0 274). Il faut donc d\u00e9clencher\nun dump de la m\u00e9moire au moment o\u00f9 les nouveaux caract\u00e8res \u00e0 r\u00e9cup\u00e9rer\napparaissent \u00e0 l&#8217;\u00e9cran (touche F9 avec Euphoric).<\/li><li>Enfin, si en g\u00e9n\u00e9ral tout va bien avec les\nprogrammes Basic, les choses se compliquent souvent avec les programmes \u00e9crits\nen langage machine. En effet, les auteurs optimisent forc\u00e9ment leur code et\nsont amen\u00e9s \u00e0 stocker les caract\u00e8res\/sprites dans un format diff\u00e9rent du format\nhabituel et d&#8217;utiliser des routines d&#8217;affichage sp\u00e9cifiques. Il va sans dire\nque dans ces cas-l\u00e0, il faudrait beaucoup investir dans la mati\u00e8re grise\u2026 <\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>La m\u00e9thode de r\u00e9cup\u00e9ration<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est exactement la m\u00eame proc\u00e9dure que pour les \u00e9crans.\nSeules les adresses changent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comme vous le savez, l&#8217;Oric comporte deux jeux de\ncaract\u00e8res&nbsp;:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Le jeu 0 dit &#8220;normal&#8221;, situ\u00e9 de #B500\n\u00e0 #B7FF (3 pages de #100 octets), qui compte 96 caract\u00e8res du code Ascii 32 (espace)\nau code Ascii 127 (rectangle noir de 6&#215;8 pixels utilis\u00e9 pour le curseur).<\/li><li>Le jeu 1 dit &#8220;semi-graphique&#8221;, situ\u00e9\nde #B900 \u00e0 #BAFF (2 pages de #100 octets), qui ne compte que 64 caract\u00e8res du\ncode Ascii 32 (espace) au code Ascii 95 (rectangle noir de 6&#215;8 pixels,\nidentique au code Ascii 127 du jeu 0).<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\n\n\n\nAttention, il s&#8217;agit des adresses\ninitiales, au boot, c\u2019est-\u00e0-dire en mode TEXT.\nSi le programme passe en mode HIRES, les deux jeux sont d\u00e9plac\u00e9s respectivement\nvers la zone &nbsp;#9900 \u00e0 #9BFF pour le jeu 0\net vers la zone #9D00 \u00e0 #9EFF pour le jeu 1 (voir les tableaux ci-apr\u00e8s).\n\n\n\n<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Fabriquez les en-t\u00eates appropri\u00e9s<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les 2 jeux de caract\u00e8res et pour les 2 modes d&#8217;\u00e9cran,\nil faudra donc pr\u00e9voir 4 mod\u00e8les d&#8217;en-t\u00eate, par exemple avec le petit programme\nSAUVJEUX suivant (voir\nle fichier .zip joint \u00e0 cet article)&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>100 TEXT\n110 CSAVE\"SAVJ0TXT\",A#B500,E#B7FF\n120 CSAVE\"SAVJ1TXT\",A#B900,E#BAFF\n130 HIRES\n140 CSAVE\"SAVJ0HRS\",A#9900,E#9BFF\n150 CSAVE\"SAVJ1HRS\",A#9D00,E#9EFF\n160 PING<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/SAVJ0TXT.gif\" alt=\"\" class=\"wp-image-1411\"\/><figcaption>En-t\u00eate de fichier cassette pour le jeu des caract\u00e8res normaux en mode text<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/SAVJ1TXT.gif\" alt=\"\" class=\"wp-image-1412\"\/><figcaption> En-t\u00eate de fichier cassette pour le jeu des caract\u00e8res semi-graphiques en mode text <\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/SAVJ0HRS.gif\" alt=\"\" class=\"wp-image-1413\"\/><figcaption> En-t\u00eate de fichier cassette pour le jeu des caract\u00e8res normaux en mode hires  <\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/SAVJ1HRS.gif\" alt=\"\" class=\"wp-image-1414\"\/><figcaption> En-t\u00eate de fichier cassette pour le jeu des caract\u00e8res semi-graphiques en mode hires <\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour avoir un en-t\u00eate proprement dit, r\u00e9cup\u00e9rez les octets du d\u00e9but du fichier .tap, allant du #16 initial au #00 (inclus) situ\u00e9 juste apr\u00e8s le nom du fichier. Dans les conditions d\u00e9crites, chaque en-t\u00eate aura au final une longueur de 23 octets. A l&#8217;issue de ce petit travail, vous disposerez donc de 4 mod\u00e8les d&#8217;en-t\u00eate (voir les 4 figures ci-dessus) que vous garderez pr\u00e9cieusement. Les 4 fichiers .tap correspondants sont dans le zip joint \u00e0 cet article. <\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/RecupCaract1.zip\">RecupCaract1<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2019\/12\/RecupCaract1.zip\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>R\u00e9cup\u00e9rez les DUMPs<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">La proc\u00e9dure de r\u00e9cup\u00e9ration des jeux de caract\u00e8res est tr\u00e8s\nsimple. Les consignes qui suivent concernent Euphoric, mais des fonctions\nanalogues sont disponibles avec les autres \u00e9mulateurs.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Lancez Euphoric et chargez le logiciel \u00e0\ntraiter. Si besoin, lancez l&#8217;ex\u00e9cution.<\/li><li>Guettez le moment o\u00f9 les initialisations semblent\ntermin\u00e9es et o\u00f9 les caract\u00e8res \u00e0 r\u00e9cup\u00e9rer apparaissent \u00e0 l&#8217;\u00e9cran et pressez la\ntouche F9 pour g\u00e9n\u00e9rer un dump m\u00e9moire.<\/li><li>Pressez imm\u00e9diatement la touche F11 pour figer\nl&#8217;ex\u00e9cution du logiciel et renommez le fichier DUMP g\u00e9n\u00e9r\u00e9 (sinon il serait\n\u00e9cras\u00e9 au prochain appui sur F9).<\/li><li>Eventuellement pressez \u00e0 nouveau la touche F11\npour relancer l&#8217;ex\u00e9cution et guettez le tableau suivant. Etc.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\n\n\n\n\n\n\n\nNote&nbsp;: Il pourrait aussi \u00eatre utile de garder des\nrecopies d&#8217;\u00e9cran afin de pouvoir identifier s&#8217;il s&#8217;agit d&#8217;un \u00e9cran TEXT ou\nHIRES (pas toujours \u00e9vident). Profitez \u00e9galement de l&#8217;appui sur F11 pour\nexaminer le contenu des zones #BB80-#BFDF (\u00e9cran TEXT) ou #A000-#BFDF (\u00e9cran\nHIRES).\n\n\n\n<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Et enfin, r\u00e9cup\u00e9rez les jeux de caract\u00e8res<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Il n&#8217;est pas toujours facile de d\u00e9terminer si ce sont les\ncaract\u00e8res du jeu 0 ou du jeu 1 (ou des 2) qui ont \u00e9t\u00e9 red\u00e9finis, ni si le\nprogramme tourne en mode TEXT ou en mode HIRES. Dans l&#8217;expectative, on sera\nparfois conduit \u00e0 r\u00e9cup\u00e9rer plusieurs jeux \u00e0 l&#8217;aveuglette et \u00e0 juger ensuite\ndes r\u00e9sultats.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans votre \u00e9diteur hexad\u00e9cimal&nbsp;:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Ouvrez le mod\u00e8le d&#8217;en-t\u00eate correspondant \u00e0 la\nzone \u00e0 r\u00e9cup\u00e9rer. CTRL+A puis CTRL+C pour copier les 23 octets du fichier.<\/li><li>Ouvrez un nouveau document. CTRL+V pour y coller\nl&#8217;en-t\u00eate. Editez les 8 caract\u00e8res de forme &#8220;SAVJxxxx&#8221; pour renommer\nvotre fichier .tap<\/li><li>Ouvrez le fichier DUMP \u00e0 traiter. S\u00e9lectionnez\nles #0300 (jeu 0) ou #0200 (jeu 1) octets correspondant au jeu cibl\u00e9 \u00e0 partir\nde l&#8217;adresse de ce jeu (voir le tableau ci-dessous), puis tapez CTRL+C pour\ncopier la zone s\u00e9lectionn\u00e9e.<\/li><li>Pour vous \u00e9viter de sauvegarder inutilement un\njeu de caract\u00e8res qui n&#8217;a pas \u00e9t\u00e9 red\u00e9fini, demandez \u00e0 votre \u00e9diteur\nhexad\u00e9cimal de calculer la checksum de la zone s\u00e9lectionn\u00e9e et comparez avec la\nvaleur indiqu\u00e9e dans le tableau ci-dessous (valeurs pour les jeux natifs\nd&#8217;origine Oric).<\/li><li>Allez dans le nouveau document, \u00e0 la fin de\nl&#8217;en-t\u00eate, CTRL+V, pour y coller le jeu.<\/li><li>Sauvegarder votre jeu au format .TAP par exemple\nsous le nom TOTOJ0.TAP. <\/li><li>Examinez le jeu sauvegard\u00e9 \u00e0 l&#8217;aide de l&#8217;un des\nnombreux programmes de red\u00e9finition ou de visualisation pour Oric ou \u00e0 l&#8217;aide\ndu programme OricExplorer de Scott Davies.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Configuration Atmos ou Atmos+Microdisc+Sedoric<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>\n  Type\n  de jeu\n  <\/td><td>\n  Mode\n  \u00e9cran\n  <\/td><td>\n  Aller \u00e0\n  l&#8217;offset\n  <\/td><td>\n  Octets \u00e0 s\u00e9lectionner\n  <\/td><td>\n  Checksum Atmos\n  <\/td><td>\n  Checksum Sedoric\n  <\/td><\/tr><tr><td>\n  Jeu 0\n  <\/td><td>\n  TEXT\n  <\/td><td>\n  #B500\n  <\/td><td>\n  #300\n  <\/td><td>\n  #3F70\n  <\/td><td>\n  #4026\n  <\/td><\/tr><tr><td>\n  Jeu 1\n  <\/td><td>\n  TEXT\n  <\/td><td>\n  #B900\n  <\/td><td>\n  #200\n  <\/td><td>\n  #3F00\n  <\/td><td>\n  #3F00\n  <\/td><\/tr><tr><td>\n  Jeu 0\n  <\/td><td>\n  HIRES\n  <\/td><td>\n  #9900\n  <\/td><td>\n  #300\n  <\/td><td>\n  #3F70\n  <\/td><td>\n  #4026\n  <\/td><\/tr><tr><td>\n  Jeu 1\n  <\/td><td>\n  HIRES\n  <\/td><td>\n  #9D00\n  <\/td><td>\n  #200\n  <\/td><td>\n  #3F00\n  <\/td><td>\n  #3F00\n  <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La checksum du jeu 0 sous Sedoric est diff\u00e9rente car 6\ncaract\u00e8res ont \u00e9t\u00e9 red\u00e9finis&nbsp;:&nbsp;&nbsp; &nbsp;\u00e0 \u00e7 \u00e9 \u00f9 \u00e8 et \u00ea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la deuxi\u00e8me partie de cet article, je prendrai deux exemples, &#8220;Rush Hour&#8221; et &#8220;The Hellion&#8221;, pour illustrer pas \u00e0 pas la proc\u00e9dure de r\u00e9cup\u00e9ration des jeux de caract\u00e8res.<\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">\u00e0 suivre&#8230; <\/p>\n","protected":false},"excerpt":{"rendered":"<p>par Andr\u00e9 C. Dans les deux articles pr\u00e9c\u00e9dents (&#8220;R\u00e9cup\u00e9rez les \u00e9crans des logiciels prot\u00e9g\u00e9s&nbsp;: 1 \u2013 M\u00e9thode&#8221; et &#8221; 2 &#8211; Application : D\u00e9mo Talisman&#8221;) nous avons vu comment mettre \u00e0 profit le dump de la m\u00e9moire g\u00e9n\u00e9r\u00e9 par les \u00e9mulateurs. Cela s&#8217;applique aussi \u00e0 la r\u00e9cup\u00e9ration des polices de caract\u00e8res. A priori, on pourrait [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1411,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,347,22,359,320],"tags":[668,899],"class_list":["post-1405","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-atmos","category-ceomag","category-emulateur","category-tap-file","tag-ceomag359","tag-truc-software"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1405","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=1405"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}