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

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

Salut les kids. Jamais deux sans trois ont espéré certains. Et ils ont eu raison, car nous revoici ensemble pour la troi sième fois (n'en déplaise à tous les rabats-joie à seize bits...), pour le fils du retour de la revanche de la bidouille masquée. Je suppose qu'avec mes conseils de la dernière fois, vous avez mis quantité de vies supplémentaires sur vos jeux préférés. Ce mois-ci, vous allez y meUre des vies infinies, pour le plus grand plaisir des aliens masochistes qui pourront se faire tirer dessus a volonté...

UN GRAND PAS VERS L'INFINI …

Vous avez maintenant réussi (du moins l'espère-je) à changer le nombre de vies de départ de votre jeu en modifiant le programme de la façon suivante: LD A,5 (nous prendrons toujours comme exemple 5 vies au départ)

LD (CASE),A

ou bien encore:

LD A,5

ou : LD HL, CASE

LD HL, CASE
LD (HL),5
LD (HL),A

Vous n'obtenez pas forcément ceci, mais quelque chose d'approchant, avec peut être ,quelques instructions supplémentaires qui ne nous intéressent pas. Mais dans tous les cas, vous devez arriver a visualiser le paramètre que j'ai nommé ici CASE; et qui est comme vous l'aviez compris la case mémoire où est stocké le nombre de vies. je rappelle ici, au passage, qu'il peut s'agir de vies, mais aussi de toute autre chose (nombre de balles, de grenades ... Ce numéro de case figure déjà une fois dans l'initialisation, lorsque le programme déclare le nombre de vies de départ. Il figure également à d'autres endroits dans le programme, lorsque celui-ci décrémente le nombre de vies, ou lorsqu'il l'incrémente, ou lorsqu'il le met a zéro.. Je vous rappelle que notre but est de repérer l'endroit ou le programme décrémente les vies. Nous allons donc rechercher tous les endroits où figure le numéro de la case mémoire. Mais attention! Il Y a là une petite complication. Si la case mémoire est par exemple 489A en hexa, il ne faudra pas rechercher avec DISCO la chaîne hexadécimale 48 9A, mais 9A 48. Il faut inverser! Pour votre culture, sachez que le 48 est appelé octet de poids fort, et que le 9A est appelé octet de poids faible. Et la convention veut que les nombres sur seize bits (c'est-à-dire deux octets) soient stockes avec l'octet de poids faible en premier.

Un autre exemple: si vous avez comme case mémoire des vies 012A, il vous faudra rechercher la chaîne 2A 01. Compris ? Verstanden ? Gut! La recherche risque de poser des problèmes si la case mémoire est du style 4000 ou 0040 ou 0100, parce que vous risquez de trouver très souvent dans le programme les octets en question, sans qu'il s'agisse pour autant d'un appel du programme à la case mémoire. En effet, si l'on considère le dernier exemple, cela fait rechercher un 00 suivi d'un 01, ce qui est tout de même assez courant, surtout dans les zones de graphismes. Il y a quatre situations principales dans lesquelles le programme a besoin de faire appel à la case mémoire des vies: décrémentation, incrémentation, affichage du nombre de vies, mise a zéro (en cas de mort totale ou d'abandon de la partie). Seule la première nous intéresse, et nous allons voir comment la reconnaître, car elle peut avoir plusieurs masques.

ADRESSAGE DIRECT …

C'est la méthode la plus souvent employée par les programmeurs. Cela donne la suite d'instructions :

LD A, (CASE)

en code machine: 3A 5E CA

DEC A 3D
LD (CASE),A 32 5E CA
Le DEC A ; fait diminuer de 1 le contenu du registre A, vous vous en seriez douté! Cela peut être un petit peu plus complique, du style:
LD A,(CASE) ; On met le nombre de vies dans le registrf! A
AND A
JR NZ,0134
DEC A ; registre A = registre A moins un LD (CASE),A On remet A dans la case mémoire.

L'important est de bien repérer notre décrémentation : DEC A. C'est cela qu'il faudra supprimer, en remplaçant le 3D par un 00. Si vous faites un petit tour du côté de la page des patches sur CPC, vous verrez que c'est très souvent cette opération qui est effectuée. Il peut y avoir pas mal d'instructions entre la mise dans A de la case, et la mise dans la case de la nouvelle valeur. Il faut bien repérer l'instruction de décrémentation parmi celles-ci. Si vous êtes sur la partie du programme qui incrémente les vies, l'instruction a de fortes chances d'être INC A au lieu de DEC A. Etonnant non?

Pour vous éviter de tomber sur l'affichage du nombre de vies, sans intérêt pour nous, au lieu de rechercher simplement les deux octets de la case mémoire, vous pouvez les faire précéder de l'octet 32, c'est-à-dire que vous allez rechercher l'instruction assembleur suivante: LD (CASE),A 32 SE CA.
Si vous êtes dans une zone où la case mémoire des vies est appelée, sans toute fois que son contenu en soit changé, vous ne trouverez pas cette instruction et n'examinerez donc pas cette zone pour rien. Le '32' rajouté est également très utile si vous avez un numéro de case mémoire particulier, comme 0 100 ou 4000. Les deux octets de la case mémoire seuls, peuvent se retrouver très souvent dans le programme. En rajoutant le '32', vous diminuez les risques. Mais attention, le '32' est caractéristique uniquement de l'adressage direct, qui est le type d'adressage le plus courant, mais pas le seul.

L'ADRESSAGE INDIRECT ...

Un peu moins fréquent que son confrère, mais tout de même très employé, il se présente de la façon suivante:

LD HL, CASE ; on met le numéro de la case dans le registre HL .

DEC (HL) on décrémente le contenu de la case adressée par HL et en code machine: 21 SE CA 35
On peut faire les mêmes remarques que pour l'adressage direct. Il se peut qu'il y ait un certain nombre de choses entre les deux instructions. L'important étant de repérer le DEC (HL), et de le remplacer par un 00.

Pour résumer, disons que la meilleure méthode est d'abord de rechercher une éventuelle décrémentation en adressage direct uniquement (32 SE CA), puis si vous n'y trouvez pas votre bonheur, de rechercher simplement les deux octets de la case mémoire, en vue de l'adressage indirect.

DEJA FINI ???

Ben oui les kids, c'est tout pour ce mois-ci. Eclatez-vous bien avec votre DISCOLOGY préféré, et faites-moi exploser vos disquettes de bidouilles en tous genres. Si vous ne trouvez toujours rien, relisez l'article une seconde fois (même Danbiss a eu du mal a comprendre la première), et mettez a profit mes conseils, ou bien patientez jusqu'au mois prochain, où nous verrons quelques subtilités supplémentaires pour enfin désarmer les jeux les plus coriaces et les programmes les plus tordus. Et n'oubliez le 36 15 JOYSTICK, BAL Maubert pour vos questions et vos critiques. Bonnes vies infinies à tous et atchao bonsoir...

PATRICE MAUBERT, JOYSTICK n°06 JUIN 1990, page 60

★ ANNÉE: 1990
★ AUTEUR: PATRICE MAUBERT

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

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N09
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N08
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N04
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N10
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N12
» Applications » Patrice Maubert - Cours de Bidouilles - Joystick N11
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 110 millisecondes et consultée 2542 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.