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

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

Cher Kids,je suis en ce moment en vacances à Bagdad. Ici il fait très beau. Malheureusement, on ne nous laisse pas sortir de l'hôtel. Sauf papa qui est parti hier en voyage organisé totalement gratuit pour une raffinerie dans le sud (NDLR: Il ne doit pas y avoir beaucoup de raffinerie là-bas, vu qu'ils vendent du pétrole brut... mais c'est pas grave Patrice continue...). Dans l'hôtel, on est un petit peu serré, mais heureusement le personnel est très gentil (et très bien armé). Pour s'occuper, ou nous a donné quelques films en vidéo. J'ai déjà revu trois fois Bagdad Café. Et puis tous les soirs nous avons un récital de Sheila, qui est dans le même hôtel que nous. Sadam Hussein l'a faite kidnapper parce qu'elle a des Koweït. Enfin, tout cela me laisse quand même pas mal de temps, ce qui m'a permis de vous griffonner sur du papier hygiénique ces quelques conseils de bidouillage, que mon fidèle et gracieux pigeon voyageur, Danbiss (NDLR: j'aurai préféré colombe... mais bon... soit...), a courageusement porté jusqu'à vous (non sans avoir fait quelques taches sur le papier); en survotant les lignes ennemies. Voici donc mes carnets de vacances...

LE TEMPS C'EST DE L'ARGENT...(NDLR: ALORS DEPECHE TOI)

Le mois dernier, nous cirons vu Ici méthode du BCD qu'utilisent souvent les programmeurs pour représenter le temps, ou des compteurs d'énergie en pourcentage, ou même d'autres choses. Mais ce n'est évidemment pas la seule façon de procéder. D'autres programmeurs utilisent volontiers ! ASCII pour coder une suite de chiffres. Chaque chiffre correspond alois à un octet entier, alors que. je le rappelle, en BCD. chaque chiffre est stocké seulement sur un quarte! ("Eh oui moi c'est mon dada alors lisez mon pronostic dans..." - On se fait Cuy Lux).

Donc ou a deux chiffres par octet. En ASCII, comme vous le savez sûrement, le caractère "0" donne en héxa &30, 1 donne &31 , 2 donne &32...et ainsi de suite, je vous l'avais déjà rappelé pour les vies infinies, qui peuvent être parfois codées de cette façon. Dans le cas d'un codage en ASCII, il est maladroit de rechercher l'initialisation, mais vous pouvez toute fois rechercher les 3E 30 32, c est-à-dire la mise dans une case mémoire du chiffre "0". Mais cela ne nous donne pas grand chose, car il n'est pas question de remplacer le 30 pur un FF. ce code ASCII particulier ne donnant généralement que des résultats fâcheux. Vous pouvez toujours le remplacer par un 39, ce qui rajoute 9 secondes ( on 9 minutes, ou 9 heures...), et permet de vérifier si c'est bien la bonne case mémoire. Mais vous pensez bien que si le programmeur a 8 chiffres à initialiser. il choisira une autre méthode moins gourmande en place. Ce qu 'il nous intéresse en fait de retrouver, c'est la routine de décrémentation du temps.

Pour fixer les idées, en voici un exemple, tiré tout droit du jeu "HOSTAGES" , et qui constitue un bon modèle :

29E2 LD HL,(&07AF)   2A AF 07
29E5 DEC HL          2B
29E6 LD (&07AF),HL   22 AF 07
29E9 LD A,H          7C
29EA OR L            B5
29EB RET NZ          C0
29EC LD HL,&03E8     21 E8 03
29EF LD (&07AF),HL   22 AF 07
29F2 LD HL,&07AD     21 AD 07
29F5 DEC (HL)        35
29F6 LD A,(HL)       7E
29F7 CP &2F          FE 2F
29F9 RET NZ          C0
29FA LD (HD),&39     36 39
29FC DEC HL          2B
29FD DEC (HL)        35
29FE LD A,(HL)       7E
29FF CP &2F          FE 2F
2A01 RET NZ          C0

La routine n'a pas été reproduite dans son intégralité, mais tout ce qui nous intéresse est ici. Comme vous le voyez, le programme ( à 29EC) met dans le registre double HL la case mémoire du dernier chiffre du temps puisque c'est celui-ci qui est décrémenté en premier. S'il était égal à 0. cela aurait donner en héxa &2F d'où la comparaison (CP &2F). S'il était effectivement égal à 0. on aurait remis un 9 ( LD (HL), &39 ) à la place puis on sérait passé au chiffre suivant ( donc à l'octet précédent ) par un DEC HL. et on l'aurait décrémenté à son tour, puis on l'aurait comparé à &2F , et ainsi de suite...

Cette routine est appelée Ions les cinquantièmes de seconde par une routine d'interruptions. Mais le temps ne descend pas dans ce jeu tous les cinquantièmes de seconde. C'est pourquoi on trouve au tout début de la routine un compteur utilisant le registre HL et la case mémoire &07AF. Le compteur est décrémenté, puis on revient immédiatement s'il n'est pas encore à 0. Sinon, on continue, et on remet dans le compteur la valeur de départ qui est &03E8. c'est-à-dire 1000. La routine étant appelée cinquante fois par seconde, on en déduit donc que le temps est décrémenté toutes les vingt secondes. Comme vous le voyez, il y a pas mal d'éléments distinclifs dans ce genre de routine qui sont très faciles à repérer. Vous pouvez par exemple rechercher les CP &2F ( FE 2F ) ou les LD (HL),&39 ( FE 39 ).

Vous pouvez aussi rechercher l'initialisation du compteur. Si par exemple le temps est décrémenté loutes les 10 secondes, il faudra rechercher lotis les LD HL,&01F4 ( 21 F4 01). Pour anéantir la routine, il vous suffit d'éliminer les DEC (HL) , ou tout simplement d'enlever le DEC HL eu &29E5 quand il y a un compteur en début de routine. Le compteur n'arrivant jamais à 0. la routine ne sera jamais exécutée. Si vous avez trouvé l'initialisation de l'un des octets du temps, vous pouvez alors rechercher les appels à cette case mémoire. Mais comme vous pouvez le voir clans l'exemple, il n est pas fait appel à toutes les cases mémoires occupées par le temps, mais seulement à la dernière. Si celle que vous avez repérée n'est pas appelée, essayez-en une autre. Le temps n'est pas forcement décrémenté, il se peut aussi que le jeu dispose d'un chronomètre au lieu d'une horloge ou d'un compte à rebours. En ce cas, les DEC (HL) de la routine sont remplacés par des INC (HL), et les CP &2F sont bien sur remplacés par des CP &3A. et les LD (HL),&39 sont remplacés par des LD (HL),&30. Il faut alors bien entendu rechercher les FE 3A et les 36 30 , et éliminer les INC (HL). De plus, il n'est pas forcément fait appel au registre HL pour la décrémentation. Cela peut se faire par un DEC A an lien d'un DEC (HL). comme nous l'avons déjà vu avec les vies infinies.

Enfin, certains programmeurs utilisent du faux ASCII , c'est-à-dire qu'au lieu de représenter les chiffres de 0 à 9 avec les octets de &30 à &39. ils les représentent tout simplement avec des octels de &00 à &09. Etant donné qu'ils n'utilisent aucune routine système, ils ont l'entière liberté d'organiser leurs fontes et leur affichage de caractères comme ils l'entendent, et de changer si bon leur semble l'ordre alphabétique ! Dans ce cas. les recherches à effectuer seront donc FE FF ( au lien de FE 2F, mais attention vous risquez de rencontrer une multitude de FE FF !) , et 36 09 au lieu de 36 39) dans le cas d'une décrémentation, et FE 0A (au lieu de FE 3A) , et 36 00 au lieu de 36 09, mais là aussi vous risquez d'eu trouver une pléthore ), dans le cas d'une incrémentation.

C'EST L'HEURE DU COUVRE-FEU...

Et je dois donc en terminer. Nous avons aujourd'hui presque fait le tour du temps infini. Nous n'y reviendrons qu'à quelques occasions pour évoquer des cas exceptionnels. Le mois prochain, si je suis libéré, je vous parlerai de l'adressage indexé, et je m adresserai également plus particulièrement aux possesseurs d'interfaces. En attendant, j'apprécierais beaucoup que vous m'envoyiez des oranges à l'hôtel (ou des bananes si vous n'en avez pas), et que vous me fassiez parvenir vos témoignages de sympathie et d'encouragement sur le 36 15 JOYSTICK en BAL MAUBERT 'que je consulte quotidiennement de l'hôtel...).

Patou Momo alias PATRICE Manbert.  JOYSTICK n°09 OCTOBRE 1990, page 67

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

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

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