Index du Forum

 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 

Mating Zone (Datamost, 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

Inscrit le: 29 Jan 2012
Messages: 176

MessagePosté le: Jeu 16 Fév 2017, 5:41    Sujet du message: Mating Zone (Datamost, 1983) Répondre en citant

This is a Galaxian-style of game, but with some new rules. When the creatures first enter the screen, shooting them yields no score. It's only when they combine in the cloud that they will start to attack, and then they are worth points.

Let's begin.

0801    LSR     $27     ;#$09 -> #$04
0803    BCC     $082E   ;fake! never taken
0805    LDA     $2B
0807    EOR     $27     ;#$x4
0809    ASL             ;#$x8
080A    EOR     $27     ;#$xC
080C    ASL
080D    STA     $0800   ;big number
0810    ROL
0811    ROL
0812    ROL             ;#$Cx
0813    STA     $082D
0816    EOR     #$2B    ;fake!
0818    AND     #$F8    ;fake!
081A    TAY             ;fake!
081B    LDA     $BF6F,Y ;fake!
081E    STA     $BF68,Y ;fake!
0821    LDA     $27
0823    STA     $3D     ;sector #4
0825    LDA     $BF6A,Y ;fake!
0828    STA     $BF6C,Y ;fake!
082B    JMP     $085C   ;$Cx5C

Hmm, where's the exit condition? There isn't one because it doesn't need one.
Yes, there's a trick here.

The trick is that the boot PROM will loop until the sector number that was just read is at least as large as the value at $0800.
The read loop will increment $27 during that time.
This loader sets $27 to #$04 so that the read will start at $0400 and increment from there, and read sector #04 to $0400, #$05 to $0500, #$06 to $0600, #$07 to $0700, #$08 to $0800!
Then the PROM increments the sector to #$09, and compares with $0800.
The new $0800 is #$09, so the loop exits and $0801 gets control again.

0800    .BYTE   #$09
0801    LDY     #$32
0803    LDA     $823,Y
0806    STA     $0817
0809    STA     $081A
080C    LDA     $824,Y
080F    STA     $818
0812    STA     $81B
0815    TXA
0816    ORA     $0448
0819    STA     $0448
081C    DEY
081D    DEY
081E    BPL     $0803
0820    JMP     $06C6
0823    .WORD   $0448
0825    .WORD   $047A

$0823 onwards is a table of addresses which will receive the slot number ORed in, so that it can run from any slot.

06C6    TXA
06C7    LSR
06C8    LSR
06C9    LSR
06CA    LSR
06CB    ORA     #$C0
06CD    STA     $05E4
06D0    EOR     #$70
06D2    STA     $04D9
06D5    LDA     $C083
06D8    LDA     $C083
06DB    LDA     #$05
06DD    STA     $FFFD
06E0    LDA     #$D9
06E2    STA     $FFFE
06E5    LDA     $03F3
06E8    STA     $03F4
06EB    LDA     #$A0
06ED    JSR     $0401
06F0    JMP     $AF00

Set reset vector, load some stuff to $Ax00.

0401    STA     $0556
0404    LDA     #$C8
0406    STA     $EE
0408    LDY     #0
040A    LDX     $0556
040D    STX     $F0,Y
040F    INX
0410    INY
0411    CPY     #$10
0413    BNE     $040D
0415    STY     $EF
0417    LDA     $0400
041A    CLC
041B    ADC     #2
041D    JSR     $0646
0420    INC     $EE
0422    BEQ     $0444
0424    JSR     $055E
0427    BCS     $0420
0429    LDY     $2D
042B    LDA     $F0,Y
042E    BEQ     $0420
0430    STA     $0556
0433    JSR     $04DC
0436    BCS     $0420
0438    LDY     $2D
043A    LDA     #$00
043C    STA     $F0,Y
043F    DEC     $EF
0441    BNE     $0420
0443    RTS

Fairly standard scatter-read routine.
$0646 is the standard stepper routine, so I won't show it.
$055E is the read address routine.

055E    LDY     #$FC
0560    STY     $26
0562    INY
0563    BNE     $0569
0565    INC     $26
0567    BEQ     $055C
0569    LDA     $C0EC
056C    BPL     $0569
056E    CMP     #$D5
0570    BNE     $0562
0572    NOP
0573    LDA     $C0EC
0576    BPL     $0573
0578    CMP     #$AA
057A    BNE     $056E
057C    LDY     #$03
057E    LDA     $C0EC
0581    BPL     $057E
0583    CMP     #$96
0585    BNE     $056E
0587    LDA     #$00
0589    STA     $27
058B    LDA     $C0EC
058E    BPL     $058B
0590    ROL
0591    STA     $26
0593    LDA     $C0EC
0596    BPL     $0593
0598    AND     $26
059A    STA     $2C,Y
059D    EOR     $27
059F    DEY
05A0    BPL     $0589
05A2    TAY
05A3    BNE     $055C
05A5    LDA     $C0EC
05A8    BPL     $05A5
05AA    CMP     #$DF
05AC    BNE     $055C
05AE    NOP
05AF    LDA     $C0EC
05B2    BPL     $05AF
05B4    CMP     #$AA
05B6    BNE     $055C
05B8    CLC
05B9    RTS

$D5 $AA $96... $DF $AA. Standard address prologue, custom epilogue.
$04DC is the read data routine. Standard data prologue, same custom epilogue.
This is small protection, but nothing special.

Eventually we get to $AF00.

AF00    LDA     #0
AF02    STA     $02
AF04    LDA     #$20
AF06    STA     $03
AF08    LDY     #$00
AF0B    STA     ($02),Y
AF0E    BNE     $AF0B
AF10    INC     $03
AF12    LDA     $03
AF14    CMP     #$40
AF16    BCC     $AF08
AF18    LDA     #$1F
AF1A    JSR     $0646

Ah, here we are. That odd number being passed to the stepper routine means that we have half-tracks.

AF1D    LDA     #$40
AF1F    JSR     $0401
AF22    LDA     #$50
AF24    JSR     $0401
AF27    LDA     $C055
AF2A    LDA     #$20
AF2C    JSR     $0401
AF2F    LDA     #$30
AF31    JSR     $0401

Four half-tracks, protecting the two title screens.

The rest of the disk is read using regular tracks, so we can fix the epilogue and place the title screens on regular tracks, and we have a bootable image.
However, the game is not a single-loader! After each level is a small loader for decoration around the level number. It also saves the high scores.
So you know that any file-based crack so far will be missing at least one of those things.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Site Admin

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

MessagePosté le: Dim 19 Fév 2017, 15:36    Sujet du message: Répondre en citant

Nice protection and great crack!
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 :