Présentation de la ROM contrôleur
L'identificateur de la ROM contrôleur (IDDISK)
Les 3 caractères débutant toute ROM moniteur donnent une évaluation des capacités
du moniteur à gérer ses périphériques:
Adresse |
|
MO |
TO |
Caractère |
Signification |
$A000 |
$E000 |
M
D
Q
R |
Contrôleur Thomson Micro-Informatique
Contrôleur Western Digital
Contrôleur QDD
Contrôleur de nanoréseau |
$A001 |
$E001 |
T
K |
FAT de 160 octets
FAT de 80 octets |
$A002 |
$E002 |
D
C |
Double densité
Simple densité |
$A003 |
$E003 |
$XX |
Checksum de lidentificateur de ROM |
Le caractère en $A001/$E001 renseigne sur la taille de la FAT, et donne donc une idée du nombre
de pistes du support. Une FAT de 160 octets implique un disque de 80 pistes.
Une FAT de 80 octets implique un disque de 40 pistes ou moins.
On peut remarquer que le caractère contenu à l'adresse $A002/$E002 est le même que celui qui est
renvoyé dans DKSTA ($204E/$604E) lors de l'initialisation moniteur d'un
contrôleur disque (DKSTA est en fait initialisé par le programme, sans rapport
nécessaire avec le registre $A002/$E002).
Les exceptions sont à réserver pour les ROM nanoréseau dont lidentificateur na quune
signification restreinte : « REC » pour la version 3,
« RES » pour la version 2, etc
A l'initialisation du moniteur, seul
le premier caractère ("R") renseigne alors sur la présence d'un
contrôleur nanoréseau.
Ces trois premiers caractères permettent à certains logiciels de savoir comment traiter les
données du support.
Le caractère en $A003/$E003 est le checksum, soit la somme des trois premiers caractères
augmentée de $55. La validité de ce checksum renseigne le système, au reset,
sur la présence dune ROM contrôleur. Il renseigne aussi lExtraMoniteur sur le
type de support quil aura à gérer. Lors de son initialisation, lExtraMoniteur
reconnaît quatre types de contrôleur daprès le checksum dIDDISK et met à jour leur caractéristique
:
Checksum |
Densité |
Pistes par face |
Secteurs par piste |
Octets par secteur |
$27 |
Simple |
40 |
16 |
128 |
$28 |
Double |
40 |
16 |
255 |
$30 et $34 |
Simple |
25 |
Xx |
128 |
Autre |
Double |
80 |
16 |
255 |
Pour le test de reconnaissance par lExtraMoniteur, seuls les bits 0 à 5 du checksum sont
significatifs. Si vous concevez un nouveau contrôleur, veillez à ce que votre
checksum dIDDISK corresponde bien aux possibilités du lecteur ou inversement.
Les fonctions standard de la ROM contrôleur
Les appels aux différentes fonctions de la ROM contrôleur ont des entrées normalisées (ici,
avec leur nom officiel).
Les 3 premières entrées concernent les opérations
physiques de base, dont la structure logicielle interne varie en fonction des
contraintes de chaque contrôleur :
$A004/$E004 DKCONT Fonctions standard (équivalant à $E82A sur TO et au SWI de code $26 sur MO)
$A007/$E007 DKBOOT Lancement du boot
$A00A/$E00A DKFMT Formatage
Suivent les 8 entrées relatives au système dexploitation logique. Cet embryon de système
d'exploitation a été utilisé par toute une gamme de logiciels (ColorPaint,
Polyphonia,...) lorsque le système n'assurait pas l'exploitation logique des
lecteurs de disquette (sur MO, TO7 et TO7-70) et comporte de pratiques
raccourcis de fonctions. Les routines concernées ont à peu de choses près
toujours la même structure logicielle, car nayant pas beaucoup évolué. Les
registres dentrée et de retour sont invariables :
$A00D/$E00D LECFA Lecture de la FAT (chargement et swap de la FAT)
$A010/$E010 RECFI Recherche d'un fichier (Ouverture en écriture et en lecture)
$A013/$E013 RECUP Récupération de la place occupée par un fichier (effacement d'un fichier)
$A016/$E016 ECRSE Ecriture d'un secteur
$A019/$E019 ALLOD Allocation de départ (allocation d'une entrée de fichier dans le catalogue)
$A01C/$E01C ALLOB Allocation d'un bloc (recherche dun bloc libre dans la FAT)
$A01F/$E01F MAJCL Mise à jour cluster (décomposition du numéro de bloc en numéros de piste et secteur)
$A022/$E022 FINTR Fin du transfert (clôture du fichier)
Pour les contrôleurs QDD, il existe une entrée de
plus :
$A025/$E025 Fonctions standard avec numéro de secteur réel
et éventuellement :
$A028/$E028 Fonctions système avec numéro de secteur réel
|