par André C.
Comme nous l’avons vu dans l’article précédent, peu importe
que le logiciel à traiter soit protégé ou non, l’essentiel est qu’il soit
possible de le faire tourner sur un émulateur et de pouvoir réaliser un dump de
la mémoire.
Disons que si le logiciel n’est pas protégé (ou s’il a été
déverrouillé), il est plus facile de savoir s’il est écrit en Basic ou en
langage machine, s’il tourne en mode TEXT ou HIRES, s’il utilise les zones
normales de stockage des caractères et les procédures normales d’affichage.
Il y a trois grandes catégories de logiciels :
1. Ceux dont les caractères sont redéfinis
uniquement lors du lancement.
2. Ceux dont les redéfinitions évoluent au fil de l’exécution.
3. Ceux dont les caractères ne sont pas redéfinis (oups !).
1) Logiciels dont les caractères sont redéfinis uniquement lors du lancement
Dans cette catégorie, j’ai pris comme exemple “Rush
Hour” de Fabrice F. En effet ce logiciel est particulièrement astucieux.
Pour contourner les difficultés d’un cahier des charges très
lourd, Fabrice a recopié les caractères utiles du jeu 0 dit “normal”
dans le jeu 1 dit “semi-graphique” (dont les caractères d’origine
sont évidemment écrasés). Pour l’affichage de texte standard, il faudra
désormais utiliser le mode “semi-graphique” !
Les 96 caractères du jeu 0 étant
“disponibles” ont été redéfinis pour afficher les sprites de divers
véhicules. Notez que ce programme n’est pas protégé et que son listing est bien
documenté.
Procédure dans Euphoric :
- Lancez Euphoric, chargez “Rush Hour” (RUSHHOUR.TAP) et lancez-le.
- Avancez dans le jeu, dans mon exemple, jusqu’au “Level 11” (choix “Harder”).
- Pressez la touche F9 pour générer un dump mémoire. Renommez par exemple en DumpRH.BIN
- Pressez F12 pour générer une recopie d’écran au format .BMP. Renommez par exemple en RushHourLevel11.BMP
- Laissez Euphoric en attente.
Procédure dans votre éditeur hexadécimal :
1. Ouvrez le modèle d’en-tête SAVJ0TXT.TAP
(voir article précédent). CTRL+A puis CTRL+C pour copier les 23 octets du
fichier.
2. Ouvrez un nouveau document. CTRL+V pour y
coller l’en-tête. Modifiez cet en-tête uniquement pour le renommer (par exemple
RHJ0TXT).
3. Ouvrez le fichier DumpRH.BIN de “Rush
Hour”. Allez à l’offset #B500 et sélectionnez les #0300 octets du jeu 0,
puis tapez CTRL+C pour copier cette zone.
4. Allez à la fin de l’en-tête dans le
nouveau document. CTRL+V, pour y coller le jeu 0.
5. Sauvegardez votre jeu sous le nom
RHJ0TXT.TAP (Rush Hour, Jeu 0, mode TEXT).
6. Faites la même chose pour le jeu 1
(SAVJ1TXT.TAP, RHJ1TXT, #B900, #0200 octets, RHJ1TXT.TAP).
7. Toujours dans votre éditeur hexadécimal,
réglez l’affichage pour 40 octets par ligne, afin qu’une ligne dans l’éditeur
corresponde à une ligne de l’écran Oric et allez en #BB80 (début de l’écran
TEXT).
8. Reprenez la fenêtre d’Euphoric qui était restée en attente et placez là immédiatement à gauche de la zone d’affichage des codes Ascii de votre éditeur (voir la figure ci-dessous). Vous avez maintenant la correspondance entre les véhicules de “Rush Hour” à gauche et les codes Ascii utilisés pour l’assemblage des sprites !
2) Logiciels dont la redéfinition des caractères évolue au fil de l’exécution
Cette
catégorie est semblable à la précédente, sauf que les caractères sont redéfinis
pour chaque phase du jeu !
L’exemple
le plus frappant est “The Hellion” avec 101 écrans où se meuvent les
sprites d’objets très différents en quantité invraisemblable. En fait, les 101
tableaux de “The Hellion” représentent un cas extrême de
redéfinitions à répétition.
Ce
logiciel fonctionne en mode TEXT et les 2 jeux de caractères sont partiellement
redéfinis.
Vous trouverez le programme (HELLION.WAV, HELLION.TAP
& HELLION.DSK au choix), ainsi que les fichiers utilisés ou produits dans
cet exemple dans le zip qui accompagne cet article.
Procédure dans Euphoric
Il
faut traiter “The Hellion” comme s’il s’agissait d’une série de 101
programmes indépendants, mais réunis à la queue-leu-leu. La procédure suivante
devra donc être répétée pour chaque tableau :
1. Pressez
la touche F9 (sauvegarde d’un dump de la mémoire) au début de chaque tableau.
2. Puis, le plus vite possible, pressez la touche F12 pour avoir une recopie de l’écran correspondant à ce dump (le plus rapidement possible car les sprites se déplacent très vite).
3. Et enfin pressez F11 pour geler la série de tableaux, le temps de renommer le fichier “DUMP” en “DumpH-xx.bin” ainsi que la recopie d’écran en “Hellion-xx.bmp”, xx étant le n° du tableau.
Procédure dans votre éditeur hexadécimal :
Chacun des fichiers
“DumpHxx.bin” sera traité dans votre éditeur Hexadécimal pour en
extraire les deux jeux de caractères et afficher la zone d’écran TEXT. Prenons
par exemple le fichier DumpH04.bin :
- Ouvrez le
modèle d’en-tête SAVJ0TXT.TAP. CTRL+A puis CTRL+C pour copier les 23 octets du
fichier.
- Ouvrez un
nouveau document. CTRL+V pour y coller l’en-tête. Modifiez cet en-tête pour le
renommer (par exemple “H04J0TXT”).
- Ouvrez le
fichier “DumpH04.bin”. Allez à l’offset #B500 et sélectionnez les
#0300 octets du jeu 0, puis tapez CTRL+C pour copier cette zone.
- Allez à la
fin de l’en-tête dans le nouveau document. CTRL+V, pour y coller le jeu 0.
- Sauvegardez
votre jeu 0 par exemple sous le nom H04J0TXT.TAP (Hellion, tableau “Wave
4”, Jeu 0, mode TEXT).
- Faites la
même chose pour le jeu 1 avec le modèle SAVJ1TXT.TAP et sauvegarder le jeu 1
par exemple sous le nom H04J1TXT.TAP (Hellion, tableau “Wave 4”, Jeu
1, mode TEXT).
- Toujours
dans votre éditeur hexadécimal, réglez l’affichage pour 40 octets par ligne,
afin qu’une ligne dans l’éditeur corresponde à une ligne de l’écran Oric et
allez en #BB80 (début de l’écran TEXT).
- Reprenez la
fenêtre d’Euphoric qui était restée en attente et placez là immédiatement à
gauche de la zone d’affichage des codes Ascii de votre éditeur (voir la figure ci-dessous).
Vous avez maintenant la correspondance entre les “feux tricolores” de
“The Hellion” à gauche et les codes Ascii utilisés pour l’assemblage
de ces sprites à droite !
Si on compare le jeu 0 obtenu
à partir de ce tableau “Wave
4” avec le jeu 0 natif de l’Oric, on constate que deux caractères
seulement sont redéfinis : { (Ascii 123)
et } (Ascii 125) (et cette
redéfinition varie d’ailleurs d’un tableau à l’autre).
Pour le reste, les sprites
affichés sont formés avec des caractères du jeu 1 (un attribut #09 est placé au
début de chaque ligne d’écran).
Dans le tableau “Wave
4” (voir la figure ci-dessus), les objets volants (des feux tricolores)
sont redéfinis avec les caractères 1 2 3 4 ou 5 6 7 8 ou 9 : ; < disposés verticalement.
C’est plus compliqué pour
l’oiseau du bas de l’écran, car celui-ci vole et plusieurs sprites se succèdent
pour réaliser cette animation. J’ai détecté des images redéfinies avec = > ? sur une 1e ligne et @ A B en dessous, ou C D E et F G H ou I J K et L M N ou O P Q et R S T ou U V W et X Y Z. L’animation est donc
réalisée avec 5 images. Avec 6 caractères redéfinis par image, cela fait 30
caractères redéfinis rien que pour l’oiseau !
Dans tous les cas (feux
tricolores ou oiseau) un attribut de couleur est placé juste à gauche de
chacune des lignes des sprites, ce qui permet d’obtenir des sprites
multicolores.
Pour ne pas alourdir cet
article, je ne montre que ce tableau “Wave 4”. Mais dans le tableau
suivant “Wave 5”, chaque sprite est défini par les mêmes 4 caractères
1 2 3 4 ou 5 6 7 8 ou 9 : ; < disposés sur deux lignes. Or
ces caractères ont été redéfinis entre temps puisque les dessins affichés sont
différents. L’oiseau qui ressemble comme deux gouttes au précédent est affiché
à partir des même 5 jeux de redéfinitions que précédemment !
Je ne suis pas allé plus loin dans mon analyse des 101
tableaux de “The Hellion”. Mais si certains sprites vous intéressent,
vous devriez pouvoir les récupérer sans difficulté en suivant mes indications.
3) Logiciels dont les caractères ne sont pas redéfinis
Avant
de vouloir récupérer des caractères redéfinis, il serait sage de s’assurer
qu’il y en a. La présence de sprites sur l’écran ne signifie pas que des
caractères ont été redéfinis. C’est, la plupart du temps, le cas pour les
programmes qui tournent en mode Hires et qui sont, quasiment à coup sûr, écrits
en langage machine. En effet, le Basic n’est pas assez rapide pour faire
évoluer des sprites sur l’écran (ni même des caractères via la commande CHAR).
Pour
cette catégorie de logiciels, il s’agira plutôt de récupérer des sprites. Mon
prochain article :
“Récupérez les sprites de tous les logiciels en HIRES” montrera comment s’y prendre sans avoir à désosser le langage machine.
A bientôt…