★ APPLICATIONS ★ COURS DE BIDOUILLAGE ★ TRUCAGES DU CODE BASIC (AMSTAR&CPC) ★ |
Trucages du Code Basic (Amstar&CPC) | Applications Cours De Bidouillage |
Voyons comment rendre invisibles certaines parties d'un programme, modifier des numéros de ligne, lister indéfiniment une même ligne...Pour obtenir tous ces «effets spéciaux». Il faut modifier le code généré par l'Interpréteur BASIC au moyen de PEEK et de POKE. Il va donc falloir voir comment est codée une valeur sur 2 octets et comment est codée une ligne BASIC pour pouvoir changer ce code. CODAGE D'UNE VALEUR SUR 2 OCTETS - Pour éviter les conversions, nous allons raisonner directement en hexadécimal. Il faut donc faire : PRiNT PEEK(1)+256*PEEK(I+1). il faut donc être très vigilant car on oublie souvent d'Inverser les deux octets et c'est !a source de nombreuses erreurs. Pour la valeur précédente. Il ne faut pas par exemple lire &2AB1. Vous savez maintenant coder une valeur entière comprise entre 0 et 65535 sur 2 octets. Voyons donc comment est codée une ligne BASIC. CODAGE D'UNE LIGNE BASIC — L'Interpréteur BASIC code en effet les Instructions que nous lui donnons. Ces Instructions n'apparaissent donc pas en clair dans la mémoire. Les modifications que nous allons apporter ne devront affecter que les 2 premiers paramètres de la ligne : sa longueur et son numéro. Il va donc falloir repérer ces paramètres afin de ne pas dégrader le programme. Pour cela, nous allons nous faire un «petit éditeur», permettant de visualiser le contenu de la mémoire : INPUT a:FOR I=a TO HIMEM:PRINT I, PEEK(I), HEX$ (PEEK(I)), CHR$ (32 OR PEEK(I)), PEEK(i)+256 * PEEK(I + 1) :NEXTPour ne pas avoir à retaper cette ligne à chaque fols, vous pouvez la placer temporairement au début ou à la fin du programme à modifier et la lancer par RUN <N° de ligne> ou taper a$= "" et vous n'aurez alors qu'à faire ? a$ et la recopier avec la touche COPY pour pouvoir l'exécuter. Pour utiliser cet éditeur, vous devrez rentrer l'adresse à partir de laquelle vous voulez lister la mémoire, et vous aurez sur chaque ligne : l'adresse, la valeur stockée à cette adresse, cette même valeur en hexadécimal, le code ASCII correspondant supérieur à 32, et la valeur codée sur l'octet courant et l'octet suivant, sous la forme poids faible, poids fort. SI vous commencez à éditer le contenu de la mémoire à partir de l'adresse 0, vous verrez des codes, beaucoup de 0, mais rien qui ressemble à votre programme. En effet, le programme ne commence qu'à l'adresse 368 et occupe les adresses suivantes jusqu'à HIMEM. Les deux premiers paramètres d'une ligne étant sa longueur et son numéro, vous pouvez vérifier que la valeur codée sur les, 2 octets 370 et 371 est bien le numéro de la première ligne de votre programme. Vous pouvez donc le modifier par POKE. Par exemple, pour que la ligne ait le numéro 4235, taper: POKE 370,139:POKE 371,16en effet, 16*256 + 139 = 4235. Vous pouvez aussi faire PRINT HEX$ (4235). Vous obtenez alors : &BB10. Il vous suffit maintenant de taper : POKE 370,&8B:POKE 371,&10 Voyons plus précisément comment est codée une ligne : Longueur de la ligne, codée sur 2 octets : Lo Numéro de ligne, codé aussi sur 2 octets : Lo Instructions BASIC codées Commençons par le numéro de ligne : Nous l'avons vu, vous pouvez le changer à votre guise. Lors d'un GOTO, l'ordinateur cherche la première ligne ayant un numéro correspondant au paramètre. Néanmoins, si vous mettez 0 comme numéro à la première ligne, vous ne pourrez pas faire GOTO 0 ni lister cette ligne. En faisant POKE 370,0: POKE 371,0 vous rendez ainsi la première ligne de votre programme Invisible et vous ne pourrez l'exécuter que par un RUN, La longueur de la ligne : La longueur de la ligne est donc codée sur 2 octets au début de la ligne. SI vous ajoutez cette valeur à la valeur de l'adresse du premier octet sur lequel elle est codée, vous trouverez l'adresse du début de la ligne suivante. Cette valeur (la longueur de la ligne) sert lors de l'appel des Instructions : GOTO, GOSUB, RUN, EDIT, LIST... Pour exécuter ces fonctions, l'ordinateur part de la première ligne du programme et lit le début de chaque ligne jusqu'à ce que le numéro de la ligne soit égal à la valeur demandée, Par exemple, lors de l'éxecution de l'Instruction GOTO 3, l'AMS-TRAD part de la première ligne ; si celle-ci n'a pas le numéro 3, Il additionne la valeur de l'adresse où se trouve la longueur de cette ligne (368) et la longueur de cette ligne. Il trouve alors l'adresse du début de la ligne suivante et regarde si son numéro est égal au numéro demandé, et si ce n'est pas le cas. Il essaye pour la ligne suivante et ainsi de suite. Si vous changez la longueur d'une ligne et que vous lui mettez comme valeur la valeur actuelle, augmentée de la longueur de la ligne suivante, vous «masquez» donc ta ligne suivante. Pour un GOTO, un GOSUB... et même un LIST, la ligne suivant la ligne modifiée sera donc inexistante. Voyons tout ceci sur un exemple. Tapez le petit programme suivant : 10 PRINT "Bonjour" |
|
|