Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.1 - CLIENT : 54.80.83.123

 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 

Chivalry (Optimum Resource, 1983)

 
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: 2945
Localisation: Le Chesnay, France

MessagePosté le: Mar 17 Nov 2015, 16:54    Sujet du message: Chivalry (Optimum Resource, 1983) Répondre en citant

By Richard Hefter. Another great game from Optimum Resource, Inc.

Disk structure
This is standard and copyable 16-sec diskette apart from T1/SF, just as if there was a protection check of that sector.
There is no extra track.

The boot sequence
Track 0, sector 0 is loaded at $0800 by the Disk II controller, then the RWTS is loaded at $B700..$BFFF, then control is transferred to $B700.

How to copy
1. We search for "01 0F" that corresponds to Track 1 and Sector F. We have answers at: T0/S5, T2/S5, TD/SB
2. We now search for "BD 8C C0" that corresponds to reading a nibble from disk. We have answers at: T0/Sxx (the RWTS), T2/S6

Hum... We have data at T2/S5 and T2/S6. Two matches, that's probably our protection check. Let's analyze it!
- The code starts at $02D8
- It patches the RWTS
- Then calls the RWTS and asks for T1/SF
- Then repatches the RWTS

A call to $02D8 (20 D8 02) is performed on:
- T1/S9/20
- T5/S6/DF
- T5/SE/DF

Now, we have two options, we either NOP the calls or keep the protection check. From experience with Hefter's titles, there is some valid data hidden in the unreadable sector, therefore we'll find a way to collect the data.

How to crack with an Apple IIgs
Boot my copy disk, launch Disk Fixer
Insert your copy of Chivalry
Edit T2/S6. At offset 0, enter AD 00 C0 10 FB 4C 80 02
Save the sector data to disk
Reboot
When the main title is displayed, enter the control panel and visit the monitor
At $0280, enter: 2C 10 C0 A0 3C A9 04 20 E2 02 4C 59 FF
Press control-Y
Insert the original of Chivalry in drive 1
Press a key
*beep* to the monitor
You now have the T1/SF sector in memory at address $0D00
Let's save it: 10/8000<00/D00.DFFM
Reboot my copy disk
Insert the copy of Chilvary
Edit T2/S6. At offset 0, enter A0 3C A9 04 20 E2 02 B0.
At offset F, 20 -> 2C and at offset 1B, 20 -> 2C
(Others would have put a 60 at offset 20 Wink)
Save the sector
Press Q, you are in the monitor
Enter 00/8000<10/8000.80FFM
00/
Press control-Y
Save the newly visible data on track 1, sector F

Disk image at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy,

LoGo
11/2015


Dernière édition par toinet le Lun 09 Jan 2017, 18:53; é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: 2945
Localisation: Le Chesnay, France

MessagePosté le: Mar 17 Nov 2015, 17:18    Sujet du message: Répondre en citant

The protection check routine at $02D8

Code:

*
* Chivalry
* (c) 1983, Optimum Resource
* (k) 2015, LoGo
*
         mx    %11
         org   $02d8
         lst   off

ZIDBYTE  EQU   $FBC0

*--- Entry point

L02D8    LDY   #<L043C    ; read T1/SF
         LDA   #>L043C
L02DC    JSR   L02E2
         BCS   L02DC      ; loop if I/O error
         RTS

*--- Patch / Read / Patch

L02E2    PHA
         TXA
         PHA
         TYA
         PHA
         JSR   L02F8      ; patch the RWTS (put a BIT)
         PLA
         TAY
         PLA
         TAX
         PLA
         JSR   $B7B5      ; read sector
         PHP
         JSR   L02F8      ; patch the RWTS (put a BIT)
         PLP
         RTS

*--- Patch the RWTS
*
* byte 1: address low
* byte 2: address high
* byte 3: value to store
* if byte 1 = byte 2 = 0, exit

L02F8    LDX   #$00
         LDY   #$00
L02FC    LDA   L0321,X
         INX
         STA   $02
         LDA   L0321,X
         INX
         STA   $03
         CMP   $02
         BNE   L0311
         CMP   #$00
         BNE   L0311
         RTS

L0311    LDA   L0321,X
         PHA
         LDA   ($02),Y
         STA   L0321,X
         INX
         PLA
         STA   ($02),Y
         JMP   L02FC

L0321    HEX   C2B84C     ; B8C2: 4C JMP $038E
         HEX   C3B8       ; B8C3: 8E
         DB    <L038E
         HEX   C4B8       ; B8C4: 03
         DB    >L038E
         HEX   DCB84C     ; B8DC: 4C JMP $0335
         HEX   DDB8       ; B8DD: 35
         DB    <L0335
         HEX   DEB8       ; B8DE: 03
         DB    >L0335
         HEX   0000       ; end of code

*--- New data field read routine

L0335    LDY   #$20
         STX   L038D
L033A    DEY
L033B    BEQ   L038B
L033D    LDA   $C08C,X
         BPL   L033D
L0342    EOR   #$D5
         BNE   L033A
         NOP
L0347    LDA   $C08C,X
         BPL   L0347
         CMP   #$AA
         BNE   L0342
         LDY   #$56
L0352    LDA   $C08C,X
         BPL   L0352
         NOP
         NOP
         STA   $C08D,X
L035C    DEY
         STY   $26
L035F    LDA   $C08C,X
         BPL   L035F
         LDY   $BA00,X
         LDY   $26
         STA   $BC00,Y
         BNE   L035C
L036E    STY   $26
L0370    LDA   $C08C,X
         BPL   L0370
         LDY   $BA00,X
         LDY   $26
         STA   $BB00,Y
         INY
         BNE   L036E
         LDA   $BC52
         AND   #$F0
         CMP   #$90
         BEQ   L038B
         CLC
         RTS
L038B    SEC
         RTS

L038D    DB    $00

*--- New denibblize data field routine

L038E    LDY   #$87
         JSR   L03AB
         DEY
L0394    JSR   L03AB
         ASL
         ASL
         ASL
         ASL
         STA   $00
         JSR   L03AB
         ORA   $00
         STA   ($3E),Y
         TYA
         DEY
         CMP   #$00
         BNE   L0394
         RTS

L03AB    TYA
         PHA
         CMP   #$87
         BNE   L03CA
         LDY   #$55
         LDA   ZIDBYTE
         BEQ   L03C4
         LDX   L038D
         LDA   $C08D,X
         LDA   $C08E,X
         BPL   L03C4
         DEY
L03C4    STY   $02
         LDX   #$00
         STX   $01
L03CA    LDY   $02
         LDX   $01
         BMI   L03DC
         LDX   $BBFF,Y
         DEY
         BNE   L03E0
         LDA   #$FF
         STA   $01
         BNE   L03E0
L03DC    LDX   $BB00,Y
         INY
L03E0    STY   $02
         PLA
         TAY
         LDA   L033B+1,X
         RTS

*--- The new denibblize table

         HEX   00010007080901020200010604030403
         HEX   05050002010A070E0502010607030002
         HEX   050B040F00070A010203000C0C060705
         HEX   080602040100080A030E000107090A05
         HEX   0B02051003040C060D010F06050E0F0B
         HEX   11020009

*--- The RWTS

L043C    DB    $01
         DB    $60
         DB    $01
         DB    $00
         DB    $01        ; Track
         DB    $0F        ; Sector
         DA    L044D
         DA    $0D00      ; Load address
         DB    $00
         DB    $00
         DB    $01
         DB    $00
         DB    $00
         DB    $60
         DB    $01
L044D    DB    $00
         DB    $01
         DB    $EF
         DB    $D8
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