Index du Forum
IDENTIFICATION SERVEUR : 51.77.218.217 - CLIENT : 3.233.215.231

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Wizard and the Princess #2 (Sierra - 1980)

 
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
blk



Inscrit le: 05 Sep 2007
Messages: 114
Localisation: Zimbabwé

MessagePosté le: Sam 06 Aoû 2011, 15:10    Sujet du message: Wizard and the Princess #2 (Sierra - 1980) Répondre en citant

Wizard and the Princess - Hi-res adventure #2 (Sierra - 1980).

Bonjour tout le monde !

Voici le crack (non fignolé) de ce jeu d'aventure Sierra.

Tout d'abord, un passage au locksmith rapide nous apprend que rien ne passe, justement...
:/

Un jetage d'oeil d'un peu plus près via Copy ][+ 5.0 nous laisse voir que les marqueurs sont inhabituels :
D5 AA B5 <- B5 O_o"
DE AA EB <- OK
D5 AA AD <- mais pas tout le temps... DA AA DA aussi..
DE AA XX <- le XX est variant...

Honte à moi, mais il m'a fallu un moment pour reconnaître un dos 3.2 modifié... Eh oui, le dos 3.2, c'est über vieux et ça fait vraiment bizarre de tomber là dessus, même pour moi...

Du coup, il m'a fallu jeter un oeil au boot tracing pour voir qu'il ne chargeait qu'au maximum 13 secteurs par piste via la RWTS et que l'encodage des nibbles était bizarre.
Une fois réveillé, j'ai tilté : 13 secteurs + D5 AA B5 + encodage bizarre (5&3 en fait) = DOS 3.2...

Pour copier ce disque, soit vous récupérez la rwts du jeu que vous modifiez, soit vous récupérez une rwts 3.2 de base que vous modifiez également...
Il faut bien entendu la modifier pour éviter la vérif du D5 AA DA, mais pas seulement... le jeu a des n° de piste inversés sur la piste 1 et la piste 2, donc si votre rwts vérifie le n° de piste, ces deux là ne passeront pas.
Smile... on verra pourquoi c'est fait comme ça, mais plus tard (c'est en fait la seule "protection").

Le boot-tracing nous permet de récupérer les parties principales du code :

Code:

***************************
BOOT 0
***************************
0801-   A2 00       LDX   #$00
0803-   BD 00 08    LDA   $0800,X
0806-   9D 00 02    STA   $0200,X
0809-   E8          INX   
080A-   D0 F7       BNE   $0803
080C-   4C 0F 02    JMP   $020F   <- $80f ici, donc...

.
.
bla bla
.
.

083C-   A9 02       LDA   #$02
083E-   8D 20 03    STA   $0320
0841-   4C 01 03    JMP   $0301      <-- boot 1


*************************************
BOOT 1
*************************************

0301-   B9 00 08    LDA   $0800,Y
0304-   0A          ASL   
0305-   0A          ASL   
0306-   0A          ASL   
0307-   99 00 08    STA   $0800,Y
030A-   C8          INY   
030B-   D0 F4       BNE   $0301

030D-   A6 2B       LDX   $2B
030F-   A9 09       LDA   #$09
0311-   85 27       STA   $27
0313-   AD CC 03    LDA   $03CC   <- #$b6
0316-   85 41       STA   $41
0318-   84 40       STY   $40      <- = $b600
031A-   8A          TXA   
031B-   4A          LSR   
031C-   4A          LSR   
031D-   4A          LSR   
031E-   4A          LSR   
031F-   A9 02       LDA   #$02      
0321-   85 3F       STA   $3F
0323-   A9 5D       LDA   #$5D
0325-   85 3E       STA   $3E      <-- $025d au prochain saut
0327-   20 43 03    JSR   $0343   <-- hop ! appel à $025d (chargement)

.
bla bla
.



saut boot2
------------
033A-   85 3E       STA   $3E
033C-   AD CC 03    LDA   $03CC
033F-   85 3F       STA   $3F
0341-   E6 3F       INC   $3F

0343-   6C 3E 00    JMP   ($003E)   <-- saute en $B700 : BOOT2


*******************************
BOOT 2
*******************************
B700-   8E B1 B7    STX   $B7B1   <-- sauve le slot
B703-   8E E9 B7    STX   $B7E9   <-- idem
B706-   A2 FF       LDX   #$FF
B708-   9A          TXS   
B709-   D8          CLD   
B70A-   20 84 FE    JSR   $FE84   <-- initialisations
B70D-   20 2F FB    JSR   $FB2F
B710-   20 93 FE    JSR   $FE93
B713-   20 89 FE    JSR   $FE89

B716-   AD F3 03    LDA   $03F3
B719-   49 A5       EOR   #$A5
B71B-   8D F4 03    STA   $03F4   <-- validation reset

B71E-   20 48 B7    JSR   $B748   
B721-   A9 19       LDA   #$19      <-- init IOB (track $19)
B723-   8D B2 B7    STA   $B7B2
B726-   A9 59       LDA   #$59      <-- init IOB (longueur = $59 secteurs)
B728-   8D B3 B7    STA   $B7B3
B72B-   A9 40       LDA   #$40      <-- init IOB (adresse de chgt = $4000)
B72D-   8D B4 B7    STA   $B7B4
B730-   20 5D B7    JSR   $B75D   <-- appel rwts

B733-   A9 21       LDA   #$21      <-- init IOB (track $21)
B735-   8D B2 B7    STA   $B7B2
B738-   A9 17       LDA   #$17      <-- init IOB (longueur = $17 secteurs)
B73A-   8D B3 B7    STA   $B7B3
B73D-   A9 09       LDA   #$09      <-- init IOB (adresse de chgt = $0900)
B73F-   8D B4 B7    STA   $B7B4
B742-   20 5D B7    JSR   $B75D   <-- appel rwts

B745-   4C 50 4A    JMP   $4A50   <-- c'est chargé, alors, on démarre



L'EIP se trouve donc en $4a50.

Tous les accès se font en accès direct aux secteurs via la RWTS du jeu, donc, pas de catalog etc... ce qui fait qu'il faut préserver la structure de la disquette.

Comme le chargement du code se fait juste avant, il est aisé de reloger le tout et de le sauvegarder sur un disque DOS 3.3 en deux fichiers.

Par chance, les points d'entrée des appels système sont identiques entre le dos 3.2 et le dos 3.3, ce qui fait que ce jeu pourra aussi bien utiliser une rwts 3.3 que celle d'origine.


J'ai donc maintenant un jeu dont le code principal est chargeable, et qui peut utiliser la disquette au format dos 3.3 copiée avec demuffin.

Personnellement, j'ai shooté la vérification du n° de track dans la RWTS pour ne copier que les pistes 1 et 2 avec demuffin via un petit patch :
*BDE2: EA C4 2E
Puis j'ai inversé ces deux pistes "physiquement"

Mais au fait, pourquoi faut-il faire ça ?

Eh bien, parce le jeu modifie "en dur" la RWTS, pour deux choses :
- ignorer le nibble changeant "DA" / "AD" de l'en-tête D5 AA AD
- inverser "logiquement" la piste 1 et 2...

Voici où ça se passe :

Code:

"zappe" le test de marqueur

$4BBA : A9 24      LDA #$24      <- opcode de "BIT"
$4BBC : 8D 1E B9   STA $B91E      <- modifie la RWTS pour shunter le test de D5 AA *AD*
----------------------------------------

$6B3F : A9 85      LDA #$85      <-- redirige l'appel du déplacement du bras
$6B41 : 8D 7D BE   STA $BE7D
$6B44 : A9 6B      LDA #$6B      <-- vers une routine "maison" en $6B85
$6B46 : 8D 7E BE   STA $BE7E
$6B49 : 20 00 87   JSR $8700
$6B4C : A9 1E      LDA #$1E      <-- remet le RWTS en place
$6B4E : 8D 7D BE   STA $BE7D
$6B51 : A9 BA      LDA #$BA      <-- idem
$6B53 : 8D 7E BE   STA $BE7E
$6B56 : 60       RTS


Routine "maison" inversant la piste 1 et la piste 2. Quand on appelle une, c'est l'autre qui est lue.

$6B85 : C9 02      CMP #$02      <- piste n°1 (phase 2) ?
$6B87 : D0 04      BNE $6B8D      <- non
$6B89 : A9 04      LDA #$04      <- si oui, file lire la piste 2 (phase 4) !
$6B8B : D0 06      BNE $6B93

$6B8D : C9 04      CMP #$04      <- c'est pas piste 1, alors piste n°2 (phase 4) ?
$6B8F : D0 02      BNE $6B93      <- non ? alors saut au déplacement de bras
$6B91 : A9 02      LDA #$02      <- si c'est piste 2, file piste 1 (phase 2) !
$6B93 : 20 1E BA   JSR $BA1E
$6B96 : 60       RTS
----------------------------------------


Pour remettre en place une disquette qui fonctionne, il faut donc recopier la piste 2 sur la piste 1 et réciproquement.
De plus, il faut modifier le routines ci-dessus pour que le soft ne touche pas à la RWTS du dos 3.3, puisqu'il n'y a plus besoin de shunter un marqueur ni d'inverser les pistes qui sont maintenant à la "bonne place".
Smile
Donc, brièvement, on charge les codes concernés et on les re-sauvegarde après ces modifs :
*6B41 : EA EA EA
*6B46 : EA EA EA
*6B4E : EA EA EA
*6B53 : EA EA EA
*6BBA : EA EA EA

hop! c'est fini.
Dernier détail, le jeu plantouille si l'on ne nettoie pas la zone mémoire entre $BA00 et $A000... il suffit de code un mini nettoyeur avant démarrage.

Evidemment, les infos données ci-dessus ne vous tombent pas du ciel, il faut fouiller parce que les premiers essais du soft copié plantent lamentablement.

Pour le moment, j'ai donc une version temporaire qui fonctionne, en 2 faces au lieu d'une seule :
Face A = chargement du jeu en RAM, vidage mémoire + attente face B
Face B = image en dos 3.3 de la disquette d'origine

Le lanceur sur la face A ressemble à ça :

Code:

20  PRINT " BLOADBOOT2SIERRA,A$900" : REM J'AI COLLE LE RELOGEUR DERRIERE CE CODE
30  PRINT " BLOADBOOT1SIERRA,A$3000"
60  HOME : PRINT "INSERER L'AUTRE FACE": INPUT A$
80  CALL 8448: REM  $2100 - RELOGEUR ET DEMARRAGE


Et ça marche !
Smile
Je ne sais pas si je vais intégrer le tout en un seul disque... ce jeu n'est pas vraiment un joyau... je le ferai seulement si ça intéresse quelqu'un...

Ah oui, j'oubliais : le code du "relogeur - nettoyeur - lanceur":

Code:

.files BIN = 256   ; impératif pour générer le code
.ORG $2100

;
l1      lda $89ff
l2      sta $99ff
      dec l1+1
      dec l2+1
      bne l1
      dec l1+2
      dec l2+2
      lda l2+2
      cmp #$3F   ; arrivé à $4000 ?
      bne l1
      
      ; nettoyage de la ram de $9a00 à $a000
l4      lda #$00
l3      sta $9a00
      inc l3+1
      bne l3
      inc l3+2
      lda l3+2
      cmp #$a0   ; arrivé à $a000 ?
      bne l4      
      
      ; initialisations
      jsr $fe84
      jsr $fb2f
      jsr $fe93
      jsr $fe89
      
      ; go!
      jmp $4a50    ; départ
.end


Voilà.... à plouche.
Smile
_________________
hin hin ^^
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
blk



Inscrit le: 05 Sep 2007
Messages: 114
Localisation: Zimbabwé

MessagePosté le: Sam 06 Aoû 2011, 22:45    Sujet du message: Répondre en citant

Coucou !

Bah, je me suis décidé à le finaliser...

Pour les curieux, l'image du soft repassé en version "une face" est ici :
http://download356.mediafire.com/db9d6nu8knpg/elut8r84pdc71mz/Sierra_Wizard.zip

Spécial clin d'oeil à amauget Wink
...... et encore merci pour ces jouets Very Happy

blk
_________________
hin hin ^^
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
amauget



Inscrit le: 06 Déc 2009
Messages: 962
Localisation: Nantes

MessagePosté le: Dim 07 Aoû 2011, 6:19    Sujet du message: Répondre en citant

blk a écrit:
Coucou !

Bah, je me suis décidé à le finaliser...

Pour les curieux, l'image du soft repassé en version "une face" est ici :
http://download356.mediafire.com/db9d6nu8knpg/elut8r84pdc71mz/Sierra_Wizard.zip

Spécial clin d'oeil à amauget Wink
...... et encore merci pour ces jouets Very Happy

blk
Salut blk,

Du super boulot !
J'en ai d'autres en stock Very Happy
_________________
Antony
Apple II forever
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com