Disk : Gdf07_TSL_Reparee.dsk
"-" files are DELETED files | "*" files are LOCKED files
----------------------------------------------------------------------
A A$0000 (000000) L$0280 (000640) 004 COPY
A A$0000 (000000) L$0531 (001329) 007 HELLO
B A$0300 (000768) L$00C1 (000193) 002 HEX_DEC CONVERTER
B A$0901 (002305) L$05D8 (001496) 007 HEX_DEC CONVERTER.S
B A$1F92 (008082) L$6080 (024704) 098 MUS.HALLEY PROJECT
B A$0300 (000768) L$00A4 (000164) 002
SREAD_SWRITE
B A$0300 (000768) L$00A5 (000165) 002 SREAD_SWRITE.OBJ0
B A$0901 (002305) L$049C (001180) 006 SREAD_SWRITE.S
B A$0300 (000768) L$00A9 (000169) 002 COMMUT_2_HIRES
T A$0000 (000000) L$B000 (045056) 176 T.COURS 7 REVISION
2.30
T A$0000 (000000) L$0800 (002048) 008 T.ET LA PROCHAINE FOIS...
T A$0000 (000000) L$0F00 (003840) 015 T.GODFATHER
RACONTE...
T A$0000 (000000) L$0B00 (002816) 011 T.INTRODUCTION
T A$0000 (000000) L$0900 (002304) 009 T.LES PROGRAMMES DE CE
DISK
T A$0000 (000000) L$1800 (006144) 024 T.RECHERCHE EXPLICATIONS
B A$B6C0 (046784) L$0039 (000057) 002 VERIF.PLOMB7
B A$0901 (002305) L$0432 (001074) 006 VERIF.PLOMB7.S
T A$0000 (000000) L$2A00 (010752) 042 T.COURS 7...2EME FICHIER
B A$0901 (002305) L$0862 (002146) 010
COMMUT_2_HIRES.S
T A$0000 (000000) L$1D00 (007424) 029 T.INFORMATIONS COURS
B A$9000 (036864) L$00EF (000239) 002
COMMUT_D00
B A$0901 (002305) L$093E (002366) 011 COMMUT_D00.S
This catalog contains 22 files. 0 were DELETED.
----------------------------------------------------------------------
DOS 3.3 |
Download Cours GDF 07 rev 2.30 version
abimée mais TSL réparée (gzipped) |
|
DOS 3.3 |
Download Cours GDF 07 rev 2.30 version
abimée (gzipped) |
Lien | Article |
Introduction. | |
Cours 7 révision 2.30. | |
Cours 7 second fichier. | |
Recherche explications. | |
Les programmes de ce disk. | |
Et la prochaine fois. | |
Informations cours. |
===============================================================================
INTRODUCTION...
Godfather / Cours 7
===============================================================================
Ce cours est là pour faire le point sur les
précédents cours, mais aussi pour
introduire plusieurs routines/programmes dont je parlerais et que l'on
utilisera ensemble pour de futurs déplombages !!...
L'appendix annonce tout ce qui suit.....
--------------------------------------------------------
COURS 7 : TRUCS EN
VRAC...
Godfather
===============================================================================
Révision
2.30
13/01/88
Après analyse et synthèse de toutes vos questions
(interessantes) à propos du
contenu des cours précédents, ce COMPLEMENT #1 regroupe
toutes les réponses
vraiment très détaillées... C'est ce qu'on
pourrait appeler :
* Vous n'avez pas compris la théorie.. Alors je vous l'explique
par la pratique
La pratique sera, pour les differents cours :
Cours 1 : Pourquoi B942:18 permet-il de lire certains originaux...?
Cours 3 : Résolution d'exercice. Le programme de copie en basic,
pas à pas
Cours 5 : Retrouvez et signez une image de boot (tout expliqué
par la pratique)
Cours 6 : un tout nouveau plombage par Dos Patched... version copiable..
Avec, pour vous simplifier la vie, deux super routines folles :
Pour détourner toutes les difficultés de la RWTS :
SREAD/SWRITE
Pour éviter l'achat INDISPENSABLE d'une machine : Convert'
HEXA <--> DECIMAL
Avec tous les programmes du cours en catalog ainsi que la
première application
des commandes SREAD/SWRITE : Le GDF SECTOR COPY 2.00...
(Dés le cours 9 révision 2.00 on utilisera cette routine
galactique...)
+ Fichier explicatif concernant la double haute résolution (+
programme!)
+ Le déplombage complet et détaillé : MIRAGE
(plombé PLOMB'DISK GDF)
+ un nouvelle épisode de la Saga épique : GODFATHER
RACONTE... Radio France!!
+ une copie d'original à déplomber : THE HALLEY
PROJECT (C) MINDSCAPE
--------------------------------------------------------
Ca c'est ce qui était annoncé, et tout y est. Vous pouvez
vérifier !!...
Alors bonne bidouille, bonne grenouille !
Amicalement, GODFATHER!
===============================================================================
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COURS 7 : TRUCS EN
VRAC
Godfather
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Cette fois ci, le menu est très gratiné.. vous devrez
subir ça :
DOS PATCHED (POURQUOI B942:18 CA MARCHE IMPEC
??)
(25/12/87)
RWTS (COMPRENDRE PAR
L'EXEMPLE....)
(10/01/87)
BOOT1 (COMPRENDRE PAR LA
DECORTIQUANCE)
(13/10/87)
SIGNER LES IMAGES (PAR LA PRATIQUE SUR HALLEY
PROJECT)
(22/01/87)
POUR CEUX QUI AVAIENT DES PBS : LE DEPLOMBAGE DETAILLE DE
MIRAGE (20/08/87)
PLOMBAGE : UN AUTRE TYPE DE PLOMBAGE PAR DOS
PATCHED
(16/10/87)
DES COMMANDES QUI S'AJOUTENT A CELLES DU DOS : "SREAD",
"SWRITE" (05/06/87)
CONVERTION HEXADECIMAL/DECIMAL SANS MACHINE A
CALCULER...
(03/06/87)
DOUBLE HAUTE RESOLUTION.. COULEUR OU PAS COULEUR
?...
(13/01/88)
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Révision
2.30
(Update : 13/01/88)
Salut et salut,
A la demande de plusieurs d'entre vous qui se posaient encore des
questions
sur le DOS PATCHED (le B942:18 du premier cours) et qui n'avaient pas su
faire les exercices du cours 3 (je l'avoue, trop balaises pour un
début!)...
Pour ceux aussi, qui désirent s'entrainer à signer des
images (cours 5)...
En face B de ce cours, un original à déplomber et
à SIGNER :
THE HALLEY PROJECT, (C) MINDSCAPE 1985
...voici un complement des cours 1,3,5 qui va vous permettre de tout, je
l'espère, très bien assimiler..... Allons-y gaiement...
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COMPLEMENT COURS 1 : LA TECHNIQUE DU DOS PATCHED : POURQUOI CA MARCHE ?
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Avant de commencer à vous parler du DOS PATCHED, je voudrais
faire une petite
parenthèse :
Le terme "DOS PATCHED" vient de l'anglais "DOS Modifié"... On
peut modifier le
DOS de 200 manières différentes (pour accelerer la RWTS,
pour modifier le
catalog, pour modifier la longueur des fichiers sauvegardables, etc...)
mais le
terme de DOS PATCHED a été employé et doit
s'appliquer uniquement quand on
parle du PLOMBAGE des softs par modification des HEADERS DE FIN DE
CHAMP.
(DE AA EB)
Le plombage par modification des HEADERS DE DEBUT DE CHAMP (D5 AA 96,
D5 AA AD)
est beaucoup plus complexe aussi est il moins souvent employé.
Quand je dirais DOS PATCHED, je me permet une liberté de
language, car en fait
je voudrais parler à la fois du DOS qui a été
modifié par un B942:18, à la
fois du disk aux headers de fin de champ modifiés (qui peut se
lire avec un
B942:18), et à la fois du programme de plombage par modification
des headers de
fin de champ...
(Vaut il mieux dire "DOS PATCHED" ou bien "DISK PLOMBE PAR MODIFICATION
DES
HEADERS DE FIN DE CHAMP" ??.. Choisis ton camp, camarade...)
Parenthèse fermée...
La question est : POURQUOI UN B942:18 PERMET DE LIRE DES DISKS SINON
ILLISIBLES
Je vais vous expliquer un peu ce que fait le drive quand il cherche
à lire un
secteur précis, et ensuite on va s'attaquer au dos patched :
Vous savez deja comment est divisé un disk.. (en pistes
circulaires et en
secteurs organisés sur ces pistes...) mais la question est :
COMMENT LE DRIVE PEUT-IL RETROUVER UN SECTEUR PRECIS SUR UNE PISTE
PRECISE...?
Au boot, le drive recalibre sa tete de lecture (que je vais appeller
pioche)..
Il l'envoie valdinguer contre son arbre (le centre du drive) qui
correspond à
la piste $00. Pour etre certain de bien se situer sur la piste 0 (car au
départ, il ne peut pas savoir où se trouve la tete de
lecture) il va se dire
qu'il se trouve par exemple sur la piste $50 et qu'il doit revenir vers
la
piste $00. Il va donc $50 fois se rapprocher de l'arbre du drive...
Comme aucun
drive Apple ne peut aller jusqu'à $50 pistes, il est alors
certain de bien se
trouver sur la piste $00. (C'est de là que vient le bruit du
boot).
Donc dés le boot, il se recalibre et charge le dos à
partir de la piste $0.
A partir de là, le dos prend la releve et place le numéro
de la piste courante
en $B7EC. (Voir cours 3).
Pour lire le secteur 3 de la piste 5 par exemple, le dos sait que la
pioche se
trouve par exemple en piste 2. Il va donc commencer par la
déplacer de 3 pistes
vers l'exterieur de l'arbre. Il se trouvera donc en piste 5.
Maintenant, il
doit selectionner quel est le secteur 3 de cette piste..Pour cela, il
va devoir
trouver le champ ADRESSES de ce disk.
Le champ ADRESSES d'un disk au format normal se caractérise par
ses HEADERS.
Les HEADERS à trouver pour le champ ADR. sont : D5 AA 96.
La tete de lecture lit quelque chose dés qu'on le lui demande et
elle doit
donc commencer par se reperer sur sa piste.. Elle part donc à la
recherche
de Nibbles FF. Elle va rechercher une suite de plusieurs Nibbles FF qui
désignent un début de champ, et elle va ensuite verifier
si cette suite se
continue par les Headers D5 AA 96.
Dés qu'elle a lu une suite de FF suivie de D5 AA 96, c'est
qu'elle a localisé
le champ adresses...
POUR PLUS DE FIABILITE, elle va lire les nibbles suivants à la
recherche des
nibbles DE AA. (#$EB n'est pas vérifié) qui sont les
Nibbles de fin de champ.
Ensuite, elle va examiner ce champ ADR. dans lequel se trouve, en
autres, le
numéro de la piste actuelle et le numéro du secteur qui
suit ce champ ADR.
Si le numéro du secteur est bien 3 comme on le voulait dans cet
exemple, la
pioche va aller lire les nibbles suivant ce champ adresses...
Elle doit trouver après le DE AA EB une autre suite de Nibbles
FF qui
représentent la séparation (je parle pas encore de
synchro' pour pas tout
compliquer) entre le champ adresses qui indique un numéro de
secteur et
le champ données (DATA) qui est composé des Nibbles
correspondants aux
données du secteur concerné.
Pour bien trouver le début de ce champ données, il faut
trouver les
HEADERS de début de champ données : D5 AA AD.
L'Apple va donc chercher, après cette seconde suite de Nibbles
FF les nibbles
D5 AA AD.
Une fois localisé cette suite et les D5 AA AD, la pioche
pourrait lire le
secteur (zone données) mais POUR PLUS DE FIABILITE encore, elle
va vérifier
la présence, à la fin du champ données des headers
de fin de champ : DE AA.
(#$EB n'est pas vérifié).
Un disk plombé en 'dos patched' est en fait plombé par
'modification des
headers de fin de champ', (voir cours 6) qui, nous l'avons vu, sont
uniquement
là pour une question de fiabilité de lecture..pour pas
que le drive puisse se
planter..
La RWTS d'un disk ainsi plombé contient les bonnes valeurs
substituées par le
plombeur aux classiques #$DE AA. Ainsi, cette RWTS ne cherchera plus
#$DE AA
mais bien les valeurs mises en remplacement... et nous l'avons vu, ces
deux
vérifications de #$DE AA sont faites uniquement pour une
question de FIABILITE.
Donc, pour déplomber un disk possedant des headers de FIN de
champ data/adr.
modifiés, il suffit de modifier le dos de facon à ce que
la lecture d'un
secteur ne se base plus QUE sur la vérification des headers de
debut de champ
data/adr... C'est suffisant si c'est la seule
protecion utilisée...!
(Vous l'avez vu avec MIRAGE, l'original du cours
précédent...)
B942:18 et donc cette modification... (C'est assez génial il
faut dire)!
Je vais maintenant désassembler pour vous la partie qui nous
concerne dans la
RWTS... Je vous situe l'action. La pioche a déjà
localisé le champ adresse/dt
grace aux headers de debut et après la seconde suite de Nibbles
#$FF, elle
lit les nibbles qui suivent pour chercher #$DE AA :
B92F- BD 8C C0
LDA $C08C,X --> Lecture de nibbles
B932- 10
FB
BPL $B92F
B934- C9
DE
CMP #$DE --> Est ce un
#$DE..
B936- D0
0A
BNE $B942 --> NON! Alors
------> I/O ERROR
B938-
EA
NOP
B939- BD 8C C0
LDA $C08C,X --> Lecture de nibbles
B93C- 10
FB
BPL $B939
B93E- C9
AA
CMP #$AA --> Est ce un
#$AA..
B940- F0
5C
BEQ $B99E --> Oui alors --->
SUITE DE L'ACTION
B942-
38
SEC
--> Ce n'est pas #$DE AA alors la
B943-
60
RTS
retenue est mise à 1. (SEt Carry)
Si la pioche trouve #$DE AA, elle laisse la retenue à 0.
Si la pioche ne trouve pas #$DE AA, elle force la retenue à 1.
Puisque cette vérif est inutile (fiabilité seulement) il
suffit de remplacer
le SEt Carry (Retenue à 1) par un CLear Carry (Retenue à
0)...
CLear Carry (CLC) correspond à $18 et c'est à l'adresse
$B942 donc pour
permettre à une RWTS normale de lire un disk (original)
plombé par modification
de ces headers de fin de champ, il suffit de faire un :
B942:18 et vous pourrez convertir le disk original avec ADVANCED
DEMUFFIN 1.1
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COMPLEMENT COURS 3 : EXERCICE 1 : PROGRAMME DE COPIE EN BASIC / MACHINE
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Voici les exercices que je vous avait donné à l'issue du
cours 3... Nous allons
résoudre le plus interessant (et à la fois le plus fou),
maintenant :
"Fait moi un prog. de copie qui utilise RT.RWTS le plus
rapide possible
sachant que la lecture d'une piste est plus rapide
du secteur $0F au
secteur $00 au lieu du contraire et ce, en 4 lignes
maximum. (c'est
faisable en 2 lignes)... (DIFFICULTE : ****)"
FAIRE UN
PROGRAMME DE COPIE (RAPIDE) UTILISANT LA RWTS
------------------------------------------------------
(La routine listée ci dessus s'appelle RT.RWTS et ce
trouve sur ce disk)
Je vais citer ce que j'ai dit dans le cours 3 a propos des programmes
de copie:
"Un programme de copie n'est rien d'autre qu'un programme qui charge
chaque secteur du disk en mémoire avant de sauver les $FF
octets de ce secteur
sur le secteur ayant le meme numéro et sur la meme
piste du second disk..."
On fait déjà un programme qui permet de charger un seul
secteur à une certaine
adresse en ram :
10 ? CHR$(4)"BLOAD RT.RWTS,A$4000"
20 PISTE = 0 : SECTEUR = 0 : CMD = 1 : DR = 1 : LOADRESS = 0 : HIADRESS
= 32
30 POKE
16406,CMD
---> Commande = Lecture
40 POKE
16396,DR
---> Drive = 1
50 POKE 16402,LO : POKE
16403,HI --->
Adresse = ((32*256)+0) = ($2000)
60 POKE
16398,PI
---> Piste 0
70 POKE
16399,SE
---> Secteur 0
80 CALL 16384
Si on fait ]RUN, ce programme va charger RT.RWTS puis va lire la piste 0
secteur 0 du disk en drive 1, en $2000. (Call - 151, puis 2000.20FF vous
montre les memes octets que si vous allez voir ce secteur avec un
éditeur
de secteurs).
Maintenant, il faut compliquer ce programme pour qu'il lise toutes les
pistes du disque (boucle PISTE) et dans chaque piste, tous les secteurs
(boucle SECTEURS) en augmentant à chaque fois de $100 l'adresse
du buffer
(Soit de 1 la variable d'adresse haute du buffer, par exemple pour
$2000,
on a 32 (=$20) dans la variable HIADRESS. Il faut mettre le premier
secteur en $2000 et le second en $2100 il faut donc incrementer cette
variable une fois)...
Nous allons lire tous les secteurs de 7 pistes à la fois pour
commencer. (#0-6)
et tout charger de $2000 à $8FFF. Allons y :
10 ? CHR$(4)"BLOAD RT.RWTS,A$4000"
20 CMD = 1 : DR = 1
30 POKE 16402, 0 : POKE 16403, 32
---> Initialisation Buffer ($2000)
40 FOR PI = 0 TO
7
---> Boucle PISTE
50 FOR SE = 0 TO
15
---> Boucle SECTEUR
60 POKE 16406,
CMD
---> Commande : Lecture
70 POKE 16396,
DR
---> Drive : 1
80 POKE 16398,
PI
---> Piste : (Changeant de 0 à 35)
90 POKE 16399,
SE
---> Secteur : (Changeant de 0 à 15)
100 CALL
16384
---> Accès disk
110 POKE 16403, PEEK (16403)
+1 ---> Adresse
haute buffer : incrémentée
à chaque secteur
120 NEXT SE : NEXT PI
Voilà.. Ce programme LIT seulement les piste de 0 à 6 de
$2000 à $8FFF.
On va encore le modifier pour qu'il lise ces 7 pistes puis les
réécrive sur le
disk en drive 2 sur les memes pistes/secteurs.
10 ? CHR$(4)"BLOAD RT.RWTS,A$4000"
20 CMD = 1 : DR = 1 : GOSUB 30
21 CMD = 2 : DR = 2 : GOSUB 30
22 END
30 POKE 16402, 0 : POKE 16403, 32
---> Initialisation Buffer ($2000)
40 FOR PI = 0 TO
7
---> Boucle PISTE
50 FOR SE = 0 TO
15
---> Boucle SECTEUR
60 POKE 16406,
CMD
---> Commande : Lecture
70 POKE 16396,
DR
---> Drive : 1
80 POKE 16398,
PI
---> Piste : (Changeant de 0 à 35)
90 POKE 16399,
SE
---> Secteur : (Changeant de 0 à 15)
100 CALL
16384
---> Accès disk
110 POKE 16403, PEEK (16403)
+1 ---> Adresse
haute buffer : incrémentée
à chaque secteur
120 NEXT SE : NEXT PI
130 RETURN
Ensuite, on va le modifier pour qu'il lise TOUT LE DISK par groupe de 7
pistes
10 ? CHR$(4)"BLOAD RT.RWTS,A$4000"
11 FOR P = 0 TO 5
20 CMD = 1 : DR = 1 : GOSUB 30
21 CMD = 2 : DR = 2 : GOSUB 30
22 NEXT P
23 END
30 POKE 16402, 0 : POKE 16403, 32
---> Initialisation Buffer ($2000)
40 FOR PI = P TO
P+6
---> Boucle PISTE
50 FOR SE = 0 TO
15
---> Boucle SECTEUR
60 POKE 16406,
CMD
---> Commande : Lecture
70 POKE 16396,
DR
---> Drive : 1
80 POKE 16398,
PI
---> Piste : (Changeant de 0 à 35)
90 POKE 16399,
SE
---> Secteur : (Changeant de 0 à 15)
100 CALL
16384
---> Accès disk
110 POKE 16403, PEEK (16403)
+1 ---> Adresse
haute buffer : incrémentée
à chaque secteur
120 NEXT SE : NEXT PI
130 RETURN
Ce programme est un programme de copie impec' sauf question lenteur...
On va encore le modifier pour qu'il lise les secteurs de $F à $0
et non
pas de $0 à $F.. C'est plus rapide comme je vous le dit dans
l'exercice...
10 ? CHR$(4)"BLOAD RT.RWTS,A$4000"
11 FOR P = 0 TO 5
20 CMD = 1 : DR = 1 : GOSUB 30
21 CMD = 2 : DR = 2 : GOSUB 30
22 NEXT P
23 END
30 POKE 16402, 0 : POKE 16403, 32
---> Initialisation Buffer ($2000)
40 FOR PI = P TO
P+6
---> Boucle PISTE
50 FOR SE = 15 TO 0 STEP
-1
---> Boucle SECTEUR
60 POKE 16406,
CMD
---> Commande : Lecture
70 POKE 16396,
DR
---> Drive : 1
80 POKE 16398,
PI
---> Piste : (Changeant de 0 à 35)
90 POKE 16399,
SE
---> Secteur : (Changeant de 0 à 15)
100 CALL
16384
---> Accès disk
110 POKE 16403, PEEK (16403)
+1 ---> Adresse
haute buffer : incrémentée
à chaque secteur
120 NEXT SE : NEXT PI
130 RETURN
Et voilà le premier exercicé résolu... Le
programme en mode lecture et par une
boucle PISTE parcourt toutes les pistes du disk source, puis dans
chaque piste
il parcourt tous les secteurs dans l'ordre décroissant... Enfin,
en mode
ecriture, il fait le meme parcourt en drive destination pour copier le
disk.
Quant à ce qui est de la faire tenir en deux lignes, il n'y a
pas de probléme
Il suffit de le restructurer un peu et de regrouper les instructions..
J'avais
dit cela pour vous montrer que vraiment ça pouvait etre
très court et néanmoins
aussi efficace que le locksmith rapide !! (Question copie.. pas question
vitesse, sinon je serais un petit génie...!)
Il faut bien TOUT comprendre de l'UTILISATION DE LA RWTS! C'est
indispensable..
Si vous n'avez pas compris avec cet exemple pratique, posez moi encore
des
questions...
On peut soit tout comprendre et c'est super...
.......soit rien comprendre et tricher un peu... C'est ce qu'on
va voir ici..!
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
LES COMMANDES "SREAD" ET "SWRITE" QUI VONT NOUS ENORMEMENT SIMPLIFIER
LA VIE !!
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Sur ce disk, vous trouverez une routine très utile :
SREAD/SWRITE.
Vous m'avez presque tous posé pleins de questions après
les cours 3/4 à propos
de la routine de lecture/écriture DOS 3.3... Ceci est peut etre
la réponse à
vos angoisses...
Lancez le programme par un ]BRUN, puis essayez par exemple de taper :
]SREAD T0,S0,A8192...
Ensuite, passez en moniteur.. et allez voir ce qui se trouve en $2000.
($2000=8192).. Là, vous devez retrouver le contenu de la piste
$00 Secteur $00
du disk actuellement dans le drive 1...
Meme principe pour l'écriture :
]SWRITE T0,S0,A8192
Qui va (Attention de pas recouvrir n'importe quoi !!) écrire la
zone $2000-20FF
sur la piste $00 Secteur $00 du disk en drive 1.
Pour changer de drive : POKE 913,1 ou
2.
($391)
Pour changer le volume : POKE
914,(vol)
($392)
Pour analyser une eventuelle erreur disk : PEEK
924 ($39C)
Ainsi, vous pourrez faire un programme de copie TRES SIMPLE !!
Un exemple :
10 FOR T = 0 TO 34 : FOR S = 15 TO 0 STEP - 1 : POKE 913,1: ?
CHR$(4);"SREAD T"
;T;",S";S; "A";(S*256)+8192 : NEXT S : POKE 913,2: ?
CHR$(4);"SWRITE T";T;
",S";S; "A"; (S*256)+8192 : NEXT S : NEXT P
C'est tout simple vu comme ça....non ?
J'ai programmé pour vous le GDF SECTOR COPY 2.00 qui est en
catalog sur ce disk
pour vous montrer un peu ce qu'on peut faire avec cette routine
SREAD/SWRITE...
Gardez la bien précieusement, on en reparlera souvent quand on
aura besoin
de la RWTS dans un environnement de DOS 3.3 !!!
Il FAUT comprendre comment utiliser la routine de lecture/ecriture RWTS
du DOS
pour deux raisons, en fait :
* Pour etre capable de faire un programme (de copie comme dans cet
exemple)
sous DOS utilisant la RWTS...
* Pour etre capable de comprendre ou d'écrire un programme en
machine,
directement sur le disk, qui aurait besoin de la routine RWTS,
et ce pour
bidouiller ou programmer aussi bien que pour déplomber...
Alors, SREAD/SWRITE est là pour vous sauver du premier cas...
Pour le second,
c'est vraiment à vous de vous y mettre à fond et
d'essayer de piger la RWTS,
si ce n'est (oh! merci mon Dieu) déjà chose faite.
Donc, en catalog sur ce disk :
-
SREAD/SWRITE
la routine objet
- SREAD/SWRITE.S le
source complet et détaillé
- GDF SECTOR COPY 2.00 la première application
pratique de cette routine
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
CONVERTION DECIMAL <--> HEXADECIMAL SANS CALCULATRICE
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Sur ce disk, vous trouverez aussi un programme simple mais très
utile que j'ai
déniché pour vous dans un vieux NIBBLE (un magazine US de
programmation Apple)
Lancez le.. Il vous permet de d'obtenir un nombre en Hexa de 4
caractères
(mettre un "$" avant le nombre en question) en l'équivalent
décimal... ou
vice-versa.
Vous n'en voyez peut etre pas l'utilité pour l'instant, mais
croyez moi,
on aura très souvent l'occasion de s'en servir, à
défaut de machine à calculer
assez savante, surtout quand on abordera les vérif's de
disk...(Nibble Counts)
Un octet... Les adresses... tout est en HEXADECIMAL... et quand on fait
un
POKE et qu'on ne sait pas donner l'adresse pour le poke en
décimal; on est
très mal...
Evidemment, comme toujours, le source complet est en Catalog.
Ca c'est un programme dont on reparlera souvent... Vous verrez...
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COMPLEMENT COURS 4 : DOS : DECORTIQUANCE COMPLETE ET DETAILLE DU BOOT 1
DU DOS
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Explications demandées par Tom et Jerry...
Tous les disks en Boot 3.3 - tels les DOS 3.3 ou émules -
bootent sensiblement
de la meme façon.. J'ai donc pris le boot d'un ProntoDOS (mon
favori) et je
vous l'ai liste ici.. j'ai tout décortiqué et
expliqué pour vous mesdames et
messieurs... alors, pour ceux qui ne peuvent pas aller plus loin dans
le boot-
tracing d'un Boot 3.3, je les ignore à jamais !!
Pour arriver jusqu'ici, j'ai juste commencé classiquement le
boot-t.
(*1600<C600.C700M N 16F8:4C 59 FF N 1600G puis j'ai fait *800 et
*801LLLL...)
Voici le listing fou du boot1 3.3 commenté :
0800-
01
; Nombre de secteurs chargés au boot1
0801- A5
27 LDA $27 ;
0803-
08
PHP
;
0804-
EA
NOP
;
0805- D0
18 BNE $081F ;
* La routine qui suit sert à reperer la routine de boot en
mémoire
* (selon les Apple elle est $C6 ou autre part, mesdames et messieurs
les jurés)
* et va mettre donc, ici, $C6 en $3F et $5C en $3E. Ainsi, ca forme
l'adresse
* $C65C, qui correspond, dans la routine Boot, à la lecture d'un
secteur.
* (c'est la routine en $C65C qui vient de lire le secteur $00
chargé en $800,
* monsieur l'inspecteur !)
0807- A5
2B LDA $2B
; $2B correspond au slot*16 soit $60.
0809-
4A
LSR
; On cherche la page de la Rom Boot.
080A-
4A
LSR
; (normalement $C6)
080B-
4A
LSR
;
080C-
4A
LSR
; on le agagaze de $60 en $06.
080D- 09
C0 ORA #$C0 ; et
on le glumochange en $C6.
080F- 85
3F STA $3F
; pour mettre le résultat en $3F = C6.
0811- A9
5C LDA #$5C ; $3E
= 5C
0813- 85
3E STA $3E ;
* Voila.. on sait que Boot est en $C600 donc que la routine Read_Sector
* est en $C65C. d'accord ?? Je continue...
* Bon, maintenant, retenez ça, plus le fait qu'on a en $8FD: 00
B6.. Okay ?
0815-
18
CLC ; Carry
= 0 (on va faire un ADC)
0816- AD FE 08
LDA $08FE ; On met dans A la valeur $B6.
0819- 6D FF 08
ADC $08FF ; On ajoute à A le nombre de
sect à lire
081C- 8D FE 08
STA $08FE ; Et on met A dans $8FE (au lieu de
$B6)
* A ce moment là, on a donc $08FE = #$B6 + #$09 = #$BF.
* Je continue... On appelera nb_sect le nombre en $08FF qui correspond
au
* nombre de secteurs à charger pour le Boot2 (normalement 9,
c'est la Rwts).
* Je rappelle que la Rwts se charge par la rom de boot (carte
controleur)
* et que la routine en question que j'ai nommé Read_Sector est
en $C65C.
081F- AE FF 08
LDX $08FF ; On met dans X la valeur de nb_sect.
0822- 30
15 BMI $0839 ; Est ce
que nb_sect est déjà à #$00 ?
* Ici, on va charger en mémoire les secteurs du boot2.
* On va a chaque fois décrémenter l'adresse nb_sect, et
revenir en $081F.
* ce qui explique le BMI (Branch on MInus) qui vérifie que le
nombre est ou
* n'est pas négatif (après #$00). Si nb_sect est
négatif, c'est que tous les
* secteurs du Boot2 sont chargés et on saute alors en $0839.
Vous suivez tjrs ?
0824- BD 4D 08
LDA $084D,X ; On met en A le numéro du sect à
0827- 85
3D STA $3D
; en "physique".. cherchez pas !!
0829- CE FF 08
DEC $08FF ; On décrémente nb_sect
avant de le lire
082C- AD FE 08
LDA $08FE ; On met ici la page de chargement du
082F- 85
27 STA $27
; secteur suivant en $27.
0831- CE FF 08
DEC $08FF
* Ici, c'est la lecture d'un secteur. le JMP ($003E) correspond, on l'a
vu à
* un JMP $C65C car $3E = #$5C et $3F = #$C6. La routine en $C65C est
Read_sect
* et est à la fin de Boot. Elle se terminera donc par un JMP
$801 (comme à la
* fin normal du boot). Seule différence, $27 (page de
chargement) sera
* modifiée.. (voir PHP BNE $081F !!). Le BNE $081F, soit le JMP
$081F ne se
* produit que lorsque l'on est dans l'étape du chargement du
Boot2. pas celle
* du boot1. Compris ?? donc, dans notre cas (ici, chargement du Boot2),
le
* JMP $801 aboutira à l'adresse $081F, pour continuer la lecture
du Boot2..
* You comprendre quand moi expliquer à vous, madame la
contractuelle ?
0834- A6
2B LDX $2B
; On met dans X le Slot*16 soit $60.
0836- 6C 3E 00
JMP ($003E) ; On saute à Read_sector qui ira en $801
* Bon, ici on a terminé pour la lecture du Boot2. On poursuit
ici en $0831 par
* ce qui se passe après le chargeme
<coupure David The Bug><coupure David The Bug><coupure
David The Bug>
au locksmith rapide pour déjà débrouisailler et
juger du type de la
protection (Voir cours 1)...
Le disk est incopiable (illisible!).. On va donc booter un Nibble
editor pour
voir s'il a un format fou (1/2 pistes, 1/4 de pistes, spiralling...etc)
ou bien
s'il s'agit juste d'une altération des Headers...
L'original est donc incopiable au 6.0 rapide car ses marqueurs de fin
de champ
data on été modifiés!... On voit ceci au Nibble
Editor :
-----------------------------------------
PTR=2200
ADR=2200 TRK=01
-----------------------------------------
2200- 9696FFD4 AAEBFFFF FFFFFFFF FFFFFFFF <= Fin Données
en : D4 AA EB
2210- FFFFFFFF FFFFD5AA 96FFFFAA AEABABFE <= Début Adresses
en : D5 AA 96
2220- FAD4AAEB FFFFFFFF FFFFFFFF FFFFFFFF <= Fin Adresses
en : D4 AA EB
2230- D5AAADB9 F5ADDFE7 B6...... ........ <= Début
Données en : D5 AA AD
On voit donc que seuls les headers de fin de champ Adr/Données
ont été
modifiés de DE AA EB en D4 AA EB... On va donc convertir le disk
ainsi :
]BLOAD ADVANCED DEMUFFIN 1.1
]CALL-151
*B991: D4 (Au lieu de DE)
*B935: D4 (Au lieu de DE)
*800G
On aurait pu aussi bien faire un B942:18, mais quand c'est aussi simple,
faut mieux travailler de manière clean.. (rappelez vous
"Fiabilité!" en ce
qui concerne les Headers de fin de champ.. c'est dans ce cours 7!)
On utilise donc l'option CONVERT DISK...
Pendant qu'on y était, on pouvait meme faire beaucoup mieux
!!!..Avec le 6.0 !
On n'avait qu'à utiliser les paramètres.. Bootez le, puis
tapez :
00EB (return) puis D4 (Au
lieu de DE)
00F1 (return) puis D4 (Au
lieu de DE)
Ca va modifier le programme à la lecture mais l'écriture,
comme avec l'ADV DEM,
se fera en DE AA EB.. Ce sera donc bien une conversion de format !!
avec le 6.0
==
-----------------------
Ensuite.. Essayez de booter la copie!.. Ca ne marche pas!
C'est donc que la RWTS (FBoot Chip Select) vérifie les Headers
de fin de champ
(pour etre bien fiable!).. On n'aura donc, en théorie,
qu'à modifier 2 octets
tout comme on vient de la faire en mémoire.. mais au lieu de
modifier la RWTS
3.3 qui a lu le disk lors de la conversion (ou la RWTS LOCKSMITH), on va
modifier la RWTS FBoot sur le disk!...
Bootez un programme de recherche (COPY II+ 5.x, Option SECTOR EDITOR,
Touche S)
et recherchez C9 DE (CMP #$DE).. La RWTS comme tts les autres, lit des
Nibbles
et recherche un #$DE.. (d'où ce compare entre le nibble lu et la
valeur à lire)
Vous n'en trouvez que 2.. A vous de les modifier de DE en D4.. puisque,
on
l'a vu au Nibble Editor, c'est simplement ainsi que le format (donc la
RWTS)
a été modifié !!
...Et c'est déplombé !!!!
Si vous y etes arrivé! Bravo.. Sinon, je pourrais vous proposer
un autre
crack du meme type, mais avec un programme du commerce cette fois ci...
(Je pense notamment à CRAZY MAZEY! plombé sur un DOS 3.3
non-remplaçable !)...
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COMPLEMENT COURS 6.2 : UN AUTRE TYPE DE PLOMBAGE PAR DOS PATCHED
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
On a vu dans le cours 1 deux grands types de plombage :
- Les disks qui se copient
au locksmith mais qui plantent
- Les disks qui ne se
copient pas au locksmith (rapide)
On a vu dans les cours 1 et 6 comment plomber un disk par Dos Patched
contre le
locksmith, voici maintenant une autre méthode qui utilise
toujours le principe
du Dos Patched mais qui laisse votre original lisible au locksmith..
néanmoins,
la copie ne bootera pas..
Pour mieux comprendre, voici la technique de ce plombage...
Comme toujours, tous les sources sont en catalog.
1. Bootez un DOS normal
---------------------------------------------------------------------
sauf un Pronto-Dos comme sur
ces cours, car il utilise de la Ram que
nous allons utiliser = dans
la page #$B6.
2. Modifiez deux octets dans
le Dos : DE AA EB => DE AA EE
---------------------------------------------------------------------
On modifie le dernier octet
des headers de fin de champ data et
adresses, qui comme ont le
voit dans le cours 6 sont aux adresses
suivantes :
$B8A8 : EE
$BCB8 : EE
3. Modifiez dans le Dos le
Boot1 (Branch_vérif + vérification plomb')
---------------------------------------------------------------------
On va modifier la fin du
boot 1.
Vous etes vous
déjà posé la question suivante ?
Quand vous tapez INIT,
d'où vient la piste $00 secteur $0 ?
Vous comprenez pas la
question ? Attendez, je m'explique.
Le boot1 qui correspond
à la piste $00 00 se charge au boot en $800
seulement $800 n'est pas
dans le DOS, bien au contraire c'est le début
du buffer où se
chargera un programme en basic...mais pourtant,
meme avec un programme Basic
en mémoire en $800, donc qui recouvre
l'endroit où s'est
chargé le boot1, si vous tapez INIT, le disk ainsi
formatté aura bien le
meme boot1 en piste $00 00. alors, je répète ma
question.. quand vous tapez
INIT, d'où vient la piste $00 secteur $0 ?
La réponse est
simple.. En Ram, il se retrouve en $B600. juste avant
la Rwts en $B700.
Bien.. Donc le boot1
(premieres routines éxécutées au boot) se trouve
en mémoire en $B600
avant un INIT. Bien..
Pour ce plombage, ce que
l'on va faire est simple.. On va formatter un
disk avec comme headers de
fin de champ : DE AA EB. Le disk sera donc
lisible au locksmith ?..
pourquoi ? Parce qu'il lit le disk uniquement
avec le DE AA. Il ne tient
pas compte du troisième nibble..
Pourquoi ?? ma foi..
Rapidité ?.. G'ne sais pas.
Bien.. Donc en formattant le
disk en DE AA EE au lieu de DE AA EE, on
aura un disk original
copiable au locksmith.. seulement la copie sera
écrite en DE AA EB
!!.. Voilà la fameuse différence entre original et
copie.. Alors que faire pour
avoir un plombage ? Il suffit de glisser
au boot du disk (au boot1 en
l'occurence) une VERIFICATION du #$EE.
Simple.. On va mettre cette
vérif dans une zone mémoire inoccupée par
le boot1 et modifier le JMP
($8FD) en $84A (fin du boot1) en JMP VERIF.
Voici les modifications
à faire au boot1...
$B64A : 4C B4
B6 (Modifie le JMP ($08FD) =
JMP $B700)
$B6B4 : 20 C0
B6 (JSR vérification
que l'on mettra en $B6C0)
$B6B7 : 4C 00
B7 (JMP $B700 = JMP ($8FD))
Et voici la
vérification mise en $B6C0. (c'est une zone libre dans tous
les DOS sauf dans le
Pronto-Dos qui y met une sous routine de CATALOG).
$B6C0 : A2
60 LDX
#$60 ; Slot 6
$B6C2 : BD 89
C0 LDA $C089,X ; Disk
Drive = On
$B6C5 : BD 8E
C0 LDA $C08E,X ; Mode
lecture
$B6C8 : A9
00 LDA
#$00 ;
$B6CA : 20 A8
FC JSR
$FCA8 ; Petite attente pour le drive
$B6CD : A9
00 LDA
#$00 ; Command = Seek.
(déplace tete)
$B6CF : 20 A0
B9 JSR
$B9A0 ; Seek Command / piste $00
$B6D2 : A0
04 LDY
#$04 ; Erreur Max = #$04
$B6D4 : BD 8C
C0 LDA $C08C,X ;
Lecture d'un Nibble
$B6D7 : 10
FB BPL
$B6D4 ; Nibble valide ?
$B6D9 : C9
DE CMP
#$DE ; est ce un #$DE de DE
AA..
$B6DB : D0
F7 BNE
$B6D4 ; Non.. alors on relit..
$B6DD : BD 8C
C0 LDA $C08C,X ;
Lecture d'un autre nibble
$B6E0 : 10
FB BPL
$B6D4 ; Nibble valide ?
$B6E2 : C9
AA CMP
#$AA ; est ce un #$AA de DE
AA..
$B6E4 : D0
EE BNE
$B6D4 ; Non.. alors on relit..
$B6E6 : BD 8C
C0 LDA $C08C,X ;
Lecture d'un dernier nibble
$B6E9 : 10
FB BPL
$B6E6 ; Nibble valide ?
$B6EB : C9
EE CMP
#$EE ; Enfin, est ce un #$EE
???
$B6ED : F0
06 BEQ
$B6F5 ; Oui.. alors sortie $B6F5
$B6EF :
88
DEY
; Un essai en moins
$B6F0 : D0
E2 BNE
$B6D4 ; Compteur d'essais.. on relit
$B6F2 : 4C F2
B6 JMP
$B6F2 ; 4 erreur.. On boucle_infini.
$B6F5 : BD 88
C0 LDA $C088,X ; Drive
= off.
$B6F8 :
60
RTS
; Fin de la vérification.
4. En bref
---------------------------------------------------------------------
Pour plomber un disk par
cette technique de Dos Patched.. Il faut :
1- Boot un DOS 3.3 (sauf Pronto-Dos)
2- Modifier en ram le derniers des headers de fin de champ (#$EE)
3- Modifier en ram le boot 1 pour brancher la fin sur la vérif.
4- Tapez en hexa la vérification du header #$EE en $B6C0.
5- Taper la commande INIT HELLO.
Maintenant, essayez de
copier le disk au locksmith.. Ca marche mais la
copie obtenu ne bootera pas
!!.. on fera désormais attention entre
"disk copiable au locksmith"
et "disk lisible au locksmith"...
Vous avez compris la
différence.. énorme différence..
Dans un cas, le disk est
encore plombé.. dans l'autre il ne l'est pas.
5. Critiques de cette
nouvelle protection
---------------------------------------------------------------------
La critique principe sera la
suivante :
- Ce plombage est basé sur un DOS 3.3 normal, et tout le monde
le connait par coeur.. aussi une modification aussi simpliste
dans le boot sera vue par le premier mec qui en commencera le
boot tracing.. il faudrait mieux la planquer.. dans un
programme en assembleur en catalog, et codée si possible.
Cette vérif vérifie le disk à l'endroit où
se trouve la tete
de lecture.. mais ce n'est pas un pb car le disk est
uniformement formatté en DE AA EE. Une seule vérif au boot
telle quelle est bien trop visible.
- Le disk original reste copiable, contrairement à une
protection genre désynchro.. Il suffirait de le copier en
25 secondes au Disk Muncher 8.0 (ou en modifiant les headers
du locksmith 6.0 - parametres vu dans le cours précédent).
On dira quand meme que le disk est plombé bien sur.
Disk incopiable au locksmith rapide = Disk plombé.
5. Déplombage..
---------------------------------------------------------------------
Il suffit de boot tracer le
disk.. on trouve tout de suite la vérif.
On la liste, on la comprend,
on l'annule. Pour l'annuler, il suffit de
remettre un JMP ($8FD) en
$84A. (ou $B64A) et le boot n'y pensera plus!
Cela, c'est néanmoins
pour le mec qui s'y connait déjà...
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Voilà.
J'espère que maintenant vous avez bien compris les 6
précédents
cours et ce nouveau
plombage.. Je vous laisse pour l'instant...
Sautez vite sur le
second fichier de ce cours.. ok?.. on y parle des
originaux du cours 10,
et de la double haute résolution Apple, avec
un programme super
utile en catalog.. alllllez, sautez dessus...
La prochaine fois, on
va se mettre tout ce qui touche à la recherche
d'octets (ou de
nibbles) sur disk ou en ram.. ça aussi, ca va etre
assez marrant !!..
Alors...
...A la
prochaine,
Amicalement, GODFATHER
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
COURS 7 : TRUCS EN
VRAC
Godfather
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Révision
2.30
Update 13/01/88
Salut et encore salut,
(ATTENTION, CECI EST RESERVE AUX PROGRAMMEURS UN PEU EXPERIMENTES TOUT
DE MEME)
(POUR LES AUTRES (CAR ILS SONT NOMBREUX), LE REMEDE A CE MAL EST A LA
FIN !!!!)
Cette fois je vais vous
parler de la double haute résolution..
Ce second fichier complement
de ce cours 7, sera encore amélioré,
à savoir que je me
suis plongé depuis peu dans la double haute
par curiosité.. suite
à ce qu'on m'ait filé une copie d'original de
Dazzle Draw.. alors j'aurais
surement bientot de quoi vous en
reparler.. ok?..
Je vous parle donc des
problemes de la double haute.. pour un //c.
Le //c n'affiche pas
systématiquement la couleur, quand il est en
double haute, mais plutot le
noir et blanc, pour faire plus
professionel sans doute..
enfin, non, je dis des c..
ca doit dépendre en
fait de la carte couleur que l'on a installée
dans son IIe, et de celle
qu'ils ont sélectionné pour le //c.
Les programmeurs de tel ou
tel boite de soft (je pense principalement
aux mecs de chez Epyx, avec
California Games, Rad warrior et World
Games, tous les 3 en double
haute.. - mais on pourrait en dire de meme
de certains programmes
Broderbund par exemple...), sont de bons
programmeurs.
Silence..
Sont de bons programmeurs
?.. Il est venu pour nous dire ca ?..
C'est interessant.. on ne le
savait pas.. merci papi..
Non.. laissez moi finir !..
il y a un "mais"..
Sont de bons programmeurs,
disait-je, mais souvent, ils ne savent pas
que le bel Apple //c ne voit
pas la double haute comme tous les
autres Apple de la
série II. Ben voila!..
Le fait
-------
Bootez World Games (meme
l'original) sur //c, et vous l'aurez 9 fois
sur 10, en noir et blanc,
meme si vous eteignez votre Apple avant de
booter le disk !.. et ce
donc, pour tous les Epyx en 2*Hires (sauf
Destroyer, ma foi!), et
voila et voila..
Ce que l'on cherche
-------------------
On cherche à offrir
à tous les possesseurs de //c, une copie plus belle
que l'original lui meme, ne
serait-ce que pour pouvoir le crier sur les
toits...
Le principe du comment faire
----------------------------
Il suffirait de forcer
l'Apple, quel qu'il soit, à afficher le mode
double haute couleur
dés le boot (de meme, on pourrait forcer le
mode noir et blanc!).. et
dés le début du soft, dés la première image,
le soft serait ainsi en
double haute !..
Le probleme
-----------
Si les programmeurs de world
games, savent pas comment faire, je vois
pas trop comment on pourrait
apprendre ca... pas vous ?
La solution
-----------
La solution.. ben c'est ce
cours voyons.. ou plutot, un des programmes
de ce cours, à savoir
COMMUT 2*HIRES. (source reconstitué en catalog).
Le programme
------------
Il suffit de bloader le
programme (l'objet est en $300, mais il peut
etre relogé, d'autant
plus que vous possedez le source! ok?)..
Ensuite, il faut poker en
$3A9 le mode que vous désirez. à savoir :
$3A9 : 00 -> Mode couleur double
haute
$3A9 : 01 -> Mode noir et blanc
double haute
$3A9 : 02 -> Mode texte (sortir
de la double haute)
Puis enfin, il faut appeler
le programme, en 768 (En hexa, $300)
Le "à quoi ca sert ?"
de ce programme
-------------------------------------
Ce programme sert, en gros,
à "forcer" à la couleur ou au n/b,
pour la double haute.. il
sert en dehors de "améliorer des softs
qui ont été
programmé en double haute sans penser aux pbs du //c",
plus simplement, à
afficher des images double haute.. etc..
Le comment faire de la
solution
-------------------------------
Il faut implanter la routine
au boot..
Alors comment faire ?.. En
fait, tout dépend du boot considéré..
Si c'est un boot inconnu, je
ne peux pas donner de méthode infaillible,
c'est évident.. je
vais pas me mettre à vous décrire un truc que j'ai
jamais vu, ou pire, qui peut
etre n'a pas encore été programmé !..
Alors comment faire ?.. on
va s'attaquer uniquement aux boots 3.3,
à savoir, entre autre
que le boot des soft Epyx (le E_Boot) est un 3.3.
Si vous etes sous DOS, il
suffit de creer un programme basic
supplémentaire
(HELLO2?) qui BRUNe le programme en question, avant
d'executer le programme en
lui meme (le soft qui ne marche
malheureusement pas bien
souvent en double haute!).
Pour un dos pas de
problemes..
Pour un boot inconnu, il
reste inconnu..
Pour un boot 3.3, laissez
moi vous en parler..
Le comment faire de la
solution pour un boot 3.3
------------------------------------------------
Première chose, on
doit reloger le programme en $BB00. Pourquoi ?..
J'ai expliqué tout ca
dans un des prochains cours, lorsque l'on veut
mettre un signature au boot,
à savoir dans le cours 12..ok?
donc patience les curieux..
et en attendant, admettez le truc..
Relogez votre routine avec
merlin pro en $BB00... mais attention,
la fameuse adresse $3A9 aura
changé.. changé en $BBA9. ok?.. on est
d'accord ?.. ensuite,
changez dans ce programme la fameuse adresse
$xxA9. Mettez y le code
(00,01 ou 02) selon le mode auquel vs voulez
forcer votre bécane..
et tous les //c problématiques. ok?
Ensuite, terminez le
programme (sous le label "End") par un LDX #$60
JMP $B700. ce pour permettre
la suite du boot après l'affichage
de le page
désirée.. Ensuite, modifiez ce fameux Boot 3.3, on allant
en piste $00 sect $00 avec
un Sector Editor, pour remplacer en $4A,
le JMP $B700 en un JMP
$BB00. ok? (remplacez 4C 00 B7 par 4C 00 BB)
Enfin, il faut sauver la
routine sur le disk. Pour cela, ce cours
est parfait.. il suffit de
faire un BRUN SREAD/SWRITE, puis
de charger la routine en
$2000 par exempe (8192 en dec) et de faire
un SWRITE T0,S5,A8192, mais
attention !.. avec le disk concerné dans
le drive!.. pas avec ce
cours !.. faites gaffe messieurs !!!..
Un conseil : mettez TOUT DE
SUITE un autocollant de protection sur
ce disk !.. oK?..
écoutez moi, sinon, vous avez de fortes chances
de pouvoir le regretter..
croyez papi.
Enfin, il se pouvait que la
page $BB (secteur $5) soit déjà occupé
par un bout de programme (ce
qui est le cas dans les softs epyx, mais
là, c'est vous qui le
mettez le boot de programme qui se trouve déjà
là.. voir cours 10
pour plus de détais..).. Si c'est le cas, il faut
chainer les deux routines..
mettre l'une avant l'un, ou l'inverse...
On fera ca directement en
hexa sur le secteur à l'aide d'un editeur
de secteur, genre disk fixer
4.0 ou encore celui du copy II+ 5.x...ok?
Un exemple de ca.. pour les
epyx justement.. attention, je vais
parler ici en supposant que
vous avez déjà lu le cours 10.. Si ce
n'est pas le cas, vous
cassez pas et attendez le moment venu..
Exemple, pour ceux qui ont
lu le cours 10 sur les softs Epyx
------------------------------------------------------------
Vous devez, à la fin
du déplombage, écrire un petite routine en $BB
(première
méthode de déplombage). Pour justement chainer les deux
routines il suffit de mettre
le programme LDA-STA (cf cours 10)
juste après le ORG
$BB00 dans le source de ce programme, mais
il ne faut mettre que les
LDA, STA.. pas le JMP final au décodeur.
Par contre, comme il faut
bien que ce JMP décodeur se fasse (ou fusse
un JSR), mettez le à
la fin de la routine d'affichage de la page 2*Hgr
Pourquoi pas ?.. alors ?..
comprendo amigo ?.. Hum!... mouais,
c'est un peu
compliqué, mais ma foi, c'est pour ca que j'ai
préféré
attribué ca
uniquement aux programmeurs un peu expérimentés !.. pour
pas avoir de plaintes (!)
sur ce rajout au cours 7 qui me semblait
utile..
Récapitulatif de la
chose
-------------------------
1. Changer (avec Merlin Pro)
le ORG $300 en ORG $BB00
2. Changer (eventuellement)
l'adr. $BBA9 pour selectionner le mode 2HGR
3. Changez la fin du
programe, par un LDX #$60 JMP $B700
4. Modifiez le boot0 du disk
en boot 3.3, Piste $00 00 4A : 4C 00 BB
5. Ecrire le programme sur
le secteur $5 de la piste $0
6. Au cas ou la page $BB fut
occupée, il faut grouper les 2 routines!
La bonne nouvelle : LE
REMEDE POUR CEUX QUI BALISENT DEVANT CE PB !
-------------------------------------------------------------------
Je vais mettre au point,
pour completer le Epyx Boot Maker (GP's #6),
un boot epyx contenant
à la fois la routine de déplombage (décodage)
eventuellement (selon si vs
avez utilisé la méthode 1 ou 2 du cours),
ainsi que la routine de
signature du disk (vous indiquerez votre nom
et il apparaitra au boot),
et la routine de mise en place de tel ou
tel mode graphique,
après l'apparition de votre signature.. ok?
Disponible à partir
de février 1988.. Godfather's Products #6 : Epyx
Boot Maker (dernière
version).. à bientot, it's worth it !..
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
La prochaine fois, on
va se mettre tout ce qui touche à la recherche
d'octets (ou de
nibbles) sur disk ou en ram.. ça aussi, ca va etre
assez marrant !!..
Alors...
...A la
prochaine,
Amicalement, GODFATHER
===============================================================================
RECHERCHE D'OCTETS (MODE
D'EMPLOI)
POM'S 29 par P.COVARE
===============================================================================
Ce programme permet de chercher, en mémoire ou sur disquette,
une expression
quelconque. Il peut etre très utile, par exemple pour retrouver
tous les appels
à une routine quelconque, l'endroit où une mémoire
particulière est modifiée,
etc...
Ecrit en assembleur (source en catalog), le programme est rapide. Les
35 pistes
d'une disquette sont examinées en moins de 30 secondes, et une
recherche en
mémoire ne demande que 2 ou 3 secondes pour 64Ko.
Commandes disponibles
---------------------
BRUN RECHERCHE lance le programme pour la première fois. Par la
suite, on
pourra indifféremment utiliser & (l'amperstand) ou Ctrl-Y
à partir du moniteur.
Les commandes "A" et "Z"
------------------------
permettent de définir les adresses hexadécimales de
début et de fin de
recherche en mémoire vive. Ces adresses peuvent se situer, ni
dans l'espace
$C000-$C0FF réservé aux entrées/sorties (sinon
bonjour les dégats!), ni dans
la plage $9500-$95FF où est conservée l'expression
à rechercher. Pendant
l'execution, ces plages sont automatiquement évitées par
le programme.
Si l'adresse de départ est supèrieure à l'adresse
de fin, RECHERCHE boucle sur
$0000 après avoir éxaminé l'adresse $FFFF.
Les commandes "P" et "F"
------------------------
permettent de saisir, toujours en hexadécimal, les
numéros de pistes de
début et de fin de recherche. S'ils sont identiques, la
recherche ne
s'effectuera que sur une seule piste.
La commande "D"
---------------
autorise le changement de lecteur (1 ou 2)
La commande "E"
---------------
permet d'entrer une expression à rechercher, expression
composée au maximum
de 256 caractères.
Très pratique : Inclure des caractères inconnus
(wildcards) en tapant un ou
plusieurs '='. Par exemple : "20 == FD" trouvera les appels à
COUT ($FDED),
COUT0 ($FDF0), KEYIN ($FD1B) etc...
Afin de ne pas surcharger l'écran, seuls les 11 premiers octets
sont affichés
sur le menu; néanmoins, l'expression étant
conservée à l'adresse $9500, elle
peut etre visualisée par un simple appel du moniteur.
Les commandes "R" et "S"
------------------------
lancent une recherche en mémoire ou sur disquette. Dans ce
dernier cas, la
touche ESCAPE permet d'interrompre la recherche en cours.
Si des expressions identiques sont détectées, leurs
adresses, et éventuellement
leurs numéros de pistes et secteurs, sont affichés.
Si rien n'a été trouvé, on revient au menu.
Pour une recherche sur disquette, l'adresse et ses deux derniers
chiffres
completent l'affichage.
Exemple : $862A
P:$12 S:$9
informe que l'expression a été trouvée à
l'octet $2A du secteur 9 piste $12,
et qu'elle se trouve actuellement en mémoire à l'adresse
$862A.
Lors d'une recherche sur la disquette, les pistes sont chargées
une à une,
dans un buffer situé en $8000-$8FFF. (Donc attention! Si vous
recherchez une
expression qui se trouvait en mémoire dans ce buffer avant une
recherche disk,
et que vous le recherchez en mémoire après cette
recherche disk...votre
expression aura été éffacée...faites donc
EN PREMIER les recherches mémoire.!!)
Les secteurs y sont stockés dans l'ordre inverse (afin
d'accelerer le temps de
lecture). (Page $80 pour le secteur $F, $81 pour $E jusqu'à $8F
pour le sect 0)
Bien entendu, le programme se charge egalement de l'affichage lorsque
l' expression est trouvée plusieurs fois sur la meme page
ou le meme secteur.
(ce qui n'est pas le cas de Nibbles Away).
La commande "M"
---------------
dirige vers le moniteur de l'Apple (retour par Ctrl-Y)
La commande "Q"
---------------
permet de quitter le programme.
Fonctionnement technique
------------------------
La configuration mémoire suivante est utilisée :
$0000...$000A Vecteurs page zero
$8000...$8FFF Buffer de chargement d'une piste
$9000...$94A0 Implantation du programme
$9500...$95FF Buffer de l'expression à rechercher
$9600...$96FF Buffer des caractères inconnus
Le listing source est amplement commenté et ne devrait pas poser
de probleme
de compréhension. Cependant, il est bon de détailler
l'algorithme de recherche.
Le sous-programme de comparaison utilise les buffers EXPRESS et WILD,
initialisés lors de la saisie de l'expression. EXPRESS contient
la suite
d'octets à rechercher, WILD stocke l'emplacement des
caractères inconnus.
Prenons un exemple. Soit l'expression saisie "A8 =B F3". Le buffer WILD,
utilisé pour effectuer un ET logique, contient la valeur
"FF0FFF". Le zero
indique la présence d'un caractère inconnu. Le buffer
EXPRESS contient les
codes "A80BF3". Les espaces tapés au clavier ont
été supprimés, et le
troisième caractère a été remplacé
par zéro.
Si, lors de la recherche, le programme rencontre la suite d'octets
"A85BF3",
celle ci est considérée comme identique car :
A8 AND
FF =
A8
5B AND
0F =
0B
F3 AND
FF =
F3
Ce qui correspond exactement au contenu du buffer EXPRESS.
Le source s'appelle T.RECHERCHE et a été crée avec
BigMac...
===============================================================================
===============================================================================
LES PROGRAMMES DE CE
DISK
v1.31
===============================================================================
Vous trouverez, en catalog sur cette face...
1. VERIF.PLOMB7 et VERIF.PLOMB7.S
Le source et l'objet de la
vérification du plombage vu dans ce cours.
Merlin Pro 1.24 comme
d'habitude..
2. HEX/DEC CONVERTER (+ Source détaillé sous Merlin Pro!)
Le programme qui va
economiser les piles de votre calculatrice,
(à supposer que vous
ayez une calculatrice connaissant l'Hexadécimal!)
ou l'aquisition d'un IIGS
(qui comme tout le monde le sait est
complement bugué!)
Passez de l'Hexa au décimal.. ou inversement..
Classique..? Enfantin..?
Bete..? mais indispensable !!
3. SREAD/SWRITE (+ Source détaillé sous Merlin Pro!)
La routine qui va vous
simplifier la vie...
Le mode d'emploi est
détaillé dans ce cours..
4. COPY programmé par votre serviteur
Un programme de copie en
basic... pour vous montrer ce qu'on peut faire
simplement avec le dos 3.3
!...
5. COMMUT_2*HIRES
Ce programme est super utile
ma foi, et il est expliqué dans le
second fichier de cours!..
sautez dessus si vous n'aimez pas voir,
par exemple, le world games
en double haute noir et blanc au lieu de
couleur sur votre //c !..
mais ca ne sert pas qu'à arranger ce genre
de problemes.. vous allez
voir.. (Fichier pour programmateurs éclairés)
La prochaine fois, 10 programmes vous seront présentés!
et pas des nazes !!!!!!
En face B, vous trouverez
l'original de Halley Project..
Le déplombage en est
très simple.. but du jeu : signer l'image de boot
Amicalement, GODFATHER
===============================================================================
===============================================================================
ET LA PROCHAINE FOIS, QU'EST CE QUE CE SERA, MON GENERAL...??
===============================================================================
La prochaine fois, TOUT SUR LA "RECHERCHE" D'OCTETS (Disk ou Ram)
Revision 3.00
Un cours de 2 faces, avec pleins de programmes méconnus ou
inédits !!!!
Les prochains cours necessitent certaines connaissances... alors pour
bien se
préparer, ce cours va vous appendre TOUT (Absolument TOUT) sur :
* La recherche d'octets en mémoire
* La recherche d'octets sur un disk (au format normal)
* La recherche de données codées (EOR quelconque)
* La recherche d'octets "à trou"
* La recherche d'octets sur des disks plombés
* La recherche d'octets sur des disks 3.5" (pas encore testé)
* La recherche de tout un secteur (identique à celui en
mémoire)
Avec un super éditeur de secteurs en 80
colonnes/Joystick/Souris/Clavier !!!!!!
Avec comme toujours pleins de nouveaux outils (Les 3 meilleurs sont
inédits!) :
* Le CORE DISK SEARCHER (C) HARDCORE COMPUTIST
* ANSTROM 1.00 (C) DANNY SECTOR from PAD
* SCAN DISK EOR (C) KRISTO 1987
* Le COPY II+ 5.x
* Le FIND du DAVID DOS
* Le scanner d'octets de POMS 29
* GODFATHER RACONTE : Big Shits.. ERRATUM contre CHIP SELECT!..
et un fichier expliquant ce qui nous sera utile pour le cours 9 dans
MERLIN PRO
si vous voulez vous lancer dans la recherche d'images
compréssées !!!
Amicalement, GODFATHER
===============================================================================
INFORMATIONS CONCERNANT LES COURS
-------------------------------------------------
Fichier mis à jour ce 9 Janvier 88!
===============================================================================
DEUX NOUVEAUX COURS : La protection ORIGIN SYSTEMS 1987, et Fixez vous
la vie !
-------------------------------------------------------------------------------
Vous voulez un conseil..? sautez vite sur ces cours.. ce sont d'une
part les
plus longs cours que je n'ai jamais rédigé, et d'autre
part peut etre à la fois
les plus balaises, et les plus interessants !.. et utiles.. puisque, en
ce qui
concerne la protection origin systems 87, ils viennent d'annoncer
Ultima 5 mais
aussi Autoduel 2400, qui devraient (?) etre plombés comme leurs
3 derniers
softs, et en ce qui concerne le cours sur le fixs, parce que avec
toutes les
news qui arrivent sans cesse, il y a vraiment de quoi faire.. croyez
pas ?
Allez, n'attendez pas !.. je vous posterai une copie de Ultima 5 et de
Roadwar 2400 dés qu'on les aura si c'est bien la meme protection
géante !!!...
===============================================================================
REORGANISATION DES GODFATHER'S PRODUCTS
1988
1er Jan. 1988
-------------------------------------------------------------------------------
Tous les programmes ont été ré-ordonnées
par rapport aux divers cours, et un
nouveau programme s'y est adjoint - le plus géant, vous verrez :
Wildcard Maker
Mise en catalog AUTOMATIQUE de la plupart des softs !.. oui!
AUTOMATIQUE !..
Attention, quand vous commanderez un gp's, indiquez en le NOUVEAU
numéro,
ET le nom du programme pour qu'il n'y ait aucune erreur possible par
rapport
à l'ancien ordre des godfather's products !.. on progresse
messieurs!...
===============================================================================
JE VIENS DE
TERMINER...
Godfather's Products #4 : Fast Boot SAM 3.21
-------------------------------------------------------------------------------
Je viens de terminer la version 3.21 du fast boot maker pour le f_boot
de sam !
Elle permet d'installer n'importe quel programme en fast boot avec une
page
texte au boot !.. de plus, le fast boot est maintenant sans conteste ce
que
l'on peut faire de plus rapide en matière de fast boot
(copiable)..
Sautez dessus ! faites moi confiance ! vous ne le regretterez pas !!...
===============================================================================
SUR QUOI IL FAUT SAUTER AVANT QUE CA
REFROIDISSE...
Cours 10 Rev. 1.61
-------------------------------------------------------------------------------
Epyx prépare pour très bientot plusieurs nouveaux softs
géants.. et comme on
les connait, ils vont encore utiliser leur désynchro folle et
géante !..
Que dire ?.. à la sortie de California games, Boulder cst et Rad
warrior, tout
le monde a sauté sur le cours 10..ou presque.. alors maintenant,
à l'aube
d'autres news, il faudrait peut etre que les autres sautent aussi
dessus, de
manière à se préparer à la venue imminente
de :
- Street sports
baseball
(arrivé le 15/12/87)
- Spy vs Spy III, Artic Antics
- Spiderbot
- Deflexor
mais aussi : - World Games
IIe
(arrivé le 21/12/87)
On vient juste de recevoir : Street sports baseball d'Epyx..
plombé pareil !!..
C'est l'actuel original numéro 1 du cours 10, et personne ne l'a
en cracké !!..
De meme depuis ce matin, j'ai aussi World Games !.. 4 faces ?.. ca vous
dirait
de déplomber ces deux super news ??!..
Sautez vite dessus avant que ca ne refroidisse !!..ainsi que sur le
copieur
Epyx 1.50 et sur le Epyx boot maker, si vous voulez vraiment etre
incollables
sur le sujet !!.. A très bientot j'espère avec ce cours
!..
Ce nouveau soft m'a permi de faire la révision 1.52 du GP#1 :
Epyx Copy 1.50..
et j'ai meme baissé son prix de plus de 30% !!.. pour l'occasion
!!..
===============================================================================
EVOLUONS MESSIEURS... EVOLUONS...
Godfather's Products #5 : Epyx Copy 1.60
-------------------------------------------------------------------------------
Suite à la sortie de World Games, dont la protection (Epyx) a
encore évoluée,
et que le copieur epyx 1.50 ne pouvait ainsi pas reconnaitre comme
original
Epyx, j'ai passé une longue nuit de ce beau mois décembre
à programmer et
fignoler la version 1.60 de ce plombeur/copieur epyx !.. le seul
copieur à
pouvoir vous offrir des copies intactes de tous les originaux Epyx
depuis belle
lurette et gai luron !.. De plus, le prix n'a pas changé !!...
===============================================================================
LES DERNIERES REVISIONS DES
COURS...
Cours 12 Révision 1.60 + Cours 6
-------------------------------------------------------------------------------
Ajouté à ce cours le super probleme du boot par PR#6..
votre routine print par
$FDED fait tout planter !.. comment ? pourquoi ? comment l'empecher ?
Ensuite, toute la théorie et la logique de la routine cout est
expliquée, ainsi
que le principe des fontes graphiques et de sonclav !.. super
interessant !
Enfin, et toujours pour ce cours, ajouté le 29/11, tout une
partie
supplémentaire concernant la programmation d'une
vérification du texte affiché,
toujours contre les name-killers !!.. pour pas qu'on vous enleve du
boot !!
Ajouté à Mirage, l'original du cours 6, un locksmith
intégré au boot.
Bootez le et tapez esc dés le début du boot : ce n'est
plus mirage qui se
charge mais un locksmith 6.0 compatible IIgs et déjà
modifié en D4 AA EB pour
faire des copies conformes de cet original !!...
===============================================================================
LES DERNIERES REVISIONS DES GODFATHER'S PRODUCTS GP#6
: Epyx Boot Maker 1.22
-------------------------------------------------------------------------------
Grace à l'aide immense de Deny from The ACS-Dijon, je vous
propose enfin la
version définitive provisoire (!) du fameux éditeur de
catalog Epyx.. cette
version, outre toutes les super options et possibilitées du
programme, contient
un méga-fichier texte expliquant le comment-fait-le-programme !..
Un cours en fait !... géant et super utile si vous avez
déjà pris le cours 10!
===============================================================================
LES REVISIONS EN
PROJETS
Cours 11 Révision 2.00
-------------------------------------------------------------------------------
A ce super cours sur les techniques folles de mise en catalog, je vais
rajouter
la super technique presque toujours infaillible de Fusco Volant (un
ex-cracker
américain!).. utilisant la carte language pour mettre en catalog
les softs
n'utilisant pas la carte language !!...
-------------------------------------------------------------------------------
Et je le rappelle : toutes les révisions de cours sont gratuites
!!