Version initiale: 20/02/2008.
Dernière mise à jour: 29/11/2008.
NOTE: I don't have
enough time to answer your
questions about this project...
Il s'agit ici d'un projet personnel.
En début d'année 2008, une personne m'avait
poussé à livrer mon travail (incomplet) en
l'état en m'affirmant par mail que pour le bien de
la
communauté comp.sys.apple2 plusieurs programmeurs allaient
être recrutés (entendre payés) pour
s'atteler à la tache d'un SST
complet/débogué afin de le coupler
avec un clone en cours de réalisation de la
carte E.D.D.: ils
ne
pouvaient pas se permettre d'attendre que
j'avance seul dans mon coin sur ce projet ni de partir de rien
(comme je l'avais fait moi). Il était donc très
urgent que je donne ce sur quoi j'avais planché: "Can't wait
to see what you come up with, and I'm sure I
am not alone in this".
A l'heure où j'écris ces lignes (7
novembre 2008), tout cela n'a servi à rien et aucun autre
projet utilise SST.
J'ai juste vu un prototype de la carte clonée (ce
qui a
déjà existé de par le
passé) et le
projet semble sur une voie de garage depuis plusieurs mois.
Bref, comme bien souvent malheureusement,
c'était du vent...
Aussi je reprends là où j'en étais et
à mon rythme, c'est à dire quand j'en ai envie et
sans m'embarrasser à répondre à des
sollicitations extérieures sur le sujet.
Sommaire
Lien
|
Contenu
|
 |
01) Introduction.
|
 |
02) Documentation originale de SST.
|
 |
03) Complément
documentation.
|
 |
04) Pourquoi produire un code source
propre de SST?
|
 |
05) Comment
générer un exécutable du projet?
|
 |
06) Quoi de neuf?
|
 |
07) Carte mémoire.
|
 |
08) Les patchs de Saltine.
|
 |
09) Points d'entrée des
sous-programmes.
|
 |
10) Différences entre ma
version de SST et celle de Saltine.
|
 |
11) Format des faces en 16
secteurs créées par SST.
|
 |
12) La création d'un .nib..
|
 |
13) Appendice: le schéma
de protection de EDD.
|
 |
14) Appendice: Différence
entre EDD
et EDD+.
|
 |
15) Appendice: Code manquant.
|
COME BACK TO: THE
DOTNIB PROJECT.
01) Introduction.
Quelques mots pour vous présenter le programme SST...
A L'ORIGINE, UN COPIEUR PERFORMANT...
Il y avait un paradoxe rigolo dans le
domaine des logiciels Apple II
commercialisés pendant les années 80: sur les
étagères des vendeurs de softwares, on trouvait
des programmes divers et variés (jeux, utilitaires, ..), la
plupart
protégés contre la copie par leurs
éditeurs respectifs, et une sous-catégorie de
logiciels utilitaires particuliers (édités par
d'autres
sociétés) qui, quant à eux,
permettaient
d'en faire des duplicatas!
Une bien étrange cohabitation donc!!
Un de ces copieurs,
extrèmement évolué, se
nommait
E.D.D. 4 (Essential
Data Duplicator).
E.D.D. permettait de cloner
une
disquette 5,25 pouces grâce
à des routines
complexes et un paramétrage étendu.
Comme c'était souvent le cas, la connaissance du type de
protection utilisé sur l'original permettait
de choisir les
paramètres de copie adaptés et donc de
réaliser un
duplicata dans les meilleures conditions. Pour ceux n'y connaissant
rien, l'éditeur publiait à
fréquence régulière une liste
actualisée des paramètres à utiliser
pour dupliquer les derniers logiciels sortis, ce qui mettait le copieur
à la portée de presque tout le monde ("presque"
dans la mesure où l'utilisateur n'avait pas à
régler la vitesse de son drive, process simple mais pouvant
rebuter les réfractaires du tournevis ou ceux ayant peur de
perdre la garantie de leur lecteur de disquettes).
Lorsqu'un
utilisateur employait correctement le copieur, il obtenait une
version également exécutable
du logiciel d'origine. Si l'original
était
plombé, le
duplicata l'était également -
l'objectif du
copieur n'étant pas d'oter la protection. (Tout au
plus, E.D.D. pouvait
changer quelques informations par la biais de certains
paramètres: les options de type
"Replace" de Pre-Analyze et Pre-Write).
Au final, à une face de la disquette
d'origine correspondait une
face de la disquette nouvellement
créée.
... MODIFIE EN CHANGEUR DE FORMAT POUR FACILITER LA DIFFUSION DE SOFTS
PROTEGES...
SST, qui signifie " Saltine's Super Transcopy ", est une
version modifiée de E.D.D. 4.8
pour un usage particulier qui n'est pas celui prévu
à l'origine.
Saltine (l'auteur du patch)
est le pseudonyme d'un ancien
pirate/cracker informatique nord
américain.
Il a effectué des modifications sur sa version de E.D.D. sans l'agrément de
l'éditeur et a renommé le
résultat SST. Ne
soyez donc pas surpris quand je parle
des routines E.D.D. alors
que le sujet est SST.
L'objectif recherché n'était pas la duplication
directe à l'identique du
logiciel mais d'avoir un moyen pratique pour se passer entre pirates le
logiciel sous un format plus facilement manipulable. Je m'explique!
Si un de ses amis ou un de ses contacts achetaient un logiciel
fraichement sorti sur les étals des revendeurs (avec une
protection non identifiée), comment
un pirate pouvait-il le déplomber si l'acheteur habitait
à des centaines de kilomètres de là
(question
d'autant plus vraie dans ce pays immense que sont les USA )?
Il y avait toujours la solution d'un envoi postal mais cela supposait
que
l'acheteur l'expédie par ce biais et en soit donc
privé d'usage pendant la phase de déplombage.
Or cétait l'époque
des systèmes
de bulletins électroniques 'pirates' (BBS) et une diffusion
'rapide' de l'information se faisait par le biais des modems.
Il fallait donc pouvoir se repasser le logiciel à cracker
avec ce moyen de communication.
SST entrait alors en jeu: il
permettait de faire passer une disquette au
format incopiable vers un support facilement duplicable. Le pied
puisque sous cette nouvelle forme, l'acheteur
pouvait simplement la compresser et
l'uploader vers un BBS pour le rendre disponible
à toute la faune de pirates qui étaient
alors libres de la downloader,
décompacter l'image, et reconstituer sur support
magnétique le programme dans sa forme originelle
toujours à l'aide de SST
en opérant en sens inverse (quand ça marchait!).
Puis ensuite "travailler" au corps le soft reconstitué
pour faire sauter sa protection et de le
transposer
au format 16 secteurs par piste (le format standard).
Voilà pour le principe de base.
A l'origine, SST
a donc été conçu pour
faciliter un acte de piratage. Mais aujourd'hui se pencher sur ce
logiciel a plus une optique de conservation du patrimoine informatique
passé qu'autre chose.
Pour rentrer un peu plus dans le détail technique, la
modification effectuée par Saltine
sur E.D.D. 4.8 consiste
à ne plus écrire les nibbles
lus (depuis la disquette d'origine) sur la disquette cible (=la copie)
de la même façon
mais
à les sauvegarder dans leur
intégralité en temps que données sur
une disquette au format classique
"16 secteurs par piste". C'est à dire que toutes les
informations qui définissent le découpage logique
de la disquette d'origine (ce qu'on appelle le soft-sectoring,
à savoir les markers début/fin des champs
adresses & datas, les informations du
volume/piste/secteur/checksum, les gaps, ...) sont également
écrites comme
datas sur la disquette cible.
Ceci revient
à créer une image binaire de la
disquette dans son intégralité (tout au moins ce
qu'a lu SST sur l'original
avec les routines d'E.D.D.).
L'inconvénient de ce type d'opération, c'est
qu'il faut 2 faces 'standards' pour sauvegarder le contenu
d'une
face de la disquette d'origine (car la disquette cible doit
stocker
le soft sectoring normal de la disquette 16 secteurs/piste dans les
champs
"adresses" ainsi que les informations du soft sectoring de la disquette
d'origine dans les champs "datas" en plus des datas normales lues. La
conséquence en est qu'une face ainsi
dispatchée
n'est pas exécutable dans sa nouvelle forme.
Le "Transcopy" du nom de SST
signifie une "copie
transformée".
___
|===|
___
| O |
|===|
SST
|_^_|
1 face
protégée:
| O |
==========================>
2 faces non
protégées
|_^_|
___
|===|
| O |
|_^_|
- soft sectoring NON standard
- soft sectoring
standard: 16 secteurs/piste
- champs datas pouvant avoir un encodage NON
standard
- champs datas avec
encodage
standard: 6-2
- champs datas contenant un programme et/ou des
données
- champs datas contenant le soft sectoring non
standard de la disquette
protégée ainsi qu'un
programme et/ou des
données ET le paramètrage EDD
- Programme exécutable mais non copiable
- Programme NON
exécutable mais diffusable
L'opération inverse de reconstitution du soft d'origine
exécutable ne fonctionnait pas toujours impeccablement et il
arrivait que
le programme ne bootait pas correctement
(ça dépendait de la protection). En
effet, SST ne
prend pas en compte toutes les
subtilités d'E.D.D.,
comme la synchronisation des pistes, les nibbles count,
les formats mélangés avec des pistes
entières, des 1/2 pistes ou des 1/4 de pistes (et donc
toutes
les joyeusetés comme le spiraling, le track arcing, etc...)
car
SST est
prévu pour fonctionner en utilisant des valeurs par
défaut d'E.D.D.
qui
n'incluent pas ces subtilités.
Et au final une
disquette reconstituée (avec le même nombre de
faces que l'original) peut très bien
être identifiée par le programme une fois
lancé comme étant une version pirate (et planter
plus ou moins rapidement après le boot).
... PUIS POUR CREER DES IMAGES DISK UTILISABLES AVEC UN
EMULATEUR.
L'usage courant de SST n'est
pas (ou plus) cette diffusion via BBS mais la
création d'images disque.
En effet, à partir des 2 faces constituées, il
est possible de créer un fichier .nib utilisables avec des
émulateurs d'Apple II.
Bien entendu toutes les limitations citées ci-dessus sont
toujours d'actualité pour les .nib constitués, ce
qui limite l'intérêt de SST
pour un bon nombre de
programmes protégés mais c'est à ce
jour le plus utilisé parmi les rares outils disponibles
pour créer des images disque sous la forme de nibbles.
Le schéma simplifié est le suivant:
___
|===|
| O |
____
|_^_|
SST
|0101|
2 faces non
protégées:
==========================> |1010|
1 fichier .NIB pouvant inclure certaines
___
CiderPress
|0101| protections
|===|
etc...
|____|
| O |
|_^_|
L'objectif de cette page web est de décortiquer SST (et donc
E.D.D 4.8 par la
même occasion).
Ceci afin d'en avoir une version propre avec son source complet, ce que
n'avait pas fait Saltine...
A l'époque où je l'avais contacté, il
m'avait encouragé dans cette voie:
"I'D LOVE TO SEE YOU CONTINUE THE WORK"
SALTINE
Retour au sommaire
02) Documentation originale de SST.
Il s'agit ici de la documentation d'origine livrée avec SST
et écrite par Saltine.
How to use
S S T
Saltine's Super Transcopy
*** Introduction ***
Back in the good old
days when the Apple computer thrived, there
existed various groups of individuals who's existance revolved
around the removal of copy protection from Apple
software. These groups,
while they had the same goal, were very
competative. They attempted to
remove the protection from a piece of software as fast as
possible, so
they could "release" it to the Pirate world. The
groups were composed of
various individuals that each possessed a certain talent; one
might be
skilled in creating title graphics while another in removal
of protection,
and still another in distributing the "cracked"
software. Once a "ware"
was released, the first thing that needed to be done was to
get it to the
"cracker" to remove the protection. Since the
"ware" was protected from
copying, it could not be sent via modem, so it had to be sent
via
snail-mail. This program was the result of an
attempt to allow the user
to send protected software via modem.
*** What is it? ***
SST is a
modification of a popular copy program for the Apple line
of computers. The copy program allows the user to
duplicate almost any
Apple // disk. It occurred to me that this program
has to store the image
of a track in memory before it can write it to the copy of
the disk. I
obtained a copy of the source code from the manufacturer for
$20. Using
that, I modified the program so that instead of copying a
disk, it reads
a track, and then dumps the track image to a normal DOS 3.3
formatted
floppy. This of course took more space than the
original track, resulting
in two DOS 3.3 disk sides for each protected disk
side. The advantage,
of course, was that these DOS 3.3 formatted disks could be
sent via the modem.
Once somebody received these disks over the modem, SST could
be used once
again; this time to read the track image into memory and
write the
protected track back to a disk.
Yeah, but I'm using an emulator! Emulators can't
use protected disks!
WRONG! If the DOS 3.3 disks described above are
transferred to an emulator,
and that emulator supports nibble images, SST can create a
"protected"
disk image! Of course, it won't be very protected
any more as you can
copy the resulting disk image just like any other file.
Transfering Disks:
*TO* Apple //
To use SST, you first have to transfer SST to a REAL
apple disk. Here is a suggestion on how to do that.
What you need: Apple // with a terminal program (AE
works fine)
Null Modem Cable
DOS 3.3 formatted 5 1/4 bootable disk
Amiga, Mac, PC, with a terminal program
This archive
Patience
1) Use a terminal program to transfer SST and
CopyII
to the dos 3.3 formatted disk.
2) If you are using an Amiga also transfer DDD to
the Apple disk
3) That's it!
NOTE: You can skip the above steps if you have the ability to
transfer
disk images directly to the Apple //. Transfer the
SST.dsk image included
in this archive to an Apple // disk.
*FROM* Apple //
There are three major ways of transfering Apple disks:
1) The Amiga computer with an A1020 5.25 drive and
the disk conversion
program provided with the
Apple2000 emulator.
les nibbles count
2) A serial link between a real Apple ][ and
another computer. This
requires special software on
both sides.
3) Compress the disk using Dalton's Disk
Disintegrator (DDD), transfer
it via a telecom program to an
Amiga, load it into Apple 2000,
save it with a .dsk extension.
If you need more info on transfering disks, refer to the
Apple FAQ.
*** Using SST ***
O.K. Now that you have SST on an Apple Dos 3.3 formatted disk:
0) Make sure any "Quick disk" options are
disabled on the emulator
1) Format an Apple floppy on both
sides. (INIT HELLO)
2) Put the Dos 3.3 disk with SST on it in
drive 1
BRUN SST
3) Select '1' for 'Pirate a Disk'
4) Select '2' for 'Pack Disk'
5) Use all of the Default settings
6) Place copy protected disk in drive 1
(You can use one drive, but will have to swap disks when prompted)
7) Place Formatted floppy in drive 2
8) Select all defaults - when the message
'Insert BOTH disks and press
RETURN' is
presented, press RETURN. At track 17 you will be prompted
to flip the data
disk (in drive 2) over - do it!
9) When the copying is done, transfer
both sides of the data disk to
disk images using
one of methods described earlier in this text.
Call the front of
the disk FRONT.DSK and the back BACK.DSK
10) Load the disk image for SST into disk 1 of the
emulator.
11) Copy the blank.nib image to an appropriate name
(e.g. game.nib)
12) Load the game.nib image into disk 2 of the
emulator.
(Steps 13 - 18 are necessary due to a bug in SST which fails
to move the
disk arm back to track 0 on drive 2)
13) Reboot the emulator
14) Select 'E' for Copy II+ 5.0 from the boot menu
(CAPS LOCK MUST BE ON!)
15) Go to Sector Editor
16) Select Disk B
17) Type the letter 'R' to read a sector
18) Type '0' for the Track and '0' for the sector
pressing ENTER after each.
19) Reboot the emulator
20) Choose 'B' for EDD/SST from the boot menu (CAPS
LOCK MUST BE ON!)
21) Choose 'Pirate a Disk'
22) Choose '3' to unpack a disk
23) Choose '1' for packed parms
(You may choose '2'
for your parms, but you need to know what you
are
doing! If you want to nibble count the track, choose the
manual
nibble count option when it is presented. This will not
work right
now because the emulators do not have any way of changing
individual
track lengths on the fly. This means that any disks that
need
precise track lengths will not work until the new standard is
implemented)
24) Use all default options
(You can unpack only
certain tracks if you desire)
25) When the message 'Insert BOTH disks, then press
RETURN' appears,
insert the FRONT.DSK
image in drive 1 and press RETURN
26) When the message 'Turn DATA disk over and press
RETURN' appears,
insert the BACK.DSK
image in drive 1 and press RETURN
27) When process is finished, I would either close
the emulator down
or put another image
in drive 2 to make sure the .nib file gets
closed properly.
28) Insert the new .nib file in drive 1 of the
emulator and reboot it
to see if it works.
That's it! Easy huh? :^)
Saltine
Retour au sommaire
03) Complément documentation.
Quelques informations complémentaires sur la
disquette SST d'origine...
En effet la doc de Saltine a
l'avantage d'être
synthétique mais il manque des explications qui peuvent
être utiles.
LANCEMENT DE SST
Pour lancer SST, il suffit
d'exécuter la commande
DOS: BRUN SST (si vous avez booté depuis une
disquette différente) ou de choisir le programme SST (=option B) dans la
liste proposée (si vous avez booté la disquette
d'origine):
LES NOUVEAUTES
INTRODUITES PAR SST AU NIVEAU DES MENUS
Quand on compare les écrans de E.D.D.
et SST, on
s'aperçoit vite que Saltine
a effectué des
modifications de menus.
*** 1. PIRATE A DISK ***
L'option "PIRATE A DISK" de SST
remplace l'option "BACK UP A
DISK" d'E.D.D. Mais cette
dernière n'a pas disparue comme on va le voir plus bas.

|

|
EDD 4.2 Main Menu
|
SST Main Menu
|
Si on choisit
l'option "PIRATE A DISK" dans SST,
on obtient un sous-menu:

|
SST: Pirate a disk
|
Rôle de ces 3 options:
1) COPY => Il s'agit de l'ancienne option d'E.D.D.
" 1)
Back
up a disk " qui a rétrogradé dans ce sous-menu.
Normalement cette option ne s'utilise que sur un Apple II
réel pour
dupliquer une disquette physique incluant (de
préférence!) une protection. Pour une disquette
non protégée, il y a beaucoup plus rapide que E.D.D.
(par exemple Locksmith Fast Copy,
...)
2) PACK => Cette option est à employer sur un Apple
II réel pour transformer
une face de disquette protégée en 2 faces de
disquettes 16 secteurs par piste.
Par défaut les caractéristiques de la lecture
seront les
suivantes:

|
Pack: Get parms
screen (default values)
|
Il y a un point important qui n'est pas expliqué dans la
doc.
Saltine se contente de
dire qu'il faut laisser les
caractéristiques de copie par défaut.
--> Mais ce n'est pas nécessairement souhaitable pour
toutes les protections!!!
Comme je l'ai déjà dit, SST
est
basé sur E.D.D.
Or E.D.D. pour travailler
utilise plusieurs
buffers internes de paramètres dont 3 très
importants:
a) $B100-$B1FF : PreWrite Buffer
b) $B200-$B2FF : Program Variables
c) $B300-$B3FF : Parameter Buffer
Quand SST parle de "parms",
il est
question de ces 3 buffers.
E.D.D. traite les pistes choisies
(au niveau de 'Start Track' et 'End Track') les
unes après les autres à
l'aide de
ces paramètres.
En gardant les caractéristiques de copie par
défaut,
toutes les pistes (de la 0 à la 34) seront
exploitées
avec le même paramétrage.
Il est important de rappeler que ces paramètres sont
modifiables
par l'utilisateur pour réaliser au mieux le traitement.
En fait, rien
n'empêche un utilisateur de
traiter les 35 pistes d'un soft protégé en
plusieurs
fois. Par exemple lancer l'option Pack pour une 1ère phase
de la
piste 0 à la piste 12 avec un certain paramétrage
puis
relancer l'option Pack pour une seconde phase de la piste 13
à
la piste 34 avec un autre paramétrage.
On peut même si on le souhaite lancer l'option Pack 35 fois:
pour
chacune des pistes de la face protégée avec
à
chaque fois un paramétrage différent.
Une explication toute simple est qu'une protection peut se trouver que
sur certaines pistes seulement par exemple...
La conséquence de cette souplesse de SST, c'est que pour s'y
retrouver s'il devait faire l'opération dans le sens inverse
(Unpack), il est obligé
de stocker ces paramètrages directement sur la disquette
cible (16
secteurs par piste) sous forme de 3 secteurs de plus (pour
l'espace $B100-$B3FF) et
ce pour chaque
piste de la disquette d'origine traitée.
3) UNPACK => L'option Unpack s'emploie dans 2 cas de
figure: quand on veut
recréer une face de disquette physique
protégée sur un Apple II
réel à partir de 2 faces constituées
avec l'option
Pack OU quand on utilise un émulateur pour créer
un fichier .NIB à partir de 2 fichiers .DSK.
Cette option affiche un sous menu supplémentaire:

|
SST: Unpack
|
J'ai parlé de la sauvegarde de l'espace $B100 à
$B3FF pour l'option Pack. Ce qu'il faut savoir, c'est que l'option
Unpack va
charger pour chaque piste à reconstituer le
paramétrage interne (les 3 pages de l'espace $B100
à $B3FF) sauvegardé sur la disquette 16 secteurs
par piste
(c'est à dire le paramétrage qu'il y avait en
mémoire au moment du pack).
Si vous avez modifié ce
paramétrage après le Pack et que vous
choisissez "Packed parms" pour
faire un Unpack, tous vos changements vont être perdus et ce
sera l'ancien paramétrage rechargé depuis la
disquette 16 secteurs/piste qui sera utilisé!
En choisissant l'option "your parms", SST va mettre
de côté les caractéristiques de flags
"Nibble
Count" et "Synchronized Track" (saisi sur
l'écran suivant)
ainsi que l'espace mémoire $B300-$B3FF (parameter
buffer) UNIQUEMENT et les restaurer
après le chargement des 3 secteurs (qui a
écrasé l'espace $B100-$B3FF) . Vous aurez ainsi
préservé UNE PARTIE de votre
paramétrage actuel et c'est avec ces informations que la
recombinaison aura lieu.
Que vous choisissiez 1 ou 2, vous aurez à choisir la piste
de début, la piste de fin et le pas de piste pour votre
traitement.

|
Unpack Get parms
screen (default values)
|
*** 8. CLEAR TRACK DATA ***
Revenons au niveau du menu principal de SST.
On constate que le libellé de l'option 8 a changé
comme l'atteste
ces copies d'écrans:

|

|
EDD: Clear Error Codes
|
SST: Clear Track Data
|
Au lieu d'avoir "Clear error codes" on a "Clear track data".
Mais en fait rien n'a été
modifié au niveau programme. Cette option sert toujours
à effacer (entre autres) les
statuts du traitement précédant en haut de
l'écran (c'est à dire les lignes qui indiquent si
une erreur a été rencontrée sur une
piste entière, un 1/4 de piste, une 1/2 piste, 3/4 piste ou
si tout s'est bien passé). Le programme se contente
de spécifier qu'au prochain ménage
écran il faudra commencer à l'ordonnée
écran 0 au lieu de 8 (donc en ne préservant pas
l'en-tête "track informations".
Peut-être que Saltine
trouvait ça plus parlant...
mais moi je trouve que ça porte à confusion car
je croyais que c'était le buffer de stockage de la
dernière piste lue qui était mis à
zéro. A moins qu'il ai oublié de faire cette
modification!
Donc rien de neuf ici.
*** 9. INITIALIZE A DISK ***

|

|
EDD: Quit
|
SST: Initialize a Disk
|
L'option 9 de E.D.D. qui
permettait de quitter le programme a
été remplacée par une option de
formattage (probablement pour faciliter la préparation des
disquettes au format 16 secteurs par piste que l'on utilise pour Pack).
Ci-dessous les 2 écrans qui s'affichent quand on
choisit cette fonction de formattage:

|

|
SST Init A Disk screen #1
|
SST Init A Disk screen #2
|
Il ne reste plus qu'à faire un reset ou un reboot
à chaud pour sortir du programme!
A PROPOS DE LA
NUMEROTATION DES PISTES
Ici je vais vous parler de E.D.D.
Ce copieur supporte les pistes dites entières, les 1/4 de
pistes, les 1/2 pistes et les 3/4 de pistes.
Il a donc un 'pas' toléré de 0,25.
Le programme étant écrit en assembleur, il ne
s'amuse à pas gérer des décimales pour
0,25 / 0,5 / 0,75.
Pour plus de facilité, les numéros de
pistes entières sont des multiples de 4 en interne.
Illustration.
Représentation du pas (step en anglais) de 0,25:
|---|---|---|---|---|---|---|---|...
...|---|---|---|---|---|---|---|---|
Genuine disk
00
01
02
21
22
(23) Track numbers (hex)
.25 .50
.75 .25 .50
.75
.25 .50 .75 .25 .50
.75
Steps
Et valeurs de 'pistes' utilisées en interne par E.D.D.:.
*---|---|---|---*---|---|---|---*...
...*---|---|---|---*---|---|---|---*
EDD (internal use)
00 01 02 03 04
05 06 07
08
84 85 86 87 88
89 8A 8B (8C) Track numbers
this is true for the following variables in the program variable
storage buffer ($B200-$B2FF):
STARTRK $B288 (genuine track * 4)
ENDTRK $B289 (genuine track * 4)
TRACK $B28B (genuine track * 4)
STEP $B28A [=$04 if the user entered step
= 1]
PRECISION SUR
LES CARACTERISTIQUES DE COPIE PAR DEFAUT
Saltine spécifie
que pour utiliser SST il
faut laisser les
caractéristiques de copie par défaut,
à savoir un pas de 1.
On peut se poser la question suivante: est-il possible de prendre en
compte des informations stockées sur des pistes non
entières (0,25 / 0,5 / 0,75), donc en ayant un pas
inférieur à 1 ou en commençant par une piste 'non entière'?
Par exemple, il serait intéressant
qu'à partir d'une face d'un original on
puisse créer n faces en "16 secteurs
par piste" afin de récupérer le plus
d'informations possibles (par exemple en
fixant comme paramétrage de la 1ère
copie "la 1ère piste lue est une demi
piste et continuer avec un pas de 1 pour lire toutes les 1/2 pistes" et
un paramétrage normal pour la 2nde copie pour
récupérer le contenu de toutes les pistes
'entières')
puis de mixer manuellement les n faces
générées pour avoir quelque chose de
plus précis.
=> Malheureusement, ça ne peut pas fonctionner!!!
SNIF!!!
Tout ça parce que SST
utilise la notion de piste de la
disquette d'origine pour calculer la piste sur laquelle il doit
écrire (en 16 secteurs/piste).
Il prend comme on l'a vu juste au dessus le numéro de piste
interne multiple de 4 et fait un LSR pour diviser par 2 la
valeur de piste de la
disquette protégée.
Par exemple si le numéro de piste interne est 8 (track 2),
on obtient 8/2 = 4. Il écrira la piste
protégée actuellement en mémoire sur
la disquette 16 secteurs/piste à partir de la piste 4
(jusqu'à 5).
Donc en plus des protections par synchronisation des pistes,
par nibble count: (cf point 23
de la doc), tout ce qui a attrait aux 1/4 & 1/2 & 3/4
de pistes ainsi qu'aux mélanges des genres
(spiraling, track arcing, ...) ne peut
pas être reproduit. SST
n'est pas une solution
miracle en l'état!!!.
Retour au sommaire
04) Pourquoi produire un code source propre de SST?
Dans l'introduction, j'ai spécifié l'objectif
mais je ne l'ai pas expliqué.
Avoir un source propre et complet de SST
sera le point de
départ pour d'autres projets: entre autres, la mise au point
d'un programme permettant de constituer des .nib directement sur une
unité ProDOS plutôt que de passer par 2 faces
transitoires et aussi plus tard de créer un nouveau format
qui
permettra d'exploiter toutes les caractéristiques de E.D.D.
(nibble count, synchronisation des pistes, 1/4 pistes, 1/2 pistes, 3/4
pistes).
Quelques messages en anglais issus du forum comp.sys.apple2
signalant la nécessité actuelle de ventiler une
face
protégée vers 2 faces 16 secteurs/piste sur
support
physique 'floppy disk' et le besoin de simplification:
Messages from comp.sys.apple2 (apr 2004)
about SST:
**********
Andy McFadden wrote:
...
> Each disk side turns into two, which are then transferred
> like any other unprotected disk (e.g. with ADT over a serial
> cable, or if you have the hardware, with ShrinkIt and
> AppleTalk).
> The two images are then recombined by running SST in an
> emulator or <shameless plug> with CiderPress.
> It's a slow and somewhat painful process...
...
**********
Rubywand wrote:
...
> Unfortunately, Saltine's Super Transcopy (SST) was designed to
> transfer copy-protected disks using just 5.25" media.
> It was not designed to create .nib files you could store on
> 800k diskettes or hard disk. So, creating a .nib with SST
> involves a transfer and combining process such as described by
Andy.
...
**********
Ed Eastman wrote:
...
> SST is a cool program... Essentially it uses the EDD source
code
> to read a track and analyse it to find start and arbitrarily
> end it at a fixed length.
> There is no reason that someone couldn't write a Q&D
program
> to do that without the transfer stage.
...
Note de Deckard:
Q&D = quick
and
dirty
Retour au sommaire
05) Comment générer un
exécutable du projet?
L'objectif est ici de voir comment construire un binaire
exécutable à partir des différents
sources qui
constituent SST.
C'est ultra simple!
Il vous faut juste l'assembleur MERLIN-8
de Glen Bredon en version
ProDOS.
Personnellement j'utilise la version 2.58 mais une autre devrait aussi
faire l'affaire.
Vous devez également récupérer l'image
disk .hdv fournie un peu plus bas dans cette page.
Elle contient les sources sous ProDOS.
Le nom de volume est /DOTNIB.SST.
Tout d'abord assemblez les différents sources se trouvant
dans le répertoire /DOTNIB.SST/SRC/ à l'exception
de:
EDD.PAGE0.S
EDD.ROM.S
EDD.KEYS.S
Pour cela, chargez un source après l'autre, tapez
ASM à chaque fois puis NEW quand le message "--End assembly"
s'affiche.
Chaque constituante binaire sera écrite automatiquement dans
le répertoire /DOTNIB.SST/SRC/OBJ/DECKARD/ car en fin de
chaque source se trouve la directive SAV
OBJ/DECKARD/<objet>
Quand c'est fait, bootez l'image disk .hdv et tapez:
PREFIX SRC/OBJ/DECKARD
-SST.BUILDER
Pour info, SST.BUILDER est un fichier TXT de type EXEC qui va charger
les constituantes et écrire dans le
répertoire SRC/OBJ/DECKARD le programme final
SST.DECKARD
Une fois que c'est fait, il ne reste plus
qu'à transférer SST.DECKARD sur une
disquette sous DOS 3.3 et l'exécuter.
Je vous rappelle
que le programme n'a pas été écrit
pour fonctionner sous ProDOS car il écrase
une partie de ce derrnier.
Si vous l'exécutez quand même, vous devrez
rebooter un ProDOS après.
Si vous êtes curieux, vous aurez constaté qu'il
existe un répertoire SRC/OBJ/SALTINE et un
répertoire SRC/OBJ/EDD.4.9.
Le 1er contient les constituantes du SST
d'origine (uniquement les
binaires) et le 2nd une constituante qui manquait (également
le binaire).
J'ai comparé ces binaires avec ceux de ma version
SST.DECKARD pour vérifier que tout était ok.
Retour au sommaire
06) Quoi de neuf?
Les informations sont présentées ici de la plus
récente à la plus ancienne.
Version
========
20081128
- refonte en profondeur de cette page (tout en français avec
plus de détails)
Version (non diffusée)
========
20080716
- Commentaires de EDD.B000.B4FF
- Création de SST.BUILDER
- Mise à jour de cette page (cartes coloriées
pour une meilleure lisibilité, suppression
références COMPSYSA2)
// Arrêt temporaire dû à la naissance de
mon fils Paul (20080415)
Version
========
20080218
- Transfert du code original de DOS vers ProDoS
- Utilisation de Sourceror pour produire un 1er jet du code source
- Normalisation des labels en référence
croisée entre tous les modules
- Cartographie mémoire
- Cartographie des échanges mémoire (swaps)
- Cartographie du contenu des faces en 16 sectors/piste
créées par SST
- Compréhension et rédaction des commentaires des
sources spécifiques SST pour:
SST.CONTROLER
SST.RELOCATOR
SST.SUBS
SST.RWTS
- Synchronisation PDF EDD/sources (étiquettes, commentaires,
...) pour les modules:
EDD.TEXT
EDD.CHECKMEM
EDD.HGR2PRT (extrait de EDD 4.9)
EDD.PAGE0
EDD.ROM
- En cours également:
EDD.B000.B4FF
- Création de cette page html.
- Ajout de quelques commentaires dans:
EDD.MAIN
EDD.OPT2.OPT1
EDD.DRIVE
A FAIRE:
Remplacement attentif des labels
générés automatiquement par SOURCEROR
par ceux de la version E.D.D.
officielle (le PDF dispo) pour les sources suivants:
EDD.MAIN
EDD.OPT2.OPT1
EDD.OPT4.OPT5
EDD.OPT3.OPT7
EDD.ANALYZE
EDD.CONTROL
EDD.DRIVE
Attention: E.D.D. 4.2 et SST (E.D.D.
4.8) ont du code
différent et
un
remplacement "bête et méchant" d'un label
SOURCEROR par un du PDF n'est
pas toujours possible.

|
ProDOS
|
Download SST Source code - release
20081128
|
File: DotNIB_SST.hdv
Disk: ProDOS /DOTNIB.SST (800KB)
Name
Type Auxtyp
Modified
Format Length
------------------------------------------------------------------------------
PRODOS
SYS $0000 21-Oct-08 00:07
ProDOS 17128
RAM.DRV.SYSTEM
SYS $2000 26-May-92 21:27
ProDOS 1209
BASIC.SYSTEM
SYS $2000 13-Feb-92 01:00
ProDOS 10240
SRC
DIR $0000 28-Nov-08 15:04
ProDOS 1024
SRC:EDD.ANALYZE.S
TXT $0000 19-Jun-08 18:30
ProDOS 9751
SRC:EDD.TEXT.S
TXT $0000 19-Jun-08 18:28
ProDOS 8120
SRC:EDD.CONTROL.S
TXT $0000 19-Jun-08 18:29
ProDOS 6740
SRC:EDD.B000.B4FF.S
TXT $0000 27-Jun-08 19:41
ProDOS 12558
SRC:EDD.DRIVE.S
TXT $0000 19-Jun-08 18:30
ProDOS 16039
SRC:EDD.MAIN.S
TXT $0000 16-Jul-08 22:45
ProDOS 19603
SRC:EDD.OPT2.OPT1.S
TXT $0000 19-Jun-08 18:32
ProDOS 8796
SRC:SST.RWTS.S
TXT $0000 19-Jun-08 18:32
ProDOS 17903
SRC:EDD.OPT3.OPT7.S
TXT $0000 19-Jun-08 18:33
ProDOS 6071
SRC:EDD.OPT4.OPT5.S
TXT $0000 19-Jun-08 18:33
ProDOS 3306
SRC:SST.CONTROLER.S
TXT $0000 19-Jun-08 18:34
ProDOS 4786
SRC:SST.SUBS.S
TXT $0000 19-Jun-08 18:35
ProDOS 19836
SRC:OBJ
DIR $0000 25-Nov-08 17:13
ProDOS 512
SRC:OBJ:SALTINE
DIR $0000 18-Feb-08 00:46
ProDOS 1024
SRC:OBJ:SALTINE:SST
BIN $0B00 [No
Date]
ProDOS 21760
SRC:OBJ:SALTINE:SST.CONTROLER
BIN $B500 17-Feb-08 15:39
ProDOS 512
SRC:OBJ:SALTINE:EDD.TEXT
BIN $3000 [No
Date]
ProDOS 4096
SRC:OBJ:SALTINE:SST.SUBS
BIN $1D00 [No
Date]
ProDOS 1792
SRC:OBJ:SALTINE:SST.RWTS
BIN $B700 [No
Date]
ProDOS 2304
SRC:OBJ:SALTINE:EDD.MAIN
BIN $0C00 [No
Date]
ProDOS 3014
SRC:OBJ:SALTINE:EDD.OPT2.OPT1
BIN $17C6 18-Feb-08 00:21
ProDOS 1338
SRC:OBJ:SALTINE:EDD.OPT4.OPT5
BIN $1D00 18-Feb-08 00:31
ProDOS 512
SRC:OBJ:SALTINE:EDD.B000.BFFF
BIN $B000 [No
Date]
ProDOS 4096
SRC:OBJ:SALTINE:EDD.DRIVE
BIN $4700 [No
Date]
ProDOS 2304
SRC:OBJ:SALTINE:EDD.B000.B4FF
BIN $B000 [No
Date]
ProDOS 1280
SRC:OBJ:SALTINE:EDD.OPT3.OPT7
BIN $2100 18-Feb-08 00:36
ProDOS 1280
SRC:OBJ:SALTINE:EDD.ANALYZE
BIN $2600 18-Feb-08 00:46
ProDOS 1562
SRC:OBJ:SALTINE:EDD.CONTROL
BIN $2C1A [No
Date]
ProDOS 998
SRC:OBJ:SALTINE:EDD.CHECKMEM
BIN $1F00 [No
Date]
ProDOS 512
SRC:OBJ:SALTINE:SST.RELOCATOR
BIN $0B00 17-Feb-08 15:52
ProDOS 256
SRC:OBJ:DECKARD
DIR $0000 25-Nov-08 17:13
ProDOS 1024
SRC:OBJ:DECKARD:SST.CONTROLER
BIN $B500 25-Nov-08 17:06
ProDOS 512
SRC:OBJ:DECKARD:EDD.TEXT
BIN $3000 25-Nov-08 17:04
ProDOS 4096
SRC:OBJ:DECKARD:SST.SUBS
BIN $1D00 25-Nov-08 17:06
ProDOS 1792
SRC:OBJ:DECKARD:EDD.MAIN
BIN $0C00 25-Nov-08 17:05
ProDOS 3014
SRC:OBJ:DECKARD:EDD.OPT2.OPT1
BIN $17C6 25-Nov-08 17:05
ProDOS 1338
SRC:OBJ:DECKARD:EDD.OPT4.OPT5
BIN $1D00 25-Nov-08 17:06
ProDOS 512
SRC:OBJ:DECKARD:EDD.B000.B4FF
BIN $B000 25-Nov-08 17:04
ProDOS 1280
SRC:OBJ:DECKARD:EDD.DRIVE
BIN $B700 25-Nov-08 17:05
ProDOS 2304
SRC:OBJ:DECKARD:EDD.OPT3.OPT7
BIN $2100 25-Nov-08 17:05
ProDOS 1280
SRC:OBJ:DECKARD:EDD.ANALYZE
BIN $2600 25-Nov-08 17:02
ProDOS 1562
SRC:OBJ:DECKARD:EDD.CONTROL
BIN $2C1A 25-Nov-08 17:04
ProDOS 998
SRC:OBJ:DECKARD:SST.RWTS
BIN $B700 25-Nov-08 17:05
ProDOS 2304
SRC:OBJ:DECKARD:EDD.CHECKMEM
BIN $1F00 25-Nov-08 17:06
ProDOS 512
SRC:OBJ:DECKARD:SST.RELOCATOR
BIN $0B00 25-Nov-08 17:06
ProDOS 256
SRC:OBJ:DECKARD:EDD.HGR2PRT
BIN $0800 25-Nov-08 17:06
ProDOS 768
SRC:OBJ:DECKARD:SST.BUILDER
TXT $0000 [No
Date]
ProDOS 406
SRC:OBJ:DECKARD:SST.DECKARD
BIN $0B00 25-Nov-08 17:13
ProDOS 22528
SRC:OBJ:EDD.4.9
DIR $0000 01-Feb-08 13:59
ProDOS 512
SRC:OBJ:EDD.4.9:EDD.HGR2PRT
BIN $0800 [No
Date]
ProDOS 768
SRC:EDD.CHECKMEM.S
TXT $0000 19-Jun-08 18:35
ProDOS 11214
SRC:EDD.HGR2PRT.S
TXT $0000 19-Jun-08 18:37
ProDOS 3691
SRC:SST.RELOCATOR.S
TXT $0000 19-Jun-08 18:37
ProDOS 1581
SRC:TMP
DIR $0000 28-Nov-08 15:04
ProDOS 512
SRC:EDD.PAGE0.S
TXT $0000 19-Jun-08 18:38
ProDOS 988
SRC:EDD.ROM.S
TXT $0000 19-Jun-08 18:38
ProDOS 1144
SRC:EDD.KEYS.S
TXT $0000 16-Jul-08 16:00
ProDOS 552
------------------------------------------------------------------------------
NOTE: SST is a DOS 3.3 program and is not compatible with ProDOS
because both programs use the
bank 2 memory
I put this source code under ProDOS... ONLY because I wanted
to work with a
800k .HDV (and Applewin or Apple Oasis)
Retour au sommaire
07) Carte mémoire.
*****************************
* MEMORY MAP OF EDD 4.8/SST *
* ==> BEFORE RELOCATOR <== *
*****************************
SST $0B00-$62FF (L$5800=22528)
RELOCATED
BLOAD ADDR
(Y/N)
FILENAME
LEN HEX/DEC DESCRIPTION
=========== =========
============= =============
===========================================
$0B00-$0BFF :
N : SST.RELOCATOR
(L$0100/0256) Relocator
$0C00-$17C5 :
N :
EDD.MAIN
(L$0BC6/3014) Main EDD routines
$17C6-$1CFF :
N : EDD.OPT2.OPT1
(L$053A/1338) Change parameters + back up a disk options
$1D00-$1EFF :
N : EDD.OPT4.OPT5
(L$0200/0512) Scan disk + certify & erase disk options
$1F00-$20FF :
N :
EDD.CHECKMEM (L$0200/0512) Memory
protection scheme
$2100-$25FF :
N : EDD.OPT3.OPT7
(L$0500/1280) Drive speed + drive examine options
$2600-$2C19 :
N :
EDD.ANALYZE (L$061A/1562)
Analyze a disk module
$2C1A-$2FFF :
N :
EDD.CONTROL (L$03E6/0998)
Control module
$3000-$3FFF :
N :
EDD.TEXT
(L$1000/4096) Text tables & addresses
$4000-$44FF :
Y : EDD.B000.B4FF
(L$0500/1280) EDD buffers
$4500-$46FF :
Y : SST.CONTROLER
(L$0200/0512) SST controller
$4700-$4FFF :
Y :
EDD.DRIVE
(L$0900/2304)
Disk drive routines
$5000-$58FF :
Y :
SST.RWTS
(L$0900/2304) RWTS for SST
$5900-$5FFF :
Y :
SST.SUBS
(L$0700/1792) Subroutines for SST
$6000-$62FF :
Y :
EDD.HGR2PRT (L$0300/0768) Write
16 lines on
the bottom of HGR2 screen
*****************************
* MEMORY MAP OF EDD 4.8/SST *
* ===> AFTER RELOCATOR <=== *
*****************************
Note:
The code is never executed in the storage location (alt bank &
bank 2).
It must be in main memory. So a swap is required between storage
location address and exec address before running it.
STORAGE
RELOCATED
LOCATION
ADDR
EXEC ADDR BLOAD ADDR
ADDR
(SWAP)
FILENAME
LEN DESCRIPTION
=========== =========== ===========
================== ============= ========
======================================
$0800-$0AFF $0800-$0AFF $6000-$62FF
<no
swap>
EDD.HGR2PRT (L$0300) Write 16 lines
(bottom of HGR2)
$0B00-$0BFF $0B00-$0BFF $0B00-$0BFF
<no
swap>
SST.RELOCATOR (L$0100) Relocator
$0C00-$17C5 $0C00-$17C5 $0C00-$17C5
<no
swap>
EDD.MAIN
(L$0BC6) Main EDD routines
$17C6-$1CFF $17C6-$1CFF $17C6-$1CFF
<no
swap>
EDD.OPT2.OPT1 (L$053A) Change params + back up a disk options
$1D00-$1EFF $1D00-$1EFF $1D00-$1EFF
$E000-$E1FF alt bk EDD.OPT4.OPT5 (L$0200) Scan disk
+ certify/erase disk options
$1F00-$20FF $1F00-$20FF $1F00-$20FF
$E200-$E3FF alt bk EDD.CHECKMEM (L$0200)
Memory protection scheme
$2100-$25FF $2100-$25FF $2100-$25FF
$E400-$E8FF alt bk EDD.OPT3.OPT7 (L$0500) Drive
speed + drive examine options
*********** $2500-$25FF ***********
****************** ************* (L$0100) Backup of
EDD params buff (unpack)
$2600-$2C19 $2600-$2C19 $2600-$2C19
$E900-$EF19 alt bk EDD.ANALYZE
(L$061A) Analyze a disk module
$2C1A-$2FFF $2C1A-$2FFF $2C1A-$2FFF
$EF1A-$F2FF alt bk EDD.CONTROL
(L$03E6) Control module
$3000-$3FFF
<datas>
$3000-$3FFF $F300-$F4FF alt bk
EDD.TEXT
(L$1000) Text tables & addresses
$4000-$77FF
<datas>
*********** <no
swap>
************* (L$3800) Raw disk byte buffer
$7800-$AFFF
<datas>
*********** <no
swap>
************* (L$3800) Track buffer & Timing bit
buffer
$B000-$B0FF
<datas>
$4000-$40FF <no
swap>
EDD.B000.B4FF (L$0100) EDD Preanalyze buffer
$B100-$B1FF
<datas>
$4100-$41FF <no
swap>
EDD.B000.B4FF (L$0100) EDD Prewrite buffer
$B200-$B2FF
<datas>
$4200-$42FF <no
swap>
EDD.B000.B4FF (L$0100) EDD Program variables storage buffer
$B300-$B3FF
<datas>
$4300-$43FF <no
swap>
EDD.B000.B4FF (L$0100) EDD Parameter buffer
$B400-$B4FF
<datas>
$4400-$44FF <no
swap>
EDD.B000.B4FF (L$0100) EDD Parameter buffer (reserved)
$B500-$B6FF $B500-$B6FF $4500-$46FF
<no
swap>
SST.CONTROLER (L$0200) SST controller
$B700-$BFFF $B700-$BFFF $4700-$4FFF
$D700-$DFFF bank 2
EDD.DRIVE (L$0900)
Disk drive routines
$D700-$DFFF $B700-$BFFF $5000-$58FF
$D700-$DFFF bank 2
SST.RWTS
(L$0900) RWTS for SST
$E000-$E6FF $1D00-$23FF $5900-$5FFF
$E000-$E6FF alt bk
SST.SUBS
(L$0700) Subroutines for SST
*****************************
* MEMORY MAP OF EDD 4.8/SST *
* ===> SWAP EDD/SST <=== *
*****************************
Swap functions use the CTL_XCH1 sub-function (SST.CONTROLER source code)
Function: CTL_MOVE (SST.CONTROLER source code)
========
$1D00-$31FF (main memory)
<=> $E000-$F4FF (alt bank)
EDD
SST
$1D00-$1EFF : EDD.OPT4.OPT5
$E000-$E6FF : SST.SUBS
$1F00-$20FF : EDD.CHECKMEM
$E700-$F4FF :
<<Not
used>>
$2100-$25FF : EDD.OPT3.OPT7
$2600-$2C19 : EDD.ANALYZE
$2C1A-$2FFF : EDD.CONTROL
$3000-$31FF : EDD.TEXT (part)
SST
EDD
$1D00-$23FF : SST.SUBS
$E000-$E1FF : EDD.OPT4.OPT5
$2400-$31FF : <<Not
used>>
$E200-$E3FF : EDD.CHECKMEM
$E400-$E8FF :
EDD.OPT3.OPT7
$E900-$EF19 :
EDD.ANALYZE
$EF1A-$F2FF :
EDD.CONTROL
$F300-$F4FF :
EDD.TEXT (part)
Function: SBS_XCHANGE (SST.SUBS source code)
========
$B700-$BFFF (main memory)
<=> $D700-$DFFF (bank 2)
EDD
SST
$B700-$BFFF : EDD.DRIVE
$D700-$DFFF : SST.RWTS
SST
EDD
$B700-$BFFF : SST.RWTS
$D700-$DFFF : EDD.DRIVE
Retour au sommaire
08) Les patchs de Saltine.
Liste des routines ajoutées par Saltine
pour
réaliser les fichiers .NIB.
SST controller - listing : Click HERE!
SST controller - assembly : Click HERE!
SST sub-routines - listing : Click HERE!
SST sub-routines - assembly : Click HERE!
SST RWTS - listing : Click HERE!
SST RWTS - assembly : Click HERE!
Compléments pour les adresses:
EDD page 0 - listing : Click HERE!
EDD rom - listing : Click
HERE!
Retour au sommaire
09) Points d'entrée des sous-programmes.
*****************************
* TABLE OF ADDRESSES FOR *
* EDD/SST
COMMANDS
*
*****************************
ORG $16B9
; Opt Command
LTDDO DA $B500 ; 1 CTL_PIRATEDSK
(SST:pirate a disk) was COPYDISK with EDD
DA $17C6
; 2 CHNGPARM
DA $2103
; 3 DRVSPEED
DA $1D03
; 4 SCANDISK
DA $1D00
; 5 CERTDISK
DA $0CAF
; 6 CHNGSLTS
DA $2100
; 7 DRVEXAM
DA $0CA7
; 8 CLRERRCD
DA $B50D
; 9 CTL_INITDSK (SST:initialize a disk) was EDDQUIT
with EDD
DA $0CE2
; QUITEDD
NOT USED (opt 9 is no more the quit option)
DA $0C6B
; E2
NOT USED (opt 9 is no more the quit
option)
Retour au sommaire
10) Différences entre ma version de SST et celle
de Saltine.
Si vous faites des modifications, pensez à faire la
comparaison entre la version
Saltine
et la version
Deckard.
Il est probable que l'outil
choisi (surtout pas Copy II+!)
commence
à afficher les différences
à partir d'un offset correspondant au début du
programme et non
pas à partir de son adresse de début.
J'ai donc rajouté cet offset ici pour plus de
lisibilité.
OFFSET BLOAD
ADDR AFTER
RELOC
FILENAME DECKARD/SALTINE COMPARAISON
=========== ===========
===========
=============
=======================================================
$0022-$0047 : $0B22-$0B47 : $0B22-$0B47 :
SST.RELOCATOR DECKARD : Relocate EDD.HGR2PRT+get
computer infos for CHECKMEM
SALTINE: End of
relocator
$0048-$00FF : $0B48-$0BFF : $0B48-$0BFF : SST.RELOCATOR
DECKARD : Filled with $00
SALTINE:
<unused> Filled with different
values
$0120-$0131 : $0C20-$0C31 : $0C20-$0C31 :
EDD.MAIN DECKARD
: Filled with $00
SALTINE:
<unused> Dead
routines
$10C9-$10D2 : $1BC9-$1BD2 : $1BC9-$1BD2 :
EDD.OPT2.OPT1 DECKARD : Filled with $00
SALTINE:
<unused> Dead
routines
$10FE-$11FF : $1BFE-$1CFF : $1BFE-$1CFF :
EDD.OPT2.OPT1 DECKARD : Filled with $00
SALTINE:
<unused> TXT result of
compilation process
$1380-$13FF : $1E80-$1EFF : $1E80-$1EFF :
EDD.OPT4.OPT5 DECKARD : Filled with $00
SALTINE:
<unused> TXT result of
compilation process
$1400-$1594 : $1F00-$2094 : $1F00-$2094 :
EDD.CHECKMEM DECKARD : Correct bytes
before exec BOOT 2
SALTINE: Altered
bytes after first
exec
$1595-$15FF : $2095-$20FF : $2095-$20FF :
EDD.CHECKMEM DECKARD : Filled with $00
SALTINE:
<unused> TXT result of
compilation process
$1980-$1AFF : $2480-$25FF : $2480-$25FF :
EDD.OPT3.OPT7 DECKARD : Filled with $00
SALTINE:
<unused> TXT result of
compilation process
$20DF-$2119 : $2BDF-$2C19 : $2BDF-$2C19 :
EDD.ANALYZE DECKARD : Filled
with $00
SALTINE:
<unused> TXT result of
compilation process
$3471-$34FF : $3F71-$3FFF : $3F71-$3FFF :
EDD.TEXT DECKARD
: Filled with $00
SALTINE:
<unused> Filled with
different
values
$3900-$39FF : $4400-$44FF : $B400-$B4FF :
EDD.B000.B4FF DECKARD : Filled with $00
SALTINE:
<unused> Filled with
different
values (D5AA96...)
$3A6C-$3A7B : $456C-$457B : $B56C-$B57B :
SST.CONTROLER DECKARD : Filled with $00
SALTINE: Filled
with old
values (last
run)
$3A7C-$3BFF : $457C-$46FF : $B57C-$B6FF :
SST.CONTROLER DECKARD : Filled with $00
SALTINE:
<unused> Filled with
different
values
$44E4-$44FF : $4FE4-$4FFF : $BFE4-$BFFF :
EDD.DRIVE DECKARD
: Filled with $00
SALTINE:
<unused> Filled with
different
values
$4869-$4894 : $5369-$5394 : $DA69-$DA94 : SST.RWTS
(bk2) DECKARD : Filled with $00
SALTINE:
<unused> DOS
Routine
$4900-$4A55 : $5400-$5555 : $DB00-$DC55 : SST.RWTS
(bk2) DECKARD : Filled with $00
SALTINE: NBUF1
and NBUF2 after last
run
$4DDF-$4DFF : $58DF-$58FF : $DFDF-$DFFF : SST.RWTS
(bk2) DECKARD : Filled with $00
SALTINE:
<unused> DOS
Routine
$539F-$5466 : $5E9F-$5F66 : $E59F-$E666 :
SST.SUBS DECKARD
: Filled with $00
SALTINE:
<unused> Dead
routines
$5467-$54FF : $5F67-$5FFF : $E667-$E6FF :
SST.SUBS DECKARD
: Filled with $00
SALTINE:
<unused> TXT result of
compilation process
$5500-$57FF : $6000-$62FF : $0800-$0AFF :
EDD.HGR2PRT DECKARD : Correct
code added
SALTINE: Missing
code
(=crash!!!)
Retour au sommaire
11) Format des faces en 16 secteurs
créées par SST.
Quelques précisions sur le mécanisme de
transformation d'une face protégée en 2 faces au
format 16 secteurs/piste:
___
|===|
___
| O |
|===|
SST
|_^_|
1 face
protégée:
| O |
==========================>
2 faces non
protégées
|_^_|
___
|===|
| O |
|_^_|
- SST lit une piste protégée
- SST
écrit la piste protégée
chargée en mémoire
sur 2 pistes
adjacentes d'une face non
protégée
(sauf la piste $11 protégée
qui est ventilée
sur la
piste $22 de la 1ère face 16
secteurs/piste et
la piste $00 de la 2nde face 16 secteurs/piste)
- SST stocke en mémoire la piste lue dans un buffer de $1C00
- SST écrit le buffer de $1C00 de long
dans 28 secteurs
octets de long
de 256 octets d'une face 16
secteurs/piste. Il reste
4 secteurs de libre car 2
pistes de 16 secteurs = 32
secteurs. SST sauvegarde
aussi 3 secteurs contenant
les paramètres de
EDD en mémoire. Le 4ème secteur
peut servir dans le cadre de
la prise en compte d'une
éventuelle piste
$23 protégée
PISTES PROTEGEES
$00 A $22
Afin de faciliter la compréhension du stockage des pistes de
l'original protégé sur les 2 faces en 16 secteurs
par piste, j'ai préféré faire une
présentation 'à plat'.
Chaque face a un cadre en bleu qui représente les pistes
(horizontal) et les secteurs (vertical).
La notation des pistes est faite en décimal (noté
DC) et en hexadécimal (HX).
Les secteurs sont quant à eux noté de 00
à 0F (en hexa donc).
E.D.D. utilise un buffer de
$1C00 octets de long pour stocker en
mémoire la piste lue (espace $7800-$93FF).
Le stockage des pistes protégées $00 à
$22 s'effectue de manière "verticale", dans le sens
croissant des pistes (des supports 16 secteurs/piste) et dans le sens
décroissant des secteurs.
Une illustration pour suivre la logique d'écriture sur les 2
faces 16 secteurs/piste:
Face 1:
T$00 S$0F : begin of track buffer (protected track # $00)
T$00 S$0E
...
T$00 S$01
T$00 S$00
T$01 S$0F
...
T$01 S$04 : end of track buffer (protected track # $00)
T$01 S$03 : extra sector #1
T$01 S$02 : extra sector #2
T$01 S$01 : extra sector #3
T$02 S$0F : begin of track buffer (protected track # $01)
...
T$03 S$04 : end of track buffer (protected track # $01)
T$03 S$03 : extra sector #1
T$03 S$02 : extra sector #2
T$03 S$01 : extra sector #3
...
T$22 S$0F : begin of track buffer (protected track # $11)
...
T$22 S$00
Face 2:
T$00 S$0F
...
T$00 S$04 : end of track buffer (protected track # $11)
T$00 S$03 : extra sector #1
T$00 S$02 : extra sector #2
T$00 S$01 : extra sector #3
T$01 S$0F : begin of track buffer (protected track # $12)
...
T$21 S$0F : begin of track buffer (protected track # $22)
T$21 S$0E
...
T$22 S$04 : end of track buffer
T$22 S$03 : extra sector #1
T$22 S$02 : extra sector #2
T$22 S$01 : extra sector #3
Explication des extra sectors: pour chaque piste
protégée lue depuis l'original, SST sauvegarde
les 3 buffers de paramétrage E.D.D.
sur 3 secteurs de la
face 16 secteurs/piste. Nous verrons plus loin à quoi
correspond le secteur XX .
J'ai utilisé des couleurs alternées (violet et
vert) pour distinguer les pistes adjacentes.
A l'intérieur du cadre, les chiffres de $00 à $22
représentent les pistes protégées
correspondantes.
Extra sector B1 = Copy of the PreWrite
buffer ($B100-$B1FF)
Extra sector B2 = Copy of the Program Variables buffer ($B200-$B2FF)
Extra sector B3 = Copy of the Parameter buffer ($B300-$B3FF)
XX = Not Used
Face 1 (pistes protégées $00 à $11):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*00|XX|01|XX|02|XX|03|XX|04|XX|05|XX|06|XX|07|XX|08|XX|09|XX|0A|XX|0B|XX|0C|XX|0D|XX|0E|XX|0F|XX|10|XX|11*00|
---*--------------------------------------------------------------------------------------------------------*---
|01*00|B3|01|B3|02|B3|03|B3|04|B3|05|B3|06|B3|07|B3|08|B3|09|B3|0A|B3|0B|B3|0C|B3|0D|B3|0E|B3|0F|B3|10|B3|11*01|
---*--------------------------------------------------------------------------------------------------------*---
|02*00|B2|01|B2|02|B2|03|B2|04|B2|05|B2|06|B2|07|B2|08|B2|09|B2|0A|B2|0B|B2|0C|B2|0D|B2|0E|B2|0F|B2|10|B2|11*02|
---*--------------------------------------------------------------------------------------------------------*---
|03*00|B1|01|B1|02|B1|03|B1|04|B1|05|B1|06|B1|07|B1|08|B1|09|B1|0A|B1|0B|B1|0C|B1|0D|B1|0E|B1|0F|B1|10|B1|11*03|
---*--------------------------------------------------------------------------------------------------------*---
|04*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*04|
---*--------------------------------------------------------------------------------------------------------*---
|05*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*05|
---*--------------------------------------------------------------------------------------------------------*---
|06*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*06|
---*--------------------------------------------------------------------------------------------------------*---
|07*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*07|
---*--------------------------------------------------------------------------------------------------------*---
|08*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*08|
---*--------------------------------------------------------------------------------------------------------*---
|09*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*09|
---*--------------------------------------------------------------------------------------------------------*---
|0A*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0A|
---*--------------------------------------------------------------------------------------------------------*---
|0B*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0B|
---*--------------------------------------------------------------------------------------------------------*---
|0C*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0C|
---*--------------------------------------------------------------------------------------------------------*---
|0D*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0D|
---*--------------------------------------------------------------------------------------------------------*---
|0E*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0E|
---*--------------------------------------------------------------------------------------------------------*---
|0F*00|00|01|01|02|02|03|03|04|04|05|05|06|06|07|07|08|08|09|09|0A|0A|0B|0B|0C|0C|0D|0D|0E|0E|0F|0F|10|10|11*0F|
---**********************************************************************************************************---
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
Face 2 (pistes protégées $11 à $22):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*XX|12|XX|13|XX|14|XX|15|XX|16|XX|17|XX|18|XX|19|XX|1A|XX|1B|XX|1C|XX|1D|XX|1E|XX|1F|XX|20|XX|21|XX|22|XX*00|
---*--------------------------------------------------------------------------------------------------------*---
|01*B3|12|B3|13|B3|14|B3|15|B3|16|B3|17|B3|18|B3|19|B3|1A|B3|1B|B3|1C|B3|1D|B3|1E|B3|1F|B3|20|B3|21|B3|22|B3*01|
---*--------------------------------------------------------------------------------------------------------*---
|02*B2|12|B2|13|B2|14|B2|15|B2|16|B2|17|B2|18|B2|19|B2|1A|B2|1B|B2|1C|B2|1D|B2|1E|B2|1F|B2|20|B2|21|B2|22|B2*02|
---*--------------------------------------------------------------------------------------------------------*---
|03*B1|12|B1|13|B1|14|B1|15|B1|16|B1|17|B1|18|B1|19|B1|1A|B1|1B|B1|1C|B1|1D|B1|1E|B1|1F|B1|20|B1|21|B1|22|B1*03|
---*--------------------------------------------------------------------------------------------------------*---
|04*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*04|
---*--------------------------------------------------------------------------------------------------------*---
|05*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*05|
---*--------------------------------------------------------------------------------------------------------*---
|06*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*06|
---*--------------------------------------------------------------------------------------------------------*---
|07*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*07|
---*--------------------------------------------------------------------------------------------------------*---
|08*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*08|
---*--------------------------------------------------------------------------------------------------------*---
|09*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*09|
---*--------------------------------------------------------------------------------------------------------*---
|0A*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0A|
---*--------------------------------------------------------------------------------------------------------*---
|0B*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0B|
---*--------------------------------------------------------------------------------------------------------*---
|0C*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0C|
---*--------------------------------------------------------------------------------------------------------*---
|0D*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0D|
---*--------------------------------------------------------------------------------------------------------*---
|0E*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0E|
---*--------------------------------------------------------------------------------------------------------*---
|0F*11|12|12|13|13|14|14|15|15|16|16|17|17|18|18|19|19|1A|1A|1B|1B|1C|1C|1D|1D|1E|1E|1F|1F|20|20|21|21|22|22*0F|
---**********************************************************************************************************---
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
La même chose mais cette fois à
l'intérieur du cadre, au lieu de mettre le numéro
des pistes protégées, j'ai mis la
référence de chaque page
mémoire du buffer (par exemple $78 en secteur $0F correspond
à l'espace $7800-$78FF).
Face 1 (pistes
protégées $00 à $11):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87*00|
---*--------------------------------------------------------------------------------------------------------*---
|01*86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86*01|
---*--------------------------------------------------------------------------------------------------------*---
|02*85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85*02|
---*--------------------------------------------------------------------------------------------------------*---
|03*84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84*03|
---*--------------------------------------------------------------------------------------------------------*---
|04*83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83*04|
---*--------------------------------------------------------------------------------------------------------*---
|05*82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82*05|
---*--------------------------------------------------------------------------------------------------------*---
|06*81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81*06|
---*--------------------------------------------------------------------------------------------------------*---
|07*80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80*07|
---*--------------------------------------------------------------------------------------------------------*---
|08*7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F*08|
---*--------------------------------------------------------------------------------------------------------*---
|09*7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E*09|
---*--------------------------------------------------------------------------------------------------------*---
|0A*7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D*0A|
---*--------------------------------------------------------------------------------------------------------*---
|0B*7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C*0B|
---*--------------------------------------------------------------------------------------------------------*---
|0C*7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B*0C|
---*--------------------------------------------------------------------------------------------------------*---
|0D*7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A*0D|
---*--------------------------------------------------------------------------------------------------------*---
|0E*79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79*0E|
---*--------------------------------------------------------------------------------------------------------*---
|0F*78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78*0F|
---**********************************************************************************************************---
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
Face 2 (pistes protégées $11
à $22):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX|87|XX*00|
---*--------------------------------------------------------------------------------------------------------*---
|01*B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3|86|B3*01|
---*--------------------------------------------------------------------------------------------------------*---
|02*B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2|85|B2*02|
---*--------------------------------------------------------------------------------------------------------*---
|03*B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1|84|B1*03|
---*--------------------------------------------------------------------------------------------------------*---
|04*93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93|83|93*04|
---*--------------------------------------------------------------------------------------------------------*---
|05*92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92|82|92*05|
---*--------------------------------------------------------------------------------------------------------*---
|06*91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91|81|91*06|
---*--------------------------------------------------------------------------------------------------------*---
|07*90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90|80|90*07|
---*--------------------------------------------------------------------------------------------------------*---
|08*8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F|7F|8F*08|
---*--------------------------------------------------------------------------------------------------------*---
|09*8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E|7E|8E*09|
---*--------------------------------------------------------------------------------------------------------*---
|0A*8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D|7D|8D*0A|
---*--------------------------------------------------------------------------------------------------------*---
|0B*8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C|7C|8C*0B|
---*--------------------------------------------------------------------------------------------------------*---
|0C*8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B|7B|8B*0C|
---*--------------------------------------------------------------------------------------------------------*---
|0D*8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A|7A|8A*0D|
---*--------------------------------------------------------------------------------------------------------*---
|0E*89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89|79|89*0E|
---*--------------------------------------------------------------------------------------------------------*---
|0F*88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88|78|88*0F|
---**********************************************************************************************************---
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
PISTE PROTEGEE
$23
Comme nous le voyons il reste des "trous" (marqués XX) sur
chaque face en 16
secteurs/piste: un secteur de libre toutes les 2 pistes sur
chaque face après avoir fait le traitement des
pistes protégées $00 à $22.
Soit un total de 35 secteurs à chaque fois situé
en secteur $00.
Ca a donné une idée à Saltine:
pourquoi ne pas permettre de sauvegarder une piste
supplémentaire ($23 par exemple) mais cette fois en faisant
un stockage sous forme "horizontale". Bien entendu, cette
possibilité n'est pas indiquée dans la doc!!!
Pour en savoir plus, regardez la routine SBS_TRK35 dans le source
SST.SUBS.
Pour la piste protégée $23, le programme va
écrire sur les supports 16 secteurs/piste dans l'ordre
croissant des pistes toujours sur le secteur $00.
Illustration:
Face 1:
T$01 S$00 : begin of track buffer (protected track # $23)
T$03 S$00
T$05 S$00
...
T$21 S$00
Face 2:
T$00 S$00
T$02 S$00
T$04 S$00
...
T$14 S$00 : end of track buffer
T$16 S$00 : extra sector #1 -> B1 = Copy of the PreWrite buffer
($B100-$B1FF)
T$18 S$00 : extra sector #2 -> B2 = Copy of the Program
Variables buffer ($B200-$B2FF)
T$1A S$00 : extra sector #3 -> B3 = Copy of the Parameter buffer
($B300-$B3FF)
ZZ = not used (at all)
En mettant à l'intérieur du cadre le
numéro de la piste protégée:
Face 1 (piste protégée $23):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00* |23| |23|
|23| |23| |23|
|23| |23| |23|
|23| |23| |23|
|23| |23| |23|
|23| |23| |23|
*00|
---*--------------------------------------------------------------------------------------------------------*---
Face 2 (piste protégée $23):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*23| |23|
|23| |23| |23|
|23| |23| |23|
|23| |23| |23|
|B1| |B2| |B3|
|ZZ| |ZZ| |ZZ|
|ZZ*00|
---*--------------------------------------------------------------------------------------------------------*---
La même chose mais en mettant cette fois la
référence de chaque page du buffer contenant la
piste protégée:
Face 1 (piste protégée $23):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00* |78| |79|
|7A| |7B| |7C|
|7D| |7E| |7F|
|80| |81| |82|
|83| |84| |85|
|86| |87| |88|
*00|
---*--------------------------------------------------------------------------------------------------------*---
Face 2 (piste protégée $23):
----------------------------------------------------------------------------------------------------------------
|DC|00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|DC|
----------------------------------------------------------------------------------------------------------------
|HX|00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|10|11|12|13|14|15|16|17|18|19|1A|1B|1C|1D|1E|1F|20|21|22|HX|
---**********************************************************************************************************---
|00*89| |8A|
|8B| |8C| |8D|
|8E| |8F| |90|
|91| |92| |93|
|B1| |B2| |B3|
|ZZ| |ZZ| |ZZ|
|ZZ*00|
---*--------------------------------------------------------------------------------------------------------*---
Retour au sommaire
12) La création d'un .nib.
Quelques rappels techniques:
Taille de chacune des pistes d'un fichier .NIB = $1A00 bytes
(6656 bytes), soit l'équivalent de 26 secteurs d'une
disquette 16 secteurs/piste.
Taille totale d'un fichier .NIB: $23 tracks * $1A00 bytes =
$38E00 (232960).
E.D.D. utilise un buffer de
piste de $1C00 octets (soit l'équivalent de 28 secteurs
d'une disquette 16 secteurs/piste), c'est à dire un buffer
plus long que
ce qui est
nécessaire pour créer une piste dans un .NIB (Le
détail du découpage des 2
faces en 16 secteurs par piste a été
étudié plus
haut).
Ce qui veut dire que quand SST
ajoute une piste dans le .NIB
à partir du buffer de E.D.D.,
il n'utilise pas $1C00-$1A00=$200
octets qui sont alors perdus.
Il n'y a alors pas intérêt à ce que des
données valides se trouvent dans cette zone
équivalente en taille aux données de 2 secteurs!!!
___
|===|
| O |
____
|_^_|
SST
|0101|
2 faces non
protégées:
==========================> |1010|
1 fichier .NIB
___
CiderPress
|0101|
|===|
etc...
|____|
| O |
|_^_|
- 28 secteurs de 256 octets stockant un buffer de
- $1A00 octets pour stocker une piste
et donc $200 octets
$1C00 octets correspondant à une piste
protégée
perdus par rapport au buffer d'origine
Retour au sommaire
13) Appendice: le schéma de protection de EDD.
The EDD 4.2 crack by JPL: Click HERE!
The PDF of EDD IV isn't complete. A routine is missing: CHECKMEM.
And this is normal because it is a part of the protection scheme of the
program!! (anti-wildcard copy => EDD is a single-load
application).
My commented source code (for $1F00-$20FF):
Listing : Click
HERE!
Assembly : Click
HERE!
Thread (HackZApple - french) : Click HERE!
Retour au sommaire
14) Appendice: Différence entre EDD et EDD+.
Quand on lit les publicités d'Utilico
Microware, on comprend
qu'il existe 2 versions de leur produit:
- une version de E.D.D. qui
tourne sur une configuration Apple II
standard
- une version de E.D.D.
appelée E.D.D. +
qui ne tourne
qu'avec la carte vendue en supplément.
Et bien en fait, c'est un gros pipeau car le programme est exactement
le même dans les 2 cas de figure à 1 octet
prêt (qui permet de choisir la version classique ou la PLUS).
Si vous avez récupéré une version de
E.D.D.+ et que vous voulez la
faire tourner sur
une config standard,
voici un message que j'avais laissé sur comp.sys.apple2 pour
que ça marche (bien entendu vous n'avez pas accès
aux
caractéristiques propres à la carte - donc le
"vrai" mode
bit-copy hardware n'est pas activé):
TIPS: How to run the "EDD 4.9 PLUS" program without the EDD+ card:
Boot a DOS 3.3 disk.
Insert the "EDD 4.9 PLUS" floppy (downloaded from the Dave Touvell's
website)
in your disk drive 1.
Type:
BLOAD EDD V4.9 (load the configured EDD+ version)
POKE 25290,0 (change EDDVRSN flag before relocate
the code)
CALL 3069 (run EDD in
standard mode)
You'll NOT have this error message anymore when using the "back up a
disk"
option:
"Either the EDD PLUS CARD is not located in slot#x, or the PLUS CARD is
not
connected to the original disk drive controller located in slot#6".
About the flag:
EDDVRSN $B2CA: $00 => EDD 4 version (use standard
bitcopy subroutines)
EDDVRSN $B2CA: $01 => EDD 4 PLUS version (use plus
card bitcopy subroutines)
For SST, EDDVRSN = $00.
Retour au sommaire
15) Appendice: Code manquant.
L'objectif de Saltine était de
détourner une fonctionnalité de E.D.D.
pour ses besoins propres et il n'avait pas besoin des autres options
proposées par le programme.
Concrêtement, les options 3 (Check Drive Speed), 4 (Scan
Disk), 5 (Certify and Erase Disk) et 7 (Examine Disk Drive) n'ont pas
d'utilité immédiate pour un utilisateur de base
qui veut se créer des .nib. Enfin, pour quelqu'un qui ne
cherche pas à aller plus loin que ce qui est
mentionné dans la doc de base.
C'est pour cela que Saltine
n'a pas
été
très
attentif au bon fonctionnement des autres points de menu.
Quand j'ai essayé l'option 4 (Scan Disk), je me suis
aperçu que la version de SST
diffusée
partout se plantait.
En effet en créant le binaire final (qui se reloge ensuite
en mémoire un peu partout), Saltine
a
"oublié" un morceau du code du programme de Scan Disk
et SST
exécute le code qui
résidait là avant son lancement;
avec pour conséquence un plantage immédiat dans
le cas le plus simple.
J'ai résolu le problème en
récupérant la partie manquante dans E.D.D. 4.9.
La routine en question contient une partie
programme ($0A80-$0AFF) et une partie de datas
($0800-$0A7F).
Le code enclenche le mode graphique HGR2 et affiche les
numéros de pistes en bas de l'écran.
La version SST.DECKARD fonctionne quant à elle...
Retour au sommaire