Index du Forum
IDENTIFICATION SERVEUR : 51.83.10.140 - CLIENT : 3.234.208.66

 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 

Flight simulator 1 (subLOGIC, 1980)

 
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: Ven 08 Avr 2016, 23:07    Sujet du message: Flight simulator 1 (subLOGIC, 1980) Répondre en citant

#829 - By Bruce Artwick. One, if not, the first airplane simulator for the Apple II in hires and 3D. Published by subLOGIC in 1980, it will be followed by the well-known Flight Simulator II a few months after.

Protection type
I should record the sound of the drive head arm moving. It is nice. Using 4*4 encoding nibbles and phases as if we had a spiralling (but it is not), everything lies in one side and in one sector...

Boot trace
Always running on the perfect cracking machine, the Apple IIgs, let's go:
Code:

*9600<C600.C6FFM
*96FB:20 FDDA 60
*9600G
01
*C0E8

01 means the controller ROM was requested to load one sector only. By analyzing the code at $0800 (where T0/S0 is loaded), we see in 256 bytes: data loading, move arm and jump to game at $8BD (it jumps to $4800).
Let's try to interrupt after the data is loaded:
Code:

*96FB:A9 59 8D 8BE A9 FF 8D 8BF 4C 801
*9600G
Beep

OK, we have data from $0800 to $7FFF. The read loop routine ends if bit 7 in the higher memory address is set, ie. if the value is $80, like in $8000. That's perfect, the data is loaded until $7FFF...

That's all. There is nothing more. This is disappointing. So, I put the code a 5.25" ProDOS disk, wrote a loader and... I also forget to save the source code of the loader, so it is not on the disk. It relocates its code to $B000 then loads the FS1 file at $0800 and jumps to $4800.

qkumba at the rescue Wink

The disk image is at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy,

LoGo
4/2016


Dernière édition par toinet le Mer 27 Avr 2016, 21:50; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 176

MessagePosté le: Dim 10 Avr 2016, 5:32    Sujet du message: Répondre en citant

It works only by luck in ProDOS. Try it in DOS and see what happens.
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 10 Avr 2016, 22:07    Sujet du message: Répondre en citant

I've disassembled the boot1 code. That shows that nibbles are loaded at $782E..$7FFF and denibblized at $0800..$61D7 before jumping to the entry point at $4800. So, the binary on disk can be smaller...

Code:

*
* Flight Simulator 1
* Boot 1 code
* Track 0 / Sector 0
* Loaded at $0800 / Moved at $0300
*
* (c) 1980, Bruce Artwick / subLOGIC
* (k) 2016, LoGo
*

         mx    %11
         org   $300
         lst   off

WAIT     EQU   $FCA8

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

L0300    DB    $01
         JMP   L08EB      ; relocate to $0300

L0304    STA   $C2        ; $0800
         LDA   #$08       ; is destination address
         STA   $C3
         LDA   #$60       ; slot * 16
         STA   $CA
         SEC              ; carry set
L030F    LDA   #$02       ; 2 phases
         ADC   #$00       ; + one
         TAY
]lp      LDX   $CA        ; turn phases
         LDA   $C080,X    ; in ++ order
         INX              ; to move inward
         INX
         TXA
         AND   #$66
         STA   $CA
         TAX
         LDA   $C081,X
         LDA   #$60
         JSR   WAIT
         DEY
         BNE   ]lp

         LDA   $C080,X    ; to recalibrate, sort-of

         LDA   #$20       ; number of tries
         STA   $CE

L0333    LDA   #$78       ; buffer is $7800
         STA   $C1
         LDA   #$00
         STA   $C0

L033B    LDA   $C0EC      ; forces slot 6 !!!!!!
         BPL   L033B
L0340    EOR   #$DB       ; DB
         NOP
         BNE   L0333
L0345    LDA   $C0EC
         BPL   L0345
         CMP   #$AB       ; AB
         BNE   L0340
         NOP
L034F    LDA   $C0EC
         BPL   L034F
         CMP   #$BF       ; BF
         BNE   L0340

         LDY   #$2E       ; we load $800 (-$2E) nibbles
L035A    LDA   $C0EC      ; at $7800..$7FFF
         BPL   L035A
         STA   ($C0),Y
         INY
         BNE   L035A
         INC   $C1
         BPL   L035A

L0368    LDA   $C0EC
         BPL   L0368
         CMP   #$DB
         BEQ   L037E      ; end of data loading

         LDA   $CE        ; or try again
         CLC
         ADC   #$30
         STA   $0400
         DEC   $CE
         BNE   L0333

         DB    $00

*--- Next step

L037E    LDY   #$00       ; our checksum
         STY   $C8
         LDA   #$2E       ; our data starts at $782E
         STA   $C0
         LDA   #$78
         STA   $C1
L038A    JSR   L03D8      ; get a nibble
         STX   $CB
         INC   $C0
         JSR   L03D8      ; another one
         ORA   $CB        ; we have a byte
         INC   $C0
         BNE   L039E
         INC   $C1
         BMI   L03AD
L039E    STA   ($C2),Y    ; and store in destination
         CLC
         ADC   $C8
         STA   $C8
         INC   $C2
         BNE   L038A
         INC   $C3
         BNE   L038A
L03AD    CMP   $C8
         BNE   L03C7      ; boum
         LDA   $C2
         CMP   #$D8       ; here you can see
         BNE   L03C0      ; that the end address
         LDA   $C3        ; of the program is $61D7!
         CMP   #$61
         BNE   L03C0
         JMP   $4800      ; jump to game ($0800..$61D7)

L03C0    LDA   $7830      ; get a nibble
         ROR              ; put in carry (for phase movement)
         JMP   L030F      ; move arm and run again

L03C7    DB    $00

*--- Table of authorized nibbles

L03C8    HEX   DDDEDFEAEBEDEEEFF5F6F7FAFBFDFEFF

L03D8    LDX   #$0F       ; from a nibble on disk
L03DA    LDA   L03C8,X    ; to a quartet in the acc
         CMP   ($C0),Y
         BEQ   L03E5
         DEX
         BPL   L03DA
         DB    $00        ; not a valid value: BRK
L03E5    TXA
         ASL
         ASL
         ASL
         ASL
         RTS

L08EB    LDX   #$00       ; move $0800 -> $0300
]lp      LDA   $0800,X
         STA   L0300,X
         INX
         BNE   ]lp
         TXA
         JMP   L0304

         HEX   606060606080


Dernière édition par toinet le Mer 27 Avr 2016, 21:50; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


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

MessagePosté le: Dim 10 Avr 2016, 22:07    Sujet du message: Répondre en citant

The loader, from disassembly to source code...

Code:

*
* Loader for Flight Simulator 1 - ProDOS
*

         mx    %11
         org   $b000
         typ   sys
         dsk   fs1.system
         lst   off

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

ptrPREFIX =    $0280
ptrGAME  =     $0800
GAME     =     $4800
ptrBUFFER =    $b800

proDOS   =     $bf00
BASIC    =     $e000
HOME     =     $fc58

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

         LDX   #$00
]lp      LDA   $2000,X
         STA   $B000,X
         INX
         BNE   ]lp
         JMP   ok

ok       LDA   proDOS
         CMP   #$4C
         BEQ   ok1
         JMP   BASIC

ko       JSR   closeFILE
         JSR   proDOS
         DB    $65
         DA    proQUIT
         BRK   $BD

pathFILE STR   'FS1'

ok1      JSR   HOME
         JSR   proDOS
         DB    $C6
         DA    proSETPFX

         NOP
         NOP

         JSR   proDOS
         DB    $C8
         DA    proOPEN
         BCS   ko

         LDA   proOPEN+5
         STA   proGETEOF+1
         STA   proREAD+1
         STA   proCLOSE+1

         JSR   proDOS
         DB    $D1
         DA    proGETEOF
         BCS   ko

         LDA   proGETEOF+2
         STA   proREAD+4
         LDA   proGETEOF+3
         STA   proREAD+5

         JSR   proDOS
         DB    $CA
         DA    proREAD
         BCS   ko

         JSR   closeFILE
         JMP   GAME

closeFILE JSR  proDOS
         DB    $CC
         DA    proCLOSE
         RTS

*--- Data

proQUIT  DB    $04
         DB    $01
         ds    2          ; oops, forgot those
         ds    1
         ds    2

proSETPFX DB   $01
         DA    ptrPREFIX

proOPEN  DB    $03
         DA    pathFILE
         DA    ptrBUFFER
         DB    $00

proREAD  DB    $04
         DB    $00
         DA    ptrGAME
         DW    $0000
         DW    $0000

proCLOSE DB    $01
         DB    $00

proGETEOF DB   $02
         DB    $00
         ADR   $000000

*--- Pfew...

         asc   "Antoine Vignau, 4/2016"
         ds    \
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: Lun 11 Avr 2016, 17:37    Sujet du message: Répondre en citant

Indeed, I made a terrible mistake, and I apologise. The game runs well everywhere.
8k packed version in Asimov now for DOS and ProDOS, can be BRUN now.
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 12 Avr 2016, 13:16    Sujet du message: Répondre en citant

You rock, Qkumba!
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