|
|||||||||||||||||||||||||||||||||||||||||||||
|
Bonjour. Je vais vous parler d'un petit utilitaire que j'ai écrit vers 1993, mais qui n'est sorti qu'en 1996 sur Aminet. Je vais d'abord me présenter un peu. Un voyage dans le temps... Je m'appelle Kamel Biskri et comme beaucoup d'entre vous de mon âge, j'ai fait l'expérience des jeux vidéo avant les ordinateurs. À l'époque, cela a commencé avec les jeux électroniques de poche comme Tandy : Cosmic 1000 Fire Away, Puckman, Donkey Kong pour n'en citer que quelques-uns. ![]() ![]() ![]() Fire Away, Donkey Kong et Puckman Ce fut ma première introduction aux jeux vidéo et j'ai adoré. Plus tard, j'ai suivi la voie habituelle. Le père d'un ami a acheté un Sinclair ZX81. Nous avons joué avec, tapé des programmes, les avons modifiés et avant de réaliser nous étions devenus accros. En 1983, j'ai "supplié" mes parents d'acheter un Oric 1 parce qu'il avait gagné le prix Videor cette année (et ce au lieu d'un ZX Spectrum). Je me rappelle même avoir dit que cela nous servirait pour l'école et ils l'ont acheté (merci papa et maman). Le C64 était hors de portée vu son prix. Trois ans plus tard, j'ai reçu un ZX Spectrum+ pour mon anniversaire (merci maman). ![]() ![]() ![]() ![]() Oric 1, ZX Spectrum+ et ZX81 ![]() Defender Of The Crown Interface graphique, icônes et bordures Quand AmigaOS 2.0 est sorti en 1990, j'étais ravi comme beaucoup d'amigaïstes je suppose. J'étais un fan de l'interface graphique de l'ordinateur Next. J'ai entendu dire plus tard, dans un discours donné par Peter Cherna lors du 30e anniversaire de l'Amiga, que l'aspect d'AmigaOS 2.0 était en effet inspiré par l'interface graphique du Next. ![]() Workbench 2.0 ![]() Interface graphique du Next Ensuite, j'ai pensé que les bords étaient des droites (plus un remplissage de surfaces, mis en évidence lors de mes tests). Cela voulait dire que la graphics.library était impliquée. Les icônes font partie du Workbench alors ça devait être lui le coupable. J'ai dû essayer toutes ces options pour pouvoir valider mes hypothèses. N'oubliez pas que n'importe quelle *.library peut appeler les fonctions de n'importe quelle autre. Je détestais les bordures autour des icônes, mais j'ai aussi détesté la perte de performance liée à l'affichage de ces dernières. Je trouvais que l'affichage des icônes était déjà lent. Il était donc logique qu'en évitant l'affichage des bordures, on augmenterait aussi la performance. Le Blitter a des choses plus importantes à faire ! Je cherchais un outil pour m'aider. J'ai trouvé un outil de Carolyn Scheppner appelé Wedge. Selon la documentation du programme : "Wedge vous permet de surveiller les appels de fonction des tâches du système et des applications. C'est utile à la fois pour le débogage et l'optimisation des logiciels. Wedge rapporte le nom et l'adresse de la tâche appelant la fonction". J'ai joué avec le Workbench pour lui faire dessiner les icônes et Wedge m'a donné en sortie de résultats. Si je me souviens bien, ce n'était pas suffisant. Ce que Wedge rapportait ne me disait pas qui était le coupable. J'ai donc commencé à chercher un autre outil... L'auteur de ce dernier n'était autre que Michael Sinz, connu pour Enforcer et son travail sur AmigaOS. Son nom, SegTracker. Ce qui m'a interpellé était cette partie : "Lorsque SegTracker est installé, il analyse la ROM à la recherche de modules de cette dernière et ajoute leurs emplacements à la liste de suivi de telle sorte que les adresses à l'intérieur de ces modules puissent être identifiées. Notez que les déplacements ("offsets") du module sont basés sur l'emplacement du module ROMTAG. L'option NOROM empêchera l'installation de cette fonctionnalité." Ces outils m'ont aidé et j'ai pu désigner le coupable, son nom est célèbre : le Workbench ! C'était le coupable que je cherchais. Cela semble évident, mais il fallait le prouver ! Supprimer les bordures Maintenant, je me demandais comment éviter que cela n'arrive... Comment pourrais-je empêcher le dessin des bordures autour des icônes ? Il fallait que j'enquête davantage. A l'époque, mon installation était un A500 avec un disque dur A590 prêté par un ami (Éric Laffont). Cette fois, je décidais de faire le travail à un niveau plus bas. J'ai débranché l'A590 et j'ai attaché ma fidèle cartouche Action Replay III à mon A500. J'ai démarré jusqu'au Workbench et j'ai mis un point d'arrêt aux fonctions Draw() et RectFill() de la graphics.library. Lorsque les icônes ont été dessinées, cela a déclenché l'Action Replay et à l'aide de son moniteur, j'ai commencé à tracer la ROM. Malheureusement, les appels aux fonctions qui dessinent les bordures n'étaient pas à un endroit où je pouvais les modifier dans la workbench.library en utilisant un appel à la fonction SetFunction() d'Exec. J'avais besoin de trouver une autre façon de le faire... Il était maintenant évident que je devais modifier les fonctions Draw() et RectFill() de la graphics.library mais le problème est que tout le monde utilisait ces appels, je ne pouvais donc pas simplement éviter les appels à ces fonctions de manière globale. Cela ne devrait se faire que lorsqu'il s'agit d'un appel venant de la workench.library et seulement lorsque ce dernier dessine les bordures autour des icônes. Je n'ai pas trouvé de meilleure solution à l'époque, mais en traçant les appels aux fonctions Draw() et RectFill(), j'ai regardé les informations contenues dans la pile (registre A7 du 68000). Après quelques recherches, je suis arrivé à la conclusion que lorsque les bords étaient tracés autour des icônes, la valeur #$00000008 était toujours située au même endroit dans cette dernière. Si la valeur que je cherchais était là, je vérifiais si c'était le Workbench qui appelait et si c'était le cas, je sautais les appels à Draw() et RectFill() ; sinon, je laissais le flux normal se poursuivre. Ma solution n'était pas parfaite car j'ai noté quelques artefacts bizarres lors de l'utilisation de certaines icônes avec mon correctif, nommé Nofill. Je ne me souviens pas s'il s'agissait d'icônes standard ou pas... C'est tout, j'avais une solution qui répondait à mes besoins et j'ai été le seul à l'utiliser pendant des années. Un jour, un autre de mes amis (Jérôme Chesnot) a regardé mon Workbench et a dit quelque chose du genre "pourquoi ton Workbench n'a-t-il pas de bordures autour des icônes ?" Il m'a dit qu'il trouvait que l'apparence était meilleure sans elles. J'ai été un peu surpris car j'avais écrit le correctif uniquement pour mes propres besoins, je ne m'attendais pas à ce que les autres s'y intéressent aussi... Je lui ai dit que j'avais écrit ces correctifs et il m'a dit que je devrais les téléverser sur Aminet. Je lui ai répondu que j'étais trop paresseux pour le faire mais que je pouvais lui donner les correctifs pour qu'il le fasse lui-même. Ainsi, le 25 juillet 1996, deux jours après le 11e anniversaire de l'Amiga, le premier programme supprimant les bordures autour des icônes de l'Amiga était disponible pour que tout le monde puisse l'essayer. ![]() Avec et sans NoFillNoDraw Jérôme Chesnot m'a demandé ce que je voulais en échange et j'ai dit : des cartes postales ? (c'est peut-être lui qui a suggéré cela, rappelez-vous que c'était il y a 24 ans). J'ai reçu des cartes postales avec des mots gentils de nombreuses régions du monde et je me souviens que j'étais fier, savoir que d'autres amigaïstes pouvaient profiter de mes petits outils était un sentiment assez agréable. Vous trouverez ci-dessous les exemples que Jérôme Chesnot a mis en ligne avec les correctifs. ![]() NoFillNoDraw dans un Workbench personnalisé Conclusion Au final, si vous avez une idée de correctif, n'hésitez pas à me contacter. J'ai un compte sur AmigaImpact, EAB, Amiga.org et AmigaWorld.net sous le pseudo "Kamelito". Autre chose, j'ai réalisé un autre correctif pour un autre ami (Lucas Janin), il voulait utiliser le logiciel de rendu Imagine à une résolution plus élevée que celle fournie par le programme sur son Amiga 4000 en DBLPAL si je me rappelle bien. Du coup, j'ai écrit un petit correctif appelé "PatchImagine" pour lui. Cela m'a donné l'idée d'étendre ce correctif à tous les programmes. Le travail avait commencé à cet égard, mais un jour, Andreas Linnemann a téléversé NewMode sur Aminet et cela a signé la fin de cet outil embryonnaire. Liens Correctifs originaux : Correctifs basés sur mon travail et où je suis mentionné : Outil sans mention :
|