Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.1 - CLIENT : 54.147.16.12

 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 

Paperboy IIgs (Mindscape, 1988)

 
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: Sam 23 Jan 2016, 23:16    Sujet du message: Paperboy IIgs (Mindscape, 1988) Répondre en citant

#715 - The arcade classic comes home. Hop on your bike for a free-wheeling ride up the avenues of not-so-typical suburbia. Another early IIgs game that looks more like a DHGR 8-bit game than a SHR 16-bit one.

Protection type
That is a "on-disk protection" which checks the presence of a bad block (eights block). If the READ_BLOCK P8 call fails, then we have an original, otherwise we have a copy.
What is smarter than the usual check is that the return value of the protection + #$98 sets the load address in memory of the main file of the game.

How to copy
Use ZZCopy of Photonix II, you'll get an error for the bad block, then store your original in its original box.

Some sort of boot trace
From ProDOS to PBLOAD.SYSTEM which loads plenty of files. One is interesting, it is PBE.BIN at $9000. This is the protection. It is called by a JSR and the return value must be 2 to load the next file at the right address in memory.

How to crack
Launch Block.Warden
Prefix /P
Follow PBLOAD.SYSTEM
At offset $132: 22 00 90 00 -> A9 02 00 EA (from the protection call to the return value)
Write the block back.

You'll have the cracked version and an updated one at http://www.brutaldeluxe.fr/crack/

What does the updated version bring?
- HDD installable and launchable (but not from the Finder, we never know)
- Ctrl-Reset goes to the ProDOS quit (which is great is you want to return to your launcher)
- The removal of the protection load and call

Read the next messages for more information about the protection and the loaders (the standard and the updated one)

Reboot and... enjoy,

LoGo
1/2016
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: Sam 23 Jan 2016, 23:17    Sujet du message: Répondre en citant

Some excerpts from the protection file (PBE.BIN)

Code:

- ENTRY POINT

00/9000:                            ORG   $009000                               
00/9000: 18                         CLC                                         
00/9001: FB                         XCE                                         
00/9002: C230                       REP   #$30                                 
00/9004: 0B                         PHD                                         
00/9005: 8B                         PHB                                         
00/9006: DA                         PHX                                         
00/9007: 5A                         PHY                                         
00/9008: 206C92                     JSR   $926C           ; SAVE DP VALUES     
00/900B: 7A                         PLY                                         
00/900C: FA                         PLX                                         
00/900D: 22899900                   JSL   $009989         ; DETERMINE DEVICE   
00/9011: B007                       BCS   $901A                                 
00/9013: 22329100                   JSL   $009132         ; CALL PROTECTION     
00/9017: 207C92                     JSR   $927C           ; RESTORE DP VALUES   
00/901A: AB                         PLB                                         
00/901B: 2B                         PLD                                         
00/901C: 6B                         RTL                                         
00/901D: 08                         PHP                                         
00/901E: DA                         PHX                                         

- PROTECTION CHECK

00/9132: 4B                         PHK                   ; PROT CHECK         
00/9133: AB                         PLB                                         
00/9134: 08                         PHP                                         
00/9135: 5A                         PHY                                         
00/9136: DA                         PHX                                         
00/9137: C230                       REP   #$30                                 
00/9139: A98E92                     LDA   #$928E                               
00/913C: 8500                       STA   $00                                   
00/913E: A05200                     LDY   #$0052                               
00/9141: A90000                     LDA   #$0000                               
00/9144: 8502                       STA   $02                                   
00/9146: 20E990                     JSR   $90E9           ; CLEAR BUFFER       
00/9149: A90000                     LDA   #$0000                               
00/914C: 8DFA92                     STA   $92FA           ; INIT RETURN VALUE   
00/914F: AD2A93                     LDA   $932A                                 
00/9152: 8D0493                     STA   $9304                                 
00/9155: AD3093                     LDA   $9330                                 
00/9158: AE3293                     LDX   $9332           ; DEVICE             
00/915B: AC1893                     LDY   $9318           ; BLOCK 7             
00/915E: 205395                     JSR   $9553           ; CALL READ_BLOCK     
00/9161: C230                       REP   #$30            ; RETURN WITH ERRCODE
00/9163: C90000                     CMP   #$0000          ; 0 MEANS COPY       
00/9166: F003                       BEQ   $916B                                 
00/9168: 82D100                     BRL   $923C           ; WE ARE PROTECTED!   
00/916B: C210                       REP   #$10                                 
00/916D: E220                       SEP   #$20                                 
00/916F: 8B                         PHB                                         
00/9170: 68                         PLA                                         
00/9171: C230                       REP   #$30                                 
00/9173: 8502                       STA   $02                                   
00/9175: 8506                       STA   $06                                   
00/9177: A91A93                     LDA   #$931A                               
00/917A: 8500                       STA   $00                                   
00/917C: A93493                     LDA   #$9334                               
00/917F: 8504                       STA   $04                                   
00/9181: A23200                     LDX   #$0032                               
00/9184: 20A190                     JSR   $90A1                                 
00/9187: C0FFFF                     CPY   #$FFFF                               
00/918A: D003                       BNE   $918F                                 
00/918C: 82B500                     BRL   $9244                                 

- THE RETURN

00/9235: ADFA92                     LDA   $92FA                                 
00/9238: FA                         PLX                                         
00/9239: 7A                         PLY                                         
00/923A: 28                         PLP                                         
00/923B: 6B                         RTL                                         
00/923C: A20000                     LDX   #$0000          ; RETURN VALUES       
00/923F: 8E0293                     STX   $9302                                 
00/9242: 8026                       BRA   $926A                                 
00/9244: A20100                     LDX   #$0001                               
00/9247: 8E0293                     STX   $9302                                 
00/924A: 801E                       BRA   $926A                                 
00/924C: A20200                     LDX   #$0002                               
00/924F: 8E0293                     STX   $9302                                 
00/9252: 8016                       BRA   $926A                                 
00/9254: A20300                     LDX   #$0003                               
00/9257: 8E0293                     STX   $9302                                 
00/925A: 800E                       BRA   $926A                                 
00/925C: A20400                     LDX   #$0004                               
00/925F: 8E0293                     STX   $9302                                 
00/9262: 8006                       BRA   $926A                                 
00/9264: A20500                     LDX   #$0005                               
00/9267: 8E0293                     STX   $9302                                 
00/926A: 80C9                       BRA   $9235                                 
00/926C: E230                       SEP   #$30                                 
00/926E: A00F                       LDY   #$0F                                 
00/9270: B90000                     LDA   |$0000,Y                             
00/9273: 990893                     STA   $9308,Y                               
00/9276: 88                         DEY                                         
00/9277: 10F7                       BPL   $9270                                 
00/9279: C230                       REP   #$30                                 
00/927B: 60                         RTS                                         
00/927C: 48                         PHA                                         
00/927D: 08                         PHP                                         
00/927E: E230                       SEP   #$30                                 
00/9280: A00F                       LDY   #$0F                                 
00/9282: B90893                     LDA   $9308,Y                               
00/9285: 990000                     STA   |$0000,Y                             
00/9288: 88                         DEY                                         
00/9289: 10F7                       BPL   $9282                                 
00/928B: 28                         PLP                                         
00/928C: 68                         PLA                                         
00/928D: 60                         RTS                                         
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: Sam 23 Jan 2016, 23:18    Sujet du message: Répondre en citant

The Block.Warden views, before and after, as usual...

Code:

Before:

Block: $00D0 (208)      Volume name: P               Friday     23-Jan-16  9:49
Prefix: /P/                                                                     
Following: PBLOAD.SYSTEM, Type SYS, Rel block 1, Byte $000132                   
(c) Q      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F            Edit mode
1988ZSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
    Z 100: C0 60 AD 83 C0 AD 83 C0 60 A0 00 B1 06 91 08 C8   @`-.@-.@` .1...H   
  b Z 110: D0 04 E6 07 E6 09 A5 0A 38 E9 01 85 0A B0 EC A5   P.f.f.%.8i...0l%   
B y Z 120: 0B E9 00 85 0B B0 E4 60 18 FB C2 30 A2 42 21 A0   .i...0d`.{B0"B!   
L   Z 130: 00 00>22 00 90 00<38 FB 8D 45 21 18 69 98 8D CB   .."...8{.E!.i..K   
O G Z 140: 21 60 02 2F 50 00 86 04 84 05 A0 00 B1 04 8D A5   !`./P..... .1..%   
C l Z 150: 21 C8 B1 04 8D A6 21 C8 B1 04 8D B3 21 C8 B1 04   !H1..&!H1..3!H1.   
K e Z 160: 8D B4 21 C8 B1 04 8D B1 21 C8 B1 04 8D B2 21 20   .4!H1..1!H1..2!   
  n Z 170: 00 BF C8 A4 21 D0 1B AD A9 21 8D AB 21 8D B0 21   .?H$!P.-)!.+!.0!   
W   Z 180: 8D B8 21 20 00 BF CA AF 21 D0 07 20 00 BF CC B7   .8! .?J/!P. .?L7   
A B Z 190: 21 60 8D B9 21 AE 8A C0 20 DA FD 20 3A FF 20 8E   !`.9!..@ Z} : .   
R r Z 1A0: FD 4C A1 21 03 00 00 00 1C 00 02 FF 00 00 00 04   }L!!...........   
D e Z 1B0: 00 00 00 00 00 00 00 01 00 00 F6 21 00 20 00 40   ..........v!. .@   
E d Z 1C0: FB 21 FF FF 00 60 02 22 FF FF 00 00 0C 22 40 2F   {!.`."..."@/   
N o Z 1D0: 00 60 14 22 FF FF 00 90 1C 22 20 0D 00 08 26 22   .`."..." ...&"   
  n Z 1E0: E0 58 00 40 30 22 00 10 00 60 38 22 00 1C 00 60   `X.@0"...`8"...`   
    Z 1F0: 40 22 10 27 00 70 04 4C 4F 47 4F 06 50 42 2E 54   @".'.p.LOGO.PB.T   

And after:

Block: $00D0 (208)      Volume name: P               Friday     23-Jan-16  9:49
Prefix: /P/                                                                     
Following: PBLOAD.SYSTEM, Type SYS, Rel block 1, Byte $000132                   
(c) Q      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F            Edit mode
1988ZSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
    Z 100: C0 60 AD 83 C0 AD 83 C0 60 A0 00 B1 06 91 08 C8   @`-.@-.@` .1...H   
  b Z 110: D0 04 E6 07 E6 09 A5 0A 38 E9 01 85 0A B0 EC A5   P.f.f.%.8i...0l%   
B y Z 120: 0B E9 00 85 0B B0 E4 60 18 FB C2 30 A2 42 21 A0   .i...0d`.{B0"B!   
L   Z 130: 00 00>A9 02 00 EA<38 FB 8D 45 21 18 69 98 8D CB   ..)..j8{.E!.i..K   
O G Z 140: 21 60 02 2F 50 00 86 04 84 05 A0 00 B1 04 8D A5   !`./P..... .1..%   
C l Z 150: 21 C8 B1 04 8D A6 21 C8 B1 04 8D B3 21 C8 B1 04   !H1..&!H1..3!H1.   
K e Z 160: 8D B4 21 C8 B1 04 8D B1 21 C8 B1 04 8D B2 21 20   .4!H1..1!H1..2!   
  n Z 170: 00 BF C8 A4 21 D0 1B AD A9 21 8D AB 21 8D B0 21   .?H$!P.-)!.+!.0!   
W   Z 180: 8D B8 21 20 00 BF CA AF 21 D0 07 20 00 BF CC B7   .8! .?J/!P. .?L7   
A B Z 190: 21 60 8D B9 21 AE 8A C0 20 DA FD 20 3A FF 20 8E   !`.9!..@ Z} : .   
R r Z 1A0: FD 4C A1 21 03 00 00 00 1C 00 02 FF 00 00 00 04   }L!!...........   
D e Z 1B0: 00 00 00 00 00 00 00 01 00 00 F6 21 00 20 00 40   ..........v!. .@   
E d Z 1C0: FB 21 FF FF 00 60 02 22 FF FF 00 00 0C 22 40 2F   {!.`."..."@/   
N o Z 1D0: 00 60 14 22 FF FF 00 90 1C 22 20 0D 00 08 26 22   .`."..." ...&"   
  n Z 1E0: E0 58 00 40 30 22 00 10 00 60 38 22 00 1C 00 60   `X.@0"...`8"...`   
    Z 1F0: 40 22 10 27 00 70 04 4C 4F 47 4F 06 50 42 2E 54   @".'.p.LOGO.PB.T   
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: Sam 23 Jan 2016, 23:19    Sujet du message: Répondre en citant

And now, the source code of the standard loader (PBELOAD.SYSTEM)

Code:

*
* Paperboy
* (c) Mindscape, 1988
* (k) LoGo, 2016
*

*---

         ORG   $002000
         MX    %11
    TYP   SYS
    DSK   PBLOAD.SYSTEM

*---

* TFBD generated equates
*    (c) PHC 1992,93

SOFTEV       = $03F2
PRODOS8    = $BF00
KBD       = $C000
SETSTDZP    = $C008
SETALTZP    = $C009
TXTCLR       = $C050
MIXCLR       = $C052
TXTPAGE2    = $C055
HIRES       = $C057
LCBANK2    = $C083
RDROM1       = $C08A
LCBANK1    = $C08B
BASIC      = $E000
CROUT       = $FD8E
PRBYTE       = $FDDA
BELL       = $FF3A

*--- The code
   
         LDX   #<L21BA      ; load LOGO at $4000
         STX   SOFTEV+1
         LDY   #>L21BA
         JSR   L2146
         STA   KBD
         LDA   TXTPAGE2
         LDA   MIXCLR
         LDA   HIRES
         LDA   TXTCLR
         LDX   #<L21EA      ; load PBM.TSK at $6000
         LDY   #>L21EA
         JSR   L2146
         LDA   #$00      ; and move it
         STA   $3C
         STA   $42
         LDA   #$60
         STA   $3D
         LDA   #$A4
         STA   $43
         LDA   #$FF
         STA   $3E
         LDA   #$7B
         STA   $3F
         SEC
         JSR   $C311
         LDX   #<L21CC      ; load PBD.BIN at $6000
         LDY   #>L21CC
         JSR   L2146
         STA   SETALTZP      ; and move it
         LDX   #$FF
         STX   $0100
         STX   $0101
         TXS
         JSR   L20FB
         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$3F
         STA   $0A
         LDA   #$2F
         STA   $0B
         JSR   L2109
         STA   SETSTDZP
         LDX   #<L21E4      ; load PBC.BIN at $6000
         LDY   #>L21E4
         JSR   L2146
         STA   SETALTZP      ; and move it
         JSR   L2102      ; LCBANK2
         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$FF
         STA   $0A
         LDA   #$0F
         STA   $0B
         JSR   L2109      ; move data
         JSR   L20FB      ; LCBANK1
         STA   SETSTDZP
         LDX   #<L21D2      ; load PBE.BIN at $9000
         LDY   #>L21D2
         JSR   L2146
         JSR   L2128      ; run the protection
   
         LDX   #<L21F0      ; load PBTITLE.PIC at $7000
         LDY   #>L21F0
         JSR   L2146
         LDX   #<L21C6      ; load PBSYS.TSK at $0000 (huh ?!?)
         LDY   #>L21C6
         JSR   L2146
         STA   SETALTZP

L20B7    LDA   $9A00      ; is one of the byte of the program
         CMP   #$4C      ; for which we do not know where to load
         BNE   L20B7      ; in memory has a 4C (JMP) when... (see below)
   
         LDA   #$00      ; clear ZP
         TAX         ; let's call it ZP
L20C1    STA   $00,X      ; is it a 8-bit game?
         INX
         BNE   L20C1

         JSR   $9A00      ; ...we have to call the address...
             ; does that mean that we know what to do with
            ; the return value from $2128...
         STA   SETSTDZP
         LDX   #<L21DE      ; load PBMAP.BIN at $4000
         LDY   #>L21DE
         JSR   L2146
         CLC         ; move it!
         XCE
         REP   #$30
         LDX   #$4000
         LDY   #$4000
         LDA   #$58DF
         PHB
         MVN   $000000,$E00000
         PLB

         SEC
         XCE
         MX    %11
         LDX   #<L21D8      ; load PBCH2.BIN at $0800
         LDY   #>L21D8
         JSR   L2146
         LDX   #<L21C0      ; load PB.TSK at $6000
         LDY   #>L21C0
         JSR   L2146
         STA   SETALTZP
         JMP   $6000      ; Go to game!

L20FB    LDA   LCBANK1
         LDA   LCBANK1
         RTS

L2102    LDA   LCBANK2
         LDA   LCBANK2
         RTS

L2109    LDY   #$00
L210B    LDA   ($06),Y
         STA   ($08),Y
         INY
         BNE   L2116
         INC   $07
         INC   $09
L2116    LDA   $0A
         SEC
         SBC   #$01
         STA   $0A
         BCS   L210B
         LDA   $0B
         SBC   #$00
         STA   $0B
         BCS   L210B
         RTS

*
* Call the protection
*

* From what we read above, if:
* - we add #$98 to our protection return value
* - if there is a check for a file to have #$4C at $9A00
* - if we have to JSR to $9A00
* - the first byte of PBSYS.TSK is a #$4C (dump it, you'll see)
*
* The conclusion is that : $9A - $98 is $02
* The return value from the protection is #$02

L2128    CLC
         XCE
         REP   #$30
         LDX   #L2142
         LDY   #$0000
         JSL   $009000      ; call it!
         SEC
         XCE
         MX    %11
         STA   L2145      ; return value determines
         CLC         ; where to load the next file (+$98)
         ADC   #$98      ; by default, we load it at $0000
         STA   L21CA+1      ; which is not possible with P8
         RTS

L2142    STR   '/P'
L2145    DB    $00

*
* Load a file
*

L2146    STX   $04      ; X is the low pointer to the table entry
         STY   $04+1      ; Y is for the high pointer

         LDY   #$00
         LDA   ($04),Y
         STA   L21A5      ; filename low ptr
         INY
         LDA   ($04),Y
         STA   L21A5+1      ; filename high ptr
         INY
         LDA   ($04),Y
         STA   L21B3      ; transfer count low
         INY
         LDA   ($04),Y
         STA   L21B3+1      ; transfer count high
         INY
         LDA   ($04),Y
         STA   L21B1      ; where to read low
         INY
         LDA   ($04),Y
         STA   L21B1+1      ; where to read high
   
         JSR   PRODOS8      ; OPEN
         DB    $C8
         DA    L21A4
         BNE   L2192
         LDA   L21A9      ; ref_num
         STA   L21AB      ; (probably) set_mark
         STA   L21B0      ; read
         STA   L21B8      ; close
         JSR   PRODOS8      ; READ
         DB    $CA
         DA    L21AF
         BNE   L2192
         JSR   PRODOS8      ; CLOSE
         DB    $CC
         DA    L21B7
         RTS

L2192    STA   L21B9      ; Load error, boum!
         LDX   RDROM1
         JSR   PRBYTE
         JSR   BELL
         JSR   CROUT
L21A1    JMP   L21A1      ; infinite loop

L21A4    DB    $03      ; parm for open
L21A5    DW    $0000
         DA    $1C00
L21A9    DB    $00

L21AA    DB    $02      ; parm for set_mark
L21AB    DB    $FF
         DB    $00
         DB    $00
         DB    $00

L21AF    DB    $04      ; parm for read
L21B0    DB    $00
L21B1    DW    $0000
L21B3    DW    $0000
         DW    $0000

L21B7    DB    $01      ; parm for close
L21B8    DB    $00

L21B9    DB    $00

*---
* Format is:
*  +00: word - pointer to filename
*  +02: word - nb of bytes to load (-1 means all)
*  +04: word - where to load in memory

L21BA    DA    L21F6      ; LOGO (not me)   
         DW    $2000
         DA    $4000

L21C0    DA    L21FB      ; PB.TSK
         DW    $FFFF
         DA    $6000

L21C6    DA    L2202      ; PBSYS.TSK
         DW    $FFFF
L21CA    DA    $0000      ; <- where to load?

L21CC    DA    L220C      ; PBD.BIN
         DW    $2F40
         DA    $6000

L21D2    DA    L2214      ; PBE.BIN (the protection)
         DW    $FFFF
         DA    $9000

L21D8    DA    L221C      ; PBCH2.BIN
         DW    $0D20
         DA    $0800

L21DE    DA    L2226      ; PBMAP.BIN
         DW    $58E0
         DA    $4000

L21E4    DA    L2230      ; PBC.BIN
         DW    $1000
         DA    $6000

L21EA    DA    L2238      ; PBM.TSK
         DW    $1C00
         DA    $6000

L21F0    DA    L2240      ; PBTITLE.PIC
         DW    $2710
         DA    $7000
   
L21F6    STR   'LOGO'
L21FB    STR   'PB.TSK'
L2202    STR   'PBSYS.TSK'
L220C    STR   'PBD.BIN'
L2214    STR   'PBE.BIN'
L221C    STR   'PBCH2.BIN'
L2226    STR   'PBMAP.BIN'
L2230    STR   'PBC.BIN'
L2238    STR   'PBM.TSK'
L2240    STR   'PBTITLE.PIC'
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: Sam 23 Jan 2016, 23:20    Sujet du message: Répondre en citant

And my updated loader to make Paperboy HDD-runnable, ctrl-reset-quittable, protectionless, etc-able.

Code:

*
* Paperboy
* (c) Mindscape, 1988
* (k+u) LoGo, 2016
*

*---

         ORG   $002000
         MX    %11
    TYP   SYS
    DSK   PBLOAD.SYSTEM

*---

* TFBD generated equates
*    (c) PHC 1992,93


SOFTEV       = $03F2
PRODOS8    = $BF00
KBD       = $C000
SETSTDZP    = $C008
SETALTZP    = $C009
TXTCLR       = $C050
MIXCLR       = $C052
TXTPAGE2    = $C055
HIRES       = $C057
LCBANK2    = $C083
RDROM1       = $C08A
LCBANK1    = $C08B
BASIC      = $E000
CROUT       = $FD8E
PRBYTE       = $FDDA
IDROUTINE   = $FE1F
BELL       = $FF3A
OS_BOOT      = $E100BD

*--- Some additions to the code

   lda   PRODOS8      ; are we running under P8?
   cmp   #$4c
   beq   ok1
   jmp   BASIC      ; -> no, go to basic...

ok1   sec         ; are we on a //gs?
   jsr   IDROUTINE
   bcc   ok2      ; -> yes, go on

kototo   jsr   PRODOS8      ; -> no, we quit
   dfb   $65
   da   proQUIT

ok2   ldal   OS_BOOT      ; cold boot?
   bne   kototo      ; -> no, we quit
   
   jsr   PRODOS8      ; -> yes, set the prefix
   dfb   $c6
   da   proSETPFX

   lda   #<kototo   ; set the reset vector
   sta   SOFTEV
   lda   #>kototo
   sta   SOFTEV+1
   eor   #$a5
   sta   SOFTEV+2
   
*--- Back to normal
   
         LDX   #<L21BA      ; load LOGO at $4000
*         STX   SOFTEV+1
         LDY   #>L21BA
         JSR   L2146
         STA   KBD
         LDA   TXTPAGE2
         LDA   MIXCLR
         LDA   HIRES
         LDA   TXTCLR
         LDX   #<L21EA      ; load PBM.TSK at $6000
         LDY   #>L21EA
         JSR   L2146
         LDA   #$00      ; and move it
         STA   $3C
         STA   $42
         LDA   #$60
         STA   $3D
         LDA   #$A4
         STA   $43
         LDA   #$FF
         STA   $3E
         LDA   #$7B
         STA   $3F
         SEC
         JSR   $C311
         LDX   #<L21CC      ; load PBD.BIN at $6000
         LDY   #>L21CC
         JSR   L2146
         STA   SETALTZP      ; and move it
         LDX   #$FF
         STX   $0100
         STX   $0101
         TXS
         JSR   L20FB
         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$3F
         STA   $0A
         LDA   #$2F
         STA   $0B
         JSR   L2109
         STA   SETSTDZP
         LDX   #<L21E4      ; load PBC.BIN at $6000
         LDY   #>L21E4
         JSR   L2146
         STA   SETALTZP      ; and move it
         JSR   L2102      ; LCBANK2
         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$FF
         STA   $0A
         LDA   #$0F
         STA   $0B
         JSR   L2109      ; move data
         JSR   L20FB      ; LCBANK1
         STA   SETSTDZP

*         LDX   #<L21D2      ; load PBE.BIN at $9000
*         LDY   #>L21D2
*         JSR   L2146
*         JSR   L2128      ; run the protection
   
         LDX   #<L21F0      ; load PBTITLE.PIC at $7000
         LDY   #>L21F0
         JSR   L2146
         LDX   #<L21C6      ; load PBSYS.TSK at $9A00
         LDY   #>L21C6
         JSR   L2146
         STA   SETALTZP

*L20B7    LDA   $9A00      ; is one of the byte of the program
*         CMP   #$4C      ; for which we do not know where to load
*         BNE   L20B7      ; in memory has a 4C (JMP) when... (see below)
   
         LDA   #$00      ; clear ZP
         TAX         ; let's call it ZP
L20C1    STA   $00,X      ; is it a 8-bit game?
         INX
         BNE   L20C1

         JSR   $9A00      ; ...we have to call the address...
             ; does that mean that we know what to do with
            ; the return value from $2128...
         STA   SETSTDZP
         LDX   #<L21DE      ; load PBMAP.BIN at $4000
         LDY   #>L21DE
         JSR   L2146
         CLC         ; move it!
         XCE
         REP   #$30
         LDX   #$4000
         LDY   #$4000
         LDA   #$58DF
         PHB
         MVN   $000000,$E00000
         PLB

         SEC
         XCE
         MX    %11
         LDX   #<L21D8      ; load PBCH2.BIN at $0800
         LDY   #>L21D8
         JSR   L2146
         LDX   #<L21C0      ; load PB.TSK at $6000
         LDY   #>L21C0
         JSR   L2146
         STA   SETALTZP
         JMP   $6000      ; Go to game!

L20FB    LDA   LCBANK1
         LDA   LCBANK1
         RTS

L2102    LDA   LCBANK2
         LDA   LCBANK2
         RTS

L2109    LDY   #$00
L210B    LDA   ($06),Y
         STA   ($08),Y
         INY
         BNE   L2116
         INC   $07
         INC   $09
L2116    LDA   $0A
         SEC
         SBC   #$01
         STA   $0A
         BCS   L210B
         LDA   $0B
         SBC   #$00
         STA   $0B
         BCS   L210B
         RTS

*
* No more protection
*

L2145    DB    $02

*
* Load a file
*

L2146    STX   $04      ; X is the low pointer to the table entry
         STY   $04+1      ; Y is for the high pointer

         LDY   #$00
         LDA   ($04),Y
         STA   L21A4+1      ; filename low ptr
         INY
         LDA   ($04),Y
         STA   L21A4+2      ; filename high ptr
         INY
         LDA   ($04),Y
         STA   L21AF+4      ; transfer count low
         INY
         LDA   ($04),Y
         STA   L21AF+5      ; transfer count high
         INY
         LDA   ($04),Y
         STA   L21AF+2      ; where to read low
         INY
         LDA   ($04),Y
         STA   L21AF+3      ; where to read high
   
         JSR   PRODOS8      ; OPEN
         DB    $C8
         DA    L21A4
         BNE   L2192
         LDA   L21A4+5      ; ref_num
*         STA   L21AB      ; (probably) set_mark
         STA   L21AF+1      ; read
         STA   L21B7+1      ; close

         JSR   PRODOS8      ; READ
         DB    $CA
         DA    L21AF
         BNE   L2192

         JSR   PRODOS8      ; CLOSE
         DB    $CC
         DA    L21B7
         RTS

L2192    STA   L21B9      ; Load error, boum!
         LDX   RDROM1
         JSR   PRBYTE
         JSR   BELL
         JSR   CROUT
L21A1    JMP   L21A1      ; infinite loop

*--- My new calls

proSETPFX    dfb   $01
      da   $0280

proQUIT      dfb   $4
      ds   1
      ds   2
      ds   1
      ds   2

*--- Back to normal
      
L21A4    DB    $03      ; parm for open
         DW    $0000
         DA    $1C00
L21A9    DB    $00

*L21AA    DB    $02      ; parm for set_mark
*L21AB    DB    $FF
*         DB    $00
*         DB    $00
*         DB    $00

L21AF    DB    $04      ; parm for read
         DB    $00
         DW    $0000
         DW    $0000
         DW    $0000

L21B7    DB    $01      ; parm for close
         DB    $00

L21B9    DB    $00

*---
* Format is:
*  +00: word - pointer to filename
*  +02: word - nb of bytes to load (-1 means all)
*  +04: word - where to load in memory

L21BA    DA    L21F6      ; LOGO (not me)   
         DW    $2000
         DA    $4000

L21C0    DA    L21FB      ; PB.TSK
         DW    $FFFF
         DA    $6000

L21C6    DA    L2202      ; PBSYS.TSK
         DW    $FFFF
         DA    $9A00      ; <- where to load? At $9A00

L21CC    DA    L220C      ; PBD.BIN
         DW    $2F40
         DA    $6000

*L21D2    DA    L2214      ; PBE.BIN (the protection)
*         DW    $FFFF
*         DA    $9000

L21D8    DA    L221C      ; PBCH2.BIN
         DW    $0D20
         DA    $0800

L21DE    DA    L2226      ; PBMAP.BIN
         DW    $58E0
         DA    $4000

L21E4    DA    L2230      ; PBC.BIN
         DW    $1000
         DA    $6000

L21EA    DA    L2238      ; PBM.TSK
         DW    $1C00
         DA    $6000

L21F0    DA    L2240      ; PBTITLE.PIC
         DW    $2710
         DA    $7000
   
L21F6    STR   'LOGO'
L21FB    STR   'PB.TSK'
L2202    STR   'PBSYS.TSK'
L220C    STR   'PBD.BIN'
*L2214    STR   'PBE.BIN'
L221C    STR   'PBCH2.BIN'
L2226    STR   'PBMAP.BIN'
L2230    STR   'PBC.BIN'
L2238    STR   'PBM.TSK'
L2240    STR   'PBTITLE.PIC'
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