Titre : MS. Pacman
Editeur : Atarisoft
Année : 1983
Type : Arcade
Taille : 1 disquette/1 face
Programmes utilisés : Locksmith 6.0 (Fast Backup / Disk Editor), Advanced Demuffin 1.1, Diskfixer 4.0
Phase 1 : Test de copie (Locksmith mode Fast Backup)
Pour chaque secteur de chaque piste, on obtient un joli A inversé sur l'écran. Ce qui indique que le champ adresse n'a pas pu être localisé par Locksmith. On peut donc déjà s'attendre à une modification des headers de ce champ adresse (au moins).
Phase 2 : Editeur de Nibbles (Locksmith 6.0 mode Disk Editor)
On vérifie tout ça en direct avec le Disk Editor de Locksmith :
On remarque en fait que les headers de fin de champ adresse (surlignés en rouge) ont été modifiés. Les marqueurs de début (en jaune), eux, sont standards.
Headers de fin de champ adresse standards : DE AA EB
Headers de fin de champ adresse modifiés : AA DE EB (8F E3 F8)
Idem pour le champ donnée :
En jaune, on trouve les marqueurs de débuts de champ adresse (D5 AA 96) d'un secteur. En remontant, on va donc trouver les nibbles de synchro (mis en video inverse directement par Locksmith). Et encore avant, on arrive donc à nos headers de fin de champ data (du secteur précédent donc...) :
Et on remarque qu'une fois encore, ils sont modifiés...
Headers de fin de champ donnée attendus :
DE AA EB
Headers de fin de champ donnée rencontrés : AA DE AB (F8)
Phase 3 : Refaire une disquette standard (Advanced Demuffin 1.1)
À ce stade, plusieurs solutions s'offrent à nous avec Advanced Demuffin. Vu que la modification ne concerne que les headers de fin (adresse et donnée), on peut :
- soit shunter la vérification de ces headers. On repasse sous Monitor dans Advanced Demuffin et on met un $18 en $B942 (SEC->CLC). Ce qui force à la fois un retour "OK" peu importe la vérification des headers de fin des champs adresse et donnée ! Magique...
- soit changer les headers dans la RWTS pour la partie lecture en remplaçant les standards du DOS 3.3 par ceux (modifiés) de Ms. Pacman ($B991 : $DE->$AA et $B99B : $AA->$DE pour la partie adresse et $B935 : $DE->$AA et $B93F : $AA->$DE pour la partie donnée).
- soit récupérer toute la RWTS du jeu et la charger dans Advanced Demuffin pour qu'il l'utilise en lecture. Mais plutôt utiliser Advanced Demuffin 1.4 dans ce cas.
Le but ici est de lire la disquette originale (donc avec une RWTS modifiée) par une des trois méthodes précédentes et ensuite d'écrire avec une RWTS standard une nouvelle disquette "propre" (et lisible au Locksmith).
Petite contrariété, plusieurs pistes ne se lisent même pas avec la RWTS modifiée sous Advanced Demuffin. La piste 01 et toutes celles au delà de la piste 07, sont en effet illisibles. Qu'importe ici, on n'a besoin en realité que des pistes qui sont lisibles ! Oui MS. Pacman est un tout petit soft en fait.
Pour contourner le problème, soit on copie en deux fois, d'abords la piste 0 et ensuite celles de 2 à 7. Soit on copie directement de T$00/S$00 à T$07/S$0F et on se coltine une piste complète (la 01) avec un lecteur qui va hurler tout ce qu'il peut à chaque secteur.
Attention : on aura pris soin auparavant de formater la disquette de destination. Avec un disque totalement vierge, on se retrouverait avec des erreurs de lecture au Locksmith Fast Backup sur les pistes (>7) qui n'auront pas été "remplies" par Advanced Demuffin... Il ne s'agirait pas de se recréer des problèmes artificiels de copie sur notre disquette de backup justement !
Phase 4 : Modifications de la copie (DisFixer 4.0)
On a donc à ce stade, une disquette standard avec dessus le contenu de la disquette originale. Or ce contenu et notamment sa partie DOS contient une RWTS modifiée, censée lire une disquette aux headers non standards. Comme nous avons fait en sorte que les headers redeviennent standards, il faut donc faire aussi en sorte que la RWTS du jeu le soit aussi et ne cherche plus la séquence $AA/$DE mais $DE/$AA (le reste n'étant de toute façon pas testé).
Plusieurs solutions là encore :
- soit on va directement à l'endroit où on s'attend à trouver les headers sur disque avec une RWTS normale (celle de MS. Pacman n'étant que légèrement modifiée, on a toute les chances d'y trouver notre bonheur...).
- soit on peut aussi faire une recherche disk sur la suite d'octets $BD $8C $C0 (LDA $C08C,X) avec Diskfixer, et ensuite checker ceux qui correspondent à la lecture et vérifications des headers de fin.
Voilà à quoi ressemble la routine que l'on cherche à localiser (ici celle du check des headers de fin de champ adresse, l'autre est quasiment identique).
H1 BD 8C C0 LDA $C08C,X 10 FB BPL H1 C9 AA CMP #$AA ; à remplacer par $DE D0 AE BNE KO EA NOP H2 BD 8C C0 LDA $C08C,X 10 FB BPL H2 C9 DE CMP #$DE ; à remplacer par $AA D0 A4 BNE KO 18 CLC good guy ! 60 RTS
On a donc deux headers à changer et ce, pour chacun des deux champs (adresse/data), on aura donc en tout 4 octets à modifier.
Voici les adresses à modifier sur disque :
T$00/S$03/P$91 : $AA -> $DE
T$00/S$03/P$9B : $DE -> $AA
T$00/S$03/P$35 : $AA -> $DE
T$00/S$03/P$3F : $DE -> $AA