Index du Forum
IDENTIFICATION SERVEUR : 51.83.8.70 - CLIENT : 3.219.167.194

 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 

Apple Panic (Broderbund, 1981)

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

MessagePosté le: Dim 28 Oct 2012, 22:16    Sujet du message: Apple Panic (Broderbund, 1981) Répondre en citant

Another arcade game, you must avoid all the aliens, climb ladders and? huh? I dunno... I do not even know how to play with the joystick...

DISK FORMAT
- The use of the nibble editor of Copy II Plus shows that tracks $00 to $0D are formatted, the rest of the disk is not.
- The same program also shows that we are facing a 13-sec disk, thanks to the D5AAB5 nibbles in the header field.


PROTECTION TYPE
The disk uses a 13-sec format with a change of nibbles in the header field. All other nibbles (epilogs or data field) are standard ones.
- Tracks 0 to 5: D5xxB5
- Tracks 6 to D: DExxB5

The 'xx' above shows that the program uses a different nibble on each track. The disassembly of the BOOT3 code (area $B700..$B7FF) will tell you the values used.

What is interesting in that protection scheme is that the nibble values are put in the text screen area which makes that difficult to get them if you use a wildcard...


BOOT TRACE
Reminder: I am working on an Apple IIgs
- 9600<C600.C6FFM
- 96FB:20 FDDA AD C0E8 60
- 9600G
01
Area $0800..$08FF shows a 16-sec T0/S0 for a 13-sec disk. That means that the disk can boot on either a 13-sec or a 16-sec controller card.

The code is relocated at $0200 and executed (JMP $020F). It can be easily interrupted at the next stage:
- 96FB:A9 59 8D 842 A9 FF 8D 843 4C 801
- 9600G
- C0E8 (<= stop the drive)

The code at $0300 loads 9 sectors at $B600..$BFFF, a normal DOS 3.2 RWTS. Let's get it...
- 96FB:A9 00 8D 842 A9 10 8D 843 4C 801
- 1000:A9 4C 8D 33C A9 59 8D 33D A9 FF 8D 33E 4C 301
- 9600G
- C0E8 (<= power saving, turn the motor off)

What we have here is a nearly standard 13-sec RWTS with a change in the header nibbles. You have two ways to grab the data:
- 1. now that you have the RWTS, create a short program at $0300 that will load the two parts of the program (tracks 0..5 then 6..D) or
- 2. continue with the boot trace...

- 1000:A9 4C 8D 33C A9 00 8D 33D A9 11 8D 33E 4C 301
- 1100:A9 59 8D B772 A9 FF 8D B773 4C B700
- 9600G
- C0E8

Bingo! You've done it! The whole program is loaded into memory:
- $0800..$48FF
- $4000..$A7FF

As you can see, the area $4000..$48FF is used in the two load phases. It must be noted that it is of no use in the first load phase. But it is mandatory in the second one (because there is some code)

Now, consider you have the complete program but slightly modified because of the animation steps.

What you can do is modify the $B700 area and stops loading after the first part of the program, therefore everything will remain intact. It is up to you and this is what I did for my crack.


HOW TO CREATE A 16-SEC DISK?
The easy way would be to use Advanced Demuffin 1.4 (press P to pass boot) and copy tracks 1 to D of the original disk with the following program (because, I recall, nibbles are changed):
- Enter the monitor and type in the following code:
- BD00:20 0300 EA
- 300:84 48 85 49 A0 04 B1 48 AA BD 350 8D B976 BD 360 8D B980 60
- 350:D5 D5 D5 D5 D5 D5 DE DE DE DE DE DE DE DE
- 360:AA BE BE AB BF EB FB AA FA AA AB EA EF BB
- Press CTRL-Y and copy the disk

Then, copy track 0 from a DOS 3.3 master disk but you must absolutely keep T0/S1, this is mandatory for the game to load (this is the $B700..$B7FF area)

You're nearly done...


WHAT TO PATCH?
- 1. First patch: remove the nibble change in the $B700 area.
Launch Disk Fixer v4 and edit T0/S1. At offset $A3: 20 (JSR) -> 2C (BIT), save the sector back to disk
- 2. Second patch: tell the program at $1000 not to patch the nibble header (from D5 to DE)
Launch Disk Fixer v4 and edit T1/S8. At offset $13: 99 -> AD. At offset $1A: 99 -> AD. Save the sector back to disk.

You know what? You have cracked Apple Panic... It can downloaded at http://www.brutaldeluxe.fr/crack/APPLEPANIC.DSK

Enjoy,
LoGo
10/2012

PS. Browsing through the code is interesting as there are some source code parts and, in the $7000 memory area, there is a programmer's name which is not the same person as the one on the boot screen. Weird!


Dernière édition par toinet le Dim 28 Oct 2012, 22:23; édité 4 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


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

MessagePosté le: Dim 28 Oct 2012, 22:17    Sujet du message: Répondre en citant

This is the boot 1 stage at $0800..$08FF

Code:
*
* Apple Panic
* (c) 1981, Broderbund
* (k) 2012, LoGo
*

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

PRERR    EQU   $FF2D

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

         ORG   $000800
         MX    %11

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

L0800    HEX   01         ; one sector

         LDX   #$00       ; relocate to $0200
L0803    LDA   L0800,X
         STA   $0200,X
         INX
         BNE   L0803
         JMP   L020F      ; and jump

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

         ORG   $00020F

L020F    LDY   #$AB       ; prepare nibble table
L0211    TYA
         STA   $3C
         LSR
         ORA   $3C
         CMP   #$FF
         BNE   L0224
         CPY   #$D5
         BEQ   L0224
         TXA
         STA   L0800,Y
         INX
L0224    INY
         BNE   L0211
         STY   $3D
         STY   $26

         LDA   #$03       ; load at $0300
         STA   $27
         LDX   $2B
         JSR   L025D
         JSR   L02D1

         LDA   #$A9       ; patch next code
         STA   $031F
         LDA   #$02
         STA   $0320
         JMP   $0301      ; and jump to it!

         DS    $19

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

L025D    CLC              ; load a 5*3 encoded sector
L025E    PHP
L025F    LDA   $C08C,X
         BPL   L025F
L0264    EOR   #$D5
         BNE   L025F
L0268    LDA   $C08C,X
         BPL   L0268
         CMP   #$AA
         BNE   L0264
         NOP
L0272    LDA   $C08C,X
         BPL   L0272
         CMP   #$B5
         BEQ   L0284
         PLP
         BCC   L025D
         EOR   #$AD
         BEQ   L02A1
         BNE   L025D
L0284    LDY   #$03
         STY   $2A
L0288    LDA   $C08C,X
         BPL   L0288
         ROL
         STA   $3C
L0290    LDA   $C08C,X
         BPL   L0290
         AND   $3C
         DEY
         BNE   L0288
         PLP
         CMP   $3D
         BNE   L025D
         BCS   L025E
L02A1    LDY   #$9A
L02A3    STY   $3C
L02A5    LDY   $C08C,X
         BPL   L02A5
         EOR   L0800,Y
         LDY   $3C
         DEY
         STA   L0800,Y
         BNE   L02A3
L02B5    STY   $3C
L02B7    LDY   $C08C,X
         BPL   L02B7
         EOR   L0800,Y
         LDY   $3C
         STA   ($26),Y
         INY
         BNE   L02B5
L02C6    LDY   $C08C,X
         BPL   L02C6
         EOR   L0800,Y
         BNE   L025D
         RTS

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

L02D1    TAY              ; denibblize
L02D2    LDX   #$00
L02D4    LDA   L0800,Y
         LSR
         ROL   $03CC,X
         LSR
         ROL   $0399,X
         STA   $3C
         LDA   ($26),Y
         ASL
         ASL
         ASL
         ORA   $3C
         STA   ($26),Y
         INY
         INX
         CPX   #$33
         BNE   L02D4
         DEC   $2A
         BNE   L02D2
         CPY   $0300      ; next sector?
         BNE   L02FC
         RTS

         BRK   $00
L02FC    JMP   PRERR
         BRK   $00
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: 3050
Localisation: Le Chesnay, France

MessagePosté le: Dim 28 Oct 2012, 22:18    Sujet du message: Répondre en citant

This is the boot 2 stage at $0300..$03FF

Code:
*
* Apple Panic
* (c) 1981, Broderbund
* (k) 2012, LoGo
*

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

         TYP   BIN
         ORG   $000300
         MX    %11

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

         HEX   99         ; number of sectors, IRL $01

L0301    LDA   $0800,Y    ; nibble table
         ASL
         ASL
         ASL
         STA   $0800,Y
         INY
         BNE   L0301

         LDX   $2B        ; slot*16
         LDA   #$09       ; nb sectors
         STA   $27
         LDA   L03CC      ; load at $B600
         STA   $41
         STY   $40
         TXA
         LSR
         LSR
         LSR
         LSR
         LDA   #$02       ; <= patched code
         STA   $3F
         LDA   #$5D
         STA   $3E

L0327    JSR   L0343      ; read
         JSR   L0346      ; denibblize
         LDA   $3D
         EOR   L03FF      ; nb of sectors to load
         BEQ   L033A
         INC   $41
         INC   $3D
         BNE   L0327
L033A    STA   $3E
         LDA   L03CC      ; load at $B600++
         STA   $3F
         INC   $3F        ; <= $B700
L0343    JMP   ($003E)    ; jump to read routine then $B700

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

L0346    LDX   #$32       ; denibblize
         LDY   #$00
L034A    LDA   $0800,X
         LSR
         LSR
         LSR
         STA   $3C
         LSR
         STA   $2A
         LSR
         ORA   $0900,X
         STA   ($40),Y
         INY
         LDA   $0833,X
         LSR
         LSR
         LSR
         LSR
         ROL   $3C
         LSR
         ROL   $2A
         ORA   $0933,X
         STA   ($40),Y
         INY
         LDA   $0866,X
         LSR
         LSR
         LSR
         LSR
         ROL   $3C
         LSR
         ROL   $2A
         ORA   $0966,X
         STA   ($40),Y
         INY
         LDA   $2A
         AND   #$07
         ORA   $0999,X
         STA   ($40),Y
         INY
         LDA   $3C
         AND   #$07
         ORA   $09CC,X
         STA   ($40),Y
         INY
         DEX
         BPL   L034A
         LDA   $0899
         LSR
         LSR
         LSR
         ORA   $09FF
         STA   ($40),Y
         LDX   $2B
         RTS

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

         DS    $27,$FF
L03CC    HEX   B6
         DS    $32,$FF
L03FF    HEX   09
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: 3050
Localisation: Le Chesnay, France

MessagePosté le: Dim 28 Oct 2012, 22:19    Sujet du message: Répondre en citant

This is the boot 3 stage, part of the RWTS, loaded at $B700..$B7FF. The rest of the RWTS is a standard 13-sec one.

Code:
*
* Apple Panic
* (c) 1981, Broderbund
* (k) 2012, LoGo
*

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

TXTCLR   EQU   $C050
MIXCLR   EQU   $C052
TXTPAGE2 EQU   $C055

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

         TYP   BIN
         ORG   $00B700
         MX    %11

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

LB700    STX   LB775      ; save slot
         STX   LB783
         TXA
         LSR
         LSR
         LSR
         LSR
         TAX
         LDA   #$00       ; set slot
         STA   $04F8,X
         STA   $0478,X

*----------

         TAY              ; move coded nibble table
LB715    LDA   LB7E2,Y    ; into the text screen area
         STA   $0400,Y
         TYA
         STA   LB7E2,Y
         INY
         CPY   #$18
         BNE   LB715

*----------

         LDA   TXTCLR     ; GR PAGE 2
         LDA   MIXCLR
         LDA   TXTPAGE2

*----------

         LDA   #$01       ; start at track 1
         STA   $3E
         LDA   #$05       ; read 5 tracks
         STA   $42
         LDA   #$00       ; load at $0800
         STA   LB77C
         LDA   #$08
         STA   LB77C+1
         JSR   LB789      ; read

         LDA   $C089,X    ; motor on
         JSR   $1000      ; animate and patch disk!!

*----------

         LDA   #$60       ; put a return!
         STA   $129D

         LDA   #$4C       ; animate
         STA   $00
         LDA   #$E6
         STA   $01
         LDA   #$08
         STA   $03
         JSR   $1290

*----------

         LDA   #$06       ; start at track 6
         STA   $3E
         LDA   #$08       ; read 8 tracks
         STA   $42
         LDA   #$00       ; load at $4000
         STA   LB77C
         LDA   #$40
         STA   LB77C+1
         JSR   LB789      ; read disk

         JMP   $4000      ; jump to game

*----------------------------
*
* An IOB table...

LB774    DB    $01
LB775    DB    $60        ; Slot*16
         DB    $01        ; Drive
         DB    $FE        ; Volume
LB778    DB    $90        ; Track
LB779    DB    $BA        ; Sector
         DA    LB785      ; Disk II parms
LB77C    DA    $A088      ; RAM pointer
         DB    $A0
         DB    $85
         DB    $01
         DB    $C0
         DB    $A0
LB783    DB    $60        ; Last slot
         DB    $01

LB785    DB    $00
         DB    $01
         DB    $EF
         DB    $D8

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

LB789    LDA   $3E        ; Track
         STA   LB778

*----------

LB78E    LDA   LB778      ; Is T<6
         CMP   #$06
         BCC   LB79E

         JSR   LB7DA      ; animate
         JSR   LB7DA      ; animate
         JSR   LB7DA      ; animate

*----------

LB79E    LDA   #$00       ; Sector
         STA   LB779
         JSR   LB7CB      ; Set marker

LB7A6    LDA   #>LB774    ; Read sector
         LDY   #<LB774
         PHP
         SEI
         JSR   LBD00
         PLP

         LDA   LB77C+1    ; RAM++
         CLC
         ADC   #$01
         STA   LB77C+1
         INC   LB779      ; Sector++
         LDA   LB779
         CMP   #$0D       ; til $D (13-sec disk)
         BNE   LB7A6
         INC   LB778      ; Track++

         DEC   $42        ; Nb tracks--
         BNE   LB78E
         RTS

*----------------------------
*
* Use track as an index
* ORA value put in text screen
* and set READ/WRITE second marker
*

LB7CB    LDY   LB778
         LDA   $0400,Y
         ORA   #$AA
         STA   $BEFA      ; Write
         STA   $B980      ; Read
         RTS

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

LB7DA    LDA   #$08       ; animation
         STA   $03
         JSR   $1290
         RTS

*---------- Coded values for the DyXXB5 nibbles
*
* Only values for tracks $00..$0D are used
* The real values are:
*  T0..T5: D5xxB5: AABEBEABBFEB
*  T6..TD: DExxB5: FBAAFAAAABEAEFBB
*

LB7E2    HEX   00141421356173205082236067914142
         HEX   1356173205082236
         HEX   000001EFD800

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

MessagePosté le: Dim 28 Oct 2012, 22:20    Sujet du message: Répondre en citant

This is the boot 4 stage, part of the boot screen animation, which also patches the RWTS to change the D5xxB5 header field to DExxB5 values.

Code:
*
* Apple Panic
* (c) 1981, Broderbund
* (k) 2012, LoGo
*

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

TXTCLR   EQU   $C050
MIXCLR   EQU   $C052
TXTPAGE1 EQU   $C054
HIRES    EQU   $C057

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

         TYP   BIN
         ORG   $001000
         MX    %11

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

L1000    LDA   HIRES      ; set HGR
         LDA   TXTPAGE1
         LDA   MIXCLR
         LDA   TXTCLR

         LDA   #$03       ; some useless code
         STA   $10        ; (not related to the protection)
         LDA   #$80
         STA   $11

         TAY              ; Y=$80
         LDA   #$DE       ; change D5AAB5 to DEAAB5
         STA   $B8F6,Y    ; $B8F6 + $80 = $B976 (read)
         STA   $BE75,Y    ; $BE75 + $80 = $BEF5 (write)
         LDA   #$00
L101F    STA   L1000,Y    ; and clear the same code
         INY              ; as if it never existed
         CPY   #$1E
         BCC   L101F
         JMP   $1200      ; and continue...
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: Mer 31 Oct 2012, 5:22    Sujet du message: Re: Apple Panic (Broderbund, 1981) Répondre en citant

toinet a écrit:
in the $7000 memory area, there is a programmer's name which is not the same person as the one on the boot screen. Weird!


You're not the only one to notice that. See here:
http://boutillon.free.fr/Underground/Pubs/Scans_Apple_II/Software/Br0derbund/StarCraft/infos.txt
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: Mer 31 Oct 2012, 7:10    Sujet du message: Re: Apple Panic (Broderbund, 1981) Répondre en citant

toinet a écrit:
I do not even know how to play with the joystick...


It's keyboard only. I/J/K/M is up/left/right/down, A to dig, S to fill.
I have a 17k file version now, I will upload it to Asimov soon, along with a demo my new "compact disk OS".
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: Ven 23 Nov 2012, 6:21    Sujet du message: Répondre en citant

According to the book "High Score", Ben Serki is the author of the Atari version.
I suppose that somehow his name got put into the Apple version by mistake.
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: 3050
Localisation: Le Chesnay, France

MessagePosté le: Sam 24 Nov 2012, 9:53    Sujet du message: Répondre en citant

qkumba a écrit:
According to the book "High Score", Ben Serki is the author of the Atari version.
I suppose that somehow his name got put into the Apple version by mistake.


Nice finding!
av
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