On m'a fait une demande spécifique pour supprimer les 'cracktro'.
J'ai pensé qu'il serait intérrésant de partager les MODs.
Pas de gros tuto en perspective, on essaye d'aller à l'essenciel.

à faire avec un simple Amiga 500 avec ou sans extention mémoire 
plus une Action Replay MKIII (de préference).
Le tout est bien sûr possible sous WinUae ou autre émulateur
avec les bon fichiers (adf, kickstart, image rom de la MKIII)

Bon bidouillage

Une demande spécifique ? Envoyé un mail.
Gi@nts

Magic Pockets Switchblade II Jumping Jack'Son North & South Torvak the Warrior Shadow of the Beast Apprentice Rick Dangerous II Turrican Lemmings




Magic Pockets v1.00 (1991-09-18)(Renegade)[cr SR].adf
CRC32:BEF526E1

Test du jeu : Mini trackload et affichage d'un message de crack. RT 0 1 20000 ; Lecture de la 1er Track du disk vers la zone mémoire $20000 D 20000+C ; D comme disassemble, commande récurente dans ces mini-tuto. ; Elle ne sera pas forcément indiqué dans ces tutos. 2000C MOVEA.L 4.S,A6 20010 MOVE.W #2,1C(A1) ; Trackdisk.device en lecture 20016 MOVE.L #40000,28(A1) ; Adr. mémoire de dest = $40000 2001E MOVE.L #1600,24(A1) ; $1600 de Data chargée donc, 1 Track sous l'AR 20026 MOVE.L #1600,2C(A1) ; à partir de 1a 1er track 2002E JSR -1C8(A6) ; Execution du trackload 20032 MOVEM.L D0-D7/A0-A6,(A7) ; Sauvegarde des registres 20036 JSR 40000 ; Execution du code trackloadé 2003C MOVE.W #100,DFF096 ; Conf DMACON 20044 MOVEM.L A7+,D0-D7/A0-A6 ; On restore les valeurs des registres ... Bon, plus simple, il n'y a pas. On bypass tout simplement l'execution du code trackloadé. A 20036 ^20036 NOP ^20038 NOP ^2003A NOP BOOTCHK 20000 WT 0 1 20000


Switchblade II (1991)(Gremlin)[cr CPY].adf
CRC32:79746312

RT 0 1 20000 D 20000+C ; Assez rapidement on isole l'execution du mini-boot (pas besoin de grande explication) A 2017C ^2017C BRA 20180 ; On saute le mini-boot (affichage du texte 'THE COMPANY' sur fond bleu) On continu en cherchant le fond d'écran bleu, on cherche logiquement DFF180, trés vite on arrive en : 204A2 MOVE.L A0,DFF180 A 204A2 ^204A2 NOP ; On desactive le 'fader' d'écran bleu ^204A4 NOP ^204A6 NOP On peut voir un joli trackload 20186 MOVE.W #2,1C(A1) ; Trackdisk.device en lecture 2018C MOVE.L #1800,24(A1) ; $1800 de Data chargée donc, 2 Tracks sous l'AR 20194 MOVE.L #40000,28(A1) ; Adr. mémoire de dest = $40000 2019C MOVE.L #400,2C(A1) ; à partir de 1a 1er track, du 1er bloc. 201A4 JSR -1C8(A6) ; Execution du trackload ... 201EA JSR 40000 ; Execution du code trackloadé ... 201F6 JMP 70000 ; Chargement du jeu Une fois le TrackLoad effectué, on analyse le code en 70000 ... 70142 JSR 60000 70148 MOVE.L #70272,70296 ; Début de la musique ... On en profite pour virer la musique du début car, sur le jeu original, cette musique apparait au chargement de l'intro/animation du début du jeu. Intro/animation plus présente sur ce crack (manque de place?), donc, inutile de garder la musique ? Modification du bootsecteur en consequence : A 201F6 ^201F6 MOVE.L #4E714E71,$70148 ; Patch pour ne pas avoir la ziq de l'intro originale. ^20200 MOVE.L #4E714E71,$7014C ; ^2020A MOVE.L #4E714E71,$70150 ; ^20214 JMP 70000 *Bien sûr, si on veux garder la musique, on ne met que je JMP 70000 BOOTCHK 20000 ; Calcul du checksum pour le bootsecteur WT 0 1 20000 ; Ecrire de la track


Jumping Jack'Son (1990)(Infogrames)[cr MAD].adf
CRC32:4ECB20DC

CD S ; Nous sommes ici en presence d'un format AmigaDos standard LM startup-sequence, 20000 ; On charge et on regarde la startup-sequence DEL startup-sequence ; Bon... facile, on enleve l'execution du fichier M.A.D qui est l'exec de la cracktro* ; On supprime le fichier sur la disquette SM startup-sequence, 20006 2005F ; et on sauve le tout sans l'execution de ce fichier.* ; *(présent donc au début du fichier startup-sequence)


North & South (1989)(Infogrames)(M5)[cr CP].adf
CRC32:C4DE7E53

RT 0 1 20000 Apres un appel au Trackdisk.device, est executé un joli JSR vers l'adresse de chargement du Trackload. ... 20020 MOVE.L #50000,28(A1) ; Adr de destination mémoire 20028 MOVEA.L 4.S,(A6) ; Trackdisk.device en mode lecture 2002C JSR -1C8(A6) ; TrackLoad de la cracktro ... 20038 JSR 50000 ; Execution du code Trackloadé (la cracktro donc) Il suffit donc de desactiver cet appel: A 20038 ^20038 NOP ^2003A NOP ^2003C NOP BOOTCHK 20000 WT 0 1 20000


Torvak the Warrior (1990)(Core)(Disk 1 of 2)[cr HZ].adf
CRC32:4FD6FCE6

Test du jeu : Plusieurs trackload en cascade et lancement de la cracktro. RT 0 1 20000 ... 2000C BRA 20012 20012 .... 2001E BRA 20028 -> 20028 MOVE.W #0,DFF18 ; Background en noir 20030 MOVEA.L #4,A6 ; On recharge l'exec base au cas ou. (sert à rien au boot, mais bon...) 20036 MOVE.L #78000,28(A1) ; Adr. mémoire de dest = $78000 2003E MOVE.L #1000,24(A1) ; $1000 donné chargée donc, 1 Track sous l'AR 20046 MOVE.L #400,2C(A1) ; à partir de 1a 1er track, du 1er bloc 2004E MOVE.W #2,1C(A1) ; Trackdisk.device en lecture 20054 JSR -1C8(A6) ; Execution du trackload ... 2006E JMP 780000 ; Execution du code Trackloadé On pause une dead-loop en 2006E, on re-calcul le checksum, et on re-écrie le boot. A 2006E ^2006E BRA 2006E BOOTHK 20000 WT 0 1 20000 On reboot, on entre dans l'AR et on regarde en $78000 78000 MOVE.W #8210,DFF096 ; Conf DMACON ... 78020 BSR 7802A 78024 JMP 7000 On pause un BreakPoint en 78024 et on saute au code en 78000 BS 78024 G 78000 Le trackLoad continu et se termine, puis l'on atteint notre BeakPoint On retourne au code X Aucun trackload visible mais execution de la cracktro On peut donc en déduire que : 78020 BSR 7802A ; Chargement de la cracktro 78024 JMP 7000 ; Sous routine d'execution de la cracktro D'ailleurs, on regarde de plus prêt : D 7000 7000 JSR 12300 ; Execution de la cracktro (faite le test avec un BS, vous verrez) 7006 BRA 7024 ; Execution du chargement du jeu. Il faut donc supprimer ce JSR 1230 par des NOP Mais la réel question c'est... ou t'é kilai ? :=))) Bon, méthode brutale, on va charger les données de la disquette et chercher, tout simplement. Déjà on note l'Opcode D 7000 4E B9 00 01 23 00 60 1C 00 00 00 02 4E B9 00 01 23 00 = JSR 12300 60 1C = BRA 7024 Le reste on s'en fiche mais ca nous permet d'être sur de bien tomber sur la sequence hexa. On charge, on cherche. Je part du principe que l'on a un A500 sans extension donc 512 Ko de libre Mais... il y a le systeme et les zones à eviter donc on va y aller molo avec 384 Ko de donnée a charger. Une track AmigaDos a une taille de $1600 = !5632 Elle contient 11 secteurs (tjrs sur une disquette AmigaDOS) Sans oublier qu'il y a deux faces et 80 pistes. Donc, juste pour info, cela nous donnes : !5632*2*80=901 120 Octet soit diviser par 1024 : 880Ko par disquette de donnée. Rappel de base : 1Ko = 1024 Octets o_O' Donc, revenons à nos moutons. 384*1024=393216 Octets 393216/5632=69 track, aller, on arrondi à 70 Let's Go RT 0 !70 10000 F 4E B9 00 01 23 00 60 1C 00 00 00 02, 10000 ; On cherche notre sequence hexa Rien ! suivant RT !70 !70 10000 Bingo ! trouvé en 2D400 Mais on à chargé à l'adr $10000 Donc $2D400-$10000=$1D400 : $1D400=119808 119808/5632=21,27 Et on a deja fait 70 Tracks donc 70+21=91 Donc RT !91 1 10000 F 4E B9 00 01 23 00 60 1C 00 00 00 02, 10000 Trouvé. (logique) en 10600 A 10600 ^10600 NOP ^10602 NOP ^10604 NOP Reste plus qu'a re-écrire le tout tjs au même endroit WT !91 1 10000 Et voila :) PS : Penser à desactiver la Dead-Loop dans le Bootsecteur préalablement mis. Sinon ça marchera forcément moins bien :)


Shadow of the Beast (1989)(Psygnosis)(Disk 1 of 2)[cr Band][t +2 Band].adf
CRC32:F0AE521C

Test du jeu : 1er Trackload suivi d'une phase de décompression et lancement de la cracktro RT 0 1 20000 2000C MOVE.W #2,1C(A1) ; Trackdisk.device mode lecture 20012 MOVE.L #60000,28(A1) ; Adr. mémoire de dest = $60000 2001A MOVE.L #F800,24(A1) ; $F800 donné chargée donc, 12 Tracks sous l'AR 20022 MOVE.L #BF200,2C(A1) ; à partir de la position disk BF200 $BF200=782848 782848/5632=139 139/2=69.5 ((Piste lue = 69)) 2002A MOVEA.L 4.S,A6 ; 2002E JSR -1C8(A6) ; Début du Trackload 20032 MOVEM.L D0-D6/A0-A6,-(A7) ; typique début de code, on sauvegarde les registres 20036 BSR 20100 ; On saute un petit peu plus loin dans le code. 2003A NOP 2003C MOVEM.L (A7)+,D0-D6/A0-A6 ; On restore les valeurs des registres 20040 MOVE.W #2,1C(A1) ; Second Trackload avec des valeurs différentes 20046 MOVE.L #68000,28(A1) ; voir quelques lignes au dessus pour comprendre le fonctionement de celui-ci 2004E MOVE.L #2C00,2C(A1) ; 20056 MOVE.L #1400,24(A1) ; 2005E MOVEA.L 4.S,A6 20062 JSR -1C8(A6) ; Début du second TrackLoad ... 20090 JMP 7FA50 ==================================== 20096 ; (Vide) ... 20100 JSR 60020 ; Saut dans le code préalablement trackloadé (voir plus haut), aka : #routine_decomp 20106 CLR.W DFF180 2010C CLR.W DFF182 20112 CLR.W DFF184 20118 LEA 7FA00,A0 ; Adr Source 2011E LEA 67F00,A1 ; Adr Destination 20124 MOVE.W #10,D0 ; Compteur $11*LongWor=$44 20128 MOVE.L (A0),(A1)+ ; ==> Boucle de copie 2012A DBF D0,20128 ; <== On boucle 2012E RTS ==================================== On pose une Dead-Loop à la place du BSR après le trackload Le 1er BSR etant visiblement une boucle de copie. A 20036 ^20036 BRA 20036 BOOTCHK 20000 WT 0 1 20000 D 60020 60020 MOVEQ #0,D7 60022 LEA 60108(PC),A0 60026 LEA DFF180,A5 ; Intéressant car c'est l'adr du fond d'écran (Color00), utilisé par les barres de décompression ... 6007C MOVE.W D7,(A5) ; Decomp barre de couleur 1er phase ; 3A 87 44 FC 00 10 E2 90 4E 75 ; à remplacer par un NOP ; 4E 71 44 FC 00 10 E2 90 4E 75 ... 600FA MOVE.W D0,(A5) ; 3A 80 10 C0 B3 CA 6D E2 4E F9 ; à remplacer par un NOP ; 4E 71 10 C0 B3 CA 6D E2 4E F9 60100 BLT 600E4 ; <-- Phase de décompression 60102 JMP 30000 ; Execution du code décompressé. ; 4E F9 00 03 00 00 78 2A E1 FC 1E 03 06 Ae 07 80 ; Il faudra donc remplacer ce JMP vers notre patch. On pause un BreakPoint en 60102 et on saute en 60020 BS 60102 G 60020 Une fois la décompression fini, notre BreakPoint est atteint, on entre automatiquement dans l'AR On regarde en 30000 30000 ... 30336 CMPI.L #6,43600 ; Test souris <-- a supprimer 30340 BEQ 3040A ; GoTo test_souris_qui_bouge? ========================================================= 3040A CMPI.L #1,43604 ; Test souris qui bouge ? 30414 BNE 30304 ; pas d'appuie, on boucle --> sinon, on continue à derouler le code de fin de CrackTro pour finir en 30500 RTS --> retour en 165E (apres le JSR #routine_decomp) 307D5 307D2 LEA 30DC0,A0 ; ça y ressemble. 307F5 307F2 LEA 30DC0,A0 ; aussi 309F9 309F9 LEA 30DC0,A0 ; et encore aussi :) Au premier abord il parrait simple de 'sauter' les tests souris et laisser le code de la cracktro s'executer. MAIS, on entends furtivement la musique de la cracktro se lancé... Après plusieurs tests et études du code décompacté, le tout semble assez imbriqué. Petit rappel, on cherche à bypasser RAPIDEMENT la cracktro. On on ne vas pas se lancer dans une desactivation une par une des sous-routine de celle-ci. On va faire simple... La musique lancée est, à coup sur, un MODule, on va se servir de l'AR pour chercher où se trouve celui-ci en mémoire. TRACKER Module trouvé : Address 31100 : Slong located in memory : 30DC0 On cherche l'endroit où le code utilise cette adresse : FA 30DC0 On regarde en 307D2 (logiquement car c'est le 1er appel) D 307D2 307D2 LEA 30DC0,A0 ; Adr. du MODule en mémoire 307D8 ADDA.L #3B8,A0 ; On saute le header ? du MODule 307DE MOVEQ #7F,D0 ; Variable/Compteur de la boucle de copie a venir 307E0 MOVEQ #0,D0 307E2 MOVE.L D1,D2 ; ==> 307E4 SUBQ.W #1,D0 ; On décrémente notre Compteur en D0 307E6 MOVE.B (A0)+,D1 ; 307E8 CMP.B D2,D1 ; Check si boucle fini 307EA BGT 307E2 ; <== Boucle si pas fini On peut faire simple (crade mais simple). Il suffit de changee le pointeur vers une zone potentielement vide, on change la taille à copier à Zero (double ceinture) Ce qui nous donnes logiquement. 307D2 LEA 30DC0,A0 ; l'adresse du module en mémoire. ; 41 F9 00 03 0D C0 D1 FC 00 00 03 B8 70 7F ; a changer par LEA 0,A0 ; 41 F9 00 00 00 00 D1 FC 00 00 03 B8 70 7F 307DE MOVEQ #7F,D0 ; la longuer du module à copier ; 70 7F 72 00 24 01 53 40 12 18 B2 02 6E ; à changer par MOVEQ #0,D0 ; 70 00 72 00 24 01 53 40 12 18 B2 02 6E Voila, plus de module à jouer, plus de son du coup :) Ce qui nous donnes pour notre Patch : MOVE.B #60,30340 ; Remplace le BEQ par un BRA du 1er Test souris pour sauter directement au second test souris MOVE.L #4E714E71,30414 ; Supprime le test de detection 'move_ mousse', pour 'sauter' directement à la fin du code. MOVE.L #00000000,307D4 ; On supprime l'adresse du MODule mis en A0 MOVE.B #0,307DF ; On supprime la longueur du MODule mis en D0 JMP 30000 ; On saute à l'execution du code décompacté Il faut creer ce code en $1688 (bonne adresse qui est libre pour A500 et A500 avec extension) Ce qui nous donnerait en Opcode 13FC00600003034023FC4E714E710003041423FC00000000000307D413FC0000000307DF4EF900030000 On va déja s'attaque en DUR à nos 3 modifications. - Barres de couleur de décompression - Barres de couleur de décompression - Saut à modifier après décomp pour sauter en $1688 Tout ça se trouve dans le code Trackloadé donc, petit rappel (voir plus haut) 20022 MOVE.L #BF200,2C(A1) ; à partir de la position disk BF200 $BF200=782848 782848/5632=139 139/2=69.5 ((Piste lue = 69) Sous l'AR on fonctionne en TRACK (de 0 à 160 pour info), et non en terme Piste (0 à 80) Donc on va charger la Track 139 et vue que c'est au début du code (voir plus haut), on ve va finalement chargé qu'une Piste. RT !139 1 20000 ; Desactivation barre couleur decomp #1 F 44 FC 00 10 E2 90 4E 75 >2007E A 2007E-2 ^2007C NOP ;Desactivation barre couleur decomp #2 F 10 C0 B3 CA 6D E2 4E F9 >200FA A 200FC-2 ^200FA NOP ; Modification du jump vers notre code mémoire en $1688 F 4E F9 00 03 00 00 78 2A E1 FC 1E 03 ... >20102 M 20102 ^20102 4E F9 00 00 16 88 ... On re-écrie le tout. WT !139 1 20000 Pour finir, on revient à notre Patch. Patch à placer dans le Bootsecteur AVANT le BSR 20100 On recharge le Bootsecteur et on déplace le code d'origine RT 0 1 20000 TRANS 2003A 20130 30000 A 20036 ^20036 MOVE.L #13FC0060,1688 ^20040 MOVE.L #00030340,168C ^2004A MOVE.L #23FC4E71,1690 ^20054 MOVE.L #4E710003,1694 ^2005E MOVE.L #041423FC,1698 ^20068 MOVE.L #00000000,169C ^20072 MOVE.L #000307D4,16A0 ^2007C MOVE.L #13FC0000,16A4 ^20086 MOVE.L #000307DF,16A8 ^20090 MOVE.L #4EF90003,16AC ^2009A MOVE.W #0000,16B0 ^200A2 BSR 20100 Et on recopie le tout à la suite TRANS 30000 3005C 200A4 TRANS 300C6 300F6 20100 ; et comme on a de la place entre, autant laisse le code en 20100 en 20100 :) BOOTCHK 20000 WT 0 1 20000


Apprentice (1990)(Rainbow Arts)[cr SR - Valhalla][h Decay][t +1 SR - Valhalla].adf
CRC32:A586093E

Test du jeu : Après un rapide chargement, la cracktro est decompacté et lancé. RT 0 1 20000 20000C MOVE.W #2,1C(A1) ; Trackdisk.device en lecture 20012 MOVE.L #30000,28(A1) ; Adr. mémoire de dest = 30000 2001A MOVE.L #400,2C(A1) ; à partir de 1a 1er track, du 1er bloc 20022 MOVE.L #1800,24(A1) ; $1800 donné chargée donc, 2 Tracks sous l'AR 2002A JSR -1C8(A6) 2002E JMP 30000 On pose une Dead-Loop pour travailler en direct : A 2002E 2002E BRA 2002E BOOTCHK 20000 WT 0 1 20000 On reboot, on entre dans l'AR, on regarde en 30000 Execution d'un trap #0 pour boucle de copie. ################################# 3002C MOVEQ #76,D0 ; Taille de la boucle (76+1) = 77 .. 3002E MOVE.L (A3)+,(A4)+ ; Boucle de copie en long word, donc $77 * 4 = $1DC bytes à copier ... 30030 DBF D0,3002E ; On boucle. ################################# On regarde globalement le reste du code qui est visiblement un code de decompression. En 30212 cela ne ressemble plus à du code. //Zone de donnée 'compressé' de 30212 à 3174C Sur le code de décompression beaucoup de JMP (A4), (A5), (A6) et un seul en (A0) 301F2 JUMP (A0) Test avec BreakPoint en 301F2 (ou deadLoop). C'est bien le jump effectuée en fin de decompression qui sautera en A0 à savoir 2E000 Il faudra à coup sur changer celui-ci vers notre patch. Soucis, le JMP(A0) est codé sur 2 octets, nous il nous en faudra à coup sur 6, donc 4 de plus il faut donc déjà dans un premier temps, décaller tout le code de 4 bytes. On part de la fin bien sûr, donc dabord les 'DATA' TRANS 30212 3174C 40000 ; On déplace vers une zone tampon en 40000 TRANS 40000 4153A 30216 ; Et on replace au même endroit mais +4 (donc 30212+4=30216) Maintenant les deux derniers routines. TRANS 301F4 30212 40000 TRANS 40000 4001E 301F8 'Time to modify the' JMP(A0) $1688 est une bonne adresse, il y a souvant rien. A 301F2 ^301F2 JMP 1688 ; Sautera à la fin de la décompression en $1688, notre futur patch. Dans le code executé au début du $3000, en TRAP 0, on peu voir à la fin de ce cette partie un : 3007E JMP (A4) et juste au dessus 3006E LEA 301F4(PC),A4 Ce jump ne fonctionnera pas vue que l'on a tout déplacer de 4 bytes, il faut donc le changer. A 3006E ^3006E LEA 301F8(PC),A4 ; on a fait plus 4 donc on fait aussi +4 ici Ainsi celui qui pointe sur les deux routines à la fin du code principal, juste avant le début des DATA *Toutes ces appels se trouve avec la commande FA A 3018A ^3018A LEA 30216(PC),A5 ; Même logique que précédement, donc +4 Sans oublier d'ajouter +4 aux donne copié au début du code en 30000 A 3002C 3002C MOVEQ #77,D0 ; Comme la boucle de copie fonctionne en LongWord (voir plus haut) ; il faut ajouter +1 et pas +4, donc 76+1=77 On supprimer les barres de couleurs (rechercher DFF180 on tombe sur A3, on regarde ce qui modifie A3 et on tombe rapidement sur) 30208 MOVE.W D3,(A3) à changer par un NOP A 30208 ^30208 NOP On recharge le boot RT 0 2 20000 Et on écrase par notre code modifié. TRANS 30000 31750 20400 Extra Info : Analyse du code decompressé (pose d'un BS à la fin de la décompression 301F2) Rappel : Saute en (A0) = 2E000 2E000 BRA 2E00A --> 2E00A MOVEM.L D1-D7/A0-A6,-(A7) ; Typique début de code, on sauve les regitres dans la pile. .... 2E020 MOVE.L #2E6C8,DFF080 ; Ras à l'écran 2E02A MOVE.W #85D0,96(A5) ; Ras à l'écran 2E030 MOVE.W #20,96(A5) ; Début affichage CrackTro <-- A changer vers un bra fin de Cracktro 'pour l'instant pas encore trouver) 2E036 ... ; Début code copper and co de la cracktro ... ; La cracktro attends que l'on appuie sur un des boutons de la souris, donc test de BFE001 à coup sur. Facile à trouver :) ; Bingo quelques lignes plus loin. 2E05C BTST #6,BFE001 ; Test bouton gauche appuyé ? 2E064 BNE 2E036 ; Nop, on boucle sur la routine de la cracktro 2E066 CLR.L 24.S ; C'est partie pour le chargement du jeu, on doit donc sauter à cette adresse. On doit donc changer le code en 2E030 par un BRA 2E066 Ce qui nous donne comme pacth en 1688 1688 MOVE.L #60340000,30(A0) ; A0 car à ce moment la il pointe vers le début du code décompacté (voir plus haut) et notre saut à modifier est en (A0)+30 = 2E030 1690 JMP (A0) ; On remet le saut d'origine En Opcode ca nous donnes : 21 7C 60 34 00 00 00 30 4E D0 On code ça dans notre bootsecteur : A 2002E ^2002E MOVE.L #217C6034,1688 ; OPCODE d'un MOVE.L #60340000,30(A0) ^20038 MOVE.L #30,168C ; Début OPCODE d'un JMP (A0) ^20042 MOVE.L #4ED00000,1690 ; Fin OPCODE d'un JMP (A0) ^2004C JMP 30000 ; On retourne au code décompacté avec l'OPCODE d'origine BOOTCHK 20000 WT 0 2 20000


Rick Dangerous II (1990)(Micro Style)[cr PDX][t +7 SSP]
CRC32:4BD19492

Test du jeu : Après un rapide chargement, la cracktro est decompacté et lancé. RT 0 1 20000 ; Lecture de la 1er Track du disk vers la zone mémoire $20000 ;====================== 2000C MOVE.L 20078(PC), DFF080 ; 20014 CLR.W DFF088 ; ho le joli code de fader. ... 20074 BRA 20080 ; Hop, on saute en 20080 tiens donc ;====================== 20080 BRA 20174 ; et hop encore un saut vers 20174 qui nous amène vers un trackload ;====================== 20174 MOVE.W #2,1C(A1) ; TrackLoad information 2017A MOVE.L #30000,28(A1) ; 20182 MOVE.L #70C00,2C(A1) ; 2018A MOVE.L #7E00,24(A1) ; 20192 JSR -1C8(A6) ; On lance le trackload 2019A JSR 30000 ; Et on saute dans le code tracklodé (logiquement la cracktro) 201A0 MOVEM.L (A7)+,D0-D7/A0-A6 ; Cht'i travail avec la pile 201A4 ... bla bla bla 201BC BRA 20088 ; Lancement de la partie decomp du jeu ? ;====================== Bon... plus simple c'est difficile. On va desactiver le JSR en 2019A A 2019A A 2019A ^2019A NOP ^2019C NOP ^2019E NOP ^201A0 [ENTER] BOOTCHK 20000 WT 0 1 20000 Un chtit reboot et c'est plié.


Turrican (1990)(Rainbow Arts)[cr VF][t +9 Supplex](Disk 1 of 2)
CRC32:471FEEFC

Test du jeu : Après un rapide chargement, la cracktro est lancé puis une second trackload et le jeu est lancé. RT 0 1 20000 D 20000+c 2000C MOVE.W #2,1C(A1) 20012 MOVE.L #60000,28(A1) ; Adr. mémoire de dest = $60000 2001A MOVE.L #8400,24(A1) ; $8400 de Data chargée, donc 6 Tracks de $1600 de longueur initial 20022 MOVE.L #58000,2C(A1) ; Position raw_disk, 64eme track (donc 32 piste) 2002A MOVEA.L 4.S,A6 2002E JSR -1C8(A6) ; 1er Trackload 20032 JSR 60000 20038 MOVE.W #2,1C(A1) 2003E MOVE.L #60000,28(A1) ; Adr. mémoire de dest = $60000 20046 MOVE.L #17E00,24(A1) ; 17E00 de Data chargée, soit environ 100 Ko 2004E MOVE.L #2C00,2C(A1) ; Position raw_disk 20056 MOVEA.L 4.S,A6 2005A JSR -1C8(A6) ; Second Trackload 2005E MOVE.L #4EF90007,60104 ; Patch d'un JMP 20068 MOVE.W #C4A0,60108 ; patch again ? 20070 LEA 60000,A0 ; 20076 MOVE.L A0,80 ; 2007C TRAP #0 ; Et on lance le tout en 60000 Desactiver le JSR en 20032, hélas, ne fonctionne pas. Le jeu se lancera bien mais rapidement on aura un joli Guru. La crackTro doit definir/patcher certaines choses à coup sur. On va donc patcher celle-ci pour se lancer de suite sans attendre l'appui sur la souris. On reboot sur la disquette et sous la cracktro, on entre dans l'AR D 6041E <- On arrive quelque part dans cette zone mémoire. .... 6043C RTS ;==================== BS 6043C X Très vitre notre BreakPoint est atteint, on saute à la prochaine instuction. ST 600B0 BSR 607DA 600B4 BTST #0,D0 600B8 BEQ 600AC 600BA BTST #1,D0 600BE BEQ 600CC ... 600EA RTE ;===================== On pose nos breakpoints et on test pour voir qui est appelé et pourquoi. BS 600AC <- Atteint sans rien faire en 1er BS 607DA <- Atteint sans rien faire en 2nd BS 600CC <- Atteint quand on click sur 'Start Game' Ok, simple, on va patcher tout ça. RT !64 6 60000 ; On charge cracktro vers la meme zone memoire original. A 600AC ^600AC BRA 600CC ; Et on saute direct à la fin du code de la cracktro trouvé au dessus. ^600AE NOP ^600B0 [ENTER] On re-ecrie le tout sur le disque et hop, c'est dans la poche. WT !64 6 60000


Lemmings (1990)(Psygnosis)[cr SKR](Disk 1 of 2).adf
CRC32:074BC441

Test du jeu : Trackload suivi d'une phase de décompression + lancement de la cracktro pour ensuite trackload encore et lancer le jeu. RT 0 1 20000 D 20000+C 2000C BSR 200B0 ; On saute en 200B0 pour le lancement de la cracktro 20010 NOP 20012 MOVEA.L #70000,A5 20018 MOVE.W #2,1C(A1) 2001E MOVE.L A5,28(A1) 20022 MOVE.L #CA000,2C(A1) 2002A MOVE.L #1200,24(A1) 20032 JSR -1C8(A6) ; Lancement du second TrackLoad,le jeu sans doute. ... D 200B0 ... ;============================== ; SousRoutine de trackload de la cracktro 200B0 MOVEA.L 4.S,A6 200B4 MOVE.L #70000,28(A1) ; Adr. mémoire de dest = $70000 200BC MOVE.W #2,1C(A1) ; Trackdisk.device en lecture 200C2 MOVE.L #CC000,2C(A1) ; Source Position disk = 94em track (piste 74 donc) 200CA MOVE.L #3A00,24(A1) ; Taille à charger $3A00 200D2 MOVE.L A1,-(A7) ; Une petite sauvegarde de (A1) 200D4 JSR -1C8(A6) ; on lance le trackload 200D8 JSR 70008 ; Lancement du code trackload (crackro compressé) 200DE MOVEA.L (A7)+,A1 ; on remet tout bien 200E0 MOVEA.L 4.S,A6 ; 200E4 RTS ; Et on retourne en 20010 pour le second trackload (le jeu) ;============================== A 200D8 ^200D8 NOP ^200DA NOP ^200DC NOP ^200D8 [ENTER] BOOTCHK 20000 WT 0 1 20000

15/09/2022