APPLICATIONSCOURS DE BIDOUILLAGE ★ JOYSTICK n°8 - Cours de Bidouilles ★

Patrice Maubert - Cours de Bidouilles - Joystick N08Applications Cours De Bidouillage

Salut les kids. L'heure est grave. En effet, il est temps de replier les parasols, de ranger les cannes a pêche, et de quitter les maillots de bain (oh oui !) pour remettre quelque chose de plus chaud (oh non...). Les vacances sont terminées. Adieu la plage et bonjour le bureau. Alors on reprend les bonnes habitudes et on se remet au boulot. Bach to the bidouilles !

THE SUB' WAY

Oui , je sais. Moi j'aime assez comme titre. En français, cet aurait donné :"la méthode des SUE". Mais bon, c'est visiblement beaucoup mains drôle. Vous aviez certainement remarqué que jusqu'ici, nuire bai a été de faire la chasse et de hier sans pitié ( n'en déplaise a Brigitte Bardot ), toutes les instructions de décrémentation en tous genres. Vous étiez surtout familiers pour l'instant avec DEC A et DEC (HL). Comme vous l'aviez compris ces instructions enlèvent un du contenu de l'opérande ( ici , le registre A , ou la case mémoire pointée par le registre HL  ). L'instruction SUB , comme son nom l'indique, effectue une SUBstraction ( une soustraction pour les anglophobes ) entre le registre A et le contenu de l'opérande ( qui peut être un nombre, ou un registre). Par exemple, SUB &10 enlevé 16 au registre A . On peut remplacer l'instruction DEC A par un SUB &01. OK ?

Autre exemple : SUB D enlevé au registre A le contenu du registre D. Et SUB A me demanderez-vous ? SUB A enlevé au registre A le contenu du registre A, c'est-à-dire que celle instruction annule A et revient a faire LD A,0 . L'intérêt est que c'est plus joli, et que ca gagne un octet. Dernier exemple : l'instruction SUB (HL) enlevé au registre A le contenu de la case pointée par HL.

Certains programmeurs affectionnent particulièrement les SUB , et préfèrent mettre un SUB &01 au lieu d'un DEC A, malgré la perte de place d'1 octet à  chaque fois ) . Si un jeu récalcitrant persiste à vous résister malgré tous vos efforts, et que vous êtes à court d'idées , vous pouvez rechercher d'éventuels SUB &01. En code machine, cette instruction donne : D6 01. Lorsque vous l'avez trouvée, remplacez le 01 par un 00 . Mais attention ! ceci est une recherche de dernier recours, car vous risquez de trouver un grand nombre de SUB &01 qui n'auront pas grand chose à voir avec les vies infinies.

Si par contre le jeu que vous bidouillez décrémente de plusieurs octets une valeur, par exemple un quelconque niveau d'énergie qui serait diminue de cinq unités en cas de choc important, i! es! fort judicieux de vous mettre en quéle des SUB &05, c'est-à-dire .- D6 05, et de remplacer 05 par 00.

Enfin, lorsque vous avez trouvé la case mémoire des vies, et repéré ou elle est appelée en-dehors de l'initialisation, vous pouvez remplacer par des 00 tous les SUB qui se trouvent après le LD A,(XXXX) et avant le LD (XXXX),A.

L'ABC DU BCD

Le BCD ? mais qu'est-ce-que t'est-ce ? Et bien c'est encore nu mode de représentation numérique. Vous connaissiez défi le décimal ( celui que vous utilisez quand vous comptez sur vos dix doigts ), le binaire ( pour les manchots amputés du pouce , de l'index , et du majeur ) et l'héxadécimal ( pour les enfants de Tchernobyl ) . Voici maintenaut le BCD , qui signifie en anglais dans le texte Binary Coded Decimal , alias Decimal Code en Binaire ( on ose même dire parfois DCB ). Dans cette représentation, un quartet ( quatre bits ) représente un chiffre de 0 a 9. Généralement, on utilise du BCD compacté, c'est-à-dire qu'on groupe par deux les quartets, ce qui nous donne donc deux chiffres en BCD dans un octet . Mais là plein de place parce que stocker un chiffre de 0 a 9 dans 4 bits alors que ces 4 bits permettent la possibilités, c'est un affreux gaspillage. Effectivement, ce n'est pas du tout un gain de place, mais c'est par contre très pratique. C'est d'ailleurs très utilise en comptabilité et dans les montres et les calculatrices pour l'affichage par segments. L'inconvénient du BCD est qu'on ne peut pas faire d'opération sans opérer à un petit réajustement. En effet. dans le quartet BCD, seules les 10 premières valeurs sont utilisées. Si donc vous additionnez 9 et 3 en BCD, vous allez obtenir 12 qui n'est pas un chiffre BCD. Pour obtenir le bon résultat, il faut ajouter 6  a tout résultat dépassant 9. Ainsi , 12 + 6 = 18 ; or , 18 en hexadécimal s'écrit &12. Simple, non ? Vous venez de découvrir l'avantage primordial du BCD , c'est qu'il permet de visualiser les nombres en hexadécimal. Par exemple , 32 en BCD donne 50 , et 50 en hexadécimal dnne &32. En ce qui concerne la petite opération a effectuer sur les résultats dépassant 9, il y a une instruction du Z80 qui se charge de cette tache: il s'agit de DAA ( Décimal Adjust the Accumulutor ), dont le code machine est &27. Le BCD permet donc de stocker dans un octet un nombre entre 0 et 99.

Et alors crie la foule qui s'impatiente, quel rapport avec les vies infinies ? Aucun ! Mais par contre, cela concerne de très près le temps infini, et parfois l'énergie et d'autres choses Si par exemple, votre jeu démarrt? avec 59 secondes, il y a de grande chances que le programmeur ait utilisé la représentation BCD. Pour rechercher l'initialisation du temps , il vous est donc conseille de rechercher :

LD A,&59      3E59
LD (XXXX),A   32

Même chose pour les jeux possédant un compteur d'énergie en % qui démarre à 99. ( comme par exemple Crafton & Xunk ) , ou vous pouvez recherche les octets 3E 99 32 . Si vous avez 59 secondes , vous pouvez en mettre 99 à la place ( attention , ne pas mettre FF , sinon l'affichage risque de produire des résultats bizarres !) , mais-si vous avez 99% d'énergie , vous êtes bien sur obligés de rechercher plus loin les autres appels â la case mémoire, pour eliminer les détcrémentations qui se manifestent sous la forme habituelle (DEC A , SUB &01 , SUB &09 ... ) , mais sont toujours suivies de l'instruction DAA. ce qui permet de les repérer plus facilement.

Enfin, à part le temps et l'énergie, les nombres de balles, de grenades, etc.. peuvent être également stockés en BCD, surtout si ces nombres sont susceptibles de dépasser 9.

MERCI DE VOTRE ATTENTION

Oui , merci beaucoup et bravo d'avoir digéré si facilement ce cours quelque peu monolithique. Dans le prochain épisode , entre autres choses, nous approfondirons la notion de temps infini ( parce que nous sommes loin d'avoir fait le tour du sujet ! ). Profitez bien de mes conseils, éclatez-vous sur vos jeux bidouillés, défoncez les méchants aliens pour moi ; embrassez de ma part la gentille princesse du dernier tableau, et n'oubliez pas de lui dire de faire un tour sur le 36 15 JOYSTLCK en BAL MAUBERT pour me donner de ses nouvelles (NDLR: Il faudrait pour cela que tu la lises un peu plus souvent...).
Atchao bonsoir !

PATRICE Manbert.  JOYSTICK n°09 SEPTEMBRE 1990, page 68

★ LICENCE: COMMERCIALE
★ ANNÉE: 1990
★ AUTEUR: PATRICE MAUBERT

Page précédente : Patrice Maubert - Cours de Bidouilles - Joystick N07

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 042 millisecondes et consultée 1037 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.