<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ctrl-Pomme-Reset</title>
	<atom:link href="http://www.ctrl-pomme-reset.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ctrl-pomme-reset.fr</link>
	<description>Rebootez la légende !</description>
	<lastBuildDate>Thu, 16 May 2013 10:27:18 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Scènorama !</title>
		<link>http://www.ctrl-pomme-reset.fr/2013/05/13/scenorama/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scenorama</link>
		<comments>http://www.ctrl-pomme-reset.fr/2013/05/13/scenorama/#comments</comments>
		<pubDate>Mon, 13 May 2013 19:42:51 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Numérisation]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=6542</guid>
		<description><![CDATA[ Morceaux choisis en images du résultat de la numérisation (je n'ai d'ailleurs toujours pas trouvé de terme plus approprié pour décrire<a href="http://www.ctrl-pomme-reset.fr/2013/05/13/scenorama/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/ABC-Copy-Disk-85.gif"><img class="alignleft size-medium wp-image-6544" alt="ABC Copy Disk 85" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/f213c55398440ad96ffb4d15d00ca5e0.jpg" width="300" height="205" /></a> Morceaux choisis en images du résultat de la <em>numérisation</em> (je n'ai d'ailleurs toujours pas trouvé de terme plus approprié pour décrire le processus) des quelques <strong>850</strong> disquettes que j'ai eu dernièrement entre les mains. Et je dois avouer qu'à ma grande surprise, il y avait beaucoup de choses intéressantes et qualifiées pour rejoindre les différentes galeries de ce site. Ce ne sont en effet pas moins de <strong>180</strong> nouveaux screenshots qui ont été ajoutés ce jour ! Preuve s'il en est, qu'il reste encore sans doute beaucoup de pépites qui dorment au fond des greniers ou des caves. J'en profite d'ailleurs pour lancer un appel : ami <em>Appleumamiac</em> de la première heure, s'il te reste des disquettes qui croupissent sous une pile de vieux Playboy dans un garde-meuble au fin fond de la Creuse, contacte-moi. Il nous faut absolument sauver ces fleurons de notre jeunesse avant leur désintégration totale (je parle des disquettes, pas des Playboy. Eux, ils sont déjà sauvés !). <span id="more-6542"></span></p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Fixed-Games-06.gif"><img class="alignleft size-medium wp-image-6551" alt="Fixed Games #06" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/4a53f18c6159059c58a0b5dee5dd9dc0.jpg" width="300" height="205" /></a> On commence tout de suite par le <strong>Fixed Games</strong> <strong>#6</strong> de l'infatigable <strong>Patchman. </strong>Avant de rejoindre le <strong>Brain Trust</strong>, Patchman avait déjà une activité dense sur la scène Apple II française, notamment avec cette série de compilations de jeux, <em>cheatés</em> par ses soins (et quelques autres grands noms de l'époque). Comme toujours avec lui, tout est propre et soigné ! Même si la fameuse police "gothique", de tout temps très prisée par les piratins, reste une belle agression pour les rétines ! À noter que les épisodes #7 et #8 de cette grande série ne sont toujours pas réapparus à ce jour.</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Captain-Goodnight-ACS.gif"><img class="alignleft size-medium wp-image-6548" alt="Captain Goodnight - ACS" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/60f6b339aadd5539c6ee1b7c2cb3494b.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> On continue par un <strong>Captain Goodnight</strong> (incontournable de l'époque) signé <strong>Apple Chemical Software</strong>. C'est la première fois que je  rencontre cette version datant de 1986 crackée par <strong>The Gog's</strong>, avec le soutien de <strong>Deny</strong> et <strong>The Silicon-Man</strong>. Vu la qualité du titre et la renommée du groupe, c'est sans conteste une pièce de choix qui méritait d'être mise en avant !</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Conan-EWF.gif"><img class="alignleft size-medium wp-image-6550" alt="Conan - EWF" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/b9bfe0f5ab7b87bd47bcbc79d0799f80.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> Autre rareté, un <strong>Conan</strong> (avec écran de présentation home made), distribuée par <strong>Elemental Powers</strong> regroupant notamment <strong>Aelgor</strong> et <strong>Pat Paddle</strong>. Le jeu a été cracké par un certain <strong>Maedhros</strong> (inconnu au bataillon jusqu'ici). Conan est, lui aussi, un des jeux que l'on retrouve systématiquement dans toute collection. La plupart du temps, en France, c'est une version sans signature que l'on rencontre. Parfois, on a la surprise de tomber sur la version <strong>Pacific Pirate's Guild</strong> (qui semblait être le  Conan largement diffusé aux USA). À signaler sur la présente version, la  présence de <strong>The Necromancer,</strong> crédité pour la présentation. Pseudo bien connu de l'autre côté de l'Atlantique, est-ce ici juste un homonyme ou bien la même personne (laissant alors penser que le jeu est bien un import cracké aux US).</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Silent-Service-GDF.gif"><img class="alignleft size-medium wp-image-6557" alt="Silent Service - GDF" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/2ba478057f56b2bb0c073a3a0ddb88d5.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> On reste dans le domaine de la (grande) distribution avec plusieurs jeux sur lesquels le très médiatique <strong>Godfather</strong> s'est fait un peu de place pour ajouter son pseudo sur les écrans de présentation et signaler au reste du monde que la disquette avait transité du côté de Versailles. Ici, c'est le <strong>Silent Service</strong> cracké par <strong>Lot</strong> qui y passe. <strong>Numéro 6</strong> et <strong>The Mad Mechanic</strong> en font notamment les frais,  leurs noms disparaissant de la page d'intro. Bien entendu, on ne peut parler ici de <em>défaceur</em>, Godfather ne s'appropriant pas le crack du jeu en lui-même. Ce qui sera loin d'être le cas d'autres personnes.</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Blazing-Paddles-BCB.gif"><img class="alignleft size-medium wp-image-6546" alt="Blazing Paddles - BCB" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/c20d9539e38748276fc721d7b27679fe.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> Car dans la grande saga des <em>défaceurs</em> ayant officié sur Apple II, ce lot de disquettes a été l'occasion d'en découvrir de nouveaux, avec notamment le groupe <strong>Black Crack Band</strong> (à ne pas confondre avec le <strong>Binary Crack Band</strong>, premier groupe du célèbre <strong>Chip Select</strong>) ou même <strong>Black Bag</strong> (groupe US de grande renommée également). Non, ici nous avons à faire à un quatuor s'étant visiblement amusé à marquer tout ce qui lui passait entre les mains, comme par exemple le logiciel de dessin de Baudville, <strong>Blazing Paddles</strong> (un grand classique aussi). Bien sûr la présomption d'innocence existe...</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Meme-les-Pommes-de-Terre-ont-des-Yeux-BCB.gif"><img class="alignleft size-medium wp-image-6553" alt="Meme les Pommes de Terre ont des Yeux - BCB" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/1fbdbac6ee1939c5d75359861cd73261.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;">  ...même pour les <em>défaceurs. </em>Mais quand on tombe dans la foulée sur ce genre d'écran, alors plus aucun doute n'est permis. Autant ici un petit "distributed by" aurait pu être tout à fait anodin, autant un "cracked" n'a absolument aucun sens car, comme chacun sait, les jeux Froggy (<strong>Même les Pommes de Terre ont des Yeux</strong> dans le cas présent) n'étaient pas protégés. Ayant rencontré une bonne demi-douzaine de programmes marqués au fer rouge par le Black Crack Band, ce groupe méritait bien sa place dans notre petite rubrique  !</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Space-Shuttle-KGB.gif"><img class="alignleft size-medium wp-image-6558" alt="Space Shuttle - KGB" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/99e067d108b2ceafb920bc56078cc17f.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Et puisqu'on parle de <em>défaceurs</em>, spéciale dédicace évidemment au <strong>Krack Games Band</strong>. Je ne crois pas avoir encore rencontré un seul lot important de jeux dans lequel il n'y avait pas au moins un soft <em>assasigné</em> par leur soin. Ce qui veut tout simplement dire que le <strong>KGB</strong> (tout comme le <strong>Marseille Association of Crackers</strong> de <strong>Wilky </strong>d'ailleurs) était largement diffusé un peu partout en France.</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Jungle-Hunt-CZN.gif"><img class="alignleft size-medium wp-image-6552" alt="Jungle Hunt - CZN" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/42ad49670741448de058177ffa209190.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> Et pour en terminer avec cette grande tradition française, un petit clin d'œil ici à un certain<strong> Tristan CZN</strong> qui lui aussi y allait de sa petite signature un peu partout. De façon plus ou moins ambiguë d'ailleurs (le "une sélection" reste gentillet même si le nom du cracker a bel et bien disparu). Quant à l'ami Tristan CZN, je pense que certains auront certainement deviné de qui il s'agissait... Comme quoi, <em>défacer</em> mène à tout.</p>
<p style="text-align: justify;"> </p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Prince-of-Persia-TBT.gif"><img class="alignleft size-medium wp-image-6556" alt="Prince of Persia - TBT" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/d955234e15fd34540f1f3523947f2acb.jpg" width="300" height="205" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">Sans transition et pour en revenir aux groupes sérieux, à signaler une version de <strong>Prince of Persia</strong> signée <strong>The Brain Trust</strong> (époque "plus grand monde", à savoir composé uniquement de <strong>Copperfield</strong> et <strong>The Jokersoft</strong>). Contrairement à la version US diffusée - sur fond de polémique - par <strong>HackerForce</strong>, la Brain Trust n'occupe que deux faces et ne nécessite qu'un seul drive pour fonctionner. L'ultime testament (ou le testament ultime) d'un grand groupe...</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/05/Pat-the-Crac-Copy-Disk.gif"><img class="alignleft size-medium wp-image-6555" alt="Pat the Crac Copy Disk" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/f219a5b9a69f6e336fba0d5e669efb22.jpg" width="300" height="205" /></a></p>
<p style="text-align: justify;">  Nous avons commencé notre revue avec le screenshot du Copy Disk signé <strong>Association of Broadcasting Crackers</strong>, où officiaient notamment <strong>Chip Select</strong> (après le Binary Crack Band), <strong>Eric IRQ</strong>  et <strong>The Wildman</strong>. Le disque de copieurs (comme certains l’appelleront même directement...), lui aussi, a toujours été une grande tradition de la scène française. Chacun y allait de sa petite compilation des softs les plus célèbres dans leur genre (Locksmith, Diskfixer, Nibbles Away, EDD). Il n'était d'ailleurs pas rare de reprendre le boulot des autres à son propre compte, le but étant surtout d'en proposer le plus possible, le tout bien évidemment lancé par un FastBoot (lui aussi pompé la plupart du temps) et présenté par une image qui en jette.  Nous terminons donc avec le Copy Disk d'un certain <strong>Pat The Crac </strong>qui, vous en conviendrez, prend plutôt à contre-pied l'imagerie classique orientée "tête de mort", très en vogue sur la scène . Preuve que l'on trouvait de tout sur Apple II... Pour la petite histoire, l'image originelle est issue du programme Strip Poker (version pour femme, et oui messieurs !), visible sur le <a href="http://boutillon.free.fr/Underground/Deplombage/Interviews/Aldo_Reset/Interview_Aldo_Reset.html" target="_blank">site de Jean-Marc</a>.</p>
<p style="text-align: justify;">Vous retrouverez toutes ces images (et beaucoup d'autres) dans les galeries <a href="http://www.ctrl-pomme-reset.fr/galeries/french-autographs/">French Autographs</a> et <a href="http://www.ctrl-pomme-reset.fr/galeries/productions-underground/">Productions Underground</a> que je vous invite chaleureusement à parcourir...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2013/05/13/scenorama/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Work in Progress&#8230;</title>
		<link>http://www.ctrl-pomme-reset.fr/2013/04/21/work-in-progress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=work-in-progress</link>
		<comments>http://www.ctrl-pomme-reset.fr/2013/04/21/work-in-progress/#comments</comments>
		<pubDate>Sun, 21 Apr 2013 12:09:53 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=6495</guid>
		<description><![CDATA[Environ 400 disquettes de jeux (les 3 boites au second plan) et plus de 450 disquettes d'utilitaires (bureautiques, éducatifs, et<a href="http://www.ctrl-pomme-reset.fr/2013/04/21/work-in-progress/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/Disquettes.jpg"><img class="alignleft size-medium wp-image-6499" alt="Disquettes" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/d3e1197c78008e98637a659e1177471a.jpg" width="300" height="224" /></a><br />Environ 400 disquettes de jeux (les 3 boites au second plan) et plus de 450 disquettes d'utilitaires (bureautiques, éducatifs, et tools divers) : voici le dernier arrivage en date en provenance direct de chez Antoine (toujours au top quand il s'agit de récupérer des trucs intéressants). Bref, plus de 1700 faces à <em>numériser</em> : voici la mission qui m'attend. De quoi disparaître de la surface du globe pour les prochaines semaines ! Heureusement, mes fidèles Frank et Jesse se sont mis sur leur 31 pour l'occasion et sont déjà sur le pied de guerre...<span id="more-6495"></span></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/Installation.jpg"><img class="alignleft size-medium wp-image-6496" alt="Installation" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/138ef8538411d4949ee750589687f73f.jpg" width="300" height="224" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> <a href="http://boutillon.free.fr/Underground/Docs/Fastdsk/Fastdsk_fr.html" target="_blank">FastDsk </a>version 20090504 pour l'un (en mode 256Ko) et <a href="http://adtpro.sourceforge.net/index.html" target="_blank">ADTPro</a> 1.2.7 pour l'autre, chaque Apple II est équipé d'une <a href="http://dreher.net/?s=projects/CFforAppleII&amp;c=projects/CFforAppleII/main.php" target="_blank">CFFA3000</a>, d'une carte <a href="http://a2retrosystems.com/" target="_blank">Uthernet</a> et d'un contrôleur DiskII. Les lecteurs 5.25 sont des modèles classiques, ceux proposant le meilleur rapport fiabilité de lecture/facilité de nettoyage. La station de <em>numérisation</em> presque parfaite...</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/Apple-IIGS-Jesse.jpg"><img class="alignright size-medium wp-image-6498" alt="Apple IIGS (Jesse)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/0412f4a131f56def4da0e5c11320da8b.jpg" width="224" height="300" /></a></p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/Apple-IIe-Franky.jpg"><img class="alignleft size-medium wp-image-6497" alt="Apple IIe (Franky)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/082f435294570416829184cb16c8ada4.jpg" width="224" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2013/04/21/work-in-progress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ColorGS</title>
		<link>http://www.ctrl-pomme-reset.fr/2013/04/19/colorgs/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=colorgs</link>
		<comments>http://www.ctrl-pomme-reset.fr/2013/04/19/colorgs/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 13:42:50 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[GS]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ColorGS]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=6388</guid>
		<description><![CDATA[Je vous présente ColorGS, petit tool sans prétention programmé en C sous Windows. Ce petit utilitaire est à la fois<a href="http://www.ctrl-pomme-reset.fr/2013/04/19/colorgs/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-19_114120.gif"><img class="alignleft size-medium wp-image-6403" alt="ColorGS" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/04e7e72d5cb73a1ccdc5b19e733407a6.jpg" width="235" height="300" /></a>Je vous présente <strong>ColorGS</strong>, petit tool sans prétention programmé en C sous Windows. Ce petit utilitaire est à la fois un <em>grabber</em> de couleurs (à l'image de <a href="http://www.iconico.com/colorpic/" target="_blank">ColorPic</a> ou de <a href="http://pourpre.com/colorbox/" target="_blank">La Boite à Couleurs</a>) utilisant un mode loupe mais surtout un convertisseur <strong>RGB 8 bits</strong> (type PC avec 16.7 millions de couleurs possibles) vers le mode <strong>RGB 4 bits</strong> propre à l'Apple II GS (4096 couleurs). Accessoirement, il permet aussi de générer automatiquement des dégradés (linéaires ou circulaires) sur 16 couleurs. L'objectif de cet outil est de simplifier la création d'effets graphiques sous Apple IIGS en permettant de faire le maximum de travail en amont sur un PC moderne. Cette philosophie est d'ailleurs au cœur de <a href="http://www.brutaldeluxe.fr/products/crossdevtools/index.html" target="_blank">la suite d'utilitaires</a> sur laquelle travaille activement <strong>Brutal Deluxe</strong> (à ce propos, <a href="http://www.brutaldeluxe.fr/products/crossdevtools/mrsprite/" target="_blank">MrSprite</a> est une vraie tuerie !). Loin de moi l'idée de faire de ColorGS un outil aussi évolué. Sa seule ambition est de rendre quelques petits services lors d'une programmation intensive. Vous trouverez ci-après une série de screenshots permettant d’illustrer les fonctionnalités du programme.<span id="more-6388"></span></p>
<p style="text-align: justify;"> </p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_112041.gif"><img class="alignleft size-medium wp-image-6391" alt="ColorGS (Palette)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/728de7a0a6e7e0d7a3090e2b8e4fa866.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">La fonction de base, c'est bien évidemment la visualisation d'une couleur donnée en RGB 4 bits. Pour entrer les 3 composantes (Rouge/Vert/Bleu), vous pouvez utiliser les curseurs, entrer directement les chiffres dans les zones d'éditions 4 bits (0 à 15) ou encore entrer les valeurs 8 bits (0 à 255).   Dans ce dernier cas, la couleur la plus proche en équivalence 4 bits apparaît immédiatement avec les valeurs correspondantes. <br />Un double-clic gauche dans l'une des 16 cases associées à la partie <strong>Palette</strong> permet de conserver la couleur active (celle affichée dans la partie à droite).</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: center;"> <a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_112654b1.gif"><img class="aligncenter  wp-image-6393" alt="ColorGS (utilisation de la loupe)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/472a216902fc7f57f61c9b3b4a345e28.jpg" width="574" height="279" /></a></p>
<p style="text-align: justify;">La fonction <strong>Magnifying Glass</strong> (loupe in english !) permet, classiquement, de capturer la couleur qui est sous le curseur de la souris et d'afficher dans la fenêtre de ColorGS son équivalence 4 bits. Vous pouvez directement sauver cette couleur vers la partie Palette en utilisant la HotKey <strong>ALT+ESPACE</strong>. La HotKey ALT+G permet d'activer/désactiver la fonction loupe à la volée. À noter qu'une option "<strong>Set Always on Top</strong>" accessible par un clic droit sur l'icone de l'apply dans la barre des tâches de Windows, permet de forcer ColorGS à rester au premier plan. <br />L'image ci-dessus montre la capture de la couleur de la crête d'un Lemming (jeu tournant sous ActiveGS).</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-19_121415.gif"><img class="alignleft size-medium wp-image-6406" title="ColorGS (&quot;focus&quot; par clic droit)" alt="" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/b76e1a0691885490be0171f041b2eaca.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Un clic droit sur une des cases Palette affiche la couleur de celle-ci ainsi que ses valeurs RGB. De plus, ce clic droit permet de donner une sorte de focus à cette case Palette. Un contour blanc s'affiche alors à l'intérieur de la case. La prochaine capture de couleur par ALT+ESPACE assignera automatiquement la couleur capturée à cette case. Ceci permet notamment de remplacer dans la palette une couleur par une autre, même en mode loupe.</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_113016.gif"><img class="alignleft size-medium wp-image-6454" alt="ColorGS (dégradé - sélection première couleur)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/e3c989b7981e780421a2be5317c3bacd.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Autre petite fonction de ColorGS : <strong>les dégradés</strong>. Un double-clic sur la première case à gauche de la partie <strong>Gradient</strong> permet de fixer la première couleur de notre dégradé. Elle servira de couleur de base.</p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_113042.gif"><img class="alignleft size-medium wp-image-6398" alt="ColorGS (dégradé - sélection couleur d'arrivée)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/c37c07dc0e41f488a89913daa551843a.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Il suffit ensuite de définir la couleur d'arrivée (ici blanc) puis de double-cliquer sur la case à l’extrême droite de la partie Gradient. Le dégradé est alors généré et remplit automatiquement les cases intermédiaires. Un clic droit sur l'une d'elle permet de l'activer et d'observer ses composantes RGB 4 bits.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_112947.gif"><img class="alignleft size-medium wp-image-6396" alt="ColorGS (dégradé circulaire - sélection couleur intermédiaire)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/419c2c574bfb9f2356770894a1128fa0.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Pour un dégradé <em>circulaire</em>, une fois la couleur de départ assignée à la case de gauche (comme précédemment), on fixe la couleur d'arrivée cette fois dans la case du milieu (qui est à l'image des deux extrêmes, un peu plus haute que les autres). Le programme génère alors le dégradé dans lequel la couleur intermédiaire sert de "pic".</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_113453.gif"><img class="alignleft size-medium wp-image-6402" alt="ColorGS (sauvegarde)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/bf6046950c6520bd0654ecd3ca1aada8.jpg" width="235" height="300" /></a></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Il est possible à tout moment de sauver le travail en cours sous forme de fichier texte. Il suffit pour cela d'appuyer sur le bouton <strong>Save</strong> tout simplement ! À noter que le bouton <strong>Reset</strong>, au-dessus du bouton Save permet d'effacer et de remettre à zéro les 16 couleurs de la zone Palette.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/04/2013-04-17_113421b.gif"><img class="aligncenter  wp-image-6401" alt="2013-04-17_113421b" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/fbdb2d7526b551c1de09ddc499f3893d.jpg" width="548" height="137" /></a></p>
<p style="text-align: justify;">Le résultat est un fichier texte qui contient les valeurs Hexa des 16 couleurs actuelles de la Palette ainsi que les 16 valeurs du dégradé en cours. Il est possible de faire plusieurs sauvegardes, chaque fichier ayant un nom différent. L'objectif est d'obtenir des données facilement intégrables dans du code  par copier/coller vers un émulateur GS par exemple.</p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Historique :</span></p>
<ul>
<li><span style="line-height: 13px;"><strong>19.04.2013</strong> - version 0.971 : première release publique (<a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/ColorGS/ColorGS0971.exe">download</a> / <a href="https://www.virustotal.com/fr/file/b3579f66bef7ebf26414e15d96c37c8121a511e5fb39241677155f4d25c820e8/analysis/1366373878/" target="_blank">voir le check VirusTotal</a> du fichier).</span></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2013/04/19/colorgs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vite lu : The Making of Karateka par Jordan Mechner</title>
		<link>http://www.ctrl-pomme-reset.fr/2013/02/02/vite-lu-the-making-of-karateka-par-jordan-mechner/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vite-lu-the-making-of-karateka-par-jordan-mechner</link>
		<comments>http://www.ctrl-pomme-reset.fr/2013/02/02/vite-lu-the-making-of-karateka-par-jordan-mechner/#comments</comments>
		<pubDate>Sat, 02 Feb 2013 10:23:17 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Livre]]></category>
		<category><![CDATA[jordan mechner]]></category>
		<category><![CDATA[karateka]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=6254</guid>
		<description><![CDATA[Devant le succès du premier opus racontant le Making of de Prince of Persia, Jordan Mechner remet le couvert en<a href="http://www.ctrl-pomme-reset.fr/2013/02/02/vite-lu-the-making-of-karateka-par-jordan-mechner/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/01/Karateka2.jpg"><img class="alignleft size-medium wp-image-6255" title="The Making of Karateka (couverture)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/5f6cc5b0650fda49e393f2ef13ffb074.jpg" alt="" width="194" height="300" /></a><br />
Devant le succès du premier opus racontant le <a href="http://www.ctrl-pomme-reset.fr/2012/05/18/vite-lu-the-making-of-prince-of-persia-par-jordan-mechner/" target="_blank">Making of de Prince of Persia</a>, <strong>Jordan Mechner</strong> remet le couvert en reprenant la même formule (un simple copier/coller - non retouché - de son journal <em>intime</em> de l'époque) pour nous faire partager cette fois la genèse de son tout premier hit : <em><strong>Karateka</strong></em>.</p>
<p style="text-align: justify;">Tout commence pourtant en janvier 1982 avec... <strong><em>Deathbounce</em></strong> ! Jordan, qui n'a pas encore 20 ans, travaille en effet sur un jeu d'arcade inspiré d'<em>Asteroids</em> (en plus évolué et coloré). Totalement opposé à ce que sera <em>Karateka</em> plus tard, <em>Deathbounce</em> représente un peu la fin d'une première génération de jeux d'action sur Apple II : des jeux d'arcade simples, et dans le concept et visuellement, sans véritable scénario. Et si Brøderbund - avec lequel Jordan Mechner est déjà en contact - se montrera si exigeant, réclamant encore et toujours des améliorations avant de l'éditer, la sortie en 1982 d'un certain <em><strong>Choplifter</strong></em> n'y est sans doute pas étrangère : ce mega hit va ouvrir une nouvelle voie dans le jeu d'action sur Apple II (et son créateur accessoirement exacerber les fantasmes de réussite et de gloire du petit Jordan). Mechner ne sortira jamais <em>Deathbounce</em>, car dorénavant un autre projet beaucoup plus ambitieux occupe tout son esprit : <em>Karateka</em>... <span id="more-6254"></span></p>
<p style="text-align: justify;">On découvre alors au fil des pages l'évolution (voire la métamorphose) de l'idée de base : partant d'un simple jeu de karaté ayant pour cadre un dojo, Jordan en arrive à réaliser un véritable jeu d'action avec une approche beaucoup plus <em>cinématographique</em>. Le scénario dans l'absolu est très basique : une princesse à sauver (blonde), un gentil (vous) et des méchants pas beaux commandés par un super vilain ! Mais c'est toute la mise en scène avec intro, cut-scenes, et épilogue qui feront la force du titre. <em>Karateka</em> synthétise déjà tous les points forts qui seront l'apanage des œuvres de Mechner. <em> </em></p>
<p style="text-align: justify;">Et parmi ceux-ci bien évidemment, l'aspect technique qui sera une véritable claque pour l'époque. Jordan va utiliser des photos de son prof de karaté en action en numérisant sa silhouette avec un Versa-Writer, sorte de pantographe électronique. Puis il retouchera le tout avec des outils personnels pour arriver au résultat que l'on connaît. Ce n'est pas encore tout à fait du Rotoscoping mais l'idée est là ! Avec son animation des personnages fluide et précise, <em>Karateka,</em> bien que sorti en 1984, reste encore aujourd'hui l'un des jeux Apple II les plus impressionnants à regarder.</p>
<p style="text-align: justify;">Malheureusement, qui dit journal dit aussi succession d'un quotidien qui ne se révèle pas toujours passionnant : étudiant à Yale, Jordan Mechner n'est pourtant guère concentré sur ses études. En fait, il semble passer sa vie à travailler sur son jeu (quand il n'a pas la flemme...), à regarder des films et à manger des pizzas. Bref, le vrai geek dans toute sa splendeur, celui que nous étions tous à l'époque, le talent - et la réussite - en moins !</p>
<p style="text-align: justify;">Car du talent, Mechner en a à revendre et sur ce point, son propre journal ne lui rend pas vraiment hommage. La faute, sans doute, à une absence quasi-totale de détails techniques qui, d'une part, est frustrante pour le lecteur avide de secrets de fabrication et qui, d'autre part, rend la partie programmation totalement abstraite. Jordan nous pond un monument du jeu vidéo mais le lecteur ne s'en rend pas forcément compte. On a par contre droit aux petites errances existentielles de l'auteur (mais à son âge qui n'en avait pas...) et à ses rêves de gloire et d'argent un peu cucul certes, mais qui finalement avec le recul, ne se révéleront pas si utopiques que ça. Aujourd'hui beaucoup de monde connaît (ou a entendu parler) de Jordan Mechner mais qui se souvient d'un Doug Smith (<em>Lode Runner</em>) ou d'un Danny Gorlin (<em>Choplifer</em>) ?</p>
<p style="text-align: justify;">Du côté des critiques, le plus gros point noir reste à mon sens l’absence de notes qui auraient pu nous éclairer sur certains personnages (il n'est pas rare de se demander pendant la lecture : "mais c'est qui ce gars ?") ou remettre dans le contexte certains évènements qui semblent parfois sortis de nulle part.</p>
<p style="text-align: justify;">Pour conclure : ayant lu son premier journal, je savais grosso modo à quoi m'attendre et je n'ai donc pas été déçu par ce nouveau livre de Jordan Mechner. On y retrouve d'ailleurs les mêmes forces et faiblesses que dans le précédent. D'autant plus que, d'un point de vue strictement personnel, <em>Karateka</em> me parlant beaucoup plus qu'un <em>Prince of Persia </em>(auquel je n'avais pas joué à l'époque)<em>, </em>je me suis senti plus concerné par le sujet. Quoiqu'il en soit, ceux qui ont aimé le premier devraient y trouver leur compte. Pour les autres par contre, la lecture me semble tout à fait dispensable.</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><strong>The Making Of Karateka : Journals 1982-1985</strong> par Jordan Mechner. 230 pages que nous qualifierons d'aérées... Disponible sur <a href="http://www.amazon.fr/The-Making-Karateka-Journals-1982-1985/dp/1480297232/" target="_blank">Amazon.fr</a> en vrai papier et en version Kindle, autres formats commandables directement sur <a href="http://jordanmechner.com/ebook/" target="_blank">le site</a> de l'auteur.</p>
<p style="text-align: justify;">Vous pouvez également retrouver des extraits ainsi que des détails supplémentaires (notamment sur le fameux Versa-Writer) sur <a href="http://www.penny-arcade.com/report/editorial-article/creating-karateka-jordan-mechners-journals-describe-his-80s-quest-for-bette" target="_blank">The Penny Arcade Report</a>.</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/01/karateka2.gif"><img class="alignleft size-medium wp-image-6257" title="Karateka (écran titre)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/df05dc9983a1c6a65060f17f1c1ee89b.jpg" alt="" width="270" height="185" /></a><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2013/01/karateka3.gif"><img class="alignright size-medium wp-image-6256" title="Karateka (début)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/e60f90275796f7d63dd9a240b9455976.jpg" alt="" width="270" height="185" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2013/02/02/vite-lu-the-making-of-karateka-par-jordan-mechner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vite dit !</title>
		<link>http://www.ctrl-pomme-reset.fr/2013/01/11/vite-dit-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vite-dit-3</link>
		<comments>http://www.ctrl-pomme-reset.fr/2013/01/11/vite-dit-3/#comments</comments>
		<pubDate>Fri, 11 Jan 2013 10:47:38 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Emulation]]></category>
		<category><![CDATA[GS]]></category>
		<category><![CDATA[activegs]]></category>
		<category><![CDATA[remapping]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=6229</guid>
		<description><![CDATA[Une petite news pour annoncer la nouvelle évolution de mon script de remapping pour ActiveGS avec l'intégration d'une fonction COLLER<a href="http://www.ctrl-pomme-reset.fr/2013/01/11/vite-dit-3/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Une petite news pour annoncer la nouvelle évolution de mon script de remapping pour ActiveGS avec l'intégration d'une fonction <strong>COLLER</strong> permettant d'injecter du texte directement dans l'émulateur. J'avoue que j'ai éhontément pompé l'idée sur un fil <a href="http://macgui.com/usenet/?group=2&amp;thread=6061&amp;id=23317#msg" target="_blank">aperçu</a> sur <strong>CSA2</strong>.</p>
<p style="text-align: justify;">Pour la mise en oeuvre, évidemment toujours à cause de ce maudit problème de clavier AZERTY sous ActiveGS, cela aura été un peu plus compliqué que les quelques lignes de l'original. En effet, le script étant incapable de se remapper lui-même, certains caractères <em>collés</em> vers ActiveGS (par simulation d'appui sur une touche) étaient incorrects. Il a donc fallu les remapper directement en sortie du presse-papier pour tenir compte de la spécificité de nos chers claviers...<br />
J'en ai profité pour ajouter quelques améliorations comme la possibilité d'interrompre le processus (pratique quand on s'aperçoit qu'on n'a pas collé le bon texte...) ou sa mise en pause lorsque que ce n'est plus ActiveGS qui est actif (ce qui évite, lors d'un changement malheureux de fenêtre, de se retrouver avec du texte envoyé aux quatre coins des applications Windows lancées !).</p>
<p style="text-align: justify;">Pour le moment, tout ceci n'est encore qu'en version <em>alpha</em> qui sera corrigée et améliorée au fur et à mesure de son utilisation en situation réelle. Je vous renvoie, pour le téléchargement, vers <a href="http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/">l'article de base</a> contenant le détail des mises à jour du script de remapping.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2013/01/11/vite-dit-3/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>GS on the Rocks 4 : le défi des Artistes Associés.</title>
		<link>http://www.ctrl-pomme-reset.fr/2012/12/06/gs-on-the-rocks-4-le-defi-des-artistes-associes/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gs-on-the-rocks-4-le-defi-des-artistes-associes</link>
		<comments>http://www.ctrl-pomme-reset.fr/2012/12/06/gs-on-the-rocks-4-le-defi-des-artistes-associes/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 10:02:32 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[GS]]></category>
		<category><![CDATA[Les défis de l'Underground]]></category>
		<category><![CDATA[mais c'est qui le barbu ?!]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=5833</guid>
		<description><![CDATA[Cela faisait longtemps qu'on ne s'était pas donné rendez-vous pour un petit défi. Surprise, c'est sur Apple II GS que ça<a href="http://www.ctrl-pomme-reset.fr/2012/12/06/gs-on-the-rocks-4-le-defi-des-artistes-associes/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/GSONTHEROCKS4.gif"><img class="alignleft size-medium wp-image-5863" title="GS On The Rocks 4 - écran titre " src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/f30015e4a3a839024d10ffa61e760593.jpg" alt="" width="300" height="187" /></a>Cela faisait longtemps qu'on ne s'était pas donné rendez-vous pour un petit défi. Surprise, c'est sur <strong>Apple II GS</strong> que ça se passe, et vous allez le voir, cela change tout ! Oubliez en effet tout ce qui a été vu jusqu'à présent pour aborder un tel challenge, pourtant classique en apparence : signer une fois encore une image. Ici, nous ne sommes plus sur 8 bits, ce n'est plus une page Hires mais <strong>Super-Hires</strong> propre au GS et en plus, il nous faudra même utiliser les <strong>Tool Sets</strong> (quelle hérésie...) pour arriver à nos fins. Bref, en attaquant ce défi, je savais que j'allais en baver, croyant ne pas connaître grand-chose au GS. En fait, j'avais tord : je n'y connaissais absolument rien ! Et pour aller au bout de l'aventure, il m'a fallu tout réapprendre (ou presque). Plutôt que de vous abreuver de longues pages d'explications arides ou de listings bien longuets (rassurez-vous, il y en aura quand même), je vous propose cette fois un compte-rendu un peu plus vivant, car illustré de screenshots. Le GS peut afficher de vraies couleurs, autant en profiter !<br />
<span id="more-5833"></span></p>
<h2 style="text-align: justify;">Partie I : réussir à lancer le programme.</h2>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_103818.gif"><img class="alignleft size-medium wp-image-5854" title="Piège à Con(s)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/ac40e8cc90bdec152189859f3fb35730.jpg" alt="" width="300" height="196" /></a> Car oui, premier problème : passer cet écran ! La première fois que j'ai lancé le programme, j'ai tout simplement cru que la disquette était morte. On a en effet droit à un festival de sons (couinements de drives) et lumières (diodes des lecteurs qui s'allument dans tous les sens) nous rappelant les heures les plus sombres du support magnétique ! En fait, au boot du disque, nous sommes tout simplement face au <strong>Piège à Con</strong> tendu par l'équipe de <em>GS On the Rocks</em> et qui était une des marques de fabrique de la série. Pour ceux qui ne sont pas au courant, tout s'arrête ici et ils balanceront de rage la disquette à la benne. Les autres savent, eux, qu'il suffit de taper <strong>lsd</strong> (pour <em>Lyon Software Diffusion</em>, les créateurs de la série) pour passer à la suite. Bien entendu tout ceci n'a rien à voir avec le défi et sert juste de mise en bouche.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_103943.gif"><img class="alignleft size-medium wp-image-5856" title="Ecran du défi" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/f0d4000150babc3e6c481901061eb256.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">Car le défi en lui-même, le voici. Il apparaît lors du lancement du programme principal (le lecteur de fichiers texte) et nous invite, comme d'habitude je dirais, à signer une image. <strong>Gronk</strong> (et cie) nous promet même le champagne en cas de réussite. Bon, puisqu'il me semble avoir lu que la caisse avait été gagnée à l'époque, nous allons donc nous attaquer au défi, non pas pour la picole, mais pour la beauté du geste. En attendant, on notera (nous sommes aussi là pour bosser...) que le programme du défi utilise une interface graphique standard et repose donc sur les <strong>Tools</strong> GS.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_101043.gif"><img class="alignleft size-medium wp-image-5836" title="Contenu de la disquette (Finder)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/6b5da6bc47362d3038236f8c639d7ba0.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Un petit coup l’œil au contenu de la disquette sous le Finder GS/OS et on remarque immédiatement les trois fichiers PICx (type ANI) ainsi que le programme principal LSD.SYS16. Le type des fichiers PICx n'est pas standard pour des images et leur taille (variable) laisse supposer que les fichiers sont compressés. Info, intox ou tout simplement fausse-route?</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_101103.gif"><img class="alignleft size-medium wp-image-5837" title="Erreur affichée lors du lancement par le Finder" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/21631e5a521177429fd978ac3c52a80a.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Que se passe-t'il si on veut lancer directement LSD.SYS16 depuis le Finder ? Et bien l'écran ci-contre apparaît et le programme boucle sur lui-même. Second problème donc : je comptais utiliser <strong>GSBug</strong> (le debugger GS) pour m'attaquer au défi mais il nécessite GS/OS. Or GS On The Rocks semble ne pas trop l'apprécier.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_101203.gif"><img class="alignleft size-medium wp-image-5838" title="Boucle infinie (GSBug)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/27e1c9ea4b9c5e9a4d1886d376b92c21.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Puisque le programme rechigne à aller plus loin, on va tout simplement utiliser GSBug afin de voir ce qui se passe un peu. On l'active et on passe en mode SINGLE STEP pour voir qu'effectivement le code boucle sur la vérification d'une adresse qui, non égale à zéro, nous renvoie encore et encore sur la comparaison. Plutôt que de tracer pour découvrir d'où provient le contenu de cette adresse, essayons plutôt la méthode bourrine (qui nous caractérise) et tentons de forcer le passage.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_101214.gif"><img class="alignleft size-medium wp-image-5839" title="Instruction skipped ! (GSBug)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/0e249202f7d2b6c22a0cdcadeeb99f12.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Cela tombe bien, GSBug possède une fonction permettant de <em>skiper</em> une instruction. On zappe donc le branchement obligatoire (BRL) pour passer à la suite... Et on rend la main au programme.</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_101633.gif"><img class="alignleft size-medium wp-image-5842" title="Chargement depuis le Finder" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/e0b878a23b29b23e34d5bbbdddee9694.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">On se retrouve alors avec cet écran. On remarque que les deux messages (le classique en cas de boot direct, et le message nous invitant à relancer l'application) s'affichent simultanément. Mais le programme, et c'est le plus important, se poursuit normalement et s'exécute correctement.  Et depuis le Finder cette fois... Rappelez-vous la manip à faire, car nous aurons à l'effectuer à chaque fois que nous voudrons exécuter le programme depuis GS/OS.</p>
<p>&nbsp;</p>
<h2 style="text-align: justify;">Partie II :  localiser la routine mystère.</h2>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_100253.gif"><img class="alignleft size-medium wp-image-5868" title="Désassemblage sous ORCA/Disassembler (segment &quot;pic&quot;)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/909725a28d376b68343c427e2c3b5dcb.jpg" alt="" width="300" height="196" /></a>La première chose la plus évidente, une fois qu'on a réussi à lancer le programme dans les conditions voulues, c'est bien évidemment de regarder un peu à l'intérieur... En fait pour résoudre ce défi, nous allons devoir à la fois travailler en direct live avec GSBug mais aussi avoir une vision plus globale du code assembleur de LSD.SYS16 afin de pouvoir étudier son fonctionnement à tête reposée. Pour ce faire nous allons utiliser <strong>Orca/Disassembler</strong> qui permet d'afficher le code sous l'interface graphique typique GS/OS. Il permet également d'avoir une vision rapide des segments utilisés par le programme. On remarque d'ailleurs immédiatement qu'un des trois segments s'appelle tout simplement <em>pic</em>. De quoi évidemment attirer notre attention. La méthode n'est pas spécialement technique mais plutôt pleine de bon sens. J'ai souvent vanté dans les défis précédents les bienfaits de l'observation. Ici encore, après quelques minutes à scroller à l'intérieur du code du segment <em>pic</em>, on remarque rapidement un LDA #$ABCD trop étrange pour être honnête.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_100600.gif"><img class="alignleft size-medium wp-image-5867" title="Instruction louche !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/77c0e7fb2c5a1377911e960d3edd36f2.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Ou encore, comme ci-contre, un EOR #$4321 tout aussi louche. Et quand on voit apparaître juste au-dessus un LDA suivi d'un EOR puis d'un STA, on repense immédiatement aux défis sur 8 bits et aux routines de décodage rencontrées... Bien évidemment, il va maintenant falloir vérifier tout ça en live avec GSBug.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_102059.gif"><img class="alignleft size-medium wp-image-5846" title="Classic Desk Accessories" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/8f925b199d78fbe2fc96f61c1dbd9c8e.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Nouvelle difficulté propre au GS : l'allocation mémoire étant dynamique, un loader s'occupe de placer le programme en RAM lors de son chargement à un emplacement libre. Les adresses mémoire vues plus haut avec le code désassemblé ne sont en fait que des <strong>offsets</strong>. Pour localiser réellement en mémoire telle ou telle portion de code, il faudra ajouter son offset à l'adresse réelle de son segment. Heureusement, GSBug est fourni avec un petit Classic Desk Accessory (programme résident) permettant de fournir ces précieuses informations pour chaque programme chargé actuellement en mémoire : j'ai nommé <strong>Loader Dumper</strong>. Attention de bien utiliser une version compatible avec votre GS/OS. Pour la 6.0.1, il faudra Loader Dumper 4, celui fourni avec GSBug 1.5 ne fonctionnant pas...</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_102124.gif"><img class="alignleft size-medium wp-image-5847" title="Loader Dumper (commande Dump Pathname Table)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/fe2415a78148dbba3ba7a6884802d549.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">On repère notre programme parmi tous les processus actuellement en mémoire et on récupère son Identificateur unique. Ici l'UserID est $1002.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_102153.gif"><img class="alignleft size-medium wp-image-5849" title="Loader Dumper (commande Get UserID Information)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/da4ec927f8840e5e53bbc9a92505ad1a.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Grâce à cet UserID, on obtient ensuite les adresses de début et fin des segments. Il ne reste plus alors qu'à ajouter les offsets des instructions qui nous intéressent pour obtenir leurs adresses mémoire et poser des breakpoints dessus ! Exemple : ici le segment 3 (<em>pic</em>) commence en $0F6C3D. On veut obtenir l'adresse du EOR #$4321 qui nous titille. L'offset correspondant est : $0552.  L'adresse en mémoire sera donc : $0F6C3D+0552 soit $0F718F !</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_175608.gif"><img class="alignleft size-medium wp-image-5905" title="GSBug (breakpoint de posé)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/68ab4d46a785b6d69eef41ef52503f0d.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">On vérifie et effectivement, on retrouve bien notre EOR #4321 ! Attention, le code ayant été totalement relogé en mémoire par le loader, il est parfois peu évident de le reconnaître. En effet, toutes les adresses mémoire (hors Page Zéro) et tous les sauts dans le code même seront différents de ce qui est affiché avec un désassembleur.<br />
Pour en revenir à notre EOR #4321, une méthode simple pour vérifier que nous sommes bien dans la routine recherchée consiste tout simplement à le remplacer par des NOP. Si nous observons un résultat différent de celui normalement obtenu, on pourra considérer que nous sommes bien au bon endroit.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/12/2012-12-01_211258.gif"><img class="alignleft size-medium wp-image-5990" title="Sans le EOR ça marche beaucoup moins bien forcément..." src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/523780e3ab2ab10e92a05c99e76743bb.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Je pense que le résultat parle de lui-même. L'image n'est clairement plus décryptée correctement. Notre EOR se situe bien au cœur de la routine qui nous intéresse.</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<h2 style="text-align: justify;">Partie III : le décryptage de l'image.</h2>
<p style="text-align: justify;">Une fois la routine localisée, il suffit de poser judicieusement un breakpoint (en gros juste avant qu'elle ne commence) pour ensuite la suivre à la trace, instruction par instruction grâce aux fonctionnalités de GSBug. Ne pas s'abstenir évidemment d'afficher les adresses en Page Zéro utilisées par le programme pour bien comprendre ce qui s'y passe. Il faut en fait subtilement mélanger analyse en dead listing (avec le code obtenu par désassemblage) et le traçage en live qui permet lui de voir la variation des valeurs en direct. Je vous colle ci-après le code complet de la routine agrémenté de quelques petits commentaires. Ceux qui regardent juste les images peuvent directement passer à la suite !</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">00/03BD: A9 01 00      LDA #0001 ; image 1
00/03C0: 85 DB         STA DB
00/03C2: A9 03 00      LDA #0003 ; 3 images à traiter
00/03C5: 85 F9         STA F9
00/03C7: 38            SEC
00/03C8: E5 DB         SBC DB
00/03CA: 70 03         BVS 03CF {+03}
00/03CC: 49 00 80      EOR #8000
00/03CF: 30 03         BMI 03D4 {+03}
00/03D1: 82 94 02      BRL 0668 {+294}
&nbsp;
00/03D4: A5 DB         LDA DB
00/03D6: 3A            DEC
00/03D7: 0A            ASL
00/03D8: 0A            ASL
00/03D9: AA            TAX
00/03DA: BD D4 08      LDA 08D4,X
00/03DD: A8            TAY
00/03DE: BD D6 08      LDA 08D6,X
00/03E1: AA            TAX
00/03E2: 98            TYA
00/03E3: 85 AD         STA AD
00/03E5: 86 AF         STX AF
00/03E7: 64 B1         STZ B1
00/03E9: 64 B3         STZ B3
00/03EB: F4 00 00      PEA 0000
00/03EE: 7B            TDC
00/03EF: 18            CLC
00/03F0: 69 AB 00      ADC #00AB
00/03F3: 48            PHA
00/03F4: 22 25 36 01   JSL 013625 ; FONCTION OPEN PRODOS 16 (fichier PICx)
00/03F8: B0 03         BCS 03FD {+03}
00/03FA: 82 03 00      BRL 0400 {+03}
00/03FD: 82 35 03      BRL 0735 {+335}
00/0400: F4 00 00      PEA 0000
00/0403: 7B            TDC
00/0404: 18            CLC
00/0405: 69 AB 00      ADC #00AB
00/0408: 48            PHA
00/0409: 22 52 36 01   JSL 013652 ; FCT GET_EOF (End of file)
00/040D: A5 AD         LDA AD
00/040F: 85 D1         STA D1     ; retour = taille du fichier (lo)
00/0411: A5 AF         LDA AF
00/0413: 85 D3         STA D3     ; (hi)
00/0415: 48            PHA
00/0416: 48            PHA
00/0417: F4 00 00      PEA 0000
00/041A: F4 20 7D      PEA 7D20
00/041D: AD 00 00      LDA 0000
00/0420: 48            PHA
00/0421: F4 00 C0      PEA C000
00/0424: F4 00 00      PEA 0000
00/0427: F4 00 00      PEA 0000
00/042A: A2 02 09      LDX #0902
00/042D: 22 00 00 E1   JSL E10000  NewHandle(Size/4,MemID,Attr,@loc):H
00/0431: 8D 9E 09      STA 099E
00/0434: 68            PLA
00/0435: FA            PLX
00/0436: 85 CD         STA CD
00/0438: 86 CF         STX CF
00/043A: A5 DB         LDA DB
00/043C: 3A            DEC
00/043D: 0A            ASL
00/043E: 0A            ASL
00/043F: AA            TAX
00/0440: A5 CD         LDA CD
00/0442: 9D C8 08      STA 08C8,X
00/0445: A5 CF         LDA CF
00/0447: 9D CA 08      STA 08CA,X
00/044A: A0 02 00      LDY #0002
00/044D: B7 CD         LDA [CD],Y
00/044F: AA            TAX
00/0450: A7 CD         LDA [CD]
00/0452: 85 E3         STA E3
00/0454: 86 E5         STX E5
00/0456: 48            PHA	; réserve place pour le Handle retourné
00/0457: 48            PHA      ; (4 octets)
00/0458: D4 D3         PEI D3   ; Size (hi)
00/045A: D4 D1         PEI D1   ; Size (lo)
00/045C: AD 00 00      LDA 0000 ;
00/045F: 48            PHA      ; ID
00/0460: F4 00 C0      PEA C000 ; Attribut
00/0463: F4 00 00      PEA 0000 ; Pointer to Loc
00/0466: F4 00 00      PEA 0000 ; Pointer to Loc
00/0469: A2 02 09      LDX #0902
00/046C: 22 00 00 E1   JSL E10000  NewHandle(Size/4,MemID,Attr,@loc):H
00/0470: 8D 9E 09      STA 099E
00/0473: 68            PLA ; handle
00/0474: FA            PLX ; handle
00/0475: 85 C9         STA C9 ; sauvegarde
00/0477: 86 CB         STX CB
00/0479: A0 02 00      LDY #0002
00/047C: B7 C9         LDA [C9],Y
00/047E: AA            TAX
00/047F: A7 C9         LDA [C9]
00/0481: 85 DF         STA DF ; memory block (lo)
00/0483: 86 E1         STX E1 ; memory block (hi)
00/0485: A5 DF         LDA DF
00/0487: 85 AD         STA AD
00/0489: A5 E1         LDA E1
00/048B: 85 AF         STA AF
00/048D: A5 D1         LDA D1
00/048F: 85 B1         STA B1
00/0491: A5 D3         LDA D3
00/0493: 85 B3         STA B3
00/0495: F4 00 00      PEA 0000
00/0498: 7B            TDC
00/0499: 18            CLC
00/049A: 69 AB 00      ADC #00AB
00/049D: 48            PHA
00/049E: 22 2F 36 01   JSL 01362F ; FONCTION READ
00/04A2: B0 03         BCS 04A7 {+03}
00/04A4: 82 03 00      BRL 04AA {+03}
00/04A7: 82 8B 02      BRL 0735 {+28B}
00/04AA: F4 00 00      PEA 0000
00/04AD: 7B            TDC
00/04AE: 18            CLC
00/04AF: 69 AB 00      ADC #00AB
00/04B2: 48            PHA
00/04B3: 22 39 36 01   JSL 013639 ; CLOSE
&nbsp;
00/04B7: F4 00 00      PEA 0000
00/04BA: F4 20 00      PEA 0020   ; 32 octets
00/04BD: A5 D1         LDA D1
00/04BF: A6 D3         LDX D3
00/04C1: 22 A7 2A 01   JSL 012AA7 ; &quot;soustraction&quot; D3/D1-0000/0020 -&gt; D3/D1
00/04C5: 68            PLA
00/04C6: FA            PLX
00/04C7: 85 D1         STA D1  ; D1 contient la taille du fichier - 32
00/04C9: 86 D3         STX D3
&nbsp;
; décryptage PHASE 1 (ascendante) A = A EOR (A-2)'
&nbsp;
00/04CB: A9 01 EF      LDA #EF01 ; valeur de départ pour A'
00/04CE: 85 D9         STA D9
00/04D0: 64 D7         STZ D7    ; on part de 00
&nbsp;
00/04D2: A5 D7         LDA D7
00/04D4: A2 00 00      LDX #0000
00/04D7: C9 00 00      CMP #0000
00/04DA: 10 01         BPL 04DD {+01}
00/04DC: CA            DEX
00/04DD: DA            PHX
00/04DE: 48            PHA
00/04DF: A5 DF         LDA DF ; adresse mémoire début
00/04E1: A6 E1         LDX E1 ; fichier chargé
00/04E3: 22 9C 2A 01   JSL 012A9C ; &quot;addition&quot; E1/DF+0000/D7 -&gt; C7/C5
00/04E7: 68            PLA
00/04E8: FA            PLX
00/04E9: 85 C5         STA C5
00/04EB: 86 C7         STX C7
00/04ED: A7 C5         LDA [C5] ; *** A
00/04EF: 45 D9         EOR D9
00/04F1: 85 D9         STA D9
00/04F3: A5 D9         LDA D9
00/04F5: 87 C5         STA [C5] ; ***
00/04F7: A5 D9         LDA D9
00/04F9: 0A            ASL
00/04FA: 85 D9         STA D9
00/04FC: A5 D9         LDA D9
00/04FE: 49 21 43      EOR #4321
00/0501: 85 D9         STA D9   ; A' = ASL + EOR #$4321
00/0503: E6 D7         INC D7   ; on incrémente de 2
00/0505: E6 D7         INC D7   ; (on traite un WORD à chaque fois)
00/0507: A5 D7         LDA D7
00/0509: A2 00 00      LDX #0000
00/050C: C9 00 00      CMP #0000
00/050F: 10 01         BPL 0512 {+01}
00/0511: CA            DEX
00/0512: C5 D1         CMP D1	; taille buffer à traiter (D1-2 max donc)
00/0514: D0 02         BNE 0518 {+02}
00/0516: E4 D3         CPX D3
00/0518: F0 03         BEQ 051D {+03}
00/051A: 82 B5 FF      BRL 04D2 {-4B} ; on boucle
&nbsp;
; décryptage PHASE 2 (descendante) A = A EOR (A+2)'
&nbsp;
00/051D: A9 CD AB      LDA #ABCD , valeur de départ pour A'
00/0520: 85 D9         STA D9
00/0522: A5 D1         LDA D1 ; on part de D1
00/0524: 85 D7         STA D7 ; 
&nbsp;
00/0526: A5 D7         LDA D7
00/0528: A2 00 00      LDX #0000
00/052B: C9 00 00      CMP #0000
00/052E: 10 01         BPL 0531 {+01}
00/0530: CA            DEX
00/0531: DA            PHX
00/0532: 48            PHA
00/0533: A5 DF         LDA DF
00/0535: A6 E1         LDX E1
00/0537: 22 9C 2A 01   JSL 012A9C ; &quot;addition&quot; E1/DF+0000/D7 -&gt; C7/C5
00/053B: 68            PLA
00/053C: FA            PLX
00/053D: 85 C5         STA C5
00/053F: 86 C7         STX C7
00/0541: A7 C5         LDA [C5] ; ***
00/0543: 45 D9         EOR D9
00/0545: 85 D9         STA D9
00/0547: A5 D9         LDA D9
00/0549: 87 C5         STA [C5] ; ***
00/054B: A5 D9         LDA D9   ;
00/054D: 0A            ASL
00/054E: 85 D9         STA D9
00/0550: A5 D9         LDA D9
00/0552: 49 21 43      EOR #4321
00/0555: 85 D9         STA D9   ; A' = ASL + EOR #$4321
00/0557: C6 D7         DEC D7
00/0559: C6 D7         DEC D7
00/055B: A5 D7         LDA D7
00/055D: C9 00 00      CMP #0000 ; (buffer traité jusqu'à 2)
00/0560: F0 03         BEQ 0565 {+03}
00/0562: 82 C1 FF      BRL 0526 {-3F}
&nbsp;
00/0565: A9 00 7D      LDA #7D00
00/0568: 85 D5         STA D5
00/056A: 48            PHA          ; return data (number of bytes unpacked)
00/056B: D4 E1         PEI E1       ; Pointer to packed data (hi)
00/056D: D4 DF         PEI DF       ; Pointer to packed data (lo)
00/056F: D4 D1         PEI D1       ; size of packed data
00/0571: 7B            TDC
00/0572: 18            CLC
00/0573: 69 E3 00      ADC #00E3
00/0576: A2 00 00      LDX #0000
00/0579: DA            PHX          ; Pointer to pointer to unpacked data (hi)
00/057A: 48            PHA          ; Pointer to pointer to unpacked data (lo)
00/057B: 7B            TDC
00/057C: 18            CLC
00/057D: 69 D5 00      ADC #00D5
00/0580: A2 00 00      LDX #0000
00/0583: DA            PHX          ; Pointer to DWORD contening Size (hi)
00/0584: 48            PHA          ; Pointer to DWORD contening Size (lo)
00/0585: A2 03 27      LDX #2703    ; Tool Number (UnPackBytes)
00/0588: 22 00 00 E1   JSL E10000  UnPackBytes(@Buff,BfSz,@StartPtr,@Sz):Size
00/058C: 8D 9E 09      STA 099E
00/058F: 68            PLA ; size
00/0590: 85 DD         STA DD
00/0592: A5 DD         LDA DD
00/0594: A2 00 00      LDX #0000
00/0597: C9 00 00      CMP #0000
00/059A: 10 01         BPL 059D {+01}
00/059C: CA            DEX
00/059D: DA            PHX
00/059E: 48            PHA
00/059F: A5 DF         LDA DF
00/05A1: A6 E1         LDX E1
00/05A3: 22 9C 2A 01   JSL 012A9C  ; addition
00/05A7: 68            PLA
00/05A8: FA            PLX
00/05A9: 85 DF         STA DF
00/05AB: 86 E1         STX E1
00/05AD: A5 DB         LDA DB
00/05AF: 3A            DEC
00/05B0: 0A            ASL
00/05B1: 0A            ASL
00/05B2: 0A            ASL
00/05B3: 0A            ASL
00/05B4: 0A            ASL
00/05B5: AA            TAX
00/05B6: F4 68 08      PEA 0868
00/05B9: A9 68 08      LDA #0868
00/05BC: 18            CLC
00/05BD: 86 F7         STX F7
00/05BF: 65 F7         ADC F7
00/05C1: 48            PHA
00/05C2: A5 E1         LDA E1
00/05C4: 48            PHA
00/05C5: A5 DF         LDA DF
00/05C7: 48            PHA
00/05C8: F4 20 00      PEA 0020   ; les fameux 32 derniers octets
00/05CB: 22 A9 23 01   JSL 0123A9 ; move Palettes block
00/05CF: D4 CB         PEI CB
00/05D1: D4 C9         PEI C9
00/05D3: A2 02 10      LDX #1002
00/05D6: 22 00 00 E1   JSL E10000  DisposeHandle(H)
00/05DA: 8D 9E 09      STA 099E
00/05DD: A5 DB         LDA DB
00/05DF: 3A            DEC
00/05E0: 0A            ASL
00/05E1: 0A            ASL
00/05E2: 0A            ASL
00/05E3: 0A            ASL
00/05E4: AA            TAX
00/05E5: 86 F7         STX F7
00/05E7: 48            PHA
00/05E8: A2 04 17      LDX #1704
00/05EB: 22 00 00 E1   JSL E10000  GetMasterSCB():SCB
00/05EF: 8D 9E 09      STA 099E
00/05F2: 68            PLA
00/05F3: A6 F7         LDX F7
00/05F5: 9D 38 08      STA 0838,X
00/05F8: A5 DB         LDA DB
00/05FA: 3A            DEC
00/05FB: 0A            ASL
00/05FC: 0A            ASL
00/05FD: 0A            ASL
00/05FE: 0A            ASL
00/05FF: AA            TAX
00/0600: 86 F7         STX F7
00/0602: A0 02 00      LDY #0002
00/0605: B7 CD         LDA [CD],Y
00/0607: AA            TAX
00/0608: A7 CD         LDA [CD]
00/060A: 85 F3         STA F3
00/060C: 86 F5         STX F5
00/060E: A6 F7         LDX F7
00/0610: A5 F3         LDA F3
00/0612: 9D 3A 08      STA 083A,X
00/0615: A5 F5         LDA F5
00/0617: 9D 3C 08      STA 083C,X
00/061A: A5 DB         LDA DB
00/061C: 3A            DEC
00/061D: 0A            ASL
00/061E: 0A            ASL
00/061F: 0A            ASL
00/0620: 0A            ASL
00/0621: AA            TAX
00/0622: A9 A0 00      LDA #00A0
00/0625: 9D 3E 08      STA 083E,X
00/0628: A5 DB         LDA DB
00/062A: 3A            DEC
00/062B: 0A            ASL
00/062C: 0A            ASL
00/062D: 0A            ASL
00/062E: 0A            ASL
00/062F: AA            TAX
00/0630: A9 40 08      LDA #0840
00/0633: 18            CLC
00/0634: 86 F7         STX F7
00/0636: 65 F7         ADC F7
00/0638: A2 40 08      LDX #0840
00/063B: 85 F3         STA F3
00/063D: 86 F5         STX F5
00/063F: A9 00 00      LDA #0000
00/0642: 87 F3         STA [F3]
00/0644: A0 02 00      LDY #0002
00/0647: A9 00 00      LDA #0000
00/064A: 97 F3         STA [F3],Y
00/064C: A9 C8 00      LDA #00C8
00/064F: A0 04 00      LDY #0004
00/0652: 97 F3         STA [F3],Y
00/0654: A9 40 01      LDA #0140
00/0657: A0 06 00      LDY #0006
00/065A: 97 F3         STA [F3],Y
00/065C: A5 DB         LDA DB
00/065E: C5 F9         CMP F9
00/0660: F0 06         BEQ 0668 {+06}
00/0662: 1A            INC
00/0663: 85 DB         STA DB
00/0665: 82 6C FD      BRL 03D4 {-294}</pre></div></div>

<p style="text-align: justify;">On a donc une routine qui va effectuer, pour chacune des trois images affichées par le programme, la série d'actions suivantes (et dans cet ordre) :</p>
<ul>
<li style="text-align: justify;">lecture du fichier PICx depuis le disque et détermination de sa taille (utilisation des fonctions OPEN/READ/GET_EOF de Prodos 16).</li>
<li style="text-align: justify;">première phase de décryptage : EOR ascendant effectué sur l'ensemble du fichier sauf les 32 derniers octets suivant la formule : A&lt;= A EOR (A-2)'. Grosso modo, on fait un EOR entre un WORD et celui qui le précède légèrement modifié (d'où le "prime"). Le tout premier WORD est eoré avec #EF01 (valeur fixe).</li>
<li style="text-align: justify;">seconde phase de décryptage : EOR descendant effectué sur l'ensemble du fichier sauf les 31 derniers octets (oui 31 et non 32 cette fois !) suivant la formule : A&lt;= A EOR (A+2)'. Le dernier WORD est eoré avec #ABCD (valeur fixe encore).</li>
<li style="text-align: justify;">pour obtenir le "prime", deux petites manipulations de bits sont effectuées : A' = (ASL A) EOR #$4321.</li>
<li style="text-align: justify;">troisième phase : le résultat obtenu, après les deux phases de décodage par EOR, est envoyé vers la fonction <strong>UnPackBytes</strong> du Tool Set 3 (<em>Miscellanous Tool Set</em>)  !</li>
<li style="text-align: justify;">Le résultat final est la partie <strong>"<em>pixel</em>"</strong> d'une image Super-Hires. Il ne contient ni les 200 <em>Scanline Control Bytes</em> ni les <em>Color Tables</em> ! Ceux-ci sont ajoutés par la suite par le programme . Toutefois, les 32 octets de fin de fichier,  non traités par le EOR (ou presque),  correspondent à la palette principale de l'image.</li>
</ul>
<p style="text-align: justify;">À la lecture de ce petit descriptif, on comprend tout de suite que pour notre propre programme d'encodage, il faudra utiliser la fonction inverse à UnPackBytes à savoir (je vous le donne en mille) : <strong>PackBytes</strong>. Ce qui implique bien sûr l'utilisation des Tools GS ! Terminé les petits trucs faits à l'arrache sous Merlin comme au bon vieux temps du 8 bits !</p>
<p style="text-align: justify;">&nbsp;</p>
<h2>Partie IV : récupérer l'image !</h2>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_141941.gif"><img class="alignleft size-medium wp-image-5870" title="GSBug (breakpoint sur UnPackBytes)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/4b6688720f6039c215b990e7a751463e.jpg" alt="" width="300" height="196" /></a>En effet, pour pouvoir la signer, il va déjà falloir avoir une version vierge de l'image. Bien entendu, elle n'est pas fournie sur le disque ! Nous devrons la récupérer nous-même. La solution la plus simple est d'intercepter l'image (ou plutôt) la zone mémoire où elle est stockée juste <strong>après</strong> l'appel de la fonction UnPackBytes. Si vous avez lu ce qui précède, vous savez que c'est la dernière étape du décryptage et donc que l'image est sous sa forme quasi-définitive après son exécution. On pose donc un breakpoint sur l'adresse de la fonction. Une fois le breakpoint déclenché, on en profite pour checker l'adresse mémoire contenant l'adresse (oui c'est un pointeur d'un pointeur...) où sera unpacked notre image. Cette adresse est importante car c'est cette zone que nous allons ensuite sauvegarder sous forme de fichier. Ne reste plus alors qu'à exécuter la fonction UnPackBytes en mode SINGLE STEP. Et à effectuer la sauvegarde.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_142155.gif"><img class="alignleft size-medium wp-image-5871" title="Nifty List (et NiftyFile) pour sauver un block mémoire" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/ce2842fda7a252c99c1649ef03b609b4.jpg" alt="" width="300" height="196" /></a>Entrée alors en scène d'un nouvel utilitaire, le CDA <strong>Nifty List</strong> et son complément <strong>NiftyFile</strong>. Juste après avoir exécuter la fonction UnPackBytes, on lance le CDA et on sauve la zone unpacked. En fait, vous remarquerez sur l'écran ci-contre que je sauve directement $8000 bytes.  À ce stade, nous avons en fait uniquement la partie "<em>pixel</em>" de l'image qui a été décryptée. Celle-ci fait $7D00 octets. Il nous manque $300 octets de données valides (les <em>Scan Lines</em> et les <em>Color Tables</em>). La fin du fichier sera donc pour le moment occupée par des datas ne correspondant à rien. Nous les remplacerons bientôt. Pour info, le "C1"  de la ligne de commande permet de fixer directement le type de fichier sur PICTURE. Cela nous servira lorsqu'il faudra ouvrir l'image avec un logiciel de dessin.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_142317.gif"><img class="alignleft size-medium wp-image-5872" title="L'image (sans les infos palettes)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/66c538adaabb8bb9c140a7de55a7c2bb.jpg" alt="" width="300" height="187" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Si vous essayez de visualiser directement <em>l'image</em> récupérée précédemment, voici à peu près ce que vous devriez voir... Contrairement aux apparences, nous sommes sur la bonne voie ! Il manque certes les infos de <em>Scan Lines</em> et les Palettes de couleurs mais le reste y est. Il nous faut maintenant récupérer les données manquantes depuis l'image originale.</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_103943.gif"><img class="alignleft size-medium wp-image-5856" title="L'image (avec les infos palettes) mais aussi la barre de menu !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/f0d4000150babc3e6c481901061eb256.jpg" alt="" width="300" height="196" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">L'idée la plus évidente est d'attendre tout simplement que le soft la charge, la décrypte et l'affiche à l'écran. Il suffit alors de passer sous GSBug pour stopper le programme. Puis de relancer Nifty Lift pour enfin sauver la partie qui nous intéresse.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_142612.gif"><img class="alignleft size-medium wp-image-5873" title="Sauvegarde des infos Palettes sous NiftyFile" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/8bc48e4fec93b048736725e22c31cc58.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">On récupère directement les infos dans la partie Super-Hires de la mémoire (en bank $E1). On ne prend que les $300 derniers octets (entre $9D00 et $9DFF) et on sauve le tout sur disk. Là, vous allez sûrement vous demander pourquoi ne pas sauver toute l'image à ce moment-là uniquement et éviter le cirque précédent ? La réponse est simple et vous l'avez même sous les yeux :  sauver toute la page Super-Hires inclurait la barre de menu de l'interface graphique du soft. Alors oui c'est sûr que ce qui est en-dessous (si tant est qu'il existe quelque chose) ne se verra de toute façon pas et on pourrait très bien effacer ensuite la barre par l'intermédiaire d'un soft de dessin (que nous allons de toute façon devoir utiliser pour la signature). C'est une approche, qui d'ailleurs, marcherait parfaitement dans le cas présent. Toutefois, je préfère systématiquement récupérer l'image juste après son décryptage. C'est la méthode la plus sûre (pour l'intégrité de l'image) et la plus universelle.</p>
<p style="text-align: justify;">Bien, une fois nos $300 octets récupérés (et seulement ceux-là !), la suite, je suppose que vous l'imaginez vous-même. Nous allons coller cette partie à la fin de notre pseudo image sauvée précédemment, à la place des $300 octets de pur <em>garbage</em>. Le couple "pixel"/"info palettes" de l'image finale sera ainsi recomposé !</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_142729.gif"><img class="alignleft size-medium wp-image-5874" title="Visualisation sous Block Warden du dump &quot;Palettes&quot;" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/51a2071566b5ce0b13baaebc89bdeeee.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">Mais avant de recoller les morceaux, nous allons devoir utiliser un utilitaire bien connu des utilisateurs Prodos, le bien nommé <strong>Block Warden</strong>. Il va nous permettre de fixer un petit défaut de notre dump de $300 octets. En effet, nous avons capturé les infos de l'écran principal contenant notre image mais aussi celles concernant la barre de menu. Attention, je ne parle pas ici de la partie "pixel" mais bien des "infos palettes". Regardez d'ailleurs avec Block Warden les premiers octets qui correspondent aux premières lignes de l'image.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_230604.gif"><img class="alignleft size-medium wp-image-5917" title="L'image (sans la barre de menu mais toujours sans les bonnes infos Palettes)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/bad918e40dde27256a19e6c499a37e6e.jpg" alt="" width="300" height="187" /></a></p>
<p style="text-align: justify;">Voici à quoi ressemblerait notre image finale si nous ne modifions pas les premiers octets. Remarquez, cela ne se verra pas. En fait, cela n'a même aucune importance car une fois signée, nous n'allons encrypter et coder que la partie "<em>pixel</em>" de l'image. Mais autant faire les choses proprement. La nuance est subtile avec la partie précédente où je voulais avoir l'intégralité de l'image, y compris les éventuels pixels "cachés" sous la barre de menu. Ici, nous avons bien l'image en entier, ce sont simplement les couleurs qui ne sont pas les bonnes pour les premières lignes de l'image.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_142754.gif"><img class="alignleft size-medium wp-image-5875" title="Edition sous Block Warden pour tout mettre à 08" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/9499c73399be02b6ad41e60939ab1633.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">On revient à Block Warden, avec lequel on uniformise les premiers octets à $08 comme les autres (utilisation de la palette de couleurs 8). Il ne reste plus maintenant qu'à regrouper notre dump fixé avec la partie "<em>pixel</em>" de l'image.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-29_143945.gif"><img class="alignleft size-medium wp-image-5869" title="Reconstruction de l'image complète par copie de blocks mémoire" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/a65bec5e50739cd2a5d72db73015f6db.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Pour ce faire, on va de nouveau utiliser l'extension NiftyFile sous Nifty List. L'idée est simple : on charge notre pseudo image récupérée tout à l'heure, on remplace les $300 derniers octets par notre dump modifié précédemment et on sauve le tout. Nous avions déjà un fichier de $8000 octets donc aucun problème de place mémoire.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_101922.gif"><img class="alignleft size-medium wp-image-5930" title="L'image du défi à signer enfin complète !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/b885301f1b8ebd5f84547f36d1d30c51.jpg" alt="" width="300" height="187" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Et voici le résultat : nous avons enfin une image propre et complète. Elle va maintenant nous servir pour deux choses : la première, évidente, sera son utilisation comme base pour l'ajout de notre signature. Mais avant cela, non modifiée, elle nous sera indispensable pour la mise au point du programme d'encodage. En repartant de cette image, nous devrons être capables, avec notre routine, de générer le même fichier PIC1 que celui utilisé par le programme...</p>
<p style="text-align: justify;">&nbsp;</p>
<h2 style="text-align: justify;">Partie V : le programme de codage.</h2>
<p style="text-align: justify;">Pour ce faire, notre programme devra être exactement l'inverse du programme de décodage (logique...). Y compris au niveau de la chronologie des évènements. Nous avions trois phases pour le décodage, nous allons donc retrouver trois phases pour le codage :</p>
<ul style="text-align: justify;">
<li>Packer/compresser la partie "<em>pixel</em>" de l'image (les $7D00 premiers octets) avec la fonction du Tool Set 3, PackBytes.</li>
<li>Appliquer la phase 1 de codage : A&lt;= A EOR (A+2)'. C'est exactement la même formule que pour le décodage phase 2.  Par contre, nous avions une phase 2 descendante pour le décodage, l'inverse sera donc une phase 1 ascendante.</li>
<li>Ensuite viendra la phase 2 de codage : A&lt;=A EOR (A-2)'. Là encore, la phase 2 de codage sera l'inverse de la phase 1 de décodage. Nous avions une phase 1 ascendante. Notre phase 2 sera donc descendante.</li>
<li>Comme vu précédemment, on passe de A à A' - donc de (A-2) à (A-2)' - en faisant un simple (ASL A) EOR #$4321 . Que ça soit pour le décodage ou le codage, la même formule est appliquée.</li>
<li>La seule difficulté (qui m'aura fait m'arracher les cheveux que je n'ai plus) sera de bien "borner" les algos. En effet, il faut que les phases inverses s'effectuent exactement sur le même nombre d'octets.</li>
</ul>
<p style="text-align: justify;">Je vous livre ci-après le code source de ma routine d'encodage. J'ai utilisé les routines Text Tool pour la sortie caractères, afin de simplifier le tout et ne pas devoir utiliser le Tool Set QuickDrawII (ce qui aurait alourdi considérablement le code). Pas de fenêtre, pas de souris, mais un truc sobre et efficace, à l'ancienne quoi...</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">;...............................................................
; DEFI GS ON THE ROCKS 4 (SIGNATURE IMAGE 1)
; WWW.CTRL-POMME-RESET.FR
; v0.5 - ORCA/M
;...............................................................
&nbsp;
               KEEP test
	       MCOPY test.mac   ; fichier MACRO (généré avec macgen)
&nbsp;
DeRefLoc	GEQU $0         
&nbsp;
HandleBuffer	GEQU $10	
&nbsp;
VC5		GEQU $C5
VC7		GEQU $C7
VD1		GEQU $D1
VD3		GEQU $D3
VD7		GEQU $D7
VD9		GEQU $D9
VDF		GEQU $DF
VE1		GEQU $E1
&nbsp;
TEMP		GEQU $A0
VDC		GEQU $B0
&nbsp;
Main		START
&nbsp;
		PHK	        ; data bank
		PLB             ; = code bank
&nbsp;
		_TLStartup	; Tools Locator on
		_MTStartup	; Miscellanous Tools on
&nbsp;
		PHA
		_MMStartup      ; Memory Manager on
		Pullword MyID
&nbsp;
		PHA
		PHA
		PushLong $100	; direct Page memory request
		PushWord MyID
		PushWord #$C005	; locked, fixed, aligned, fixed bank
		PushLong #0	; bank 0
		_NewHandle	; Direct Page
		PullLong DeRefLoc	
&nbsp;
		LDA [DeRefLoc]
		PHA
		PLD	        ; direct Page Register
&nbsp;
                PEA MSG1|-16
		PEA MSG1
		_WriteCString   ; message intro + open image
&nbsp;
                JSL $E100A8	; ProDOS16 entry point
                DC I2'$10'	; commande OPEN
		DC I4'OpenParms'; parmtable pour OPEN
		BCC s1          ; open OK ?
		BRL Error	; sinon erreur
&nbsp;
s1	        PEA MSGOK|-16
		PEA MSGOK
		_WriteCString   ; OPEN OK
&nbsp;
		PEA MSG2|-16
		PEA MSG2
		_WriteCString	; message allocate memory
&nbsp;
		LDA refnum
		STA refnum2	; pour close
		STA refnum3	; pour read
&nbsp;
		PEA $0000
		PEA $0000	; push longword for result
		PEA $0001
		PEA $0000	; push size = $10000 (128ko)
		LDA MyID
		PHA	        ; push ID
		PEA $C000	; attributes for block
		PEA $0000
		PEA $0000	; location (0=default)
		_NewHandle	; allocation mémoire
		BCC s2
                BRL Error
s2		PLA
		PLX
		STA HandleBuffer
		STX HandleBuffer+2
&nbsp;
                PEA MSGOK|-16
		PEA MSGOK
		_WriteCString
&nbsp;
                PEA MSG3|-16
		PEA MSG3
		_WriteCString	 ; message read file
&nbsp;
		LDA [HandleBuffer]
		STA Buffer
		LDY #2
		LDA [HandleBuffer],Y
		STA Buffer+2
&nbsp;
		LDA #32768	; lecture image complète ($8000)
		STA NbBytes
		LDA #0000
		STA NbBytes+2
&nbsp;
		JSL $E100A8
		DC I2'$0012'	; commande READ
		DC I4'ReadParms'
		BCC s3
		BRL Error
&nbsp;
s3		PEA MSGOK|-16
		PEA MSGOK
		_WriteCString	; lecture OK
&nbsp;
;...............................................................
;encryptage + package
;...............................................................
&nbsp;
		PEA MSG5|-16
		PEA MSG5
		_WriteCString	; message Packing
&nbsp;
		PHA	        ; result space
		PEA Buffer|-16
		PEA Buffer
		PEA Size|-16
		PEA Size	; adresse WORD contenant size
&nbsp;
		LDA Buffer
                CLC
		ADC #$8000	; calcul adresse output buffer
		STA OutBuff
		STA VDF	        ; on sauve le buffer (lo) pour la suite
		LDA Buffer+2
		ADC #$0000
		STA OutBuff+2
		STA VE1
		PHA	        ; output buffer (hi)
		LDA OutBuff
		PHA	        ; output buffer (lo)
		PEA $8000	; output buffer size
                _PackBytes
		BCC s4
		BRL Error
&nbsp;
s4		PLA
		TAX
		AND #01
		BEQ s5
&nbsp;
		PEA MSG90|-16
		PEA MSG90
		_WriteCString	; message erreur size impaire
		BRL Fin
&nbsp;
s5	        TXA
		STA VD1	        ; nb packed bytes
		STZ VD3
		CLC
		ADC #$20	; on ajoute 32 octets avant sauvegarde
		STA WriteSize	; sauve nb bytes packed pour WRITE
		STZ WriteSize+2	; (hi=0)
&nbsp;
		PEA MSGOK|-16
		PEA MSGOK
		_WriteCString	; Packing OK
&nbsp;
               JSL $E100A8
		DC I2'$0014'	; commande CLOSE
		DC I4'CloseParms'
&nbsp;
		PEA MSG4|-16	; Message Encryptage
		PEA MSG4
		_WriteCString	;
&nbsp;
; on colle la palette à la fin
&nbsp;
	        LDA VD1
		LDX #0000
		CMP #0000
		BPL suite1t
		DEX
suite1t		PHX
		PHA
		LDA VDF
		LDX VE1
		JSL ADDITION
		PLA
		PLX
		STA VC5
		STX VC7
&nbsp;
		PEA PALETTE|-16
		PLA
		STA TEMP+2
		PEA PALETTE
		PLA
		STA TEMP
&nbsp;
		LDY #00
&nbsp;
BB1		LDA [TEMP],Y
		STA [VC5],Y
		INY
		INY
		CPY #32
		BNE BB1
&nbsp;
; début double encryptage par EOR
; D1 = nb Packed Bytes après Fonction PackBytes
; phase 1 : ascendante (inverse descendante)
; de 2 à D1 (D1 EOR ABCD)
&nbsp;
		LDA #02	       ; on part de 2 (0 non traité)
		STA VD7
&nbsp;
		LDA VD1
		STA VDC
&nbsp;
		DEC VD1	       ; D1-2
		DEC VD1
&nbsp;
Boucle1		LDA VD7
		LDX #0000
		CMP #0000
		BPL suite1
		DEX
suite1		PHX
		PHA
		LDA VDF
		LDX VE1
		JSL ADDITION
		PLA
		PLX
		STA VC5
		STX VC7
		LDY #2
		LDA [VC5],Y     ; au max D1-2 + 2 = D1
		ASL A
		EOR #$4321
		STA VD9
		LDA [VC5]
		EOR VD9
		STA [VC5]
		INC VD7
		INC VD7
		LDA VD7
		LDX #0000
		CMP #0000                       	;
		BPL suite2
		DEX
suite2		CMP VDC	       ; D1 (DONC D1-2 MAX traité)
		BNE suite3
		CPX VD3
suite3		BEQ suite4
		BRL Boucle1		
&nbsp;
suite4	        LDA VDC
		LDX #0000
		CMP #0000
		BPL suite4b
		DEX
suite4b		PHX
		PHA
		LDA VDF
		LDX VE1
		JSL ADDITION
		PLA
		PLX
		STA VC5
		STX VC7
		LDA [VC5]
		EOR #$ABCD
		STA [VC5]	; on fixe le dernier WORD
&nbsp;
		DEC VD1
		DEC VD1	        ; VD1 passe à -4
&nbsp;
; phase 2 : descendante (inverse ascendante)
; de 0 à D1-2 (0 EOR EF01)
&nbsp;
		LDA VD1         ; D1-4
		STA VD7
&nbsp;
Boucle2		LDA VD7
		LDX #0000
		CMP #0000
		BPL suite5
		DEX
suite5		PHX
		PHA
		LDA VDF
		LDX VE1
		JSL ADDITION
		PLA
		PLX
		STA VC5
		STX VC7
		LDA [VC5]	; DI-4 au max
		ASL A
		EOR #$4321
		STA VD9
		LDY #2
		LDA [VC5],Y     ; donc D1-4 + 2 = D1-2 !
		EOR VD9
		STA [VC5],Y
		DEC VD7
		DEC VD7
		LDA VD7
		CMP #$FFFE	; VD7 = 0 inclus
		BEQ suite6
                BRL Boucle2
&nbsp;
suite6		LDA [VDF]	; on fixe le premier
		EOR #$EF01      ; WORD
		STA [VDF]
&nbsp;
; fin encryptage
&nbsp;
		PEA MSGOK|-16
		PEA MSGOK
		_WriteCString	; OK encryptage
&nbsp;
		PEA MSG6|-16
		PEA MSG6
		_WriteCString	; Message Sauvegarde
&nbsp;
                JSL $E100A8
		DC I2'$0001'
		DC I4'CreateParms'; commande CREATE
&nbsp;
		JSL $E100A8
		DC I2'$10'
		DC I4'OpenParms2' ; commande OPEN
		BCS Error
&nbsp;
		LDA refnum4       ; ref du file ouvert
		STA refnum5       ; pour write
		STA refnum2	  ; pour close
&nbsp;
		LDA OutBuff
		STA WriteData
		LDA OutBuff+2
		STA WriteData+2	  ; Buffer Write
&nbsp;
		JSL $E100A8
		DC I2'$13'
		DC I4'WriteParms' ; commande WRITE
		BCS Error
&nbsp;
		PEA MSGOK|-16
		PEA MSGOK
		_WriteCString	  ; Save OK
&nbsp;
		JSL $E100A8
		DC I2'$14'
		DC I4'CloseParms' ; commande CLOSE
&nbsp;
                BRA Fin
&nbsp;
Error		PEA MSGERROR|-16
		PEA MSGERROR
		_WriteCString
&nbsp;
Fin		ANOP
&nbsp;
		PEA MSG99|-16
		PEA MSG99
		_WriteCString	  ; message fin
&nbsp;
		PHA	          ; space for result
		PEA $0000	  ; pas d'echo
		_ReadChar	
&nbsp;
                PushWord MyID
		_DisposeAll	  ; ménage !
&nbsp;
	        PushWord MyID
		_MMShutDown       ; Memory Manager off
&nbsp;
                _MTShutDown	  ; Miscellanous Tools off
		_TLShutDown	  ; Tools Locator off
&nbsp;
		_Quit QuitParams
&nbsp;
		BRK
&nbsp;
ADDITION	CLC
		ADC 04,S
		STA 04,S
		TXA
		ADC 06,S
		STA 06,S
		RTL
&nbsp;
MyID		DS 2
&nbsp;
QuitParams	DC I4'0'
		DC I'0000'
&nbsp;
MSG1		DC C'Resolution DEFI GS ON THE ROCKS 4 v0.5',I1'$8D,$8A'
                DC C'Ouverture Image : ',I1'0'
&nbsp;
MSG2		DC C'Allocation memoire : ',I1'0'
&nbsp;
MSG3		DC C'Lecture Image : ',I1'0'
&nbsp;
MSG4		DC C'Encryptage : ',I1'0'
&nbsp;
MSG5		DC C'Packing : ',I1'0'
&nbsp;
MSG6		DC C'Sauvegarde Image Packed et Encrypted : ',I1'0'
&nbsp;
MSG90		DC C'ERREUR : taille image packed non paire !',I1'$8D,$8A,0'
&nbsp;
MSG99		DC C'Appuyez sur une touche pour quitter...',I1'0'
&nbsp;
MSGOK		DC C'OK',I1'$8D,$8A,0'
&nbsp;
MSGERROR	DC C'ERREUR !',I1'0'
&nbsp;
OpenParms	ANOP
refnum		DS 2
		DC I4'FileName'
                DS 4
&nbsp;
FileName	DC I1'11'
		DC C'1/PICSIGNED'
&nbsp;
CloseParms	ANOP
refnum2		DS 2
&nbsp;
ReadParms	ANOP
refnum3		DS 2
Buffer		DS 4
NbBytes		DS 4
		DS 4
&nbsp;
CreateParms	ANOP
		DC I4'SaveFileName'
		DC I2'$E3'	; access code
		DC I2'$C2'	; type file ($C2 comme l'original)
		DC I4'0'	; aux type
		DC I2'2'	; storage type (sapling file)
		DC I2'0'	; création date
		DC I2'0'	; création time
&nbsp;
OpenParms2	ANOP
refnum4		DS 2
		DC I4'SaveFileName'
		DS 4
&nbsp;
SaveFileName	DC I1'11'
		DC C'1/PICRYPTED'
&nbsp;
WriteParms	ANOP
refnum5		DS 2
WriteData	DS 4
WriteSize	DS 4
		DS 4
&nbsp;
Size		DC I2'$7D00' ; nb de bytes à packer (pixels only)
OutBuff		DS 4
&nbsp;
PALETTE		DC I1'$00,$01,$51,$09,$62,$0A,$62,$0B'
                DC I1'$73,$0B,$73,$0C,$84,$0D,$95,$0E'
                DC I1'$A6,$0F,$31,$08,$52,$0C,$00,$01'
                DC I1'$00,$04,$21,$07,$31,$09,$FF,$0F'
&nbsp;
		END</pre></div></div>

<p style="text-align: justify;">La routine de cryptage est loin d'être optimisée car j'ai surtout cherché à la calquer sur celle de décodage. Ce qui explique aussi le nom peu orthodoxe des variables utilisées (j'ai repris les adresses Page Zéro du code original). Pour le reste, l'essentiel est composé de l'appel aux différentes fonctions Tool Sets et ProDOS 16 (pour la gestion des fichiers). À ce sujet, j'ai limité l'utilisation des macros propres à ORCA/M pour la gestion de ces fonctions afin de garder un code source proche de celui obtenu après assemblage. Pour une utilisation sous Merlin 16, il faudra sans doute faire quelques adaptations.<br />
À noter que le programme ne laisse pas le choix du nom des fichiers ni en entrée ni en sortie. Il faudra penser à les renommer en fonction des besoins.</p>
<h2>Partie VI : signer l'image.</h2>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_174848.gif"><img class="alignleft size-medium wp-image-5859" title="Edition de l'image sous Deluxe Paint II" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/82b6f16926f275fa84afcbb2037ea31b.jpg" alt="" width="300" height="196" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">Pour la signature, j'ai commencé par utiliser <strong>Deluxe Paint II</strong> pour ajouter un petit gribouillis sur l'image. Puis, je me suis aperçu (tardivement) que la sauvegarde ne pouvait s'effectuer qu'au format propriétaire compressé. Il nous faut, je vous le rappelle, un format non compressé, le package et l'encodage se faisant par notre routine.</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_175043.gif"><img class="alignleft size-medium wp-image-5860" title="Sauvegarde de l'image sous PaintWorks" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/54193d6d1477768abf1fa91d4cc90a6a.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">J'ai donc repris l'image sauvée avec Deluxe Paint sous <strong>PaintWorks Gold</strong> qui lui propose l'option "Sreen Format" lors de la sauvegarde. Bien évidemment, signer directement l'image sous PaintWorks marche aussi. Vous pouvez également éditer l'image avec votre logiciel favori puis la convertir ensuite avec les multiples utilitaires disponibles sous GS/OS faisant le job. Bref, je laisse l'artiste en vous s'exprimer librement. Ce qui compte par contre, c'est d'avoir une image finale non compressée et sauvée au format écran (donc avec l'organisation mémoire classique).</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-28_102334.gif"><img class="alignleft size-medium wp-image-5850" title="y'a comme qui dirait un problème..." src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/d949210d268412bd94fa388aa78ab091.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">Et... je vous laisse découvrir le superbe résultat obtenu avec la première version <em>a priori</em> fonctionnelle de mon programme d'encodage. Pourtant, je vous garantie qu'avec l'image non retouchée, tout était OK, elle était ré-encryptée et affichée correctement. Pourquoi donc avec une image modifiée, nous subissons un problème évident de palette (alors que l'image utilise forcément celle par défaut) ? Y'aurait-il une vérification cachée quelque part ? Là encore, il m'a fallu un peu de temps pour comprendre le problème. Et il faut remonter un peu en arrière pour en trouver l'origine !</p>
<p style="text-align: justify;">Explication : la routine de décodage des images de GS On The Rocks 4 décrypte les octets par groupe de deux. Elle travaille en 16 bits, donc sur des WORD. Les deux boucles principales de décryptage utilisent le taille de l'image cryptée (moins 32) comme valeur de base. Les compteurs de boucles étant incrémentés (ou décrémentés) de deux à chaque passage, si cette taille est paire, pas de problème, on aura bien exécution d'un nombre de boucles donné. C'est le cas avec l'image d'origine (qui fait 15866 octets). Avec une taille impaire par contre, les problèmes commencent. Les boucles de décodage deviennent infinies car les conditions de fin ne sont jamais vérifiées. Pour éviter ce type de plantage, j'avais donc intégré à ma routine de codage une détection sur la parité de la taille après PackedBytes de façon à ajouter artificiellement un octet supplémentaire si nécessaire, de façon à toujours obtenir une taille d'image paire.</p>
<p style="text-align: justify;">Or, en ajoutant cet octet, j'ai engendré un autre problème touchant la palette intégrée au fichier (les fameux 32 octets de fin). L'octet supplémentaire ajouté après la partie "pixel" de l'image cryptée, décale d'autant la palette, modifiant totalement la correspondance des couleurs. D'où ce superbe bleu observé ci-dessus. On ne peut pas non plus ajouter l'octet supplémentaire à la fin du fichier car la taille de la partie cryptée (obtenue, je vous le rappelle, par taille fichier - 32) est alors faussée pour le décodage. Seule solution viable : avoir une vraie taille d'image Packed paire ! Cette taille dépendant directement de l'image à compresser, il faudra systématiquement vérifier si, après PackedBytes, la taille obtenue est correcte. La dernière version de mon code inclut cette vérification. Hélas, pour savoir si une image est OK , il n'y a pas d'autre solution que de lancer la routine et d'attendre le verdict.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_193141.gif"><img class="alignleft size-medium wp-image-5943" title="Programme de codage en action (ratée) !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/98aa61cd581a1b0fd147005c51397f21.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Voici ce qu'affiche le programme de codage/package lorsque la taille ne lui convient pas ! Dans ce cas, l'image ne pourra pas être encodée. Il faudra en essayer une autre.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_113247.gif"><img class="alignleft size-medium wp-image-5936" title="Cette signature ne marche pas..." src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/e70073bf52ea586c1359fc8f561b2a9d.jpg" alt="" width="300" height="187" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Exemple : cette image-ci donnera un résultat incorrect (c'est d'ailleurs celle à l'origine de l'effet bleuté vu précédemment).</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_113257.gif"><img class="size-medium wp-image-5937 alignleft" title="Essaie encore..." src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/d5b6b787dd0623d282bba4b67f0fca24.jpg" alt="" width="300" height="187" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Celle-ci non plus ne passera pas... Essayons de modifier légèrement la couleur, ou le positionnement de la signature. Méthode empirique obligatoire !</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_193047.gif"><img class="alignleft size-medium wp-image-5944" title="Ahhhhhhhhh !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/03bf94d9f1e197521bab4689434f4c70.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Bingo, nous avons un gagnant !<br />
Il suffit maintenant de renommer le fichier PICRYPTED obtenu en PIC1 et de remplacer celui sur le disque GS On The Rocks 4 !</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/2012-11-30_114619.gif"><img class="alignleft size-medium wp-image-5940" title="L'image signée et affichée : défi relevé !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/b7d962c2202433b65c81e74f017a7421.jpg" alt="" width="300" height="196" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">L'instant de vérité : le programme du défi décode cette fois parfaitement l'image... Vous remarquerez la subtile différence avec l'image d'au-dessus qui ne passait pas l'encodage. Au fait, finalement pas de test caché, pas de checksum fourbe, rien... Game Over !</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Petit récapitulatif des outils utilisés pour mener à bien ce défi :</p>
<ul>
<li style="text-align: justify;"><strong>GSBug</strong> version 1.6 (<em>Apple Computer</em>) et <strong>System Loader Dumper</strong> 4 (<em>Greg Branche</em>).</li>
<li style="text-align: justify;"><strong>ORCA/Disassembler</strong> 1.2 (<em>Paul Elseth/Byte Works</em>). Fait partie du package <em>Opus ][</em> vendu par <a href="http://syndicomm.com/" target="_blank">Syndicomm</a>. Oui, continuer à vendre des softs d'il y a 30 ans plus de 80$ pour une version totalement dématérialisée, c'est limite abusé... Comme alternative, vous pouvez utiliser l'excellent <strong>The Flaming Bird Disassembler </strong>(<em>Ferox/Phoenix Corporation</em>).</li>
<li style="text-align: justify;"><strong>Block Warden</strong> 2.5 (<em>Glen Bredon</em>).</li>
<li style="text-align: justify;"><strong>Nifty Lift</strong> 3.4 (<em>David A. Lyons</em>) avec l'extension <strong>NiftyFile</strong> 0.99 (<em>Jonah Stich</em>).</li>
<li style="text-align: justify;"><strong>Deluxe Paint II</strong> 2.01 (<em>Dan Silva/Electronic Arts</em>) et  <strong>PaintWorks Gold</strong> 1.0 (<em>Luc Barthelet &amp; Henri Lamiraux/Version Soft</em>).</li>
<li style="text-align: justify;"><strong>ORCA/M Macro Assembler</strong> 2.1.0 (<em>Byte Works</em>). Alternative possible : <strong>Merlin 16</strong> (<em>Glen Bredon</em>) disponible et utilisable gratuitement lui...</li>
<li style="text-align: justify;">Mon programme de codage/package en version 0.5 non optimisé, probablement bourré de fautes de conception mais qui a le mérite de sortir une image cryptée ! Disponible avec ses sources sur le disk de travail en fin d'article.</li>
</ul>
<p style="text-align: justify;">Pour trouver tous ces programmes (tout au moins ceux pour lesquels personne ne vous réclamera des sous), les sources habituelles (<a href="ftp://public.asimov.net" target="_blank">Asimov</a>, <a href="http://www.whatisthe2gs.apple2.org.za/" target="_blank">What is the Apple IIGS</a>, <a href="http://macgui.com/" target="_blank">Mac GUI City</a>, <a href="http://www.apple-iigs.info/home.php" target="_blank">Apple IIGS France</a>, <a href="http://www.brutaldeluxe.fr/" target="_blank">Brutal Deluxe</a>, etc.) sont vos amies. Pour les autres...</p>
<p style="text-align: justify;">Et pour finir quelques remarques en guise de conclusion :</p>
<ul>
<li style="text-align: justify;">Cet article n'a pas vocation à vous apprendre à maîtriser chaque utilitaire utilisé pour la résolution du défi. La plupart sont complexes et demandent une certaine habitude pour être exploités au maximum. Je n'ai d'ailleurs fait qu'effleurer leurs possibilités. Je vous invite à vous référer à leur doc respective pour en avoir un aperçu plus complet (et obtenir des éclaircissements sur certaines commandes utilisées si besoin est).</li>
<li style="text-align: justify;">De même, certaines étapes n'ont pas été détaillées ou même mentionnées (manipulations de disquettes, changements de <em>prefix</em>, modifications de <em>file type </em>et bien sûr toutes les phases de <em>tracing</em> sous GSBug avec suivi des adresses mémoire, etc.). Le but était surtout de proposer un aperçu général du processus pour mener à bien le défi plutôt qu'un véritable mode d'emploi à suivre point par point.</li>
<li style="text-align: justify;">Attention aux infos trouvées dans les divers ouvrages parus sur le GS. J'ai perdu beaucoup de temps sur la fonction PackBytes car le type d'un des arguments référencés était incorrect ! En cas de doute, recoupez les infos et utilisez notamment les <em>Toolbox Reference</em> signés Apple comme juge de paix !</li>
<li style="text-align: justify;">Aussi curieux que cela puisse paraître, ma petite expérience de la programmation et de la bidouille sous Windows aura été un vrai plus pour aborder ce défi (et me servira sans doute par la suite). Avec les Tool Sets, la programmation GS ressemble beaucoup à la programmation sous un OS moderne. Et par extension, on retrouve à peu près les même méthodes pour aborder le côté sombre de la force...</li>
<li style="text-align: justify;">Bien qu'ayant travaillé essentiellement sous <a href="http://www.freetoolsassociation.com/" target="_blank" class="broken_link">ActiveGS</a>, j'ai pris soin de n'utiliser que des techniques ou des softs typiquement GS pour chacune des étapes. Avoir recours par exemple à <a href="http://ciderpress.sourceforge.net/" target="_blank">Ciderpress</a> ou à un éditeur Hexa aurait simplifié et accéléré les choses certes mais était totalement hors défi. Par contre, il est bien évident qu'un émulateur (en vitesse illimité) permet de gagner beaucoup de temps pour les boot du système. Se retrouver sous environnement ORCA en moins de 10 secondes a été un gros plus lors de la mise au point du programme de codage par exemple.</li>
<li style="text-align: justify;">Quant au défi en lui-même, merci (avec quelques décennies de retard) à <strong>Gronk</strong> et à son équipe pour ce sympathique challenge. Même si dans l'absolu, il était relativement simple à résoudre, à chaque étape, il m'aura posé un problème spécifique. Une bonne façon de défricher le terrain pour la suite...</li>
</ul>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;">Téléchargements :</span></p>
<ul>
<li><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/12/GS%20On%20The%20Rocks%2004%20(untouched).2mg">GS On The Rocks 4 (original)</a>. N'oubliez pas de taper lsd pour passer le piège à con.</li>
<li><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/12/GS%20On%20The%20Rocks%2004%20(signed).2mg">GS On The Rocks 4 (signé par mes soins)</a>.</li>
<li>Et comme toujours <a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/12/GSOTR4%20-%20Defi%20-%20WorkDisk.po">le disque de travail</a> contenant les différentes images, le programme de codage (appelé test) et son code source (en différentes versions).</li>
</ul>
<p>&nbsp;</p>
<p style="text-align: center;"><span style="font-size: xx-small;">"Quelle délivrance d'appuyer sur le bouton <em>Publier</em> et d'en avoir enfin fini avec cet article" (blogueur anonyme)</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2012/12/06/gs-on-the-rocks-4-le-defi-des-artistes-associes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Remapping, suite et&#8230; suite !</title>
		<link>http://www.ctrl-pomme-reset.fr/2012/11/11/remapping-suite-et-suite/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=remapping-suite-et-suite</link>
		<comments>http://www.ctrl-pomme-reset.fr/2012/11/11/remapping-suite-et-suite/#comments</comments>
		<pubDate>Sun, 11 Nov 2012 10:28:09 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Bidouille]]></category>
		<category><![CDATA[GS]]></category>
		<category><![CDATA[activegs]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=5756</guid>
		<description><![CDATA[Nouveaux rebondissements dans l'affaire du remapping clavier avec les émulateurs dérivés de KEGS ! Le premier concerne mon propre script<a href="http://www.ctrl-pomme-reset.fr/2012/11/11/remapping-suite-et-suite/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/Alt.jpg"><img class="alignleft size-thumbnail wp-image-5766" title="Alt Grrrrrrrr !" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/374de04fc627c6b2e9fd75756edb50f6.jpg" alt="" width="150" height="147" /></a>Nouveaux rebondissements dans <em>l'affaire</em> du remapping clavier avec les émulateurs dérivés de KEGS ! Le premier concerne mon propre script AutoHotkey qui, sous GS/OS, ne remappe pas correctement certains caractères ! Impossible en effet d'atteindre ceux nécessitant un <strong><em>ALTR Gr</em></strong> sur clavier AZERTY dès que l'on est en mode <strong>Desktop</strong> ! Mais on rencontre également ce dysfonctionnement avec les <strong>C</strong>lassic <strong>D</strong>esk <strong>A</strong>ccessories dans certaines circonstances. Jusqu'alors, j'avais essentiellement testé le script sous GSBug, Orca ou encore Merlin, avec lesquels le problème ne se pose pas. Visiblement quand on appuie sur <em>ALT Gr, GS/OS intercepte et gère </em>l'<em>Open Apple</em> (<em>ALT</em> sous émulateur) et le <em>CTRL</em> individuellement. La séquence complète de touches (key + modificateurs) est alors <em>perdue</em> et le caractère voulu passe à la trappe ! Rien ne s'affiche ou dans certains cas, on obtient même carrément n'importe quoi...<span id="more-5756"></span></p>
<p style="text-align: justify;">Afin de contourner ce problème, j'ai ajouté au script la prise en compte de la touche <em>Windows Droite</em> comme alternative à <em>ALT Gr</em>. Il suffit donc de l'utiliser pour les caractères récalcitrants en lieu et place d'<em>ALT Gr</em> quand le besoin s'en fait sentir, c'est à dire, concrètement, quand ActiveGS refuse d'afficher le caractère que vous voulez !<br />
Exemple : sous GS/OS en mode Desktop, il faudra pour obtenir un \ maintenir enfoncée la touche <em>Windows Droite</em> et appuyer sur  _ .<br />
Question : quand une bidouille devient une usine à gaz, est-ce encore une bidouille ou un cataplasme sur une jambe de bois ?</p>
<p style="text-align: justify;">Mais heureusement pour ceux voulant se simplifier la vie, voici notre second rebondissement avec l'entrée en scène d'<strong>Olivier Zardini</strong> (l'autre <em>Brutal Deluxe</em>). Celui-ci s'est en effet penché sur le <strong>code source</strong> de <a title="KEGS32" href="http://www.emaculation.com/kegs32.htm" target="_blank">KEGS32</a> (adaptation Win32 de KEGS) et l'a modifié pour intégrer nativement et correctement la gestion du clavier AZERTY. Résultat : il existe maintenant un émulateur GS qui est réellement utilisable avec un clavier français ! Il n'y a plus qu'à espérer, qu'un jour, ces modifications soient intégrées à ActiveGS.</p>
<p style="text-align: justify;">Olivier m'ayant autorisé à diffuser le fruit de son travail, vous trouverez ci-après sa version de KEGS32 en téléchargement. Vous êtes d'ailleurs invités à la tester intensivement et à faire remonter les problèmes rencontrés. Je ferai suivre bien évidemment...</p>
<p style="text-align: justify;">Quant à ceux utilisant ActiveGS (ou GSport), vous pourrez retrouver la dernière version de mon script, avec prise en compte de la touche <em>Win Droite,</em> sur le <a href="http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/">premier article</a> de cette (déjà trop) longue série !</p>
<ul>
<li><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/KegsFR/KEGS32fr.zip">KEGS32</a> (avec mapping AZERTY) - build du 04.11.2012.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2012/11/11/remapping-suite-et-suite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>On a retrouvé l&#8217;underscore !</title>
		<link>http://www.ctrl-pomme-reset.fr/2012/11/01/on-a-retrouve-lunderscore/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=on-a-retrouve-lunderscore</link>
		<comments>http://www.ctrl-pomme-reset.fr/2012/11/01/on-a-retrouve-lunderscore/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 12:51:48 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Bidouille]]></category>
		<category><![CDATA[GS]]></category>
		<category><![CDATA[activegs]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=5682</guid>
		<description><![CDATA[Dans mon précédent article sur le remapping de touches, forcé grâce à AutoHotkey, je précisais que l'underscore (ou tiret bas)<a href="http://www.ctrl-pomme-reset.fr/2012/11/01/on-a-retrouve-lunderscore/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/underscore.gif"><img class="alignleft size-medium wp-image-5689" title="_underscore_" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/5c8c554b96fd7803ec8b30843c308912.jpg" alt="" width="300" height="150" /></a>Dans mon <a title="ActiveGS vs. AutoHotkey : échec et map !" href="http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/">précédent article</a> sur le remapping de touches, forcé grâce à AutoHotkey, je précisais que l'<strong>underscore </strong>(ou tiret bas) n'était tout simplement pas mappé sur un clavier PC avec ActiveGS, problème découlant en fait de KEGS et de son aversion pour les claviers AZERTY ! Sur le moment, je pensais pouvoir faire avec (ou plutôt sans). Mais depuis, j'ai commencé à utiliser <strong>GS/Bug</strong>, le debugger de l'Apple IIGS. Or, avec GS/Bug, pour poser un breakpoint sur un <em>tool</em> (sorte d'API du GS), il faut soit indiquer le numéro de ce <em>tool</em>, soit utiliser son petit nom, précédé, je vous le donne en mille, d'un underscore ! Je devais donc trouver une solution pour ramener ce caractère moribond à la vie sur un clavier PC bien de chez nous ! Pour ce cas précis, AutoHotkey n'étant pas une solution (on ne peut tout simplement pas remapper ce qui n'est pas mappé à la base !), j'ai donc dû me  tourner vers une approche plus radicale : modifier directement ActiveGS ! <span id="more-5682"></span></p>
<p style="text-align: justify;">Le <strong>patch</strong> présenté ici est minimal : je n'ai effectivement remappé "en dur" qu'un seul et unique caractère (donc un seul octet à changer).<br />
Pourquoi ne pas en profiter pour remapper tout le clavier directement <strong>dans</strong> ActiveGS me direz-vous ?<br />
Tout simplement car la modification d'un octet est bien plus simple à effectuer que de redéfinir entièrement la table de mappage (ce qui aurait nécessité la révision d'une cinquantaine d'octets). ActiveGS est régulièrement mis à jour, il faudra donc effectuer la modification à chaque nouvelle version, ce qui peut vite devenir rébarbatif quand il y a beaucoup d'octets à changer. Et comme le script AutoHotkey fait parfaitement bien le boulot pour le remapping de tous les autres caractères, je n'ai donc modifié que l'underscore dans l'EXE en lui-même.</p>
<p style="text-align: justify;">Concrètement, il m'a fallu d'abord localiser la table de mapping dans l'exécutable. Je passe sur les détails : cela n'aura été qu'une longue et fastidieuse analyse du code désassemblé d'ActiveGS (j'aurais d'ailleurs sans doute gagné du temps en cherchant visuellement la table directement dans l'EXE). Une fois ceci fait, ne restait plus qu'à trouver un emplacement pour notre underscore, le plus logique étant évidemment de le remettre <em>à sa place</em> (sur la touche "8" donc).<br />
Problème : le mapping par défaut d'ActiveGS/KEGS prévoit que sur la touche 8 se trouve également le caractère "*" (étoile). Remplacer ce caractère étoile par notre underscore rend bien évidemment caduc le remapping de l'étoile vers la bonne touche PC par le script. Heureusement, l'étoile se trouvant aussi reportée sur le pavé numérique, il suffira donc (comme pour le signe -) d'utiliser cette touche pour notre script de remapping.</p>
<p style="text-align: justify;">En ce qui concerne le script justement, il faudra utiliser <strong>au moins la version 0.53</strong> à partir de laquelle la bidouille "underscore" est prise en compte. Je vous renvoie une nouvelle fois vers <a href="http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/">l'article correspondant</a> pour les mises à jour et le téléchargement de la dernière version de ce script.</p>
<p style="text-align: justify;">Allez, il est temps de passer à l'action. La modification expliquée ci-après ne concerne bien évidemment que la version <strong>standalone PC</strong> d'ActiveGS. Un éditeur hexadécimal est nécessaire.</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/10/Editeur-Hexa-1.gif"><img class="alignleft size-medium wp-image-5687" title="Éditeur Hexa (recherche chaîne)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/829402578dbe847804525b77b34bf7af.jpg" alt="" width="300" height="174" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Une fois <strong>ActiveGS.exe</strong> ouvert dans l'éditeur, il faut faire une recherche hexa sur la suite d'octets : <strong>380000002A000000</strong>. Il n'existe normalement qu'une seule occurrence de cette chaîne.</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/10/Editeur-Hexa-2.gif"><img class="alignleft size-medium wp-image-5688" title="Éditeur Hexa  (remplacement 2A par 5F)" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/2556ea77954102c44ad51822ff95e279.jpg" alt="" width="300" height="174" /></a></p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Une fois localisée, il suffit alors de remplacer le <strong>2A</strong> de cette chaîne par <strong>5F</strong> (qui correspond au caractère underscore). N'oubliez pas de sauvegarder avant de quitter. Et travaillez toujours sur une copie, on ne le dira jamais assez !</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">&nbsp;</p>
<p style="text-align: justify;">Voici un récapitulatif des offsets où remplacer 2A par 5F suivant les versions d'ActiveGS. J'ai également incorporé l'offset pour GSport (autre adaptation de KEGS qui souffre du même problème). J'essaierai de mettre à jour cette liste au fur et à mesure des sorties de nouvelles versions.</p>
<ul>
<li><strong>ActiveGS 3.5.894</strong> : offset A98C0</li>
<li><strong>ActiveGS 3.5.903</strong> (<a href="http://beta.freetoolsassociation.com/" target="_blank">beta</a>) : octet A98C0</li>
<li><strong>GSport 0.2a</strong> : offset 56FA8</li>
</ul>
<p>&nbsp;</p>
<p><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/11/GSBug-avec-underscore.gif"><img class="alignleft size-medium wp-image-5698" title="GS/Bug avec underscore" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/6290016133d05f73800fefa7ea389301.jpg" alt="" width="300" height="196" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">Et pour finir, voilà le résultat sous GS/Bug ! Mais bien entendu l'underscore est dispo peu importe l'application tournant sur le GS et est accessible depuis la touche classique d'un clavier PC ! N'oubliez pas d'utiliser conjointement au patch le script de remapping...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2012/11/01/on-a-retrouve-lunderscore/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ActiveGS vs. AutoHotkey : échec et map !</title>
		<link>http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=activegs-vs-autohotkey-echec-et-map</link>
		<comments>http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 11:57:59 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Bidouille]]></category>
		<category><![CDATA[GS]]></category>
		<category><![CDATA[activegs]]></category>
		<category><![CDATA[remapping]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=5509</guid>
		<description><![CDATA[Première petite bidouille en relation avec l'Apple IIGS et plus exactement ActiveGS, l'excellent émulateur que j'utilise quasiment quotidiennement en ce<a href="http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/10/caractères.gif"><img class="alignleft size-medium wp-image-5510" title="Remapping Clavier avec AutoHotkey" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/6655aa3556d0b0ae1e8eaad4548aa6cb.jpg" alt="" width="300" height="196" /></a>Première petite bidouille en relation avec l'<strong>Apple IIGS</strong> et plus exactement <a title="ActiveGS" href="http://activegs.freetoolsassociation.com/" target="_blank">ActiveGS</a>, l'excellent émulateur que j'utilise quasiment quotidiennement en ce moment pour les screenshots des galeries. Seul <em>petit</em> problème, ActiveGS, défini par ses <a href="http://www.freetoolsassociation.com/" target="_blank" class="broken_link">créateurs</a> (qu'on ne présente plus) comme un front-end à <a title="KEGS - Kent's Emulated GS" href="http://kegs.sourceforge.net/" target="_blank">KEGS,</a> l'émulateur GS référence de Kent Dickey, souffre du même problème que celui-ci : le support exclusif du clavier QWERTY. Ce qui se traduit, si on utilise un bon vieux clavier AZERTY de PC, par un <em>mapping</em> des touches apocalyptique ! Vouloir entrer le moindre signe de ponctuation ou avoir accès aux caractères spéciaux se transforme vite en supplice. Et la crise de nerf n'est jamais bien loin quand il faut essayer toutes les touches du clavier pour afficher une accolade (si jamais on la trouve...) !<br />
Bien évidemment, modifier le réglage au niveau du "Control Panel" de la ROM du GS émulé ne change absolument rien, c'est simplement le cœur d'ActiveGS (donc KEGS) qui ignore superbement la disposition des touches AZERTY. Et passer son clavier PC en mode QWERTY au niveau de Windows ne résoudra pas non plus le problème car si vous n'avez pas de double inscription sur les touches, bonjour l'angoisse pour s'y retrouver... <span id="more-5509"></span></p>
<p style="text-align: justify;">La solution va donc être de <strong>remapper</strong> les touches de notre clavier PC vers les touches affichant les caractères voulus sous ActiveGS. Sous Windows, il existe deux possibilités pour remapper : la bonne et la mauvaise ! La mauvaise (pour ce cas précis), c'est de faire un remapping au niveau du système, par l'intermédiaire de la base de registre. Car dans ce cas, le mapping sera permanent et concernera toutes les applications. De plus, on ne pourra pas passer d'une configuration de touches à l'autre à la volée car il faudra après modification de la base de registre, systématiquement rebooter pour que cela soit pris en compte ! Bref, il vaut mieux utiliser une autre méthode, en l’occurrence la bonne ! Et celle-ci a un nom : <strong>AutoHotkey</strong> !</p>
<p style="text-align: justify;">Ce petit logiciel, gratuit et peu gourmand en ressources, exécute des scripts (de simples fichiers texte avec extension .ahk) écrits dans un langage propriétaire mais simple. À la base, AutoHotkey permettait de définir des Hotkeys (d'où son nom), c'est à dire des touches auxquelles on pouvait assigner une fonction particulière (lancer une application notamment). Mais au fil des évolutions, AutoHotkey est devenu un outil de programmation avancé permettant de faire beaucoup de choses (manipulations de fenêtres, interactions avec des applications tierces, etc.). Bien heureusement, il a conservé ses fonctions premières de HotKey, nous permettant ainsi de <em>redéfinir</em> très simplement nos touches du clavier et de résoudre notre problème.</p>
<p style="text-align: justify;">Voyons concrètement quelques lignes issues du script AutoHotkey que j'utilise pour remapper les touches avec ActiveGS :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;^&gt;!(::SendInput )		; [
+(::SendInput {Numpad5}		; 5
(::SendInput +ç 		; (</pre></div></div>

<p style="text-align: justify;">Cela a l'air un peu barbare comme ça mais en fait c'est très simple. Nous avons ici le cas concret du remapping complet de la touche <strong>(</strong> d'un clavier PC. Par l’intermédiaire de cette touche est accessible <strong>la parenthèse gauche</strong> donc, le chiffre <strong>5</strong> (avec Shift) et <strong>le crochet gauche</strong> (avec AltGr). Or pour obtenir, sous ActiveGS, la parenthèse gauche, il faut en fait utiliser la touche <strong>ç</strong> d'un clavier PC ! Et pour le crochet, c'est la touche <strong>)</strong>. Si je vous dis que, dans le langage de script AutoHotkey, <strong>+</strong> et <strong>&lt;^&gt;!</strong> représentent respectivement l'appui sur <strong>Shift</strong> et sur <strong>AltGr</strong>, vous commencez à comprendre la syntaxe je suppose :</p>
<p style="text-align: center;"><em>Touche PC</em> <strong>::</strong> <em>Équivalence ActiveGS<br />
</em>(oublions le SendInput qui n'est en fait qu'une option de la fonction de base "::")</p>
<p style="text-align: justify;">Il faut bien comprendre qu'AutoHotkey remappe la touche <strong>complète</strong> et n'agit pas au niveau des caractères. Si vous définissez dans un script uniquement <strong>a::b</strong> , à chaque appui sur la touche <strong>a</strong>, AutoHotkey <em>simulera un appui</em> sur la touche <strong>b</strong>. Si vous faites Shift+a, il enverra alors un Shift+b (donc B). Et ceci automatiquement.<br />
Si on veut qu'il remplace Shift+a par autre chose que Shift+b, il faudra donc spécifiquement définir la touche (ou combinaison de touches) que l'on veut obtenir pour ce Shift+a. Par exemple :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">+a::+c   ; Shift+a enverra un Shift+c soit un C majuscule
a::b     ; l'appui sur a enverra un b
notes    : vu que rien n'est défini spécifiquement, pour Ctrl+a,
           AutoHotkey enverra par défaut un Ctr+b.
         : un appui sur b enverra un... b (la touche de destination
           n'est pas modifiée par le a::b).</pre></div></div>

<p style="text-align: justify;">Comme on peut utiliser les modificateurs de touche (Shift/Alt/Ctrl/AltGr) de chaque côté de la fonction "<strong>::</strong>", on obtient donc une certaine souplesse permettant d'envoyer spécifiquement une combinaison de touches à la place d'une autre. Et donc, par extension (et déformation de langage), un caractère à la place d'un autre !</p>
<p style="text-align: justify;">Tout ceci est un peu confus ? Essayez avec un script simple en utilisant les différents modificateurs d'un côté et de l'autre de la fonction et voyez concrètement le résultat. Avec un peu de pratique, on pige vite le coup. J'invite d'ailleurs tous les utilisateurs un tant soit peu curieux à se pencher très sérieusement sur AutoHotkey car il peut rendre de nombreux services. Le <a href="http://www.autohotkey.com/" target="_blank">site officiel</a> est d'ailleurs très bien foutu, l'aide (en ligne comme locale) est abondante et le forum, très actif, permet de répondre à pas mal d'interrogations.</p>
<p style="text-align: justify;">Pour l'utilisation d'un script, c'est très simple : une fois AutoHotkey installé, un double-clique sur le fichier .ahk l'active. La magie s'opère alors ! Et comble du raffinement dans le cas qui nous intéresse, le remapping se fait uniquement si ActiveGS est au premier plan. Vous pouvez utiliser vos applications en parallèle avec le mapping normal du clavier.</p>
<p style="text-align: justify;">J'ai intégré au script pur de remapping des touches, une partie permettant d'ouvrir automatiquement au lancement d'ActiveGS la boîte de dialogue d'options et de la déplacer dans un coin de l'écran. J'en avais marre de le faire manuellement à chaque lancement ! Et ceci permet également d'illustrer les multiples possibilités d'AutoHotkey. Je pense d'ailleurs par la suite continuer à améliorer le script en y ajoutant de nouvelles fonctions et en corrigeant bien sûr les éventuels bugs. Quant au mapping des touches en lui-même, il permet sous Dos/Prodos d'avoir accès de façon normale à tous les caractères comme les parenthèses, les crochets ou les accolades (pratique pour ceux qui veulent programmer sous Merlin sans se tirer une balle !). De plus, sous GS/OS 6.01 francisé, il permet d'obtenir les caractères accentués français par la même combinaison de touche que sur un clavier PC !</p>
<p style="text-align: center;">Télécharger mon <a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/remapping/remapping.ahk">script</a> de remapping (dernière version) et <a href="http://www.autohotkey.com/download/" target="_blank">AutoHotkey</a> pour Windows.</p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Notes :</span></p>
<ul>
<li style="text-align: justify;"><del>j'ai fait une utilisation intensive du pavé numérique pour remapper les chiffres. Sous ActiveGS, si vous utilisez ce pavé pour simuler le joystick, cela risque de poser problème !</del> <span style="font-size: x-small;"><strong>voir mise à jour 0.43</strong></span></li>
<li style="text-align: justify;">si quelqu'un retrouve l'équivalent de la touche <strong>_</strong> (underscore), je suis preneur. Surtout que sur GS, la même touche sert pour le signe moins (<strong>-</strong>), nettement plus problématique lorsqu'il manque. Heureusement que sur le pavé numérique, cette touche existe...</li>
<li style="text-align: justify;">certaines touches PC, n'ayant pas d'équivalent sous ActiveGS, ne sont pas remappées. Il y a donc pour certains caractères plusieurs façons de les obtenir (la touche <em>officielle</em> PC et la touche <em>délire</em> ActiveGS restée en l'état).</li>
<li style="text-align: justify;">il faudra probablement adapter le script pour certains claviers. Je pense notamment aux claviers d'ordinateurs portables qui ont souvent un agencement particulier spécifique à chaque modèle.</li>
<li style="text-align: justify;">le script est uniquement compatible avec la version standalone d'ActiveGS sous Windows. Pour les autres OS, il y a un <a href="http://www.ironahk.net/" target="_blank">projet</a> d'adaptation d'AutoHotkey multi-plateformes. Il existe peut-être même des équivalents (nul besoin d'avoir des fonctions avancées juste pour remapper). <span style="font-size: x-small;"><strong>voir mise à jour 0.48 pour la compatibilité avec la version Plugin pour navigateurs</strong></span></li>
</ul>
<p>&nbsp;</p>
<p style="text-align: justify;"><span style="text-decoration: underline;">Mises à jour :</span></p>
<ul>
<li style="text-align: justify;"><strong>0.42</strong> (08.10.2012) : première version stable diffusée.</li>
<li style="text-align: justify;"> <strong>0.43</strong> (09.10.2012) : limitation de l'utilisation du pavé numérique pour le remapping (uniquement pour le signe "-"). Ceci afin de limiter les conflits avec les logiciels GS utilisant le pavé numérique pour différentes fonctions.</li>
<li style="text-align: justify;"><strong>0.48</strong> (12.10.2012) :
<ol>
<li>boîte d'options maintenant <em>magnétique</em> et déplaçable par CTRL+HOME à 4 emplacements différents autour de la fenêtre principale (pour ActiveGS standalone uniquement).</li>
<li>ajout du support de GSport (autre émulateur dérivé de KEGS).</li>
<li>ajout du support intégral de la version Plugin d'ActiveGS pour Chrome.</li>
<li>ajout du support de la version Plugin pour IE et Firefox pour les sites <a title="Virtual Apple" href="http://66.223.110.99/" target="_blank">Virtual Apple</a> et <a href="http://www.freetoolsassociation.com/" target="_blank" class="broken_link">FTA</a>. En effet, pour Internet Explorer et Firefox, AutoHotkey ayant des difficultés à reconnaître spécifiquement l'onglet dans lequel s’exécute le plugin ActiveGS, il est nécessaire de définir chaque site dans le script afin d'éviter un remapping des touches sur l'ensemble des onglets du browser.</li>
<li>correction de bugs divers et optimisation.</li>
</ol>
</li>
<li style="text-align: justify;"><strong>0.50</strong> (17.10.2012) :
<ol>
<li style="text-align: justify;">ajout d'une Hotkey (CTRL+END) pour cacher/afficher le symbole d'accès disque quand l'émulateur <strong>est en pause</strong> par F5 <span style="font-size: x-small;">(remarque : oui je sais que l'on peut désactiver l'affichage dans le fichier de configuration d'ActiveGS, toutefois cela nécessite un redémarrage de l"émulateur, idem pour le réactiver. Mon approche permet de ponctuellement l'effacer si besoin est, pour prendre un screenshot notamment).</span></li>
<li style="text-align: justify;">changement du titre de la fenêtre d'ActiveGS quand l'émulateur est en pause.</li>
</ol>
</li>
<li style="text-align: justify;"><strong>0.53</strong> (01.11.2012) : prise en compte de <a href="http://www.ctrl-pomme-reset.fr/2012/11/01/on-a-retrouve-lunderscore/">la modification "underscore</a>" pour ActiveGS standalone (PC) et GSport.</li>
<li style="text-align: justify;"><strong>0.55</strong> (11.11.2012) : ajout de la touche <em>Win Droite</em> comme alternative à <em>ALT Gr</em> pour obtenir certains caractères sous GS/OS ou les CDA.</li>
<li style="text-align: justify;"><strong>0.80</strong> (29.11.2012) : support de plusieurs sessions d'ActiveGS en même temps.</li>
<li style="text-align: justify;"><strong>0.91</strong> (11.01.2013) : ajout de la fonction COLLER (touche F2) vers ActiveGS d'un texte mis dans le presse-papier (ESC permet de stopper le processus). <span style="font-size: xx-small;">Remarque : il y a une temporisation de définie  permettant d'éviter que certains caractères ne se perdent en route. Suivant la puissance du PC faisant tourner ActiveGS et la vitesse de simulation de celui-ci, cette tempo pourra être optimisée. : modifier le paramètre suivant SetKeyDelay dans le script (exprimé en milliseconde). </span></li>
<li><strong>0.92</strong> (13.01.2013) :
<ol>
<li style="text-align: justify;">fonction COLLER - correction de bugs et ajout de la possibilité de mettre en pause le processus (touche ESPACE).</li>
<li style="text-align: justify;">fonction COLLER - amélioration de la vitesse pour les textes courts (désactivation de la temporisation).</li>
</ol>
</li>
</ul>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;">Vous pouvez retrouver toutes les versions du script directement sur <a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/remapping/" target="_blank">cette page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2012/10/08/activegs-vs-autohotkey-echec-et-map/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Galeries souterraines</title>
		<link>http://www.ctrl-pomme-reset.fr/2012/10/01/galeries-souterraines/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=galeries-souterraines</link>
		<comments>http://www.ctrl-pomme-reset.fr/2012/10/01/galeries-souterraines/#comments</comments>
		<pubDate>Mon, 01 Oct 2012 15:16:03 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[GS]]></category>
		<category><![CDATA[La vie du site]]></category>

		<guid isPermaLink="false">http://www.ctrl-pomme-reset.fr/?p=5431</guid>
		<description><![CDATA[Petit message pour signaler la mise en place de deux nouvelles galeries de screenshots consacrées exclusivement au GS. Il me<a href="http://www.ctrl-pomme-reset.fr/2012/10/01/galeries-souterraines/" class="searchmore">Read the Rest...</a><div class="clr"></div>]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.ctrl-pomme-reset.fr/wp-content/uploads/2012/10/Demo-ACS.jpg"><img class="alignleft size-medium wp-image-5440" title="Démo ACS" src="http://www.ctrl-pomme-reset.fr/wp-content/plugins/image-shadow/cache/c77f59fe12d2d486ee64107bc162bc23.jpg" alt="" width="300" height="187" /></a>Petit message pour signaler la mise en place de deux nouvelles galeries de screenshots consacrées exclusivement au <strong>GS</strong>. Il me semblait naturel de continuer l'aventure en couvrant en image l'<strong>Underground français</strong> spécifique à l'ultime évolution de l'Apple II. N'ayant absolument pas connu cette période, le test des images disk et la <em>prise</em> de screenshots est d'ailleurs pour moi une excellente occasion de découvrir ce qui se faisait à l'époque. Et il faut bien avouer qu'après avoir passé des heures à tester les jeux et applications Apple IIe, avec le GS, on en prend plein les yeux et les oreilles ! C'est d'ailleurs pour cela que j'ai préféré séparer les galeries GS des deux d'origine car il y a un tel <em>gap</em> entre les graphismes que tout mélanger n'aurait rendu justice ni aux uns ni aux autres !<br />
J'ai gardé par contre, les mêmes dénominations : <a title="French Autographs GS " href="http://www.ctrl-pomme-reset.fr/galeries/french-autographs-gs/">Autographs</a> (pour les signatures de cracks) et <a title="Productions Underground GS" href="http://www.ctrl-pomme-reset.fr/galeries/productions-underground-gs/">Underground</a> (pour toutes les productions "alternatives") dans un souci de cohérence mais plus que jamais le terme <em>Underground</em> apparaît, pour certaines réalisations, tout à fait galvaudé. En effet, durant la période Apple IIGS, l'attitude de certaines teams françaises étaient extrêmement ambiguë. Il n'y avait plus vraiment les <em>gentils pirates</em> contre les <em>méchants éditeurs</em> (ou l'inverse). La plupart des groupes possédaient un côté sombre (cracking, diffusion de contenu illicite) mais aussi une activité légale (parfois sous un autre nom) avec réalisation de démos, d'utilitaires diffusés en shareware voire même de jeux édités officiellement et vendus en boutique (et qui se retrouvaient eux-même crackés par d'autres, un comble...). Je vous invite d'ailleurs, pour en savoir plus, à lire cet excellent <a title="Underground GS" href="http://boutillon.free.fr/Underground/People/Underground_GS/Underground_GS.html" target="_blank">article</a> publié sur le <a title="Underground //e" href="http://boutillon.free.fr/" target="_blank">site</a> de Jean-Marc Boutillon, à partir d'infos récoltées par Olivier Zardini et Antoine Vignau, les deux <a title="Brutal Deluxe" href="http://www.brutaldeluxe.fr/" target="_blank">Brutes de Luxe</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ctrl-pomme-reset.fr/2012/10/01/galeries-souterraines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
