Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.65 - CLIENT : 54.235.48.106

 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 

Rad warrior (Epyx, 1987)

 
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
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Lun 04 Aoû 2014, 14:50    Sujet du message: Rad warrior (Epyx, 1987) Répondre en citant

It's 2500 A.D. Do you know where your anti-radiation suit is? Find it quick because as Tal, warrior of the future, you'll need it and its death-defying weapons. It's about time some-one stopped those nasty mutant aliens.

This is another great game from Epyx in the Maxx-Out! series. And, as with the other titles, it uses the same desynchro protection.

PROTECTION TYPE
Yes, it is another desynchro protection. The desync protection desynchronizes the read routine of the controller card by playing with time. That means that one can read nibbles that cannot normally be read. It the routine "loses" the controller card, one can easily imagine that those nibbles are impossible to copy with a nibble copier. And that is true!


DISK TYPE
Boot Copy II plus (bitcopy) in Edit code and reads both tracks of both sides. You will get:
- a one-side only program,
- side one uses tracks $00 to $22,
- epilog markers are changed, the others are unchanged, the values are D5AA96 FFFF for the header markers, D5AAAD FFFF for the data ones,
- sectors are standard DOS 3.3 sectors.


HOW TO COPY THE DISK?
- Launch Advanced Demuffin 1.4, press P to bypass boot,
- Format a floppy in drive 2,
- Enter the monitor and change the read routines to prevent them from reading the epilog markers:
Code:
*B930:18 60 EA (on some DOS, use address $B931)
*B98B: 18 60 EA

- Press control-Y
- Insert Rad warrior in disk 1
- Copy the disk
You're done.



BOOT TRACE
As with other Maxx-out! titles, it is important to get the desync values. Let's boot trace our floppy:
- Turn on your computer with the Rad warrior floppy in the drive
- While your hear the arm moving, press ctrl-reset
- Enter the monitor: CALL -151
Code:

9600<C600.C6FFM
96FB:20 FDDA 60 (I am on an Apple IIgs, others use, 96F8
9600G

- The Apple II displays 01. Only one sector is loaded from track 0
- See the boot1 sector source code on the next message, we have to load other sectors and prevents it from going to $BB00
Code:

96FB: A9 59 8D 84B A9 FF 8D 84C
9600G

- The boot2 phase is loaded from $B600 to $BFFF. Let's analyze the code at $BB00 (read the next message and come back here please)
- You now understand that you have to let the desync routine read the desync values then stop the code. That's an easy one, we will use redirection.
Code:

96FB:A9 00 8D 84B A9 98 8D 84C 4C 801
9800:A0 00 8D BB7A <= we put a break after desync values were read
9600G

Beep!
- We have the desync values, they are stored from $F0 to $FF. It is time to play with the sectors...

Code:
$F0:FC EE EE FC E7 EE FC E7



NORMALIZE THE DISK
There are two options: either modify the protection check at $BB00 or use the advanced options of Disk Fixer v4 to EOR sectors. We will use that second option.

One warning here: we do not know if the other desync values are used in the game, modifying the protection routine may be better!

Launch Disk Fixer v4. We know we have to modify, on track 0, sectors 1 to 4 with EOR values of FC EE EE FC respectively
- Read T0/S1, press X, press Return, enter FC, press Return twice
- Press Ctrl-T, write T0/S1, press Ctrl-T
- Read T0/S2, press X, press Return, enter EE, press Return twice
- Press Ctrl-T, write T0/S2, press Ctrl-T
- Read T0/S3, press X, press Return, enter EE, press Return twice
- Press Ctrl-T, write T0/S3, press Ctrl-T
- Read T0/S4, press X, press Return, enter FC, press Return twice
- Press Ctrl-T, write T0/S4, press Ctrl-T

We have to bypass the protection call at $BB00. It is located on T0/S0:
- Read T0/S0, at offset $4A, replace 4C 00 BB with 6C FD 08 and write the sector back to disk.

The two versions of the crack can be found at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy!

LoGo
August 2014


Dernière édition par toinet le Ven 26 Déc 2014, 12:06; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Lun 04 Aoû 2014, 14:51    Sujet du message: Répondre en citant

This is the boot1 sector at T0/S0:

Code:

*
* Rad Warrior
* (c) 1987, Epyx
* (c) 2014, LoGo
*

         TYP   BIN
         ORG   $000800
         MX    %11

*--------------

INIT     EQU   $FB2F
SETKBD   EQU   $FE89
SETVID   EQU   $FE93

*-------------- This is track 0, sector 0

         HEX   01

L0801    LDA   $27        ; are we booting
         CMP   #$09       ; (9 means booting)
         BNE   L081F      ; or loading?

         LDA   $2B        ; slot*16
         LSR
         LSR
         LSR
         LSR              ; /16
         ORA   #$C0
         STA   $3F
         LDA   #$5C
         STA   $3E        ; pointer to read routine

         CLC              ; set RAM pointer
         LDA   L08FE      ; ie. where to load sector
         ADC   L08FF
         STA   L08FE

L081F    LDX   L08FF      ; are we finished loading?
         BMI   L0839      ; yes, if done
         LDA   L084D,X    ; otherwise,
         STA   $3D        ; sets physical sector index
         DEC   L08FF      ; sector--
         LDA   L08FE      ; sets RAM pointer
         STA   $27
         DEC   L08FE      ; RAM pointer--
         LDX   $2B
         JMP   ($003E)    ; reads sectors

L0839    INC   L08FE      ; RAM pointer++
         INC   L08FE      ; RAM pointer++
         JSR   SETKBD     ; resets keyboard
         JSR   SETVID     ; and video
         JSR   INIT       ; clear everything
         LDX   $2B        ; gets slot*16
         JMP   $BB00      ; jumps to next stage

*--- DOS sector interleaving

L084D    HEX   000D0B09070503010E0C0A080604020F

*--- Useless data (use it to sign your crack ;-))

         HEX   002064A7B008A900A88D5DB69140ADC5
         HEX   B54CD2A6AD5DB6F008EEBDB5D003EEBE
         HEX   B5A9008D5DB64C46A58DBCB520A8A620
         HEX   EAA24C7DA2A013B142D014C8C017D0F7
         HEX   A019B14299A4B5C8C01DD0F64CBCA6A2
         HEX   FF8E5DB6D0F600000000000000000000
         HEX   00000000000000000000000000000000
         HEX   0000002058FCA9C220EDFDA90120DAFD
         HEX   A9AD20EDFDA90020DAFD600000000000
         HEX   00000000000000000000000000000000
         HEX   00

L08FE    HEX   B6         ; RAM pointer
L08FF    HEX   09         ; nb of sectors to load


Dernière édition par toinet le Mar 05 Aoû 2014, 16:38; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Lun 04 Aoû 2014, 14:55    Sujet du message: Répondre en citant

And the desync protection routine at $BB00 (T0/S5)

Code:

*
* Rad Warrior
* (c) 1987, Epyx
* (c) 2014, LoGo
*

         TYP   BIN
         ORG   $00BB00
         MX    %11

*--------------

PWREDUP  EQU   $03F4
RESETV   EQU   $FFFC

*-------------- The desync protection routine

LBB00    LDA   #$00       ; Inits ZP values
         LDX   #$F0
         TXS
LBB05    STA   $00,X
         INX
         BNE   LBB05

         LDA   #$0A       ; number of tries
         STA   $FC
         LDX   $2B        ; turn read mode on
         LDA   $C089,X
         LDA   $C08E,X

LBB16    LDA   #$80
         STA   $FD
LBB1A    DEC   $FD
         BEQ   LBB98
         JSR   LBBA5      ; read header field
         BCS   LBB98      ; read error, reboot
         LDA   $F9        ; is sector read
         CMP   #$0F       ; sector #$0F ?
         BNE   LBB1A      ; no, retry

*--- We are on the right sector, now read the desync values

         LDY   #$00       ; Search for a specific pattern
LBB2B    LDA   $C08C,X
         BPL   LBB2B
         DEY
         BEQ   LBB98
         CMP   #$D5       ; D5
         BNE   LBB2B
         LDY   #$00
LBB39    LDA   $C08C,X
         BPL   LBB39
         DEY
         BEQ   LBB98
         CMP   #$E7       ; E7
         BNE   LBB39
LBB45    LDA   $C08C,X
         BPL   LBB45
         CMP   #$E7       ; E7
         BNE   LBB98
LBB4E    LDA   $C08C,X
         BPL   LBB4E
         CMP   #$E7       ; E7
         BNE   LBB98

         LDA   $C08D,X    ; lose time, desync read

         LDY   #$10
         BIT   $80        ; time
LBB5E    LDA   $C08C,X
         BPL   LBB5E
         DEY
         BEQ   LBB98
         CMP   #$EE       ; waits for EE
         BNE   LBB5E
         NOP              ; time
         NOP              ; time

         LDY   #$07       ; reads $10 values
LBB6E    LDA   $C08C,X    ; and stores them at $F0..$FF
         BPL   LBB6E
         STA   |$00F0,Y
         NOP
         DEY
         BPL   LBB6E

*--- Now, decypher the code

         LDX   #$03
         LDA   #$00       ; RAM pointer is $B700
         TAY              ; X=3
         STA   $F8        ; Y=0
         LDA   #$B7
         STA   $F9
LBB85    LDA   $F0,X      ; A= desync value $F3..$F2..$F1..$F0
         EOR   ($F8),Y    ; RAM pointer is  $B7..$B8..$B9..$BA
         STA   ($F8),Y    ; Desync values   $FC..$EE..$EE..$FC
         DEY
         BNE   LBB85
         INC   $F9
         DEX
         BPL   LBB85

*
* For information, here are the desync values
*  FC EE EE FC E7 EE FC E7
*

*--- Next stage

         LDX   $2B        ; slot*16
         JMP   ($08FD)    ; go to stage 3

LBB98    DEC   $FC        ; retry++
         BEQ   LBB9F
         JMP   LBB16      ; loop please

*--- Bad disk!

LBB9F    INC   PWREDUP    ; desync values not found
         JMP   (RESETV)   ; please reboot

*------------- Read header

LBBA5    LDY   #$FD       ; number of tries
         STY   $F0
LBBA9    INY
         BNE   LBBB0
         INC   $F0
         BEQ   LBBED      ; ends with error

LBBB0    LDA   $C08C,X    ; reads first header marker D5
         BPL   LBBB0
LBBB5    CMP   #$D5
         BNE   LBBA9
         NOP
LBBBA    LDA   $C08C,X    ; second marker AA
         BPL   LBBBA
         CMP   #$AA
         BNE   LBBB5
         LDY   #$03       ; number of pairs +1 of 4*4 nibbles
LBBC5    LDA   $C08C,X
         BPL   LBBC5
         CMP   #$96       ; third marker 96
         BNE   LBBB5

         LDA   #$00       ; now reads VV TT SS CC
LBBD0    STA   $F1        ; as pairs or 4*4 nibbles
LBBD2    LDA   $C08C,X
         BPL   LBBD2      ; $F0: read nibble
         ROL              ; $F1: checksum
         STA   $F0
LBBDA    LDA   $C08C,X    ; $F8: CC - checksum
         BPL   LBBDA      ; $F9: SS - sector
         AND   $F0        ; $FA: TT - track
         STA   |$00F8,Y   ; $FB: VV - volume
         EOR   $F1
         DEY              ; refer to the DOS manual
         BPL   LBBD0      ; for more information
         TAY
         NOP
         CLC              ; OK
         RTS
LBBED    SEC              ; KO
         RTS
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
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