Index du Forum
IDENTIFICATION SERVEUR : 51.83.10.223 - CLIENT : 3.214.224.224

 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 

Mandragore (Infogrames, 1985)
Aller à la page 1, 2  Suivante
 
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Lun 23 Jan 2012, 22:48    Sujet du message: Mandragore (Infogrames, 1985) Répondre en citant

You know what? That game was protected by... The Softman Wink
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 24 Jan 2012, 0:07    Sujet du message: Répondre en citant

You know what? The game was adapted from the C64 by... Emile himself!

Really nice RAM to stack decyphering routines.
Really nice jump to jump to jump routines.
Really nice desynchro routine.
Really nice, as usual!

I wish my disk would be clean, it is a nightmare to boot it, really similar to Hold-Up, you just keep on cleaning the disk drive head...

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

MessagePosté le: Jeu 26 Jan 2012, 9:08    Sujet du message: Répondre en citant

Eh, I think I am close to have rewritten read routines to read both sides of the disk.

It looks like it is a 4*4 encoding scheme for all other tracks, with one big sector of $C00 bytes. Hum, interesting...

That is totally different from Hold-Up but as fun as it.

Emile, you rock!

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

MessagePosté le: Jeu 26 Jan 2012, 20:10    Sujet du message: Boot 1 @ $0800 Répondre en citant

Boot 1 @ $0800.
See the interesting decyphering routine which saves data thanks to the stack...

Code:

*
* Mandragore
* (c) 1985, Infogrames
*

         ORG   $0800
         MX    %11

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

PWREDUP  EQU   $03F4
KBD      EQU   $C000
SETINTC3ROM EQU $C00A
CLR80VID EQU   $C00C
KBDSTROBE EQU  $C010
TXTCLR   EQU   $C050
MIXCLR   EQU   $C052
TXTPAGE2 EQU   $C055
HIRES    EQU   $C057
INIT     EQU   $FB2F
SETKBD   EQU   $FE89

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

L0800    HEX   01

         LDA   $27
         CMP   #$09
         BNE   L085A

         STA   PWREDUP    ; some inits
         LDX   #$FF
         TXS
         STX   CLR80VID
         JSR   INIT
         JSR   SETKBD
         STX   KBD
         STX   KBDSTROBE
         STX   SETINTC3ROM

         LDY   #$40       ; clear HGR2
         STY   $3F
         LDY   #$00
         STY   $26
         STY   $3E
         TYA
         LDX   #$20
L082C    STA   ($3E),Y
         INY
         BNE   L082C
         INC   $3F
         DEX
         BNE   L082C

         STA   HIRES      ; show HGR2
         STA   TXTPAGE2
         STA   TXTCLR
         STA   MIXCLR

         LDA   $2B        ; set slot*16
         LSR
         LSR
         LSR
         LSR
         ORA   #$C0
         STA   $3F
         LDA   #$5C
         STA   $3E

         CLC              ; and load sector
         LDA   L0884
         ADC   L0885
         STA   L0884

L085A    LDX   L0885
         BEQ   L0896
         LDA   L0874,X
         STA   $3D
         DEC   L0885
         LDA   L0884
         STA   $27
         DEC   L0884
         LDX   $2B
         JMP   ($003E)

*----------------------------
* INTERLEAVING TABLE
*----------------------------

L0874    HEX   000D0B09070503010E0C0A080604020F

L0884    DB    $03        ; where to load
L0885    DB    $04        ; number of sectors

*----------------------------
* USEFUL DATA?
*----------------------------

         DB    $09
         DB    $0E
         DB    $06
         DB    $0F
         DB    $07
         DB    $12
         DB    $01
         DB    $0D
         DB    $05
         DB    $13
         DB    $20
         ASC   '58MST'

*----------------------------
* DECODE
*----------------------------

L0896    LDY   #$51
         LDX   #$FF
         TXS              ; stack pointer
L089B    LDA   L0800,X
         EOR   L0800,Y
         PHA              ; push onto stack
         INY
         DEX
         CPX   #$A9
         BNE   L089B
         RTS              ; and jump to it

*----------------------------
* USEFUL DATA?
*----------------------------

         DB    $74
         DB    $16
         DB    $A8
         DB    $A7
         DB    $CD
         DB    $68
         DB    $48
         DB    $AA
         DB    $04
         DB    $DF
         DB    $37
         DB    $A2
         DB    $01
         DB    $1E
         DB    $C1
         DB    $0B
         DB    $F1
         DB    $31
         DB    $6A
         DB    $9B
         DB    $9D
         DB    $C3
         DB    $D3
         DB    $1F
         DB    $D9
         DB    $D5
         DB    $FB
         DB    $21
         DB    $BB
         DB    $FD
         DB    $A6
         DB    $A8
         DB    $83
         DB    $FB
         DB    $03
         DB    $AA
         DB    $0E
         DB    $8F
         DB    $F7
         DB    $05
         DB    $41
         DB    $AF
         DB    $81
         DB    $FA
         DB    $02
         DB    $A3
         DB    $05
         DB    $BE
         DB    $09
         DB    $0F
         DB    $54
         DB    $00
         DB    $08
         DB    $A7
         DB    $6C
         DB    $2F
         DB    $1F
         DB    $08
         DB    $8C
         DB    $97
         DB    $27
         DB    $80
         DB    $91
         DB    $84
         DB    $A8
         DB    $B1
         DB    $85
         DB    $C6
         DB    $64
         DB    $85
         DB    $0E
         DB    $ED
         DB    $BD
         DB    $31
         DB    $49
         DB    $08
         DB    $8D
         DB    $F7
         DB    $08
         DB    $83
         DB    $14
         DB    $08
         DB    $82
         DB    $A5
         DB    $D8
         DB    $5D
         DB    $CD
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Jeu 26 Jan 2012, 20:12    Sujet du message: Boot 1 @ $0100 Répondre en citant

Boot 1+ @ $0100.
This is the decoded data/code put in the stack area. Note for later: if I need to protect some software, I'll use the stack.

Code:

*
* Mandragore
* (c) 1985, Infogrames
*

         ORG   $0100
         MX    %11

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

SOFTEV   EQU   $03F2
PWREDUP  EQU   $03F4

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

         DS    $AA

         DA    L01C7-1    ; 1 - decode
         DA    $0748-1    ; 2 - next stage

*----------------------------
* REBOOT
*----------------------------

L01AE    LDY   #$00
         LDX   #$04
         STX   $3F
         LDX   #$BC
         STY   $3E
         LDA   #$A0
L01BA    STA   ($3E),Y
         INY
         BNE   L01BA
         INC   $3F
         DEX
         BNE   L01BA
         JSR   $FAA9

*----------------------------
* ENTRY POINT
*----------------------------

L01C7    LDA   #<L01AE    ; set reset vector
         STA   SOFTEV
         LDA   #L01AE
         STA   SOFTEV+1
         EOR   #$A5
         STA   PWREDUP

         LDY   #$00       ; decode next boot stage
L01D8    LDA   $0400,Y
         EOR   $0800,Y
         STA   $0400,Y
         LDA   $0800,Y
         EOR   $0500,Y
         STA   $0500,Y
         LDA   $0800,Y
         EOR   $0600,Y
         STA   $0600,Y
         LDA   $0800,Y
         EOR   $0700,Y
         STA   $0700,Y
         INY
         BNE   L01D8
         RTS              ; and jump to it
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Jeu 26 Jan 2012, 20:15    Sujet du message: Boot 1++ @ $0400 Répondre en citant

Boot 1++ @ $0400.
That's not enough for our national Emile, let's EOR code and data in the text screen area...

First part is the coded data:
Code:


*---------------------------------------------------------*
*     Disassembled with The Flaming Bird Disassembler     *
*    (c) Phoenix corp. 1992,93  -  All rights reserved    *
*---------------------------------------------------------*

         TYP   BIN

         ORG   $000400
         MX    %11
         HEX   39C58EC9AD95DE2DF08F03FBA2675870
         HEX   22A7C3AD01FA0289C46747708F824DC1
         HEX   44085DA4A0A4AE74E935A2E081C58105
         HEX   2B12D567D0369DAC0927853267FDC04D
         HEX   423B6C869AA2EAE0A0C00019075C452E
         HEX   E310840DF4850AC8A2C07E6BA85AE7BE
         HEX   EDF77A93CE451856D9088099CE8655A6
         HEX   2DA4EEEC4824F7A9ADAB03C11EF75708
         HEX   03BA020D5E010F97F9F0CFC2EDA305D3
         HEX   30CE11B1F3F8FD51A74164BC5D0A5F99
         HEX   F7B766CA20B92B3BB0983F54FACD6DE0
         HEX   7A1F72376211E508D52123C79B5DD328
         HEX   D67305F28CBB3DB6534A10F3A836ABEF
         HEX   6DE1FA10BE62A305B48C29F9D60C224B
         HEX   17FA2E7CB897857F52AC218608B2812E
         HEX   E5B8115C0D28D021801E0DA90D61DD0D
         HEX   21B02239DFF0468859D5A6D6998409EB
         HEX   88967AE0E957A63888671110726229A1
         HEX   90725F986024DA001850722477183823
         HEX   56E6FFDA2B3F58873067F8C04D403B44
         HEX   F810578B49E74A8A193B4CA979BB2C3E
         HEX   9D8A2908AD95F3A7012E0385C8E0CC98
         HEX   5291A93D8BA280BD63A055906384C8B6
         HEX   D0A5E0D0AEE7A609C715F8C8A4DCAE10
         HEX   66CAD4C7ADC5090908090A170D090E10
         HEX   2A37314C5B5BA0553A6692B19C184D18
         HEX   A8E96A69440CCCD3C8DDBC8C8FE1587C
         HEX   1AB5E70BE245568DB3A16532C7FDA7BB
         HEX   DF181738E57E3B61604A316F667EFB8F
         HEX   D5907DFD2ED72381668183C494903BCC
         HEX   CFFEEA6F7383283D6C18053D7AA441C6
         HEX   1D4CFD99DC552BE87BF0E06E552CA531
         HEX   01A5275F0BD0531AF503A265998E0C5B
         HEX   202DFBBD8BFC8E9EC18C105F8D08C006
         HEX   40853F070285262F3F99A28C923FC87D
         HEX   FBE53F64D2F58DF8C18E55728E53C03E
         HEX   52C0A79F484A48FF08C08789AA5C8789
         HEX   18AF86B16F870A37850AAC3E0BF23501
         HEX   74098780CC840A1385098798CD850A6D
         HEX   2B6F3CCD020E09C7060601CE0D0F08DB
         HEX   060403D9010008D9070F06CB020D04C9
         HEX   203739965156A18DA3FD9B60030A58DE
         HEX   0849C915E2A8D1166175174EA4CC69AF
         HEX   AA07DEDEA0021F2B0AF23081989EC23F
         HEX   1FD9D61623BBFE48A983F8ECA90E8C05
         HEX   0543AC72F800A0F1BF0B0CA1030AA49A
         HEX   2F1E0B7B9526836885A9B27FC56586F5
         HEX   EDBE32B50A8EF4F582170B7CA6DB5E32
         HEX   217D23690669D588EC669C669A8E84D0
         HEX   D4869BA5B638B1F0EAAE35C53EFD648D
         HEX   F9843F50F001632D3E1DE600933A7835
         HEX   5FCB96CA49F68DF7CF3455C05D87489D
         HEX   AAD8C5C59D4E722AD198A9C066FEFAA4
         HEX   383C83A14D0036248528AE82B8059E8D
         HEX   F1362C3FEE850F1D6E24D1E76E7B8C58
         HEX   CD929AFEB9C00CF90B803DB8D60B2A08
         HEX   01B4ED9FE8A5228B46A2D116844C69F2
         HEX   272D9D663AD82D7BA672AEB98D365D8D
         HEX   454C45AEE424AAF7EDFA122504C9E5FB
         HEX   AE89EE322F3A1B4C4DF4BC399E1098D6
         HEX   92B4D07656BE701AAC0E3E07CA4EDFFF
         HEX   75210F117AB2B305BD0D0E500208A66E
         HEX   2A1FB88599218F9696A9BC80D5C4BD3B
         HEX   C3ED433D32D99F6DA34767E4D1B53CA3


Now, the same code with the decoded vision:
Code:

*
* Mandragore
* (c) 1985, Infogrames
*

         ORG   $0400
         MX    %11

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

KBD      EQU   $C000
TXTPAGE1 EQU   $C054
CLRROM   EQU   $CFFF

L0200    =     $0200

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

L0400    HEX   01
         RTS

*----------------------------
* READ SECTOR
*----------------------------

L0402    LDA   #$00
         LDY   $45
         STA   L049F+1
         STY   L049F+2
         SEC
         SBC   #$54
         BCS   L0413
         DEY
         SEC
L0413    STA   L0487+1
         STY   L0487+2
         SBC   #$57
         BCS   L041E
         DEY
L041E    STA   L0460+1
         STY   L0460+2

         LDY   #$20
L0426    DEY
         BEQ   L0400
L0429    LDA   KBD
         BPL   L0429
L042E    EOR   #$D5
         BNE   L0426
         NOP
L0433    LDA   KBD
         BPL   L0433
         CMP   #$AA
         BNE   L042E
         NOP
L043D    LDA   KBD
         BPL   L043D
         CMP   #$AD
         BNE   L042E

         LDY   #$AA
         LDA   #$00
L044A    STA   $26
L044C    LDX   KBD
         BPL   L044C
         LDA   L0500,X
         STA   L0200,Y
         EOR   $26
         INY
         BNE   L044A
         LDY   #$AA
         BNE   L0463
L0460    STA   $FFFF,Y

L0463    LDX   KBD
         BPL   L0463
         EOR   L0500,X
         LDX   L0200,Y
         EOR   L0600,X
         INY
         BNE   L0460
         PHA
         AND   #$FC
         LDY   #$AA
L0479    LDX   KBD
         BPL   L0479
         EOR   L0500,X
         LDX   L0200,Y
         EOR   L0600+1,X
L0487    STA   $FFFF,Y
         INY
         BNE   L0479
L048D    LDX   KBD
         BPL   L048D
         AND   #$FC
         LDY   #$AC
L0496    EOR   L0500,X
         LDX   L0200-2,Y
         EOR   L0600+2,X
L049F    STA   $FFFF,Y
L04A2    LDX   KBD
         BPL   L04A2
         INY
         BNE   L0496
         AND   #$FC
         EOR   L0500,X
         TAY
         BNE   L04CD

L04B2    LDA   KBD
         BPL   L04B2
         CMP   #$DE
         BNE   L04CD
L04BB    LDA   KBD
         BPL   L04BB
         CMP   #$AA
         BNE   L04CD
L04C4    LDA   KBD
         BPL   L04C4
         CMP   #$EB
         BEQ   L04CF
L04CD    SEC
         HEX   24
L04CF    CLC
         PLA
         LDY   #$55
         STA   ($44),Y
         RTS

L04D6    HEX   00
L04D7    HEX   00

*----------------------------
* MOVE HEAD
*----------------------------

L04D8    ASL
         STA   $26
L04DB    LDA   L04D6
         STA   $27
         SEC
         SBC   $26
         BEQ   L0514
         BCS   L04EC
         INC   L04D6
         BCC   L04EF
L04EC    DEC   L04D6
L04EF    JSR   L0508
         JSR   L0515
         LDA   $27
         AND   #$03
         ASL
         ORA   $2B
         TAY
         LDA   $C080,Y
L0500    JSR   L0515
         BEQ   L04DB
         JSR   L0515
L0508    LDA   L04D6
         AND   #$03
         ASL
         ORA   $2B
         TAY
         LDA   $C081,Y
L0514    RTS

L0515    LDA   #$28
         SEC
L0518    PHA
L0519    SBC   #$01
         BNE   L0519
         PLA
         SBC   #$01
         BNE   L0518
         RTS

*----------------------------
* READ HEADER
*----------------------------

L0523    SEC
         RTS

L0525    LDY   #$FC
         STY   $26
L0529    INY
         BNE   L0530
         INC   $26
         BEQ   L0523
L0530    LDA   KBD
         BPL   L0530
L0535    CMP   #$D5
         BNE   L0529
         NOP
L053A    LDA   KBD
         BPL   L053A
         CMP   #$AA
         BNE   L0535
         LDY   #$03
L0545    LDA   KBD
         BPL   L0545
         CMP   #$96
         BNE   L0535

         LDA   #$00
L0550    STA   $27
L0552    LDA   KBD
         BPL   L0552
         ROL
         STA   $26
L055A    LDA   KBD
         BPL   L055A
         AND   $26
         STA   |$002C,Y
         EOR   $27
         DEY
         BPL   L0550
         TAY
         BNE   L0523

L056C    LDA   KBD
         BPL   L056C
         CMP   #$DE
         BNE   L0523
         NOP
L0576    LDA   KBD
         BPL   L0576
         CMP   #$AA
         BNE   L0523
         CLC
         RTS

*----------------------------
* SIGNATURE
*----------------------------

         ASC   "NVH.E"

*----------------------------
* INTERLEAVING TABLE
*----------------------------

L0586    HEX   00070E060D050C040B030A020901080F

*----------------------------
* NIBBLE TABLE
*----------------------------

L0596    HEX   00049899080C9C101418A0A1A2A3A4A5
         HEX   1C20A8A9AA24282C3034B0B1383C4044
         HEX   484CB85054585C606468C0C1C2C3C4C5
         HEX   C6C7C8C9CA6CCC707478D0D1D27CD4D5
         HEX   8084D8888C9094989CA0E0E1E2E3E4A4
         HEX   A8ACE8B0B4B8BCC0C4C8F0F1CCD0D4D8
         HEX   DCE0F8E4E8ECF0F4F8FC

*----------------------------
* DENIBBLIZE TABLE
*----------------------------

L0600    HEX   00000096020000970100009A0300009B
         HEX   0002009D0202009E0102009F030200A6
         HEX   000100A7020100AB010100AC030100AD
         HEX   000300AE020300AF010300B2030300B3
         HEX   000002B4020002B5010002B6030002B7
         HEX   000202B9020202BA010202BB030202BC
         HEX   000102BD020102BE010102BF030102CB
         HEX   000302CD020302CE010302CF030302D3
         HEX   000001D6020001D7010001D9030001DA
         HEX   000201DB020201DC010201DD030201DE
         HEX   000101DF020101E5010101E6030101E7
         HEX   000301E9020301EA010301EB030301EC
         HEX   000003ED020003EE010003EF030003F2
         HEX   000203F3020203F4010203F5030203F6
         HEX   000103F7020103F9010103FA030103FB
         HEX   000303FC020303FD010303FE030303FF

*----------------------------
* RWTS
*----------------------------

L0700    JSR   L04D8      ; move head

         LDY   #$0F       ; sector to RAM pointers
L0705    LDA   L0586,Y
         CLC
         ADC   $3E
         STA   |$0000,Y
         DEY
         BPL   L0705

         LDA   #$60       ; number of retries
         STA   $3F
L0715    DEC   $3F
         BEQ   L0743
         JSR   L0525      ; read header
         BCS   L0715

         LDY   $2D        ; where to load
         LDA   |$0000,Y
         BEQ   L0715
         STA   $45
         LDA   #$00
         STA   $44
         JSR   L0402      ; read sector
         BCS   L0715
         LDY   $2D        ; mark it read
         LDA   #$00
         STA   |$0000,Y
         LDY   #$0F
L0739    LDA   |$0000,Y
         BNE   L0715
         DEY
         BPL   L0739
         CLC
         RTS
L0743    INC   L04D7      ; load error
         SEC
         RTS

*----------------------------
* MAIN ENTRY POINT
*----------------------------

L0748    CLD              ; no wildcard
         CLI
         BIT   CLRROM
         LDX   #$7F
         TXS
         JSR   L0791      ; set slot*16

L0753    LDA   #$20       ; load at $2000
         STA   $3E
         LDA   #$01
         JSR   L0700
         BCS   L0753

         LDA   #$30       ; load at $3000
         STA   $3E
         LDA   #$02
         JSR   L0700
         BCS   L0753

         BIT   TXTPAGE1   ; show HGR1

         LDY   #$FF
         STY   $FE
L0770    INC   $FE
L0772    LDY   $FE
         LDA   L07CD,Y
         BEQ   L0785
         STA   $3E
         LDA   L07D8,Y
         JSR   L0700
         BCS   L0772
         BCC   L0770

L0785    LDA   $2B        ; next boot stage
         STA   $40
         LDA   L04D6
         STA   $41
         JMP   (L07E1)    ; $B000

*----------------------------
* SLOT*16
*----------------------------

L0791    CLC
         LDA   $2B
         ADC   #$8C
         STA   L0429+1
         STA   L0433+1
         STA   L043D+1
         STA   L044C+1
         STA   L0463+1
         STA   L0479+1
         STA   L048D+1
         STA   L04A2+1
         STA   L04B2+1
         STA   L0530+1
         STA   L053A+1
         STA   L0545+1
         STA   L0552+1
         STA   L055A+1
         STA   L056C+1
         STA   L0576+1
         STA   L04BB+1
         STA   L04C4+1
         RTS

*----------------------------
* MOVE HEAD
*----------------------------

* Where to load
L07CD    HEX   4050087060A09080B010
         HEX   00
* Head movement
L07D8    HEX   030401040200010205
L07E1    HEX   00B0

         DB    $09
         DB    $0E
         DB    $06
         DB    $0F
         DB    $07
         DB    $12
         DB    $01
         DB    $0D
         DB    $05
         DB    $13
         DB    $A0

*----------------------------
* SIGNATURE
*----------------------------

         ASC   '85.Prt:The Softman'


Oh, look, who's here...
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Jeu 26 Jan 2012, 20:19    Sujet du message: Boot 1++ @ $0400 Répondre en citant

The rewritten boot 1++ at $0400.
The objective is to get data from the diskette...

Code:

*
* Mandragore
* (c) 1985, Infogrames
* (k) 2012, LoGo
*

         ORG   $0400
         MX    %11
         lst   off

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

KBD      EQU   $C000

L0200    =     $0200

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

L0400    nop
         RTS

*----------------------------
* READ SECTOR
*----------------------------

L0402    LDA   #$00
         LDY   $45
         STA   L049F+1
         STY   L049F+2
         SEC
         SBC   #$54
         BCS   L0413
         DEY
         SEC
L0413    STA   L0487+1
         STY   L0487+2
         SBC   #$57
         BCS   L041E
         DEY
L041E    STA   L0460+1
         STY   L0460+2

         LDY   #$20
L0426    DEY
         BEQ   L0400
L0429    LDA   KBD
         BPL   L0429
L042E    EOR   #$D5
         BNE   L0426
         NOP
L0433    LDA   KBD
         BPL   L0433
         CMP   #$AA
         BNE   L042E
         NOP
L043D    LDA   KBD
         BPL   L043D
         CMP   #$AD
         BNE   L042E

         LDY   #$AA
         LDA   #$00
L044A    STA   $26
L044C    LDX   KBD
         BPL   L044C
         LDA   L0500,X
         STA   L0200,Y
         EOR   $26
         INY
         BNE   L044A
         LDY   #$AA
         BNE   L0463
L0460    STA   $FFFF,Y

L0463    LDX   KBD
         BPL   L0463
         EOR   L0500,X
         LDX   L0200,Y
         EOR   L0600,X
         INY
         BNE   L0460
         PHA
         AND   #$FC
         LDY   #$AA
L0479    LDX   KBD
         BPL   L0479
         EOR   L0500,X
         LDX   L0200,Y
         EOR   L0600+1,X
L0487    STA   $FFFF,Y
         INY
         BNE   L0479
L048D    LDX   KBD
         BPL   L048D
         AND   #$FC
         LDY   #$AC
L0496    EOR   L0500,X
         LDX   L0200-2,Y
         EOR   L0600+2,X
L049F    STA   $FFFF,Y
L04A2    LDX   KBD
         BPL   L04A2
         INY
         BNE   L0496
         AND   #$FC
         EOR   L0500,X
         TAY
         BNE   L04CD

L04B2    LDA   KBD
         BPL   L04B2
         CMP   #$DE
         BNE   L04CD
L04BB    LDA   KBD
         BPL   L04BB
         CMP   #$AA
         BNE   L04CD
L04C4    LDA   KBD
         BPL   L04C4
         CMP   #$EB
         BEQ   L04CF
L04CD    SEC
         HEX   24
L04CF    CLC
         PLA
         LDY   #$55
         STA   ($44),Y
         RTS

L04D6    HEX   00
L04D7    HEX   00

*----------------------------
* MOVE HEAD
*----------------------------

L04D8    ASL
         STA   $26
L04DB    LDA   L04D6
         STA   $27
         SEC
         SBC   $26
         BEQ   L0514
         BCS   L04EC
         INC   L04D6
         BCC   L04EF
L04EC    DEC   L04D6
L04EF    JSR   L0508
         JSR   L0515
         LDA   $27
         AND   #$03
         ASL
         ORA   $2B
         TAY
         LDA   $C080,Y
L0500    JSR   L0515
         BEQ   L04DB
         JSR   L0515
L0508    LDA   L04D6
         AND   #$03
         ASL
         ORA   $2B
         TAY
         LDA   $C081,Y
L0514    RTS

L0515    LDA   #$28
         SEC
L0518    PHA
L0519    SBC   #$01
         BNE   L0519
         PLA
         SBC   #$01
         BNE   L0518
         RTS

*----------------------------
* READ HEADER
*----------------------------

L0523    SEC
         RTS

L0525    LDY   #$FC
         STY   $26
L0529    INY
         BNE   L0530
         INC   $26
         BEQ   L0523
L0530    LDA   KBD
         BPL   L0530
L0535    CMP   #$D5
         BNE   L0529
         NOP
L053A    LDA   KBD
         BPL   L053A
         CMP   #$AA
         BNE   L0535
         LDY   #$03
L0545    LDA   KBD
         BPL   L0545
         CMP   #$96
         BNE   L0535

         LDA   #$00
L0550    STA   $27
L0552    LDA   KBD
         BPL   L0552
         ROL
         STA   $26
L055A    LDA   KBD
         BPL   L055A
         AND   $26
         STA   |$002C,Y
         EOR   $27
         DEY
         BPL   L0550
         TAY
         BNE   L0523

L056C    LDA   KBD
         BPL   L056C
         CMP   #$DE
         BNE   L0523
         NOP
L0576    LDA   KBD
         BPL   L0576
         CMP   #$AA
         BNE   L0523
         CLC
         RTS

*----------------------------
* SIGNATURE
*----------------------------

         ASC   "NVH.E"

*----------------------------
* INTERLEAVING TABLE
*----------------------------

L0586    HEX   00070E060D050C040B030A020901080F

*----------------------------
* NIBBLE TABLE
*----------------------------

L0596    HEX   00049899080C9C101418A0A1A2A3A4A5
         HEX   1C20A8A9AA24282C3034B0B1383C4044
         HEX   484CB85054585C606468C0C1C2C3C4C5
         HEX   C6C7C8C9CA6CCC707478D0D1D27CD4D5
         HEX   8084D8888C9094989CA0E0E1E2E3E4A4
         HEX   A8ACE8B0B4B8BCC0C4C8F0F1CCD0D4D8
         HEX   DCE0F8E4E8ECF0F4F8FC

*----------------------------
* DENIBBLIZE TABLE
*----------------------------

L0600    HEX   00000096020000970100009A0300009B
         HEX   0002009D0202009E0102009F030200A6
         HEX   000100A7020100AB010100AC030100AD
         HEX   000300AE020300AF010300B2030300B3
         HEX   000002B4020002B5010002B6030002B7
         HEX   000202B9020202BA010202BB030202BC
         HEX   000102BD020102BE010102BF030102CB
         HEX   000302CD020302CE010302CF030302D3
         HEX   000001D6020001D7010001D9030001DA
         HEX   000201DB020201DC010201DD030201DE
         HEX   000101DF020101E5010101E6030101E7
         HEX   000301E9020301EA010301EB030301EC
         HEX   000003ED020003EE010003EF030003F2
         HEX   000203F3020203F4010203F5030203F6
         HEX   000103F7020103F9010103FA030103FB
         HEX   000303FC020303FD010303FE030303FF

*----------------------------
* RWTS
*----------------------------

L0700    JSR   L04D8      ; move head

         LDY   #$0F       ; sector to RAM pointers
L0705    LDA   L0586,Y
         CLC
         ADC   $3E
         STA   |$0000,Y
         DEY
         BPL   L0705

         LDA   #$60       ; number of retries
         STA   $3F
L0715    DEC   $3F
         BEQ   L0743
         JSR   L0525      ; read header
         BCS   L0715

         LDY   $2D        ; where to load
         LDA   |$0000,Y
         BEQ   L0715
         STA   $45
         LDA   #$00
         STA   $44
         JSR   L0402      ; read sector
         BCS   L0715
         LDY   $2D        ; mark it read
         LDA   #$00
         STA   |$0000,Y
         LDY   #$0F
L0739    LDA   |$0000,Y
         BNE   L0715
         DEY
         BPL   L0739
         CLC
         RTS
L0743    INC   L04D7      ; load error
         SEC
         RTS

*----------------------------
* MAIN ENTRY POINT
*----------------------------

L0748    lda   #$60
         sta   $2b

         JSR   L0791      ; set slot*16

L0753    LDA   #$20       ; load at $2000
         STA   $3E
         LDA   #$01
         JSR   L0700
         BCS   L0753

         LDA   #$30       ; load at $3000
         STA   $3E
         LDA   #$02
         JSR   L0700
         BCS   L0753

         LDY   #$FF
         STY   $FE
L0770    INC   $FE
L0772    LDY   $FE
         LDA   L07CD,Y
         BEQ   L0785
         STA   $3E
         LDA   L07D8,Y
         JSR   L0700
         BCS   L0772
         BCC   L0770

L0785    LDA   $2B        ; next boot stage
         STA   $FE
         LDA   L04D6
         STA   $FF

         lda   $c0e8
         jmp   $ff59

*----------------------------
* SLOT*16
*----------------------------

L0791    CLC
         LDA   $2B
         ADC   #$8C
         STA   L0429+1
         STA   L0433+1
         STA   L043D+1
         STA   L044C+1
         STA   L0463+1
         STA   L0479+1
         STA   L048D+1
         STA   L04A2+1
         STA   L04B2+1
         STA   L0530+1
         STA   L053A+1
         STA   L0545+1
         STA   L0552+1
         STA   L055A+1
         STA   L056C+1
         STA   L0576+1
         STA   L04BB+1
         STA   L04C4+1
         RTS

*----------------------------
* MOVE HEAD
*----------------------------

* Where to load
L07CD    HEX   4050087060A09080B010
         HEX   00
* Head movement
L07D8    HEX   03040104020001020500
         HEX   B0

* Memory usage is huge!
* $0800..$BFFF

         ds    \


Now, your Apple II memory is full from $0800 to $BFFF. Move it to your alternate bank or to any bank of your Apple IIgs and save it to disk.

You've just collected half of the side 1 data...
I hope you've enjoyed reading the fast boot code...
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Jeu 26 Jan 2012, 20:29    Sujet du message: Boot 2 @ $B000 Répondre en citant

Boot 2 @ $B000.
This is the next stage. A huge 4Kib from $B000 to $BFFF which contains a small RWTS. Yes, it reads and writes... 4*4 nibbles...

And, as if it was not sufficient, it is fun to make the ugly pirate wander through the code going from JMP to JMP, decoding data on the fly. At first, I thought I did something wrong by not following correctly the jumps, but, no, I was right. It is just a long process Smile

The code you will discover is the decyphered one. The following code contains a desync protection check routine ($BA00), the main entry point ($BB00) and the RWTS ($BC00). Both needed to be decyphered.

Note that the desync protection check routine replaces the low byte of the pointer of the RWTS entry point. See $BA57.
If you have an original disk, you are directed to the RWTS.
If you have a copy, *you* will reboot Smile

Code:

*
* Mandragore
* © 1985, Infogrames & Emile
* (k) 2012, LoGo
*

SOFTEV EQU $03F2
PWREDUP EQU $03F4
AMPERV EQU $03F5
KBD EQU $C000
INTEN EQU $C041
ROMIN2 EQU $C081
PREAD EQU $FB1E
WAIT EQU $FCA8
RDKEY EQU $FD0C
GETLN EQU $FD6A
WRITE EQU $FECD
READ EQU $FEFD
IORTS EQU $FF58
OLDRST EQU $FF59

         TYP   BIN
         ORG   $00B000
         MX    %11

LB000    LDX   #$FF
         TXS
         LDY   #$00
         STY   $00
         LDA   #$B0
         STA   $01
         LDX   #$06
         LDY   #$1F
LB00F    LDA   ($00),Y
         EOR   #$EE
         STA   ($00),Y
         INY
         BNE   LB00F
         INC   $01
         DEX
         BNE   LB00F
         LDY   #$00
LB01F    LDA   #$00
         STA   $1F00,Y
         INY
         BNE   LB01F
         JSR   LB3BC
LB02A    JMP   LB3D5

         ASC   "N"
LB02E    JMP   LB3C7

         ASC   "V"
LB032    JMP   LB02A

         ASC   "H"
LB036    JMP   LB400

         ASC   "E"
LB03A    JMP   LB3E5

         ASC   "INFOGRAMES 79,RUE HIPPOLYTE-KAHN"
LB05D    JMP   LB3F3

         ASC   'vyqpp'
LB065    JMP   LB05D

         ASC   "TEL:(7)"
LB06F    JMP   LB036

         ASC   '803-18-46'
         ASC   "----------------------------------------"
         ASC   "MANDRAGORE A ETE CONCU A L'ORIGINE SUR C"
         ASC   "OMMODORE 64."
         DB    $20
         DB    $03
         DB    $05
         DB    $14
         DB    $14
         DB    $05
         DB    $20
         DB    $16
         DB    $05
         DB    $12
         DB    $13
         DB    $09
         DB    $0F
         DB    $0E
         DB    $20
         DB    $01
         DB    $10
         DB    $10
         DB    $0C
         DB    $05
         DB    $20
         DB    $1D
         DB    $1B
         DB    $2C
         DB    $1D
         DB    $1B
         DB    $2B
         DB    $20
         DB    $34
         DB    $38
         DB    $0B
         DB    $2C
         DB    $2F
         DB    $2F
         DB    $25
         DB    $20
         DB    $01
         DB    $0E
         DB    $03
         DB    $09
         DB    $05
         DB    $0E
         DB    $13
         DB    $20
         DB    $05
         DB    $14
         DB    $20
         DB    $0E
         DB    $0F
         DB    $15
         DB    $16
         DB    $05
         DB    $01
         DB    $15
         DB    $18
         DB    $20
         DB    $12
         DB    $0F
         DB    $0D
         DB    $13
         DB    $2C
         DB    $01
         DB    $10
         DB    $10
         DB    $0C
         DB    $05
         DB    $20
         DB    $2F
         DB    $2F
         DB    $23
         DB    $20
         DB    $05
         DB    $14
         DB    $20
         DB    $01
         DB    $10
         DB    $10
         DB    $0C
         DB    $05
         DB    $20
         DB    $2F
         DB    $2F
         DB    $2F
         DB    $20
         DB    $05
         DB    $0E
         DB    $20
         DB    $05
         DB    $0D
         DB    $15
         DB    $0C
         DB    $01
         DB    $14
         DB    $09
         DB    $0F
         DB    $0E
         DB    $20
         DB    $05
         DB    $13
         DB    $14
         DB    $20
         DB    $15
         DB    $0E
         DB    $05
         DB    $20
         DB    $10
         DB    $15
         DB    $12
         DB    $05
         DB    $20
         DB    $01
         DB    $04
         DB    $01
         DB    $10
         DB    $14
         DB    $01
         DB    $14
         DB    $09
         DB    $0F
         DB    $0E
         DB    $20
         DB    $12
         DB    $05
         DB    $01
         DB    $0C
         DB    $09
         DB    $13
         DB    $05
         DB    $05
         DB    $20
         DB    $10
         DB    $01
         DB    $12
         DB    $20
         DB    $05
         DB    $2D
         DB    $29
         DB    $2C
         DB    $25
         DB    $20
         DB    $0E
         DB    $07
         DB    $15
         DB    $19
         DB    $05
         DB    $0E
         DB    $20
         DB    $16
         DB    $01
         DB    $0E
         DB    $20
         DB    $08
         DB    $15
         DB    $0F
         DB    $0E
         DB    $07
         DB    $2C
         DB    $0C
         DB    $27
         DB    $01
         DB    $15
         DB    $14
         DB    $05
         DB    $15
         DB    $12
         DB    $20
         DB    $04
         DB    $15
         DB    $20
         DB    $0A
         DB    $05
         DB    $15
         DB    $20
         DB    $04
         DB    $27
         DB    $01
         DB    $16
         DB    $05
         DB    $0E
         DB    $14
         DB    $15
         DB    $12
         DB    $05
         DB    $20
         ASC   'HOLDmUP.'
         ASC   "LES SEULES MODIFICATIONS SONT FAITES AU "
         ASC   "NIVEAU DE L'AFFICHAGE DES SHAPES/SPRITES"
         ASC   ", DES CARACTERES ET DE LA GESTION SUR DI"
         ASC   "SQUE COMPATIBLE APPLE ][."
         ASC   "---------------------------------------L"
         ASC   "A PROTECTION EST REALISEE PAR THE SOFTMA"
         ASC   "N."
         ASC   "----------------------------------------"
         ASC   "MANDRAGORE EST UN PRODUIT D'INFOGRAMES.T"
         ASC   "OUS DROITS DE DIFFUSION ET DE REPRODUCTI"
         ASC   "ON SONT RESERVES.TOUTES REPRODUCTIONS DE"
         ASC   " QUELQUES FORMES QUE CE SOIT,SANS L'ACCO"
         ASC   "RD SIGNE D'INFOGRAMES SONT INTERDITES ET"
         ASC   " SONT PASSIBLES DE POURSUITES JUDICIAIRE"
         ASC   "S."
         ASC   "----------------------------------------"
LB3BC    LDA   $A000,Y
         EOR   LBC00,Y
         JMP   LB02E
         DB    $6C
         DB    $00
LB3C7    STA   LBC00,Y
         LDA   LBB00,Y
         EOR   $A000,Y
         JMP   LB032

         DB    $AE
         DB    $00
LB3D5    STA   LBB00,Y
         LDA   LBD00,Y
         EOR   $A000,Y
         JMP   LB03A

         ASC   "NVHE"
LB3E5    STA   LBD00,Y
         LDA   LBE00,Y
         EOR   $A000,Y
         JMP   LB065

         DB    $9A
         DB    $CD
LB3F3    STA   LBE00,Y
         LDA   LBEF0+$10,Y
         EOR   $A000,Y
         JMP   LB06F
         DB    $6C
LB400    STA   LBEF0+$10,Y
         LDA   $A000,Y
         EOR   LBA00,Y
         STA   LBA00,Y
         INY
         BNE   LB3BC
         TXS
         JMP   OLDRST     ; BB00

         ASC   "TSM"
         JMP   $F2E9

         JSR   $DAFB
         JSR   $DB5A
LB41F    LDA   $D260,X
         PHA
         JSR   $DB5C
         INX
         PLA
         BPL   LB41F
         JSR   $D683
         LDA   #$50
         LDY   #$D3
         JSR   $DB3A
         LDY   $76
         INY
         BEQ   LB43C
         JSR   $ED19
LB43C    JSR   $DAFB
         LDX   #$DD
         JSR   $D52E
         STX   $B8
         STY   $B9
         LSR   $D8
         JSR   $00B1
         TAX
         BEQ   LB43C
         LDX   #$FF
         STX   $76
         BCC   LB45C
         JSR   $D559
         JMP   $D805

LB45C    LDX   $AF
         STX   $69
         LDX   $B0
         STX   $6A
         JSR   $DA0C
         JSR   $D559
         STY   $0F
         JSR   $D61A
         BCC   LB4B5
         LDY   #$01
         LDA   ($9B),Y
         STA   $5F
         LDA   $69
         STA   $5E
         LDA   $9C
         STA   $61
         LDA   $9B
         DEY
         SBC   ($9B),Y
         CLC
         ADC   $69
         STA   $69
         STA   $60
         LDA   $6A
         ADC   #$FF
         STA   $6A
         SBC   $9C
         TAX
         SEC
         LDA   $9B
         SBC   $69
         TAY
         BCS   LB49F
         INX
         DEC   $61
LB49F    CLC
         ADC   $5E
         BCC   LB4A7
         DEC   $5F
         CLC
LB4A7    LDA   ($5E),Y
         STA   ($60),Y
         INY
         BNE   LB4A7
         INC   $5F
         INC   $61
         DEX
         BNE   LB4A7
LB4B5    LDA   $0200
         BEQ   LB4F2
         LDA   $73
         LDY   $74
         STA   $6F
         STY   $70
         LDA   $69
         STA   $96
         ADC   $0F
         STA   $94
         LDY   $6A
         STY   $97
         BCC   LB4D1
         INY
LB4D1    STY   $95
         JSR   $D393
         LDA   $50
         LDY   $51
         STA   $01FE
         STY   $01FF
         LDA   $6D
         LDY   $6E
         STA   $69
         STY   $6A
         LDY   $0F
LB4EA    LDA   $01FB,Y
         DEY
         STA   ($9B),Y
         BNE   LB4EA
LB4F2    JSR   $D665
         LDA   $67
         LDY   $68
         STA   $5E
         STY   $5F
         CLC
LB4FE    LDY   #$01
         LDA   ($5E),Y
         BNE   LB50F
         LDA   $69
         STA   $AF
         LDA   $6A
         STA   $B0
         JMP   $D43C

LB50F    LDY   #$04
LB511    INY
         LDA   ($5E),Y
         BNE   LB511
         INY
         TYA
         ADC   $5E
         TAX
         LDY   #$00
         STA   ($5E),Y
         LDA   $5F
         ADC   #$00
         INY
         STA   ($5E),Y
         STX   $5E
         STA   $5F
         BCC   LB4FE
         LDX   #$80
         STX   $33
         JSR   GETLN
         CPX   #$EF
         BCC   LB539
         LDX   #$EF
LB539    LDA   #$00
         STA   $0200,X
         TXA
         BEQ   LB54C
LB541    LDA   $01FF,X
         AND   #$7F
         STA   $01FF,X
         DEX
         BNE   LB541
LB54C    LDA   #$00
         LDX   #$FF
         LDY   #$01
         RTS

         JSR   RDKEY
         AND   #$7F
         RTS

         LDX   $B8
         DEX
         LDY   #$04
         STY   $13
         BIT   $D6
         BPL   LB56C
         PLA
         PLA
         JSR   $D665
         JMP   $D7D2

LB56C    INX
LB56D    LDA   $0200,X
         BIT   $13
         BVS   LB578
         CMP   #$20
         BEQ   LB56C
LB578    STA   $0E
         CMP   #$22
         BEQ   LB5F2
         BVS   LB5CD
         CMP   #$3F
         BNE   LB588
         LDA   #$BA
         BNE   LB5CD
LB588    CMP   #$30
         BCC   LB590
         CMP   #$3C
         BCC   LB5CD
LB590    STY   $AD
         LDA   #$D0
         STA   $9D
         LDA   #$CF
         STA   $9E
         LDY   #$00
         STY   $0F
         DEY
         STX   $B8
         DEX
LB5A2    INY
         BNE   LB5A7
         INC   $9E
LB5A7    INX
LB5A8    LDA   $0200,X
         CMP   #$20
         BEQ   LB5A7
         SEC
         SBC   ($9D),Y
         BEQ   LB5A2
         CMP   #$80
         BNE   LB5F9
         ORA   $0F
         CMP   #$C5
         BNE   LB5CB
         LDA   $0201,X
         CMP   #$4E
         BEQ   LB5F9
         CMP   #$4F
         BEQ   LB5F9
         LDA   #$C5
LB5CB    LDY   $AD
LB5CD    INX
         INY
         STA   $01FB,Y
         LDA   $01FB,Y
         BEQ   LB610
         SEC
         SBC   #$3A
         BEQ   LB5E0
         CMP   #$49
         BNE   LB5E2
LB5E0    STA   $13
LB5E2    SEC
         SBC   #$78
         BNE   LB56D
         STA   $0E
LB5E9    LDA   $0200,X
         BEQ   LB5CD
         CMP   $0E
         BEQ   LB5CD
LB5F2    INY
         STA   $01FB,Y
         INX
         BNE   LB5E9
LB5F9    LDX   $B8
         INC   $0F
LB5FD    LDA   ($9D),Y
         INY
         BNE   LB604
         INC   $9E
LB604    ASL
         BCC   LB5FD
         LDA   ($9D),Y
         BNE   LB5A8
         LDA   $0200,X
         BPL   LB5CB
LB610    STA   $01FD,Y
         DEC   $B9
         LDA   #$FF
         STA   $B8
         RTS

         LDA   $67
         LDX   $68
LB61E    LDY   #$01
         STA   $9B
         STX   $9C
         LDA   ($9B),Y
         BEQ   LB647
         INY
         INY
         LDA   $51
         CMP   ($9B),Y
         BCC   LB648
         BEQ   LB635
         DEY
         BNE   LB63E
LB635    LDA   $50
         DEY
         CMP   ($9B),Y
         BCC   LB648
         BEQ   LB648
LB63E    DEY
         LDA   ($9B),Y
         TAX
         DEY
         LDA   ($9B),Y
         BCS   LB61E
LB647    CLC
LB648    RTS

         BNE   LB648
         LDA   #$00
         STA   $D6
         TAY
         STA   ($67),Y
         INY
         STA   ($67),Y
         LDA   $67
         ADC   #$02
         STA   $69
         STA   $AF
         LDA   $68
         ADC   #$00
         STA   $6A
         STA   $B0
         JSR   $D697
         LDA   #$00
         BNE   LB696
         LDA   $73
         LDY   $74
         STA   $6F
         STY   $70
         LDA   $69
         LDY   $6A
         STA   $6B
         STY   $6C
         STA   $6D
         STY   $6E
         JSR   $D849
         LDX   #$55
         STX   $52
         PLA
         TAY
         PLA
         LDX   #$F8
         TXS
         PHA
         TYA
         PHA
         LDA   #$00
         STA   $7A
         STA   $14
LB696    RTS

         CLC
         LDA   $67
         ADC   #$FF
         STA   $B8
         LDA   $68
         ADC   #$FF
         STA   $B9
         RTS

         BCC   LB6B1
         BEQ   LB6B1
         CMP   #$C9
         BEQ   LB6B1
         CMP   #$2C
         BNE   LB696
LB6B1    JSR   $DA0C
         JSR   $D61A
         JSR   $00B7
         BEQ   LB6CC
         CMP   #$C9
         BEQ   LB6C4
         CMP   #$2C
         BNE   LB648
LB6C4    JSR   $00B1
         JSR   $DA0C
         BNE   LB696
LB6CC    PLA
         PLA
         LDA   $50
         ORA   $51
         BNE   LB6DA
         LDA   #$FF
         STA   $50
         STA   $51
LB6DA    LDY   #$01
         LDA   ($9B),Y
         BEQ   LB724
         JSR   $D858
         JSR   $DAFB
         INY
         LDA   ($9B),Y
         TAX
         INY
         LDA   ($9B),Y
         CMP   $51
         BNE   LB6F5
         CPX   $50
         BEQ   LB6F7
LB6F5    BCS   LB724
LB6F7    STY   $85
         JSR   $ED24
         LDA   #$20
LB6FE    LDY   $85
         AND   #$7F
LB702    JSR   $DB5C
         LDA   $24
         CMP   #$21
         BCC   LB712
         JSR   $DAFB
         LDA   #$05
         STA   $24
LB712    INY
         LDA   ($9B),Y
         BNE   LB734
         TAY
         LDA   ($9B),Y
         TAX
         INY
         LDA   ($9B),Y
         STX   $9B
         STA   $9C
         BNE   LB6DA
LB724    LDA   #$0D
         JSR   $DB5C
         JMP   $D7D2

         INY
         BNE   LB731
         INC   $9E
LB731    LDA   ($9D),Y
         RTS

LB734    BPL   LB702
         SEC
         SBC   #$7F
         TAX
         STY   $85
         LDY   #$D0
         STY   $9D
         LDY   #$CF
         STY   $9E
         LDY   #$FF
LB746    DEX
         BEQ   LB750
LB749    JSR   $D72C
         BPL   LB749
         BMI   LB746
LB750    LDA   #$20
         JSR   $DB5C
LB755    JSR   $D72C
         BMI   LB75F
         JSR   $DB5C
         BNE   LB755
LB75F    JSR   $DB5C
         LDA   #$20
         BNE   LB6FE
         LDA   #$80
         STA   $14
         JSR   $DA46
         JSR   $D365
         BNE   LB777
         TXA
         ADC   #$0F
         TAX
         TXS
LB777    PLA
         PLA
         LDA   #$09
         JSR   $D3D6
         JSR   $D9A3
         CLC
         TYA
         ADC   $B8
         PHA
         LDA   $B9
         ADC   #$00
         PHA
         LDA   $76
         PHA
         LDA   $75
         PHA
         LDA   #$C1
         JSR   $DEC0
         JSR   $DD6A
         JSR   $DD67
         LDA   $A2
         ORA   #$7F
         AND   $9E
         STA   $9E
         LDA   #$AF
         LDY   #$D7
         STA   $5E
         STY   $5F
         JMP   $DE20

         LDA   #$13
         LDY   #$E9
         JSR   $EAF9
         JSR   $00B7
         CMP   #$C7
         BNE   LB7C3
         JSR   $00B1
         JSR   $DD67
LB7C3    JSR   $EB82
         JSR   $DE15
         LDA   $86
         PHA
         LDA   $85
         PHA
         LDA   #$81
         PHA
         TSX
         STX   $F8
         JSR   $D858
         LDA   $B8
         LDY   $B9
         LDX   $76
         INX
         BEQ   LB7E5
         STA   $79
         STY   $7A
LB7E5    LDY   #$00
         LDA   ($B8),Y
         BNE   LB842
         LDY   #$02
         LDA   ($B8),Y
         CLC
         BEQ   LB826
         INY
         LDA   ($B8),Y
         STA   $75
         INY
         LDA   ($B8),Y
         STA   $76
         TYA
         ADC   $B8
         STA   $B8
         BCC   LB805
         INC   $B9
LB805    BIT   $F2
         BPL   LB81D
         LDX   $76
         INX
         BEQ   LB81D
         LDA   #$23
         JSR   $DB5C
         LDX   $75
         LDA   $76
         JSR   $ED24
         JSR   $DB57
LB81D    JSR   $00B1
         JSR   $D828
         JMP   $D7D2

LB826    BEQ   LB88A
         BEQ   LB857
         SBC   #$80
         BCC   LB83F
         CMP   #$40
         BCS   LB846
         ASL
         TAY
         LDA   $D001,Y
         PHA
         LDA   $D000,Y
         PHA
         JMP   $00B1
LB83F    JMP   $DA46

LB842    CMP   #$3A
         BEQ   LB805
LB846    JMP   $DEC9

         SEC
         LDA   $67
         SBC   #$01
         LDY   $68
         BCS   LB853
         DEY
LB853    STA   $7D
         STY   $7E
LB857    RTS

         LDA   KBD
         CMP   #$83
         BEQ   LB860
         RTS

LB860    JSR   $D553
         LDX   #$FF
         BIT   $D8
         BPL   LB86C
         JMP   $F2E9

LB86C    CMP   #$03
         BCS   LB871
         CLC
LB871    BNE   LB8AF
         LDA   $B8
         LDY   $B9
         LDX   $76
         INX
         BEQ   LB888
         STA   $79
         STY   $7A
         LDA   $75
         LDY   $76
         STA   $77
         STY   $78
LB888    PLA
         PLA
LB88A    LDA   #$5D
         LDY   #$D3
         BCC   LB893
         JMP   $D431
LB893    JMP   $D43C

         BNE   LB8AF
         LDX   #$D2
         LDY   $7A
         BNE   LB8A1
         JMP   $D412

LB8A1    LDA   $79
         STA   $B8
         STY   $B9
         LDA   $77
         LDY   $78
         STA   $75
         STY   $76
LB8AF    RTS

         SEC
         LDA   $AF
         SBC   $67
         STA   $50
         LDA   $B0
         SBC   $68
         STA   $51
         JSR   $D8F0
         JSR   WRITE
         JSR   $D901
         JMP   WRITE

         JSR   $D8F0
         JSR   READ
         CLC
         LDA   $67
         ADC   $50
         STA   $69
         LDA   $68
         ADC   $51
         STA   $6A
         LDA   $52
         STA   $D6
         JSR   $D901
         JSR   READ
         BIT   $D6
         BPL   LB8ED
         JMP   $D665
LB8ED    JMP   $D4F2

         LDA   #$50
         LDY   #$00
         STA   $3C
         STY   $3D
         LDA   #$52
         STA   $3E
         STY   $3F
         STY   $D6
         RTS

         LDA   $67
         LDY   $68
         STA   $3C
         STY   $3D
         LDA   $69
         LDY   $6A
         STA   $3E
         STY   $3F
         RTS

         PHP
         DEC   $76
         PLP
         BNE   LB91B
         JMP   $D665

LB91B    JSR   $D66C
         JMP   $D935

         LDA   #$03
         JSR   $D3D6
         LDA   $B9
         PHA
         LDA   $B8
         PHA
         LDA   $76
         PHA
         LDA   $75
         PHA
         LDA   #$B0
         PHA
         JSR   $00B7
         JSR   $D93E
         JMP   $D7D2

         JSR   $DA0C
         JSR   $D9A6
         LDA   $76
         CMP   $51
         BCS   LB955
         TYA
         SEC
         ADC   $B8
         LDX   $B9
         BCC   LB959
         INX
         BCS   LB959
LB955    LDA   $67
         LDX   $68
LB959    JSR   $D61E
         BCC   LB97B+1
         LDA   $9B
         SBC   #$01
         STA   $B8
         LDA   $9C
         SBC   #$00
         STA   $B9
LB96A    RTS

         BNE   LB96A
         LDA   #$FF
         STA   $85
         JSR   $D365
         TXS
         CMP   #$B0
         BEQ   LB984
         LDX   #$16
LB97B    BIT   $5AA2
         JMP   $D412
LB981    JMP   $DEC9

LB984    PLA
         PLA
         CPY   #$42
         BEQ   LB9C5
         STA   $75
         PLA
         STA   $76
         PLA
         STA   $B8
         PLA
         STA   $B9
         JSR   $D9A3
LB998    TYA
         CLC
         ADC   $B8
         STA   $B8
         BCC   LB9A2
         INC   $B9
LB9A2    RTS

         LDX   #$3A
         HEX   2C
         LDX   #$00
         STX   $0D
         LDY   #$00
         STY   $0E
LB9AE    LDA   $0E
         LDX   $0D
         STA   $0D
         STX   $0E
LB9B6    LDA   ($B8),Y
         BEQ   LB9A2
         CMP   $0E
         BEQ   LB9A2
         INY
         CMP   #$22
         BNE   LB9B6
         BEQ   LB9AE
LB9C5    PLA
         PLA
         PLA
         RTS

         JSR   $DD7B
         JSR   $00B7
         CMP   #$AB
         BEQ   LB9D8
         LDA   #$C4
         JSR   $DEC0
LB9D8    LDA   $9D
         BNE   LB9E1
         JSR   $D9A6
         BEQ   LB998
LB9E1    JSR   $00B7
         BCS   LB9E9
         JMP   $D93E
LB9E9    JMP   $D828

         JSR   $E6F8
         PHA
         CMP   #$B0
         BEQ   LB9F8
         CMP   #$AB
         BNE   LB981
LB9F8    DEC   $A1
         BNE   LBA00
         PLA
         JMP   $D82A

*----------------------------
* DESYNC CHECK
*----------------------------

LBA00    LDX   $40        ; turn drive on
         LDA   $C08E,X
         LDA   $C089,X
         LDA   $C08A,X

         LDA   ROMIN2     ; clear rom
         LDA   ROMIN2
         LDY   #$D0
         STY   $01
         LDY   #$00
         STY   $00
LBA19    LDA   ($00),Y
         STA   ($00),Y
         EOR   LBFFD+2
         STA   LBFFD+2
         INY
         BNE   LBA19
         INC   $01
         LDA   $01
         CMP   #$00
         BNE   LBA19

         LDA   #$03       ; number of retries
         STA   $02
LBA32    LDA   #$00
         STA   $01
LBA36    DEC   $01
         LDA   $01
         BEQ   LBA71
LBA3C    LDX   $40
         JSR   LBB55      ; read header
         BNE   LBA3C
LBA43    LDA   $C08C,X
         BPL   LBA43
LBA48    EOR   #$D5
         BNE   LBA43
         NOP
LBA4D    LDA   $C08C,X
         BPL   LBA4D
         CMP   #$AA
         BNE   LBA48
         NOP
LBA57    LDA   $C08C,X
         BPL   LBA57
         CMP   #$AD
         BNE   LBA48
         JSR   LBA7B      ; check
         BCS   LBA36
         DEC   $02        ; next try
         LDA   $02
         BNE   LBA32
         LDA   #$00       ; WE HAVE IT!
         STA   LBB42+1    ; patch RWTS entry point
         RTS

LBA71    SEC
         RTS

LBA73    DEC   $3E
         BNE   LBA7B
         DEC   $00
         BEQ   LBA71

LBA7B    LDA   $C08C,X
         BPL   LBA7B
LBA80    CMP   #$DE
         BNE   LBA73
         NOP
LBA85    LDA   $C08C,X
         BPL   LBA85
         CMP   #$AA
         BNE   LBA80
         NOP
LBA8F    LDA   $C08C,X
         BPL   LBA8F
         CMP   #$EB
         BNE   LBA80
LBA98    LDA   $C08C,X
         BPL   LBA98
         CMP   #$EE       ; we will desync
         BNE   LBA71
LBAA1    LDA   $C08C,X
         BPL   LBAA1
         LDA   $C08D,X
         JSR   LBAF5
         LDA   $C08C,X    ; do now
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP

LBAB5    LDA   $C08C,X    ; now read nibbles
         BPL   LBAB5
         STA   LBB48
LBABD    LDA   $C08C,X
         BPL   LBABD
         STA   LBB48+1
LBAC5    LDA   $C08C,X
         BPL   LBAC5
         STA   LBB48+2
LBACD    LDA   $C08C,X
         BPL   LBACD
         STA   LBB48+3
LBAD5    LDA   $C08C,X
         BPL   LBAD5
         STA   LBB48+4
LBADD    LDA   $C08C,X
         BPL   LBADD
         STA   LBB48+5

         LDY   #$06       ; check
LBAE7    DEY
         BEQ   LBAF4
         LDA   LBB4F,Y
         CMP   LBB48,Y
         BEQ   LBAE7
         SEC              ; not clear
         HEX   24
LBAF4    CLC              ; clear
LBAF5    RTS

         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE
         DB    $EE

*----------------------------
* STAGE 2 ENTRY POINT
*----------------------------

LBB00    LDA   #$00       ; some inits
         STA   AMPERV
         STA   LBFFD+2
         LDA   #$03
         STA   SOFTEV
         STA   $03F0
         LDA   #$BC
         STA   SOFTEV+1
         STA   $03F1
         EOR   #$A5
         STA   PWREDUP

         JSR   LBA00      ; desync check

         LDA   #$0F       ; read
         JSR   LBB3C
         LDA   #$10       ; read
         JSR   LBB3C
         LDA   #$11       ; read
         JSR   LBB3C
         LDA   #$12       ; read
         JSR   LBB3C
         LDA   #$14       ; read
         JSR   LBB3C
         JMP   $4000      ; next stage

LBB3C    STA   $00
LBB3E    LDA   $00
         LDX   #$01       ; read command
LBB42    JSR   LBC03      ; BC00
         BCS   LBB3E
         RTS

LBB48    HEX   00000000000000
LBB4F    HEX   00FFAAFFBBFF

LBB55    JSR   LBB84
LBB58    CMP   #$D5
         BNE   LBB55
         JSR   LBB84
         CMP   #$AA
         BNE   LBB58
         JSR   LBB84
         CMP   #$96
         BNE   LBB58
         JSR   LBB84
         JSR   LBB84
         JSR   LBB84
         JSR   LBB84
         JSR   LBB84
         ROL
         STA   $20
         JSR   LBB84
         AND   $20
         CMP   $02
         RTS

LBB84    LDA   $C08C,X
         BPL   LBB84
         RTS

         ASC   "ADAPTATION APPLE DE MANDRAGORE: EMILE NG"
         ASC   "UYEN VAN HUONG PRODOS,DOS 3.3,. CETTE PR"
         ASC   "OTECTION EST REALISEE PAR:"
         DB    $14
         DB    $08
         DB    $05
         DB    $20
         DB    $13
         DB    $0F
         DB    $06
         DB    $14
         DB    $0D
         DB    $01
         DB    $0E
         DB    $2E

*----------------------------
* RWTS
*----------------------------

LBC00    JMP   LBDC6      ; RWTS
LBC03    JMP   LBF35      ; RESET

*----------------------------
* WRITE SECTOR
*----------------------------

LBC06    LDA   #$20
         STA   $49
         JSR   LBCD4
         LDA   #$00
         STA   $46
         TAY
         LDX   $40
         LDA   $C08D,X
         LDA   $C08E,X
         BPL   LBC1E
         SEC
         RTS

LBC1E    LDA   #$FF
         STA   $C08F,X
         ORA   $C08C,X
         ROL   $FE
LBC28    EOR   $C040
         EOR   INTEN
         EOR   $C042
         EOR   $FE
         BPL   LBC39
         ORA   #$FF
         BMI   LBC3C
LBC39    ORA   #$FD
         NOP
LBC3C    STA   $C08D,X
         ORA   $C08C,X
         DEY
         BNE   LBC28
         NOP
         LDA   $42
         JSR   LBCC8
         LDA   $43
         JSR   LBCC8
         LDA   $44
         JSR   LBCC8
         NOP
         BCC   LBC70
LBC58    TYA
         BNE   LBC70
         LDA   |$0049
         EOR   $46
         STA   $46
         LDA   $44
         STA   $C08D,X
         CMP   $C08C,X
         ROL   $FE
         ROL   $FE
         ROL   $FE
LBC70    LDA   ($47),Y
         STA   $49
         LSR
         ORA   #$AA
         STA   $C08D,X
         CMP   $C08C,X
         INY
         BNE   LBC87
         INC   $48
         DEC   $45
         JMP   LBC8F

LBC87    LDA   $49
         EOR   $46
         STA   $46
         BIT   $FE
LBC8F    LDA   |$0049
         ORA   #$AA
         STA   $C08D,X
         CMP   $C08C,X
         LDA   $45
         BNE   LBC58
         BIT   $FE
         LDA   $44
         JSR   LBCC9
         LDA   $46
         EOR   |$0049
         LSR
         ORA   #$AA
         JSR   LBCCD
         BIT   $FE
         LDA   $46
         EOR   $49
         ORA   #$AA
         JSR   LBCCD
         LDA   $43
         JSR   LBCC8
         LDA   $42
         JSR   LBCC8
         JMP   LBD0D

LBCC8    CLC
LBCC9    BIT   $FE
         BIT   $FE
LBCCD    STA   $C08D,X
         ORA   $C08C,X
         RTS

LBCD4    LDX   $40
         LDA   $C08D,X
         LDA   $C08E,X
         BPL   LBCE0
         SEC
         RTS

LBCE0    LDA   #$F5
         STA   $C08F,X
         ORA   $C08C,X
         PHA
         PLA
LBCEA    PHA
         PLA
         EOR   $4C
LBCEE    EOR   $40
         PHA
         PLA
         EOR   $49
         EOR   $4B
         STA   $C08D,X
         CMP   $C08C,X
         NOP
         DEY
         BNE   LBCEA
LBD00    DEC   $49
         LDA   $49
         BNE   LBCEE
         LDA   $C08E,X
         LDA   $C08C,X
         RTS

LBD0D    LDA   #$FF
         PHA
         PLA
         STX   $40
         NOP
         STA   $C08D,X
         CMP   $C08C,X
         PHA
         PLA
         PHA
         PLA
         PHA
         PLA
         NOP
         STA   $C08D,X
         CMP   $C08C,X
         LDX   $40
         LDX   $40
         LDA   $42
         JSR   LBCC8
         STX   $40
         LDA   #$FE
         JSR   LBCC9
         JSR   IORTS
         PHA
         PLA
         BIT   $FE
         NOP
         LDA   $C08E,X
         LDA   $C08C,X
         CLC
         RTS

LBD47    DEC   $26
         BNE   LBD51
         DEC   $27
         BNE   LBD51
         SEC
         RTS

*----------------------------
* READ SECTOR
*----------------------------

LBD51    LDA   #$00
         TAY
         STA   $46
         LDX   $40
         JSR   LBDB7
LBD5B    CMP   $42        ; header 1
         BNE   LBD47
         JSR   LBDB7
         CMP   $43        ; header 2
         BNE   LBD5B
         JSR   LBDB7
         CMP   $44        ; header 3
         BNE   LBD5B

LBD6D    LDA   $C08C,X    ; read 4*4 nibbles
         BPL   LBD6D
         ROL
         STA   $49
LBD75    LDA   $C08C,X
         BPL   LBD75
         AND   $49
         STA   ($47),Y
         EOR   $46
         STA   $46
         INY
         BNE   LBD6D

LBD85    LDA   $C08C,X    ; final marker
         BPL   LBD85
         CMP   $44
         BNE   LBD51

         INC   $48        ; RAM++
         DEC   $45        ; page--
         LDA   $45
         BNE   LBD6D

         JSR   LBDB7      ; checksum nibble
         ROL
         STA   $49
         JSR   LBDB7
         AND   $49
         EOR   $46
         BNE   LBDB5

         JSR   LBDB7      ; final markers
         CMP   $43
         BNE   LBDB5
         JSR   LBDB7
         CMP   $42
         BNE   LBDB5
         CLC
         HEX   24
LBDB5    SEC
         RTS

LBDB7    LDA   $C08C,X
         BPL   LBDB7
         RTS

LBDBD    HEX   00
         ASC   "N.V.H.E"
LBDC5    DB    $00

*----------------------------
* RWTS ENTRY POINT
*----------------------------

* $40: (60) slot*16
* $41: (00) current phase
* $42: marker 1
* $43: marker 2
* $44: marker 3
* $45: number of $C sectors to load
* $46: checksum
* $47: low RAM pointer
* $48: high RAM pointer
* $49: nibble read
* $4A: data length
* $4B: nb errors
* $4C: track number
* $4D: phase number ($4C*2)

LBDC6    STA   LBDBD      ; index
         STX   LBDC5      ; command

         LDA   #$04       ; nb errors
         STA   $4B
         LDA   #$EE       ; marker
         STA   $42
         LDA   #$DD       ; marker
         STA   $43
         LDA   #$CC
         CLC
         ADC   AMPERV     ; (00) tricky trick
         STA   $44

LBDE0    DEC   $4B        ; nb errors
         LDA   #$00       ; RAM
         STA   $47
         LDY   LBDBD
         LDA   LBEF0,Y    ; Data length
         STA   $4A
         LDA   LBF07,Y    ; RAM
         STA   $48
         LDA   LBF1E,Y    ; Track
         STA   $4C

         LDX   $40        ; turn motor on
         LDA   $C089,X
         LDA   $C08A,X
LBE00    JSR   WAIT
         JSR   WAIT
         JSR   LBE74      ; move arm

         LDA   LBDC5
         CMP   #$01       ; read
         BEQ   LBE1B
         CMP   #$02       ; write
         BEQ   LBE40
         STA   $C088,X
         RTS

LBE18    JMP   LBDE0

*----------------------------
* RWTS READ
*----------------------------

LBE1B    JSR   LBE62      ; number of pages

         LDY   #$00
         STY   $26
         STY   $27

         LDA   $4B        ; error?
         BEQ   LBE38
         JSR   LBD51      ; read sector
         BCS   LBE18
         INC   $4C        ; next track
         JSR   LBE74      ; move arm
         LDA   $4A        ; more data to load?
         BNE   LBE1B
         CLC
         HEX   24
LBE38    SEC
         STA   $C088,X
         RTS

LBE3D    JMP   LBDE0

*----------------------------
* RWTS WRITE
*----------------------------

LBE40    JSR   LBE62      ; number of pages

         LDY   #$00
         STY   $26
         STY   $27

         LDA   $4B        ; error?
         BEQ   LBE5D
         JSR   LBC06      ; write sector
         BCS   LBE3D
         INC   $4C
         JSR   LBE74      ; move arm
         LDA   $4A        ; more data to save?
         BNE   LBE40
         CLC
         HEX   24
LBE5D    SEC
         STA   $C088,X
         RTS

*----------------------------
* NB PAGE CALCULATION
*----------------------------

LBE62    LDY   #$0C
         SEC
         LDA   $4A
         SBC   #$0C
         BCS   LBE6F
         LDA   #$00
         LDY   $4A
LBE6F    STA   $4A
         STY   $45
         RTS

*----------------------------
* MOVE ARM
*----------------------------

LBE74    LDA   $4C
         ASL
         STA   $4D
         CMP   $41
         BEQ   LBECA
         LDA   #$00
         STA   $26
LBE81    LDA   $41
         STA   $27
         SEC
         SBC   $4D
         BEQ   LBEBB
         BCS   LBE92
         EOR   #$FF
         INC   $41
         BCC   LBE96
LBE92    ADC   #$FE
         DEC   $41
LBE96    CMP   $26
         BCC   LBE9C
         LDA   $26
LBE9C    CMP   #$0C
         BCS   LBEA1
         TAY
LBEA1    SEC
         JSR   LBEBF
         LDA   LBED8,Y
         JSR   LBECD
         LDA   $27
         CLC
         JSR   LBEC1
         LDA   LBEE4,Y
         JSR   LBECD
         INC   $26
         BNE   LBE81
LBEBB    JSR   LBECD
         CLC
LBEBF    LDA   $41
LBEC1    AND   #$03
         ROL
         ORA   $40
         TAX
         LDA   $C080,X
LBECA    LDX   $40
         RTS

LBECD    LDX   #$13
LBECF    DEX
         BNE   LBECF
         SEC
         SBC   #$01
         BNE   LBECD
         RTS

* interleaving table
LBED8    HEX   01302824201E1D1C1C1C1C1C
LBEE4    HEX   702C26221F1E1D1C1C1C1C1C

* Number of pages
LBEF0    HEX   382A1C2521241A202B2422200D0D0D0D
         HEX   0A030C1F1E08FF

* RAM pointers
LBF07    HEX   65656565656565656565646512121212
         HEX   086440409D64FF

* Track
LBF1E    HEX   0005090C101316191C201C1F16181A14
         HEX   1312110E0B0AFF

* Can we say first half for side 1
* and second half for side 2?

*----------------------------
* RESET
*----------------------------

LBF35    LDY   #$1F
LBF37    LDA   LBF43,Y
         STA   |$0000,Y
         DEY
         BPL   LBF37
         JMP   $0000

LBF43    NOP
         LDX   #$BE
         LDY   #$02
         STY   $21
         LDY   #$00
         STY   $20
         LDA   #$A0
LBF50    STA   ($20),Y
         INY
         BNE   LBF50
         INC   $21
         DEX
         BNE   LBF50
         JMP   $FAA9

         NOP
         ASC   "NVHE"
         JMP   $E301

         JSR   $DD6D
         BCS   LBF7D
         LDA   $AA
         ORA   #$7F
         AND   $A6
         STA   $A6
         LDA   #$A5
         LDY   #$00
         JSR   $EBB2
         TAX
         JMP   $DFB0

LBF7D    LDA   #$00
         STA   $11
         DEC   $89
         JSR   $E600
         STA   $9D
         STX   $9E
         STY   $9F
         LDA   $A8
         LDY   $A9
         JSR   $E604
         STX   $A8
         STY   $A9
         TAX
         SEC
         SBC   $9D
         BEQ   LBFA5
         LDA   #$01
         BCC   LBFA5
         LDX   $9D
         LDA   #$FF
LBFA5    STA   $A2
         LDY   #$FF
         INX
LBFAA    INY
         DEX
         BNE   LBFB5
         LDX   $A2
         BMI   LBFC1
         CLC
         BCC   LBFC1
LBFB5    LDA   ($A8),Y
         CMP   ($9E),Y
         BEQ   LBFAA
         LDX   #$FF
         BCS   LBFC1
         LDX   #$01
LBFC1    INX
         TXA
         ROL
         AND   $16
         BEQ   LBFCA
         LDA   #$01
LBFCA    JMP   $EB93

         JSR   $E6FB
         JSR   PREAD
         JMP   $E301

LBFD6    JSR   $DEBE
         TAX
         JSR   $DFE8
         JSR   $00B7
         BNE   LBFD6
         RTS

         LDX   #$00
         JSR   $00B7
         STX   $10
         STA   $81
         JSR   $00B7
         JSR   $E07D
         BCS   LBFF7
         JMP   $DEC9

LBFF7    LDX   #$00
         STX   $11
         STX   $12
LBFFD    JMP   $E007
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Dim 29 Jan 2012, 23:52    Sujet du message: Répondre en citant

Address markers for side 1: EE DD CC
side 1 is grabbed entirely.
Address markers for side 2: EE DD CD
grab routine is written and works fine but my disk is... dirty

I need to correct a previous comment:
- first half of table is for side TWO
- second half is for side ONE

Antoine.happy.com!
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 31 Jan 2012, 0:14    Sujet du message: Répondre en citant

antoine.happierthanever.com as I grabbed the contents of side 2 this evening, yeah!

Now, it is time to rebuild both sides of the disk with the different contents.

It is also time to think about the way to do that:
- all RAM ($0000..$BFFF) is used
- the RWTS reads and writes 4*4 sectors in 512 bytes!

So, the question is: how should I do?
- on a 48KB system, I would have to re-use some RAM space (text area?)
- on a 64KB system, I would have to use the language card.

As our English-speaking friends say: "sleep over it"

Antoine
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 176

MessagePosté le: Mar 31 Jan 2012, 18:48    Sujet du message: Répondre en citant

Maybe this can help you a little bit:
http://pferrie.host22.com/misc/appleii.htm
Small 6-and-2 seek/read routine there.
And you can always compress some of the RAM to make enough space for buffers. :-)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jvernet



Inscrit le: 18 Aoû 2007
Messages: 722

MessagePosté le: Mar 31 Jan 2012, 19:26    Sujet du message: Répondre en citant

As far as I can see, the protection routines may be a lot bigger that the program it protect!
_________________
,, et 
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 31 Jan 2012, 19:40    Sujet du message: Répondre en citant

qkumba a écrit:
Maybe this can help you a little bit:
http://pferrie.host22.com/misc/appleii.htm
Small 6-and-2 seek/read routine there.
And you can always compress some of the RAM to make enough space for buffers. Smile


Thanks, Peter, but I think I will use a RWTS in the language spaaaaace. Your routine is great but lacks the writing support. And I do not want to write some new code when one has already coded a full RWTS. Thank you, Apple!

I will study the RAM usage as I believe Emile (the coder) fills memory that is not used: on stage 1, he loads data at $4000, does not use it then fills it again with stage 2 code...

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

MessagePosté le: Mar 31 Jan 2012, 19:41    Sujet du message: Répondre en citant

jvernet a écrit:
As far as I can see, the protection routines may be a lot bigger that the program it protect!


C'est du Softman tout craché : perdre le déplombeur dans les méandres du code pour retarder le piratage du logiciel !
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 176

MessagePosté le: Jeu 02 Fév 2012, 16:59    Sujet du message: Répondre en citant

toinet a écrit:
Thanks, Peter, but I think I will use a RWTS in the language spaaaaace.


:-) But then it sounds like you are requiring more memory to run the cracked version than the original required. Is that so?

toinet a écrit:
Your routine is great but lacks the writing support.


Yes, I haven't needed write support yet, but I will look into that at some point. I'm sure that I can make it smaller, too.
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
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
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