


                   MANUEL DES DEVELOPPEURS DU METADOS ATARI
                   ________________________________________



Chapitre 1 :  A qui est destin ce manuel?
__________________________________________

Ce manuel est conu pour les programmeurs des systmes. C'est un
guide de rfrence pour crire des gestionnaires logiques et
physiques pour les ordinateurs Atari St ou Mega. Les dveloppeurs
qui ajoutent de nouveaux gestionnaires aux ordinateurs Atari ST et
Mega auront recours  ce manuel. Le systme MetaDOS, qui fournit
les services de base que tout nouveau priphrique require
lorsqu'il est ajout au systme TOS, leur fera gagner du temps en
dveloppement.

MetaDOS a t crit en assembleur 68000 pour les programmeurs
d'assembleur 68000. Les personnes programmant dans tout autre
langage machine devront crire leur propre routine pour convertir
l'information MetaDOS fournie dans les registres 68000 en mthode
pour transfrer les paramtres en un langage qu'elles utilisent.

Disque des Dveloppeurs MetaDOS

Le disque dveloppeurs MetaDOS contient des gestionnaires logiques
et physiques. Il contient aussi la dernire version du MetaDOS. Le
disque est prt  installer MetaDOS, le systme est initialis 
partir du disque A. Voici de quoi est constitu le disque
dveloppeurs :

/AUTO ----------> CONFIG.SYS        Fichier de configuration MetaDOS
                      METADOS.PRG   MetaDOS (le programme)

/AUTO-----------> CDAR504.BOS CD_ROM gestionnaire priphrique
/INITIALISATION                          physique
                      HSMAY86.DOS   DOS logique CD-ROM format High
                                                Seira
                      ISO9660.DOS   DOS logique CD-ROM format
                                        ISO9660
                      IBMISO.DOS          Utilise les tableaux IBM sur le
                                         disque format ISO9660

/ISO9660.DOS----->ISO9660.S         gestionnaire priphrique
                                  logique ISO9660 (main)
                      ISFORMAT.S          structures format ISO9660
                      ISO9660.DOS   DOS logique CD-ROM format
                                          ISO9660
                      IBMISFOR.S          structures pour utiliser les
                                  tableaux IBM sur disque
                      IBMISO.DOS          utilise les tableaux IBM sur
                                    disque format ISO9660
                      HSFORMAT.S          structures format High Seira
                      HSMAY86.DOS   gestionnaire priphrique (DOS)
                                    logique High Sierra
                      MAKEHSG.BAT   Faire fichier pour High Sierra
                      MAKEIBM.BAT   Faire fichier pour IBM
                      MAKEISO.BAT   Faire fichier pour le standard
                                            ISO9660
                      METADEF.S           Structures MetaDOS
                      READ.ME       Autre information

/CDAR504.DOS/---> ATARI.S           Fichier de dfinition Atari
                      CD504BIO.S          gestionnaire priphrique
                                  physique principal CD-ROM
                      CD504FUN.S          fonctions CD-ROM
                      CDDEF.S       dfinitions CD-ROM
                      DMA.S               code contrle du DMA Atari
                      CDAR504.BOS   gestionnaire priphrique CD-ROM
                                              physique
                      MAKEBIOS.BAT  Faire fichier pour gestionnaire
                                         priphrique physique
                      METADEF.S           structures MetaDOS
                      READ.ME       Autre information


Chapitre 2 : MetaDos et l'ordinateur Atari
__________________________________________

Aucun priphrique au format autre que GEMDOS ne pouvant tre
install, une extension pour permettre  de nouveaux priphriques
de se substituer au format GEMDOS a t cre : le MetaDOS. Avec
MetaDOS les dveloppeurs ont la possibilit de mapper des
priphriques logiques sur des priphriques physiques et de
configurer les systmes comme ils le dsirent.

MetaDOS est une extension du systme TOS Atari et utilise une
mthode standard pour charger et excuter des gestionnaires
physiques et logiques multiples sur les ordinateurs Atari ST et
Mega. Grce  ces extensions et le gestionnaire de logiciel mme,
l'ordinateur ST peut tre configur pour ajouter tout nouveau
priphrique et gestionnaire d'une manire ordonne et compatible.
Voici les avantages du MetaDOS :

- capacit de traitement amlior via le traitement de demande du
systme unifi
- permet d'ajouter tout nouveau priphrique de compatibilit
lectrique
- amliore la squence d'initialisation de fichier automatique
- augmente les priphriques logiques (jusqu' Z)
- cration de gestionnaires logiques pour accder  des (grands)
  supports de stockage de donnes

Les utilisateurs apprcient MetaDOS car il leur permet de
configurer facilement leur systme pour accueillir tout un nombre
de priphriques inhabituels, tout en tant entirement compatible
avec GEMDOS. Le fichier CONGIG.SYS leur permet de runir la
configuration et auto-exec en un fichier facile d'accs. Le
mappage multiple du MetaDOS des priphriques sur des
gestionnaires uniques et le temps systme des interruptions (trap)
basses sont aussi trs apprcis.

Les programmeurs apprcient MetaDOS car il leur fait gagner du
temps. Ce qui proccupe tout programmeur, ce n'est pas
l'amlioration de la performance  de leur code et l'interface
commune et seule offerte  l'utilisateur, mais plutt la quantit
importante de temps systme que MetaDOS gre pour eux.

La philosophie de MetaDOS

MetaDOS reoit les demandes du GEMDOS provenant des applications
et les achemine  vers le gestionnaire GEMDOS ou logique appropri.
MetaDOS rduit le temps systme des interruptions (trap) en
fournissant un tableau de distribution central pour la
vectorisation efficace des commandes destines  tous les
gestionnaires. Le gestionnaire ne voit que les appels qui lui sont
destins. Tous les arguments d'origine sont sur la pile et toute
information supplmentaire est fournie dans certains registres de
l'UC. MetaDOS interprte galement les chemins et conserve la pile
du nom du chemin courant, augmentant aussi  point (dot) et point
point (dotdot) et initialisant les types de caractres du texte si
on le dsire. (Il faut compter des mois pour crire certaines de
ces fonctions, mais il y a mieux !). MetaDOS gre la rpartition
en ordre des identificateurs pour tous les gestionnaires (ce qui
vite la confusion si deux gestionnaires indpendants allouent le
mme numro d'identification en mme temps), il comprend que ces
demandes d'identification sont des demandes pour un gestionnaire,
il les dirige vers ce gestionnaire et fournit une zone de donnes
dans laquelle l'information particulire  cette identification
est garde. Les fonctions du systme d'extension sont ralises
d'une manire totalement transparente au logiciel de commande.

Le MetaDOS est divis abstraitement en 3 parties : le contrleur,
les gestionnaires logiques et les gestionnaires physiques. MetaDOS
est le contrleur. Il garantit que le gestionnaire est charg et
initialis au temps d'initialisation. Un fichier appel CONFIG.SYS
localis dans /AUTO folder du priphrique d'initialisation est
utilis pour installer le gestionnaire. Il connecte aussi le
gestionnaire aux priphriques (logiques ou physiques), il
communique les arguments des gestionnaires, et il rend
gnralement l'installation facile  l'utilisateur lui permettant
de continuer l'initialisation du priphrique physique. MetaDOS
gre aussi le mappage de priphriques physiques et logiques
multiples au gestionnaire.

La deuxime partie correspond au gestionnaire de priphriques
physiques. Le gestionnaire de priphriques physiques est le
logiciel qui dialogue avec le priphrique matriel physique -
seulement en des termes que le priphrique comprend. Les
priphriques physiques sont relis  l'extrieur par ce que l'on
appelle un BIOS ( dfaut d'un autre nom). Ces gestionnaires
communiquent directement avec le priphrique physique qui leur
est attribu lors de la rinitialisation. L'extrieur communique
avec le priphrique physique via un ensemble de 16 appels BIOS,
dont 3  que MetaDOS require. De ces 3 appels, le premier appel,
Metaini () est rserv par MetaDOS. Les deux autres appels, Open
() et Close (), sont exigs par MetaDOS et sont fournis par le
logiciel de commandes physiques. Le gestionnaire de priphrique
utilise les 13 autres appels pour grer toutes les
caractristiques que les nouveaux priphriques physiques
prsentent. MetaDOS dtermine si une demande BIOS est destine au
gestionnaire et dirige le contrle vers la bonne routine. Le
gestionnaire de logiciel ne fait ensuite que prendre les arguments
qui lui sont communiqus et applique ce qui est demand pour le
priphrique physique.

Le gestionnaire logique du GEMDOS constitue la troisime partie du
MetaDOS. La tche du gestionnaire du priphrique logique est que
son priphrique ressemble le plus possible  un systme de
fichiers GEMDOS standard. Les gestionnaires de priphriques
logiques communiquent avec les gestionnaires physiques. Les
gestionnaires logiques sont chargs de la traduction des donnes 
traiter entre le format physique du priphrique et l'interface
GEMDOS. Diffrents gestionnaires de priphriques logiques GEMDOS
peuvent tre cres et installs pour interprter les diffrents
formats que le priphrique physique lit. Par exemple, tous les
disques CD-ROM sont identiques, ce qui signifie que tous les
lecteurs CD-ROM lisent tous les disques CD-ROM. Bien que
l'information du disque soit lue, cette information doit tre
traduites du format dans lequel elle a t crites (High Serra mai
1986, ISO9660, etc.) au format que le systme attend (i.e. le
format GEMDOS). Maintenant, le gestionnaire du priphrique
logique du GEMDOS ne s'occupe que de convertir l'information du
priphrique physique  l'interface GEMDOS.

Lorsqu'un appel GEMDOS est excut, MetaDOS dcide pour quel
gestionnaire l'appel est destin. MetaDOS fournit et garde
l'information ncessaire pour que le gestionnaire logique ralise
la demande. A ce moment, MetaDOS vectorise le tableau des vecteurs
du priphrique logique au priphrique logique appropri pour
grer l'appel. Le gestionnaire logique retourne au MetaDOS via
l'instruction RTS.

Les appels grs par MetaDOS v 1.7.

Les appels GEMDOS suivants sont grs par MetaDOS v 1.7.

Dgetdrv () Dsetdrv () Dgetpath () Dsetpath () Dfree ()
Dcreate () Ddelete () Fattrib ()  Fopen ()    Dclose ()
Fread ()   Fwrite ()  Fseek ()    Fsfirst ()  Fsnext ()
Fcreate () Fdelete()  Fdatime ()  Frename ()  Fsetdta ()
Fgetdta () Pexec ()   Pterm ()    Ptermres ()

Tous les appels ne sont pas accessibles au gestionnaire logique
MetaDOS. Par exemple, Pexec (), Pterm (), et Ptermres () ne sont
jamais vectoriss au gestionnaire logique. MetaDOS gre
l'excution d'un programme pour le gestionnaire logique. Il
abandonne aussi la mmoire du programme en excution et termine
toutes identifications alloues par le programme en excution
lorsque le programme est sorti.

Les limites du MetaDOS v1.7

La version 1.7 de MetaDOS comprend les limites suivantes :

1) Il n'est pas possible d'initialiser les priphriques MetaDOS.
Les gestionnaires de priphriques MetaDOS doivent tre
initialiss  partir d'un priphrique GEMDOS standard (i.e. Unit
de disquette (Diskdrive)).
2) Le verrouillage fichier n'est pas gr.
3) "E/S standard" n'est pas gr.

Les limites du bureau

Le bureau d'origine sur les ordinateurs Atari ST ou Mega est
limit. Les concepteurs n'ont pas envisag un priphrique qui
soit plus grand que la partition standard du GEMDOS de 16
Megaoctets. Etant donn le nombre croissant de donnes qu'un
priphrique MetaDOS contient, voici les limites du bureau :

Menu de l'Information Affiche

Il est possible que les champs de donnes dans les botes de
dialogue "Information Affiche" soient trop petites. Certains
disques CD_ROM ont plus de 100 megaoctets d'information. Ce nombre
ne tient pas sur la ligne du bureau "Octets utiliss".
"Information Affiche" sur un disque CD_ROM peut se solder par le
dplacement curieux de cette ligne de la bote d'information. S'il
y a un problme ne le faite pas. Rinitialiser l'ordinateur pour
rsoudre le problme.

Mode Afficher comme Texte

Un listing des rpertoires d'un disque CD_ROM en mode "Afficher
comme Texte" peut "planter" l'ordinateur. Le champ de donnes
utilis pour afficher la taille d'un fichier est galement trop
petit pour la taille probable du nombre. Visualiser seulement un
disque CD_ROM dans un mode "icne" choisi du menu "Afficher".

Exigences et installation du MetaDOS

Le MetaDOS peut tre install sur tout ordinateur Atari ST ou
Mega. Dans la plupart des cas, un programme d'installation figure
avec le nouveau priphrique qui va tre install. Le programme
d'installation copie tous les fichiers ncessaires et modifie le
fichier de configuration du systme pour la nouvelle installation.
Exemple : pour installer le MetaDOS pour le CD_ROM CDAR504, voici
les fichiers qui sont demands :

METADOS.PRG       -> Routeur du systme MetaDOS
CONFIG.SYS        -> Fichier de configuration du systme
CDAR504.BOS       -> Systme d'Exploitation Basic (BOS) du CD_ROM
ISO9660.DOS       -> Gestionnaire ISO9660 (DOS)
HSMAI86.DOS       -> Gestionnaire High Sierra Mai 86 (DOS)

En mise sous tension, MetaDOS lit le fichier CONFIG.SYS de auto
folder du priphrique d'initialisation pour les affectations des
gestionnaires logiques et physiques. (voir chapitre 3). Il est
ensuite charg dans les gestionnaires physiques BOS. Le
gestionnaire DOS met des commandes  son gestionnaire physique
dsign  pour accder au priphrique physique. Un message
d'installation est produit pour chaque priphrique install et un
message d'erreur est gnr si l'initialisation n'a pas march.


Dmarche  suivre pour l'installation par des utilisateurs :

1) Dplacer tout .prg (programmes) de  auto folder dans un autre
rpertoire sur le priphrique d'initialisation.

2) Copier les fichiers du disque de rpartition MetaDOS dans auto
folder.

3) Si le priphrique d'initialisation est "A" : alors mettre en
forme CONFIG.SYS qui comprend un programme de mise en forme de
texte et changer la lettre de l'unit  "A" : pour chaque entre
BOS ou DOS dans le fichier. De mme, si le priphrique
d'initialisation est "C" : alors mettre en forme CONFIG.SYS  et
changer la lettre de l'unit  "C" : pour chaque entre BOS et DOS
dans le fichier. Se reporter  la description CONFIG.SYS.

4) Mettre en forme le fichier CONFIG.SYS pour ajouter tout autre
programme  auto folder que l'on dsire installer en bas du
fichier. En plaant les programmes d'auto-initialisation  la fin
du fichier CONFIG.SYS, ces programmes auront accs aux
priphriques MetaDOS. Il faut utiliser la lettre de l'unit et le
nom du chemin en entier  l'endroit o ils sont localiss. Si on
le dsire, des arguments  peuvent tre introduits, MetaDOS les
communiquera aux programmes d'initialisation.

5) Rinitialiser l'ordinateur et MetaDOS s'installera de lui-mme.

6) Aprs la rinitialisation, il faut installer les icnes du
bureau logique pour avoir accs au CD_ROM du Bureau Atari et
mettre en place  l'avance une opration "Bureau Sauvegard".

Remarque : Certains programmes auto folder sont obligatoirement
localiss dans auto folder du priphrique Initialisation. (i.e.
fold 100 prg). Il faut quitter le programme dans auto folder pour
que TOS installe le programme si cela est demand.

Un message s'affiche pour indiquer que MetaDOS est install. Le
message ressemble  peu prs au message suivant :

Atari MetaDOS                       RMS,RJZ
Version 1.7                   02/01/90
Copyright Atari Corporation   1989,1990

CDAR504.BOS v1.5 install sur A : sur DMA 6
HSMAI'86v1.5 install sur H :
ISO9660v1, 5 install sur I :


Les messages erreurs de l'installation du MetaDOS

Si une erreur se produit pendant que MetaDOS charge et initialise
un gestionnaire physique et logique, MetaDOS va imprimer un
message erreur. Les messages erreurs possibles sont les suivants :

Messages d'installation du MetaDOS

1) Pas de mmoire pour charger un fichier.
2) Hors mmoire pour installer DOS ou BOS.
3) Erreur mauvais fichier (fichier non excutable).
4) Fichier erreur non trouv
5) Fichier Config.sys non trouv dans  auto folder.

Messages erreurs de l'installation du gestionnaire DOS

1) Erreur des en-ttes des priphriques logiques
2) Ce gestionnaire n'est pas install

Messages erreurs de l'installation des Gestionnaires BOS

1) Systme d'Exploitation Basic n'est pas install (priphrique
physique inconnu)
2) Gestionnaire indique une erreur de commande inconnue
3) Gestionnaire indique une erreur dispositif gnrale
4) Gestionnaire indique une erreur CRC
5) Ce gestionnaire n'est pas install.


Chapitre 3 : Fichier Config.sys de MetaDOS
__________________________________________

Introduction

Le fichier configuration est utilis pour indiquer  l'ordinateur
quel priphrique il faut charger. Le fichier configuration
possde les caractristiques suivantes :

- Charger et excuter le programme  auto folder avec les arguments
- Charger dans des nouveaux gestionnaires de priphriques
logiques et physiques
- Dsigner de nouveaux identificateurs physiques et logiques.

Un fichier CONFIG.SYS est localis dans auto folder du
priphrique d'initialisation de l'ordinateur. Ce fichier est lu
par MetaDOS et analys par les gestionnaires physiques, les
gestionnaires logiques, et ensuite les programmes d'initialisation
des fichiers auto folder normaux (cela dpend bien sur de l'ordre
du fichier CONFIG.SYS). MetaDOS utilise l'information dans ce
fichier pour localiser et associer des gestionnaires de
priphriques logiques et physiques GEMDOS. Ce fichier est un
fichier ASCII et est mis en forme par un programme de mise en
forme de texte seul. Le fichier configuration prsente les
caractristiques suivantes :

- Les lignes qui commencent avec ';' sont des lignes de
commentaires

- Les interlignes sont ignores

- Les lignes qui commencent avec '*' sont des gestionnaires de
priphriques MetaDOS

- Les lignes qui commencent avec une lettre 'A-Z' sont excutes
comme des programmes auto-exec comportant des arguments.

La squence d'initialisation est importante - MetaDOS doit tre
install en premier. Ce "programme auto folder".... connat
l'existence de MetaDOS. Afin de le garantir, MetaDOS a la capacit
d'excuter des programmes auto folder normaux. Pour faire cela,
enlever tous les .prg (programmes) de auto folder. Placer le nom
de chemin et le nom de fichier en entier APRES les commandes '*'
dans le fichier CONFIG.SYS (se reporter au fichier CONFIG.SYS
ci-dessous). MetaDOS excute les programmes d'auto initialisation
avec une entre de la ligne de commande du fichier CONFIG.SYS. Ce
qui permet  ces programmes de connatre l'existance de nouveaux
priphriques logiques.

Remarque : pour acclrer l'initialisation lorsque l'on utilise
MetaDOS, dplacer tous les fichiers possibles de auto folder et
utiliser MetaDOS pour initialiser ces programmes. De cette
manire, TOS ne regarde pas ces fichiers pour voir s'ils doivent
tre excuts.

Exemple : fichier de CONFIG.SYS

; Config.sys            C'est un exemple de fichier de configuration
;                  ASCII pour un gestionnaire CD_ROM pour
;                  initialiser  partir d'une unit A :
;
*BIOS ,A:\AUTO\CDAR504.BOS, A:6
*DOS, A:\AUTO\HSMA Y86.DOS, H:A
*DOS, A:\AUTO\ISO9660.DOS, I:A

A:\AUTO\INITIALISATION\RMA.PRG 512  ; AUTRES PROGRAMMES
D'INITIALISATION AUTO FOLDER
A:\AUTO\INITIALISATION\GDOS.PRG           ; DOIT ETRE PLACE A LA FIN
DE
;Fin de fichier configuration       ; CE FICHIER

Remarquez ci-dessus que l'identificateur logique (A:-Z), le nom de
chemin, et le nom de fichier sont exigs pour tout BOS, DOS, ainsi
que les programmes auto executed.


Format d'installation de priphriques physiques (BOS)

Pour installer un priphrique physique, tout ce qu'il faut faire
est d'ajouter une autre ligne *BOS au fichier CONFIG.SYS. Cette
ligne est spare en trois segments comme ci-dessous :

*BOS, [Gestionnaire BOS et arguments], [ID]:[Canal DMA],...

*BOS,...                                        Cette expression indique 
                                       MetaDOS que c'est une
                                       installation Priphrique
                                       Physique.

..[Gestionnaire BOS et arguments],..      Entre la lettre du
                                       priphrique, le nom du
                                       chemin et le nom du fichier
                                       du Gestionnaire BOS
                                       physique qui doit tre
                                       install. Par exemple :

                                                C:\AUTO
                                       INITIALISATION \DISQUE
                                       DUR.BOS,

                                                On peut aussi communiquer
                                       les arguments gestionnaires
                                       BOS.

                                                C:\PERIPHERIQUE\DISQUE
                                       RAM.BOS 512 256,

                                                Se rappeler qu'une virgule
                                       est utilise pour sparer
                                       diffrents arguments BOS.

..[ID]:[Canal DMA],..                     L'identificateur est une
                                       lettre capitale ASCII
                                       comprise entre A:  Z:.

                                                Remarque : Ceci  est trs
                                       important. Cette lettre est
                                       exige par MetaDOS et par
                                       les applications pour
                                       indiquer
                                        quel priphrique
                                       physique l'appel
                                       d'interruption (trap) Bios
                                       est destin.

                                                Puisque MetaDOS a t cre
                                       pour ajouter de nouveaux
                                       priphriques DMA 
                                       l'ordinateur ST, un chiffre
                                       du canal DMA en option suit
                                       les deux-points....

                                                A:7, B:6, C:5

Remarque : A: et B: ne reprsentent pas les units des disquettes
logiques que l'on trouve sur tout ordinateur ST ou Mga. Ce sont
des NOUVEAUX priphriques PHYSIQUES du systme d'exploitation
TOS. NE PAS FAIRE DE CONFUSION.

Exemple :

*BOS, C\AUTOINITIALISATION\DISQUE DUR.BOS MEM(8K), A:6

Dans l'exemple ci-dessus, le fichier DISQUEDUR.BOS est charg par
MetaDOS  partir du chemin et de l'identificateur du priphrique
GEMDOS prcis (le priphrique et le chemin doivent tre
dtermins). Le programme est excut avec la ligne de commande
"MEM(8k)" en entre. Une fois install, le programme init du
priphrique physique (voir chapitre 6:) est appel avec
l'identificateur physique "A". Le numro 6 du canal du DMA
physique est aussi disponible  la routine init du gestionnaire.
La routine init du gestionnaire peut tre appele plusieurs fois,
ce qui permet au gestionnaire de grer plusieurs diffrents
gestionnaires physiques.

Remarque : Le numro du canal DMA n'est pas demand. Les
gestionnaires peuvent localiser le priphrique physique lui-mme
en utilisant la mthode d'adressage dj demande par le
priphrique. Le fait de fournir le numro du canal DMA accrot la
commodit du gestionnaire et la rapidit du temps
d'initialisation.


Format d'installation du Gestionnaire Logique (DOS)

Pour installer un priphrique logique, ajouter une ligne *DOS au
fichier CONFIG.SYS. Le format est similaire  l'installation du
gestionnaire physique (BOS) dj install. La ligne est spare en
3 segments comme ci-dessous :

*DOS, [Gestionnaire DOS et arguments], [Identificateur
Logique]:[Identificateur Physique],..

*DOS,...                            Cette expression indique  MetaDOS
                             que c'est un gestionnaire de
                             priphriques logiques qui doit tre
                             install.

..[Gestionnaire DOS et arguments],..Entrer la lettre du
                                    priphrique, le nom du chemin
                                    et le nom du fichier du
                                    Gestionnaire physique DOS qui
                                    doit tre install. Par
                                    exemple :

                                          C:\AUTOINITIALISATION\DISQUEDUR.DRV,

                                      On peut aussi communiquer les
                               arguments du gestionnaire DOS.
                               Comme :

                                    C:\PERIPHERIQUE\DISQUEDUR.DOS 1K 2K,

..[Identificateur Logique]:[Identificateur Physique],..
L'identificateur logique est une lettre majuscule comprise entre
A: et Z:. Par exemple, I:Z affecte le priphrique logique "I" au
priphrique physique "Z". Le priphrique physique est ncessaire
que s'il y en a un qui existe.

Remarque : En utilisant MetaDOS, une personne peut remplacer une
unit de disquette par une unit non-standard, en utilisant un
format non-standard. Les identificateurs logiques A:, B:, sont des
identificateurs pour l'unit de disquette.

Exemple :

*DOS, C:\AUTOINITIALISATION\DISQUEDUR.DOS 512 256, C:A, D:B

Dans l'exemple ci-dessus, le fichier DISQUEDUR.DOS est charg par
MetaDOS  partir de l'identificateur et du chemin des
priphriques GEMDOS dtermins. Le programme est excut avec la
ligne de commande "512 256" en entre. Une fois installe, la
routine init du priphrique logique (voir chapitre 5 pour savoir
comment crire un gestionnaire logique) est appele avec
l'identificateur logique "C" que le gestionnaire reprsente.
L'identificateur physique "A" est fourni au gestionnaire logique
afin que le gestionnaire sache  quel priphrique physique il a
t affect. Dans cet exemple, C:A peut tre un priphrique avec
des secteurs de 512 octets alors que D:B peut tre un priphrique
avec des secteurs de 256 octets.

Remarque : Dans l'exemple ci-dessus, "C" et "D" sont des
identificateurs du systme logique. L'utilisateur doit installer
un icne "C" et "D" pour avoir accs au priphrique  partir du
bureau ou d'une application.


Chapitre 4 : MetaDOS et les applications
________________________________________

Introduction

Cette section dcrit les relations entre les applications,
MetaDOS, et le niveau logique et physique du priphrique.

Accs  un gestionnaire de priphrique logique

Les applications ont accs au priphrique logique par l'interface
standard GEMDOS. Seuls certains appels sont grs par MetaDOS
(voir chapitre 2 sur les appels de MetaDOS). L'application peut
accder au map de l'unit logique standard de GEMDOS Drvbits
($4C2) pour les units logiques installes. MetaDOS remet  jour
le map de l'unit logique du GEMDOS lors de l'installation de
priphriques logiques. Avec l'unit logique installe de MetaDOS,
les identificateurs ont t dvelopps jusqu' Z:.

Accs  un gestionnaire de priphriques physiques

Pour accder  un priphrique physique, l'appel Metainit() est
utilis pour obtenir un map de l'unit MetaDOS des priphriques
physiques sur le systme. MetaDOS intercepte l'interruption trap
#14 et vectorise tous les codes opration entre 0x 30 (hex) et 0 x
3F au BOS physique dsign. L'appel Metainit () est appel numro
0 x 30 et est rserv pour MetaDOS. En utilisant le map de l'unit
physique, un appel Open () est fait pour localiser le priphrique
physique que l'application exige. Les applications ont directement
accs au priphrique physique grce aux appels BOS. D'autres
appels permettent d'accder aux caractristiques uniques du
priphrique particulier. Les trois premiers appels sont des
appels standards pour MetaDOS et sont obligatoirement mis en
oeuvre par le BIOS physique. Tous les autres appels sont
tributaires du priphrique. Se reporter  l'appendice A pour un
binding 'C' standard pour l'interruption (trap) et d'autres
informations.

Squence d'appel de l'application standard

Pour une application standard, la squence suivante permet la
compatibilit avec des versions futures de MetaDOS Extended BOS.
Les applications qui suivent ces indications sont garanties
fonctionner avec tout BIOS et MetaDOS futures lancs par Atari.

1) Faire un appel Metainit (), cet appel retourne l'information de
la version sur MetaDOS ainsi que le map de l'unit de priphrique
physique MetaDOS sur le systme. Si le map de l'unit est zro,
aucun priphrique physique n'a t trouv sur le systme ou alors
MetaDOS n'a pas t install (voir Metainit ()).

2) Faire un appel Open () avec l'identificateur de priphrique
physique de MetaDOS (example "A"). Se reporter  l'appendice A
pour le code "C" pour localiser l'identificateur de priphrique
physique CDAR504. L'identificateur de priphrique physique est
une lettre capitale ASCII qui se situe entre A: et Z:. Cet
identificateur est utilis dans tous les appels MetaDOS Extended
BOS (se reporter  Metainit ()).

3) Utiliser l'identificateur de priphrique pour faire tout autre
appel de MetaDOS Extended BOS.

4) Faire un appel close () avec l'identificateur de priphrique
physique pour indiquer au BIOS physique que l'application a
termin avec ce priphrique physique. Ce qui dinitialise le BOS
Extended pour ce priphrique physique (........utilise
actuellement le priphrique physique).


Chapitre 5 : Ecriture des gestionnaires de priphriques logiques (DOS)
_______________________________________________________________________

Introduction

Cette section dcrit la fonction d'un gestionnaire de
priphriques logiques et l'interface entre un gestionnaire
logique et MetaDOS. Ce chapitre va guider le programmeur qui crit
un gestionnaire de priphriques physiques pour MetaDOS.

La fonction d'un gestionnaire logique est de fournir un ensemble
de commandes uniformes de GEMDOS. Ainsi, l'utilisateur ou
l'application est prsent(e) avec une interface commune pour tous
les priphriques. Le gestionnaire logique se situe entre MetaDOS
et le gestionnaire physique. Il interprte les commandes GEMDOS et
appelle son gestionnaire de priphriques physiques MetaDOS ou un
priphrique standard GEMDOS pour les mettre en oeuvre. Le
gestionnaire logique maintient toute mmoire tampon et tout tat
qui ont rapport avec ses priphriques physiques et logiques.

Chaque priphrique physique install sous MetaDOS possde un
gestionnaire de priphriques physiques correspondant qui est
charg en mmoire. A l'initialisation, un identificateur de
priphriques physiques est attribu au gestionnaire de
priphriques logiques par le fichier CONFIG.SYS. Ce gestionnaire
physique agit comme le BIOS de bas niveau pour toute communication
en direction et en provenance de son priphrique physique. Un
gestionnaire logique est conu pour comprendre le priphrique
physique auquel il est attribu. Les gestionnaires logiques
reoivent des commandes de l'utilisateur ou de l'application par
MetaDOS,  qui formate et interprte les entres des commandes
GEMDOS  traiter. MetaDOS achemine ensuite les commandes et
d'autres informations trs importantes vers le gestionnaire de
priphriques logiques mme, par le tableau de vecteurs du
gestionnaire logique. Chaque appel du gestionnaire physique
effectu  partir du gestionnaire logique est achemin par le
MetaDOS au gestionnaire physique demand.

Les gestionnaires de priphriques logiques se composent de 3
lments :

1) appels installs 'wakeup'  des gestionnaires logiques
2) appels d'initialisation des priphriques logiques multiples
3) appels GEMDOS des priphriques logiques.

Structure de gestionnaire logique et initialisation Wakeup


Lorsqu'un gestionnaire logique est charg, il reoit un seul appel
d'initialisation 'wakeup' du gestionnaire. Un gestionnaire logique
peut recevoir plusieurs appels d'initialisation 'priphrique' du
MetaDOS le reliant  diffrents priphriques logiques. Ainsi, un
seul gestionnaire logique peut avoir besoin de grer plusieurs
priphriques logiques uniques. Chaque priphrique logique dfini
par l'utilisateur doit avoir une copie unique du stockage variable
et de l'espace de la mmoire tampon qu'il a besoin, qui est
fournie par le gestionnaire de priphriques logiques qui lui est
attribu. Des copies multiples du (des) gestionnaire(s) de
priphriques logiques similaire(s) ou diffrent(s) peuvent tre
charges pour communiquer avec un seul gestionnaire de
priphriques physiques. Enfin, les gestionnaires logiques peuvent
tre chargs et ne jamais tre attribus aux priphriques
logiques.

La premire donne dans un fichier de gestionnaires de
priphriques logiques est obligatoirement un sous-programme
excutable. Aprs le chargement du gestionnaire logique, MetaDOS
va se brancher  un sous programme (JSR)  l'adresse o le
gestionnaire a t charg - il est impratif d'avoir un code ici
qui se termine par un RTS. Ce code est la routine d'initialisation
'wakeup' du gestionnaire.

Remarque : Cette routine se termine obligatoirement par une
instruction RTS et non par un appel Pterm(), PtermO(), ou
Ptermres de GEMDOS.

Lorsque le gestionnaire de priphriques logiques est branch sur
un sous-programme (JSR), la page de base contient une chane
d'entre des arguments communique du fichier CONFIG.SYS au
gestionnaire logique. A ce moment, une initialisation globale
demande par le gestionnaire peut tre faite. Ne pas initialiser
les priphriques logiques pour l'instant - il existe un autre
vecteur pour cette action. Il faut se rappeler que le code du
gestionnaire logique peut tre charg et pourtant ne jamais tre
attribu  un priphrique logique. Le code d'initialisation du
gestionnaire doit retourner deux pointeurs  MetaDOS :

1) dO.L = pointeur du tableau de vecteurs (voir ci-dessous)
2) d1.L = pointeur de la chane d'identificateurs de la version
(un pointeur sur une chane arbitraire d'identificateurs de la
version, d'un longueur maximum de 32 octets et qui se termine par
zro).

Initialisation d'un priphrique logique

MetaDOS analyse le fichier CONFIG.SYS pour que les identificateurs
de priphriques logiques soient relis au gestionnaire. Si
certains sont trouvs, MetaDOS va se brancher  un sous programme
(JSR) par le premier vecteur du tableau des vecteurs des
priphriques logiques. Ce vecteur pointe obligatoirement sur la
routine d'initialisation du priphrique logique. Cette routine se
termine par une instruction RTS. Ensuite, il faut allouer de la
mmoire (MALLOC) aux mmoires tampons et au stockage variable
adquate pour un seul priphrique logique. Il faut que la
communication avec le priphrique physique soit teste. Les
variables locales de ce priphrique logique doivent tre
initialises et toute initialisation particulire au priphrique
physique devra tre complte. Ce code retourne deux pointeurs 
MetaDOS :
1) dO.L = Pointeur  la zone mmoire tampon des priphriques
logiques (ngatif si incapable d'initialiser le priphrique
logique) et

2) d1.L = Les drapeaux de contrle de MetaDOS. Bit 0 = Ne Pas
Forcer les Majuscules (0=Forcer les Majuscules) Bit 1 = donnes 
traiter (0 = Chemins de GEMDOS extension complte)

Tableau des vecteurs des priphriques logiques

Le tableau de vecteurs est un ensemble de pointeurs des routines
excutables. Chaque sous-programme se termine obligatoirement par
une instruction RTS. La premire entre du tableau des vecteurs
est rserve au pointeur du code d'initialisation des
priphriques logiques. Chaque autre entre correspond  la
commande numrique quivalente du GEMDOS et devrait contenir soit:

1) un pointeur d'un sous-programme excutable pour grer l'appel
ou
2) un mot long  ngatif (indiquant que cette commande n'est pas
mise en oeuvre dans ce gestionnaire logique)

Voici les appels GEMDOS avec lesquels MetaDOS 1.7 appelle le
priphrique logique :

Dgetdrv()   Dsetdrv()         Dgetpath()  Dsetpath()  Dfree()
Dcreate()   Ddelete()         Fattrib()         Fopen()           Fclose()
Fread()           Fwrite()          Fseek()           Fsfirst()         Fsnext()
Fcreate()   Fdelete()         Fdatime()         Frename           Fsetdta()
Fgetdta()

Remarque : Aucun autre appel GEMDOS est vectoris sur le
gestionnaire de priphriques, mme si un pointeur de vecteur
non-ngatif se trouve dans le tableau des vecteurs.

Chaque fonction que le gestionnaire logique choisit pour mettre en
oeuvre reoit des arguments du GEMDOS normaux sur la pile. De
plus, MetaDOS fournit les vecteurs suivants dans les registres
d'adresses du 68000 :

1) a3.L = Pointeur de la Mmoire Tampon du Priphrique Logique
(c'est la mme valeur que le gestionnaire logique retourne 
MetaDOS au temps init du priphrique logique)

2) a4.L = Pointeur du Nom du Chemin de GEMDOS (voir ci-dessous).
REMARQUE : Pour l'appel Dsetpath() du GEMDOS, ce pointeur pointe
obligatoirement sur le chemin courant valid car sur retour du
gestionnaire logique, MetaDOS utilise ce pointeur pour initialiser
le chemin courant pour ce priphrique logique.

3) a5.L = Pointeur Enregistrement Donnes. Il pointe en gnral
sur un enregistrement pointeur, mais il pointe sur les
enregistrements DTA par des appels FSFIRST et FSNEXT (les formats
d'enregistrement DTA sont documents dans la documentation
"dveloppeur TOS"). Les enregistrements pointeur sont locaux au
MetaDOS et sont constitus de 8 longs ....utiliss comme on le
dsire.

4) a6.L = Pointeur des Tableaux de Vecteurs (c'est la valeur
longue que le gestionnaire a retourn  MetaDOS au temps init du
gestionnaire, plus quatre, pointant ainsi sur un tableau des
appels GEMDOS).

Les fonctions des gestionnaires n'ont pas besoin de sauvegarder
des registres (autre que le pointeur de pile). Tous les registres
de l'UC sont sauvegards par MetaDOS avant de transfrer le
contrle au gestionnaire. En consquence, tous les registres de
donnes et d'adresses sont modifis par l'utilisateur.

Le pointeur du nom du chemin de GEMDOS

La chane du nom du chemin que le gestionnaire logique reoit peut
tre formate par MetaDOS. Le degr de formatage est impos par
les drapeaux de contrle retourns par le gestionnaire logique au
temps d'initialisation du gestionnaire logique. Si le bit 'entre
 traiter' (raw input) est initialis, la chane du nom du chemin
est la chane entre par l'utilisateur. Autrement, toutes les
rfrences 'point' (dot) et 'point point' (dotdot) seront
augmentes, le nom du priphrique sera ajout au dbut et la
chane formate au format correct de GEMDOS. Si le bit "no force
upper' ('ne pas forcer les majuscules')est initialis, les types
de caractres de la chane du nom du chemin ne sont pas modifis.
Autrement, tous les caractres alpha seront forcs aux majuscules.
Par exemple :

Si l'unit courante est Z: et
si le chemin courant pour Z: est \path1\path2

alors pour un appel Fopen()comprenant l'entre :

.\..\pATh3\path4.XXX\FileName.TxT

Bits drapeau                  Pointeur chemin GEMDOS

1     0

0     0                       Z:\PATH1\PATH3\PATH4.XXX\FILENAME.TxT
0     1*                      z:\path\pATh3\path4.XXX\FiLeNaMe.TxT
1     0                       .\..\PATH3\PATH4.XXX\FILENAME.TxT
1     1                       .\..\pATh3\Path4.XXX\FiLeNaMe.TxT

*Remarque : Lorsque le bit de contrle pour les minuscules est
initialis alors l'identificateur de l'unit est dfini pour tre
en minuscule.

Entre d'un identificateur de fichier d'un priphrique logique

Lorsqu'un fichier est ouvert, un identificateur de fichier est
attribu par MetaDOS. MetaDOS fournit le gestionnaire de
priphrique logique comprenant une zone de donnes de 48 octets 
utiliser avec ce fichier. Les premiers 32 octets (8 mots longs)
sont utiliss par le gestionnaire de priphriques logiques pour
retenir l'information sur l'tat courant de cet identificateur de
fichier. Les quatre derniers mots longs sont rservs  MetaDOS.
Un pointeur vers cette zone de donnes est fourni par MetaDOS 
chaque fois qu'un appel fichier est ralis par le systme
d'exploitation. Lorsqu'un fichier est ferm, cette zone est
rcupre par MetaDOS pour une utilisation future.

Listing partiel d'un gestionnaire de priphriques logiques

Ce qui suit est un listing partiel d'un gestionnaire de
priphriques logiques du MetaDOS courant. Ce gestionnaire
particulier gre le CD-ROM d'Atari pour les disques formats
ISO9660 et par consquent n'a aucune fonction crite mise en
oeuvre. Il servira, cependant, d'indication pour la production de
gestionnaires logiques plus labors. Le CD_ROM Atari complet du
code source du gestionnaire logique au format ISO9660 se trouve
sur le disque dveloppeurs de MetaDOS.


ISO9660.S, ISO9660F, HSMAI86 et IBMISO.S


Routines tributaires du priphrique pour MetaDOS.

Commenc le 5/30/88..R.Z
Copyright 1988 ATARI corp.

******************************************************************

ISO9660 :   C'est la dernire spcification produite par le
comit ISO qui se conforme  l'change de l'information au niveau
1. Rpertoires sans les extensions .XXX et les noms de fichier
8.3.

******************************************************************

Mise  jour :

Toutes les fonctions reoivent les informations suivantes :

1) les paramtres donns par l'appelant sont sur la pile

6(sp) Arguments
4(sp) Fonction Op-code
0(sp) Retourner adresse

2) Fonctions supplmentaires :
a3-> Bloc de paramtres du gestionnaire de DOS pour ce
gestionnaire logique.

a4-> Chane du chemin sous la forme :
A:\path.xxx\file.xxx
Tous les . et .. sont augments.
a5-> Enregistrement identificateur pour l'identificateur donn ou
DTA
a6-> Tableau de vecteurs pour ce DOS

------------------------------------------------------------------

.include "e:\\metados\\metadef.s"      ;include MetaDOS definitions.
.include "c:\\include\\atari.s"          ; include Atari definitions

.globl      status_chek
.text
******************************************************************
;
;
;     SYMBOLES PUBLIQUES
;
      .globl      drvr_init
      .globl      dev_init
;
;     CONSTANTES LOCALES
;
two_k = *800            ; 2K octets = tester longueur mmoire tampon
pbufsize = 4*two_k      ; 8K de mmoire tampon d'extension du tableau
du chemin
;
;     Dcalages de la mmoire tampon de l'identificateur
;

FILE_BLOK = 0                 ;Bloc physique initial
FILE_LEN  = 4                 ;Longueur du fichier total (octets)
FILE_OFF  = 8                 ;Dcalage du fichier courant (octets)

;
;Temps de retard du contrle support(1seconde = 200 ticks)
;
MEDELAY                 = 400 ; temps du retard du support en utilisant
des tranches horloge 200 Hz.
;
;
******************************************************************
;
;
                  SOUS-PROGRAMMES
;
;
******************************************************************

                  .text

******************************************************************
;
;
      DRVR_INIT Initialiser un Gestionnaire Priphrique. C'est
obligatoirement la premire routine dans le fichier, elle est
branche par l'identificateur lorsque DOS est charg.
;
;
;     Given :
            Control
;
;     Retours :
            dO.L = Pointeur du Tableau des Vecteurs
            d1.L = Chane identificateur de version de 32 octets maxi
;
;     Registre Usage :
      dtruire dO-d2 et aO-a2
;
;     Externe :
;
;           aucun
;
******************************************************************
;
drvr_init
      clr.l mediatime    ;horloge de contrle du support init
      clr.l cur_status ;tat du priphrique de contrle du
support init
      move.l #vectable,dO      ;retourn pour MetaDOS
      move.l #version.,d1      ;retourn pour MetaDOS
rts

******************************************************************
;
;
      DEV_INIT  Initialiser un Priphrique Logique
;
;     Given :
;
            dO = Nom du Priphrique Physique (WORD)
;
;     Retours :
;
;           dO = Erreur drapeau (0 ==> Russi)
            d1 = drapeaux du priphrique logique
;
;     Registre Usage :
;
            dtruire dO-d2 et aO-a2
;
;
;     Externe :
;
;           GEMDOS, vol_init
;
******************************************************************

dev_init :

      movem.l     a3/d3,-(sp)
      move dO,d3        ;d3 = nom du priphrique physique
      move.l #buffsize,-(sp)
      move   #$48,-(sp)
      trap   #1
      addq.1 #6,sp            ;brancher un sous-programme (MALLOC) sur
une mmoire tampon du priphrique logique individuel.
      tst.1  dO
      bne    .memok
      moveq  #NOMEMORY,dO ;Si ne retourne pas de mmoire (MemFail)
      bra     .exit
.memok :   move.l dO,aO ;aO=pointeur sur mmoire tampon du
priphrique logique courant.
      move    d3, physname(aO);se rappeler du priphrique physique
      move.l  aO,a3
      jsr     vol_init      ; NE PAS arrter sur un volume illisible
      cmp.l   #UNK_DEVICE,dO ;arrter sur un priphrique inconnu ou
      beq     .abort
      cmp.l   #GEN_ERROR,dO ; IF arrte (erreur matriel)
      bne     .cont
.abort                    ; arrter installation
      exg dO,a3             ; a3 = erreur
      move.l a3,-(sp)     ;Mmoire libre
      move.w #$49,-(sp)
      trap  #1
      addq.1 #6,sp
.cont
      move.l  a3,dO        ;Retourne (mmoire du priphrique
logique) ou erreur
      clr.l  d1                ;pas de drapeau pour ce priphrique
.exit movem.l  (sp)=;a3/d3
      rts

      .text

******************************************************************
;
;     VOL_INIT Initialiser les descripteurs du volume
;
;   Given :
;
;           a3 = pointeur sur la mmoire tampon du priphrique
logique
;  Retour :
;
;          dO = Erreur drapeau (0 ==> russi)
;
;     Registre Usage :
;
;     Dtruire dO-d2 et aO-a2
;
;     Externe :
;            getblock
;
;
******************************************************************

vol_init

      move.l #-1,blocknow(a3) ;indique que la mmoire tampon est
illisible
      move.l d3,-(sp)
      move.l #16,d3                 ;d3 = LBN courant  chercher
.idlp :move.l d3,dO          ; REPEAT
      jsr getblock            ;extraire un bloc de 2K de la mmoire
tampon
      tst.l dO
      bmi .exit                 ;IF (erreur) THEN arrter
      lea buffer(a3),aO
      cmp.b #STAND_VOLVES, VD_TYPE (aO)
      beq .avol                 ;UNTIL (Standard_VD)..
      cmp.b #VDST_VOLDES,VD_TYPE(aO)
      beq .aterm                ;..OR (Terminator_VD)..
      cmp.b #UNSPEC_VOLDES,VD_TYPE (aO)
      bgt .aterm                ;..OR (illisible)
      addq.l #1,d3
      bra .idlp
.aterm: move.l #UNK_MEDIA,dO  ;ERROR-Pas de descripteur de la
structure fichier
      bra .exit
.avol: lea cdromstr,aO         BUFFER contient un SFS_VD
      lea buffer +VD_STID(a3),a1
      moveq #5,dO
      jsr strmatch            Teste pour "CDROM"
      beq .idlp               IF (mauvais SFS_VD)THEN ressayer
;
,     BUFFER contient un SFS-VD VALIDE
;
;.if  IBMISO
      move.l buffer +V_SPACE(a3),dO
      IBMLong       dO
      move.l        dO,volsize (a3)
      move          buffer+V_LBS(a3),dO
      ror.w         #8,dO
      move          dO, lbsize(a3)
      move.l        buffer+V_PATH(a3),dO
      IBMLong
      move.l        dO, pathlbn(a3)
      move.l        buffer+V_PATHSEZ(a3),dO
      IBMLong       dO
      move.l        dO, pathsiz(a3)
.else
      move.l        buffer+V_SPACE(a3),volsize(a3)
      move.         buffer+V_LBS(a3),lvsize(a3)
      move.l        buffer+V_PATH(a3),pathlbn(a3)
      move.l        buffer+V_PATHSIZ(A3),pathsiz(a3)
.endif
      move          #-1,pathovfl(a3)    ;Forcer initialisation du
tableau chemin
      moveq          #O,dO               ;Retourner (russi)
.exit : move.l (sp)+,d3
      rts

;*****************************************************************
;
;     GETBLOCK    Extraire un bloc physique de 2K d'un CD_ROM d'une
mmoire tampon locale
;
;     Given
;           dO=nombre de blocs physiques (MOT LONG)
;           a3 = pointeur sur la mmoire tampon des priphriques
logiques
;
;     Retours :
;           Mmoire tampon mise  jour
;
;     Registre Usage
;           dtruire aO-a2 et dO-d3
;
;     Externes :
;           CDBIOS
;
;*****************************************************************

getblock :
      cmp.l blocknow(a3),dO
      beq         .done             ;IF(Bloc dj rsident) THEN
sortir
      move.l      dO, blocknow (a3)
      move        #1,-(sp)
      move.l      dO,-(sp)
      pea         buffer(a3)
      move        physname(a3),-(sp)
      move        #*33,-(sp)
      trap        #14                     ;Lire un seul bloc dans la
mmoire tampon
      add.l #14,sp
      tst.l dO
      bpl         .done
      move.l      #-1,blocknow(a3)  ;N'a pas obtenu le bloc.RMS
.done rts

;*****************************************************************
;
;     FWRITE,DCREATE,FCREATE,DDELETE
;
;           Retourne que ce disque n'est pas protg  l'criture
;
;     Given
;           (*3d,fnmame,attributes)
;           a3=pointeur sur la Mmoire Tampon des Priphrques
Logiques
;
;           a4=Chane  Entire du Chemin
;           a5=Mmoire Tampon de l'Identificateur Courant
;
;     Retours :
;           dO.L=crire erreur protection
;
;
;*****************************************************************
ddelete :
dcreate :
fcreate :
fwrite  :
      move.l      #WRITE_PROT,dO
      rts


      .data
;*****************************************************************
;
;     CE TABLEAU DE VECTEURS DES PERIPHERIQUES LOGIQUES
;
;*****************************************************************
vectable :                    ;Tous les points d'entres pour ce
gestionnaire
      .dc.l dev_init
;*****************************************************************
;Tableau des Fonctions  Ce tableau contient les entres de toutes
                        les fonctions pour les appels redirigs du
                        gestionnnaire de GEMDOS.
                              Mapp de *O-57
******************************************************************
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.*10 Cconos
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.*20 Super
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.$30 Sversion
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.        dfree       ;$36
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l dcreate           ;$3b d_create.
      .dc.l ddelete           ;$3c d_ddelete.
      .dc.l -1                ;Dsetpath pas gr
      .dc.l fcreate           ;$3e d_fcreate
      .dc.l fopen       ;$3d
      .dc.l fclose            ;$3e
      .dc.l fread       ;$3f
      .dc.l fwrite            ;Pas Fwrite
      .dc.l -1                ;Fdelete non gr
      .dc.l fseek       ;$42
      .dc.l fattrib           ;$43
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -1                ;Dgetpath pas gr
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l fsfirst           ;$4c
      .dc.l fsnext            ;$4f
      .dc.l -l                ;Jamais appel.$50--
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -l                ;Jamais appel.
      .dc.l -1                ;Ffrename pas gr
      .dc.l fdatime           ;$57

REMARQUE : Pour un listing complet du gestionnaire se reporter au
code source qui figure sur le disque dveloppeur de MetaDOS.


Chapitre 6 : Ecriture des Gestionnaires de Priphriques Physiques (BOS)
________________________________________________________________________

Ce chapitre  pour objectif de dcrire la fonction d'un
gestionnaire de priphriques physiques et l'interface entre un
gestionnaire physique et MetaDOS mme. Ce chapitre va guider les
programmeurs qui crivent un gestionnaire de priphriques
physiques pour MetaDOS. Un listing partiel est fourni ci-dessous
comme exemple.

La fonction d'un gestionnaire physique consiste  tablir la
communication entre le priphrique physique et l'extrieur. Le
gestionnaire physique doit matriser toutes idiosyncrasies du
matriel pour prsenter un ensemble de commandes standards BIOS
pour son priphrique physique. Un gestionnaire physique sert un
ou plusieurs gestionnaires logiques et ralise des actions telles
que mettre un bloc, obtenir un bloc et contrler l'tat.

Chaque priphrique physique install sous MetaDOS a un
gestionnaire de priphriques physiques correspondant charg en
mmoire. Ce gestionnaire physique agit comme le BIOS de bas niveau
pour toute communication en direction et en provenance de son
priphrique physique. Les gestionnaires physiques reoivent les
commandes de l'utilisateur ou de l'application par MetaDOS, qui
interprte les entres  traiter et achemine les commandes en
direction du gestionnaire de priphriques physiques mme par ce
tableau de vecteurs du gestionnaire physique. Un seul gestionnaire
physique peut tre appel pour grer plusieurs priphriques
physiques du mme genre.

Un gestionnaire physique peut recevoir de MetaDOS plusieurs appels
d'initialisation 'priphrique' le reliant  diffrents
priphriques physiques. Ainsi, un seul gestionnaire physique peut
avoir besoin de grer plusieurs priphriques physiques
similaires. Chaque priphrique physique ajout par l'utilisateur
doit avoir une copie unique de stockage variable et de l'espace
mmoire tampon qu'il a besoin fournie par le gestionnaire de
priphrique physique qui lui est attribu.

Les gestionnaires de priphriques logiques sont composs de 3
parties logiques. Les parties du gestionnaire physique (BOS) sont
:
1) appel Wakeup du gestionnaire physique
2) appels de l'init du priphrique de gestionnaire physique
3) appels demands et du MetaDOS tributaire du priphrique

Structure du gestionnaire des priphriques physiques et
initialisation Wakeup

Lorsqu'un gestionnaire physique est charg, il reoit un seul
appel d'initialisation 'wakeup' du gestionnaire. Ensuite, tout
argument trouv par MetaDOS dans le fichier CONFIG.SYS est
communiqu dans la page de base au gestionnaire charg. Des copies
multiples de gestionnaire(s) de priphriques physiques
similaire(s) ou diffrent(s) peuvent tre charges pour
communiquer avec un seul priphrique physique. Enfin, des
gestionnaires physiques peuvent tre chargs et ne jamais tre
attribus  des priphriques physiques.

La premire donne dans un fichier de gestionnaire de
priphriques physiques est obligatoirement un sous-programme
excutable. Aprs le chargement du gestionnaire physique, MetaDOS
va se brancher  un sous-programme (JSR)  l'adresse o le
gestionnaire a t charg - il est impratif qu'il y ait un code
ici qui se termine par un RTS. Ce code est la routine
d'initialisation du gestionnaire physique.

REMARQUE : Cette routine se termine obligatoirement par un RTS et
non par un appel Pterm(), Pterm(), ou Pterm() de GEMDOS.

Comme la dernire fois, toute initialisation globale demande par
le gestionnaire doit tre excute. Ne pas initialiser les
priphriques physiques tout de suite - un autre vecteur est
fourni pour cette action. Il faut se rappeler que le code du
gestionnaire physique peut tre charg et pourtant ne jamais tre
attribu  un priphrique physique. Le code d'initialisation du
gestionnaire retourne un pointeur, son tableau de vecteurs
physiques,  MetaDOS dans le registre dO.

Tableau des vecteurs de priphriques physiques

Le tableau de vecteurs est un ensemble de pointeurs des routines
excutables. La premire entre dans le tableau de vecteurs est
rserv au pointeur du code d'initialisation du priphrique
physique. Chaque autre entre (0  15) correspond aux commandes
BIOS (TRAP14) numrotes de $30  $3F et doit contenir soit un
pointeur d'un sous-programme excutable ou un mot long ngatif
(indiquant que cette commande n'est pas mise en oeuvre dans un
gestionnaire physique).

Remarque : L'entre du tableau de vecteurs numro zro est
rserve  MetaDOS seulement et n'est jamais vectorise.

Initialisation des priphriques physiques

Chaque fois que MetaDOS localise une affectation du priphrique
physique il rpond qu'un priphrique physique est li au
gestionnaire. MetaDOS va se brancher sur un sous-programme (JSR)
par le vecteur d'initialisation des priphriques du gestionnaire
et communique les paramtres suivants :

1) dO.W = Lettre de l'identificateur des priphriques physiques
(ASCII A-Z), et
2) d1.W = Numro du Canal DMA physique pour ce priphrique.

A prsent il faut allouer de la mmoire (MALLOC) aux mmoires
tampons et au stockage variable adquat pour un seul priphrique
physique. La communication avec le priphrique physique doit tre
teste. Les variables locales  ce priphrique physique doivent
tre initialises et toute initialisation particulire au
priphrique physique doit tre complte. Cette routine doit
aussi cre et remplir un en-tte de priphrique pour ce
priphrique physique. Un pointeur de l'en-tte du priphrique
doit tre retourn  MetaDOS dans le registre dO.

En-tte du priphrique physique

L'en-tte est une structure d'enregistrement qui contient
l'information tributaire du priphrique essentielle  MetaDOS.
Chaque priphrique physique doit avoir sa propre en-tte de
priphrique. Il est recommand que tous les champs dans l'en-tte
du priphrique soient rempli au temps d'initialisation des
priphriques. Les champs dans l'enregistrement des en-ttes des
priphriques (voir aussi l'appendice C pour un listing du fichier
METADEF.S) sont dfinis comme ci-dessous :


0) DV_NEXT  Lier  l'enregistrement de l'en-tte du priphrique
              suivant. Seulement pour MetaDOS.
4) DV_ATTR  Attributs de priphriques. Utiliser ce champ comme
                                            on le souhaite
8) DV_DRIV  Identificateur physique des priphriques (A-Z).
              Seul l'octet de poids faible est significatif
10)DV_DMACHAN numro du canal DMA physique (s'il y en a un)
12)DV_SUBDEV  Identificateur de sous-priphriques physiques (S'il
y en a)
14)DV_FUNC14  Pointeur de vecteurs de priphriques (tableau de
vecteurs plus 4)
18)DV_STATUS  Etat des priphriques. Utiliser ce champ comme on
              le dsire.
28)DV_NAME  Chane du nom du gestionnaire. Termin par zro, 32
                 octets minimum.

Chaque fonction que le gestionnaire physique choisit de mettre en
oeuvre reoit ses arguments sur la pile. MetaDOS supprime
l'adresse de retour des exceptions, le numro de la commande
TRAP14, et l'identificateur des priphriques physiques de la
liste des arguments avant de brancher un sous-programme (JSR) au
code. Ce qui laisse la liste des arguments commencer  4(sp). Les
fonctions du gestionnaire physique doivent sauvegarder tout
registre (autres que dO-d2 et aO-a2) qu'elles modifient et
rinitialisent avant de sortir vers MetaDOS avec un RTS.

Remarque : Il faut se rappeler que l'interruption TRAP #14 $30
Metainit(),$31 Open(), et $32 Close() sont exigs et dfinis au
pralable par le gestionnaire physique.

Vous trouverez ci-joint un listing partiel d'un gestionnaire de
priphrique physique MetaDOS en cours. Ce gestionnaire
particulier gre le CD-ROM Atari CDAR504 et n'a pas, de ce fait,
des fonctions crites mises en oeuvre. Il servira cependant comme
guide d'instruction pour la production de gestionnaires physiques
plus labors. Le code source du gestionnaire physique du CD-ROM
Atari se trouve sur le disque dveloppeurs MetaDOS.

Listing partiel d'un gestionnaire de priphriques physiques

Ce qui suit est un listing partiel d'un gestionnaire de
priphriques physiques MetaDOS actif. Ce gestionnaire particulier
gre le CD-ROM Atari CDAR504 , et sert de guide d'indication pour
la production de gestionnaires physiques plus labors. Le listing
complet pour le CD-ROM Atari CDAR504 est sur le disque du
dveloppeur MetaDOS.


******************************************************************
;
;CD504BIO   gestionnaire bios Atari CDAR504     Mike Schmal
;
;             Mut d'un gestionnaire d'origine. Ce gestionnaire
;             gre SEULEMENT qu'UN priphrique. Ce fichier est
;             utilis qu'en temps init. Tous les fichiers peuvent
;             tre utiliss.
;
;Mise  jour :
;
;*****************************************************************
;
.include dmadef                     ;inclure les CD-ROM dfinis.
.include"c:\\include\\atari.s"      ;inclure les dfinitions
                                  "atari.s"ST.
.include"e:\\metados\\metadef.s"    ;inclure les dfinitions MetaDOS

TIMEPER           =     2000              ;priode d'attente 200/sec,10sec
NOTCD       =     -2
INSTALLED   =     -3
TOTPHYS           =     4                 ;Ces gestionnaires grent 4
                                  en-ttes physiques.

.text
******************************************************************
;
;cdarinit : Code de mise en route. Initialiser les variables.
;
;     Retours : Tableau des vecteurs dans DO.
;
;*****************************************************************

cdarinit :
            move.l #TIMEPER,_timper       ;Initialiser priode
                                        d'attente
            move.l #devhead, new_hdr            ;pointeur nouvelle en-tte
                                               init
            move.l #vectbl,dO
            rts

;*****************************************************************
;
;CDAR504          Initing le gestionnaire CDAR504. Retourner l'en-tte
du gestionnaire de priphriques dans dO avec des attributs, le
nom du priphrique et le vecteur d'interruption trap 14 inited.
Le bios d'extension va se remplir au repos.
;
;     Given :           d1= canal physique pour priphrique
                        dO= Identificateur physique
;
;     Retours : MI      Si init choue.
                        sinon dO ->en-tte priphrique.
;
;*****************************************************************
cdar504 :
            move.wdO,d3       ;d3-> identificateur physique
            tst.l new_hdr           ;IF(pas de nouvelles en-ttes)arrter
            beq  .hdr_error
;
            bsr inqdev
            bmi .hdr_error          ;IF(aucun priphrique ne
                                  rpond)erreur.
;
            bsr init_device   ;ELSE(init l'en-tte du priphrique)
;
            add.l #SIZE_DEVH,new_hdr
            move.l devhead.d1
            add.l #SIZE_DEVH*TOTPHYS,d1
            cmp.l new_hdr,d1  ;IF(plus d'en-ttes)sort
            blt   .exit
            clr.l new_hdr           ;ELSE(pas d'en-tte supplmentaire
                                     si appel encore)
.hdr_error :
.exit :
            rts

******************************************************************
;
;init_device :
            move.l new_hdr,a1 ;a1-> en-tte de priphrique
            move.l a1,aO            ;aO-> en-tte de priphrique
;
            move.w #SIZE_DEVH,d2    ;Initialiser en-tte
                                      priphrique
            subq #1,d2
.ll :
            clr (a1)+
            dbra d2,.ll
                                    ;Crer en-tte de priphrique
            clr.l DV_NEXT(aO) ;PAS de gestionnaire suivant
            clr.l DV_ATTR(aO) ;Init attributs du gestionnaire
            move.w d3,DV_DRIV(aO)   ;Initialiser identificateur
                                      physique
            move.w d1,DV_DMACHAN(aO)      ;Init numro de priphrique
                                     physique.
            clr.w DV_SUBDEV (aO)    ;Sous-priphrique de
                                      priphrique physique
            move.l #func 14,DV_FUNC14(aO) ;Retourner tableau de
                                            fonctions

            lea cdvers,a1                 ;chane ver CDAR504
            lea DV_NAME (aO),a2
.cpl :
            move.b (a1)+, (a2)            ;dplacer chane
            bne  .cpl
            move.l new hdr,dO       ;retourner en-tte priphrique
            rts

                  .data

                  .even
;*****************************************************************
;Tableau des fonctions. Ce tableau contient des entres pour
toutes les fonctions mapped de $30-$3f
;*****************************************************************
vectbl :

            .dc.l cdar504                 ; routine INIT
func 14 :                           ; tableau de l'interruption trap
#14 de la                                                 fonction
            .dc.l -1                ;$30 RESERV pour MetaDOS
            .dc.l cd_open           ;$31 Ouvre ce priphrique
                               physique. DEMAND
            .dc.l cd_close          ;$32 Ferme ce priphrique physique.
                                       DEMAND.
            .dc.l cd_read           ;$33 Lire et se positionner aux blocs
                                             xx
            .dc.l cd_error          ;$34 Rserv. (pour crire CD-ROM)
            .dc.l cd_seek           ;$35 Se positionner  l'adresse
                                   physique
            .dc.l cd_status   ;$36 get_status
            .dc.l cd_error          ;$37 Rserv
            .dc.l cd_error          ;$38 Rserv
            .dc.l cd_error          ;$39 Rserv
            .dc.l cd_error          ;$3a Rserv
            .dc.l start_aud   ;$3b Mettre en marche audio
            .dc.l stop_aud          ;$3c Mettre hors service audio
            .dc.l set_songtime  ;$3d Initialiser selection chant
            .dc.l get_toc           ;$3e Obtenir le tableau cd des
                                                   adresses
            .dc.l disc_info   ;$3f obtenir disc_information.

;*****************************************************************
;Section de stockage de donnes du Bios d'extension CD
;*****************************************************************
cdstr :     .dc.b 'CD-ROM",O  ;CDAR504 chane d'identification
            .even
cdvers :    .dc.b "CDAR504 BOSv1.5",O ;chane ver CDAR504 (32
                                            octets)
            .even
;
            .bss
;*****************************************************************
;Section de stockage de blocs du Bios d'extension CD
;*****************************************************************
_timper:    .ds.l 1                 ;priode d'attente
new_hdr:    .ds.l 1                 ;Pointeur du bloc d'une nouvelle
                                       en-tte physique
devhead:    .ds.b SIZE_DEVH*TOTPHYS ; Les en-ttes physiques de
                                        ce gestionnaire

            .text
;*****************************************************************
;
;cd_open          Ouvrir le gestionnaire physique suivant et retourner
              l'en-tte du priphrique pour ce priphrique
              physique
;
;     Given :           4(sp) Adresse longue de la zone de donnes
                                      de l'utilisateur
                        aO->        En-tte de priphrique
;
;     Retours
;                 Zone de donnes de l'utilisateur mise  jour comme
                           ci-dessous :
;
;                 .ds.l 1     ;pointeur du nom du priphrique
;                 .ds.l 1     ;rserv doit tre  zro
;                 .ds.l 1     ;rserv doit tre  zro
;                 .ds.l 1     ;rserv doit tre  zro
;
;           Dtruire :  aO,a1
;
;*****************************************************************
cd_open :
                  move.l      4(sp), a1         ;Pointeur de la zone de
                                        donnes de l'utilisateur
                  lea         DV_NAME(aO),aO ;Pointeur du nom
                  move.l      aO,(a1)+          ;Pointeur de l'en-tte de
                                           la copie
                  clr.l (a1)+       ;Repos zro du bloc
                  clr.l (a1)+
                  clr.l (a1)+
                  clr.l dO                ;PAS d'erreur
                  rts

;*****************************************************************
;cd_close         Fermer le priphrique physique (ne rien faire
                                     maintenant)
;
;****************************************************************
cd_close :
            clr.l dO
            rts

;*****************************************************************
;get_status       Obtenir l'tat courant de l'unit de CD-ROM.
Retourner un mot long reprsentant l'octet d'tat dans le format
CD-ROM. IF (4(SP)!=O) alors retourner l'information de l'tat
supplmentaire.
;
;     Given :     4(sp) pointeur de la mmoire tampon doit tre de 32
                        octets
                  AO-> En-tte du priphrique physique
;
;     Retours:    octet d'tat de l'erreur de CD-ROM et autre
information d'tat
;
;     Dtruire :  aO,a1,d1,d2
;
;*****************************************************************
get_status

                  .
                  .
                  .
                  .
            rts

REMARQUE : Pour un listing complet du gestionnaire voir le code
source qui figure sur le disque dveloppeur du MetaDOS....



APPENDICE A

Voici des exemples de listing utiliss avec le lecteur CD-ROM
CDAR504 :

;*****************************************************************
;
;CDBIND.S binding exemple style "C"  l'Atari CD-ROM
             Routines du Bios d'extension et interface du langage
                   d'assemblage
;
;            Dbut :  04/04/88 Mike Schmal
;            Dernire mise  jour : 04/04/88#;
;*****************************************************************
            .globl_CDROM

            _CDROM :
                  move.l (sp)+,savsp
                  trap   #14
                  move.l ssavsp,-(sp)
                  rts

      .bss :
      savsp :     .ds.l 1
      .end

Le binds list dans cette documentation utilise l'appel trap
au-dessus de EXPLICITLY. Cela montre l'ordre dans lequel sont
placs les paramtres sur la pile. Voici un exemple de ce type de
"C" binding :
      CDROM ((int) OPEN, (int) phydrv, (long) mmoire tampon);

Pour l'exemple de ci-dessus, le mme bind en langage assembleur
est le suivant :

pea         buffer            ;adresse de la mmoire tampon
move.w      phydrv,-(sp)      ;identificateur de l'unit physique
move.w      #OPEN,-(sp) ;Op-code
jsr         CDROM       ;appeler la routine trap
add.l    #8,sp          ;initialiser la pile

*remarque : pour toutes les fonctions rpertories, la convention
suivante applique :
32 bits est une valeur appele LONGUE
16 bits est une valeur appele ENT (entier)
8  bits est une valeur appele OCTET (caractre).


APPENDICE B

Localiser un gestionnaire de priphriques physiques

Voici ci-dessous un listing d'une routine pour localiser un
gestionnaire physique particulier. En utilisant cette routine, la
compatibilit peut tre maintenue avec les versions futures de
MetaDOS. Une application doit voir si MetaDOS est install en
utilisant l'appel Metainit(). La mmoire tampon utilise par
l'appel Metainit() est OBLIGATOIREMENT MISE  0 par l'application
avant que l'appel soit effectu.

REMARQUE : Si la chane de la version (mmoire tampon [1]) est 
zro, alors MetaDOS n'est pas install. C'est la seule manire de
vrifier si MetaDOS est install.

#include "cdbind.h"
#include <osbind.h>
/* CDFIND

Routine de l'adresse CDROM

Tente d'initialiser MetaDOS(tm), ensuite cherche le map de
l'unit pour les units existantes, tente d'ouvrir chaque
unit. Si russi, recherche s'il y a des "CDAR" dans
l'en-tte pour garantir un CDROM.

Un incident de toute sorte, Metainit, ou un incident pour
localiser une unit, provoque un retour  O.

Une russite entrane que l'identificateur physique de l'unit
PREMIERE soit retourne (une lettre de A->Z) CE PRIPHRIQUE
EST TOUJOURS OUVERT!!!
*/
char  dev_id[] = {"CDAR"};         ;* vrifie jusqu' 4
                                             lettres #/
in
ethfind()
{
      long buffer[4] = {O,O,O,O};         /*map de
                                     l'unit,*version,#phy dev */
      char *devh;                         /*chane de l'en-tte du
                                        priphrique*/
      long drives;                              /*bits de l'unit
                                            physique */
      long ret;                                 /* Ouvrir code erreur */
      int i;                                    /* Boucle */

      metainit(buffer)        /*Initialiser,obtenir version */
      if(buffer[1] ! = OL){   /*if`(!O) MetaDOS est install */
                  Cconws("\r\n");/*Forcer le retour chariot */
                  Cconws((char*)buffer[1]);
                  Cconws("est install.\r\n");
                  }
      else{                   /*else pas install*/
                  Cconws("\r\nMetaDOS n'est pas install.\r\n");
                  retourner O;
      }
      drives = buffer[0];                       /* prend le map de l'unit
                                                        */

for(i='A';(i<='Z');++i,drives>>=1){

            /* Vrifie chaque bit d'unit,  un maxi de 26 units */
            /* ou jusqu' ce que UN priphrique CDROM soit trouv */

            if(drives & Oxll) {                 /*Vrifie le priphrique
                                                 MetaDOS */
                              ret=open(i,buffer);
                              if(ret==OL){
                              devh=(char*)buffer[0];/*devh->mmoire
                                             tampon caractre */
                              if((devh[0]==dev_id[0])&&
                                 (devh[1]==dev_id[1])&&
                                 (devh[2]==dev_id[2])&&
                                 (devh[3]==dev_id[3])){
                                          return(i);  /*Retourne
l'identificateur du priphrique CDROM
                        }
                        else {
                                    close(i);               /*Pas CDROM,le
ferme */
                        }
                  }
                  else{
                        Cconws("\r\nPas de priphrique CDROM
                                       trouv\r\n");
                        }
                  }
            } /* fin de la boucle */
            retourne (O);
      }


APPENDICE C

Cet appendice contient un listing du fichier de dfinition du
MetaDOS. Il comprend l'en-tte du priphrique physique retourn
par les fichiers BOS  MetaDOS et l'entre de l'identificateur du
fichier que MetaDOS fournit aux gestionnaires logiques.

;*****************************************************************
;
;metadef.s  Ce fichier contient les dfinitions pour le
              dveloppement des gestionnaires physiques et
              logiques pour le MetaDOS Atari.
;
;
;                 Mike Schmal
;
;                 Dernire mise  jour :  09/11/%89#
;*****************************************************************

;                       .abs
;En-tte du Priphrique Physique MetaDOS (voir comment crire des
                         gestionnaires de priphriques physiques)
DV_NEXT :         .ds.l 1           ;Priphrique suivant en
chane
DV_ATTR :         .ds.l 1           ;attributs  des
                                                    priphriques
DV_DRIV :         .ds.w 1           ;Lettre de l'unit des
                                                    priphriques
DV_DMACHAN :            .ds.w 1           ;Canal DMA physique
DV_SUBDEV :       .ds.w 1           ;Sous-priphrique de
                                         priphriques physiques
DV_FUNC14 :       .ds.w 1           ;Fonctions Trap 14 du
                                                priphrique
DV_STATUS :       .ds.w 1           ; Etat de priphrique
                                        courant (support bit O)
                        .ds.l 2           ;Rserv
DV_NAME :         .ds.b 32          ;Nom du priphrique(champ
                                           du caractre)
SIZE_DEVH =       *                       ;Taille de l'en-tte
                                                 physique

;Entre de l'identification du fichier (voir comment crire les
                         gestionnaires de priphriques logiques)
                        .abs
H_TBL_DEVICE :    .ds.l 8           ;Huit mots longs pour
               l'utilisation d'identificateur de priphrique
logique
                        .ds.l 1           ;Rserv
                        .ds.l 1           ;Rserv
                        .ds.l 1           ;Rserv
H_LOG_ID :        .ds.l 1           ;Tableau des vecteurs des
                                    priphriques (-1 pas utilis)
H_SIZE     =            *                       ;Taille de l'entre de
                                       l'identificateur du fichier
;Conditions d'erreur BIOS utilises par MetaDOS
SUCCESS                             =                 0
GENERROR                            =                 -1
D_NOTREADY                    =                 -2
UNK_COMMAND                   =                 -3
CRC_ERROR                     =                 -4
BAD_REQUEST                   =                 -5
SEEK_ERROR                    =                 -6
UNK_MEDIA                     =                 -7
BLK_NOTFOUND                        =                 -8
NO_PAPER                            =                 -9
WRITE_ERROR                   =                 -10
READ_ERROR                    =                 -11
GEN_ERROR                     =                 -12
WRITE_PROT                    =                 -13
MEDIA_CHG                     =                 -14
UNK_SECTORS                   =                 -15
BAD_SECTORS                   =                 -16
INSRT_O_DSK                   =                 -17
INSERT_DISK                   =                 -18
DEV_NOT-RESP                        =                 -19

;Ces erreurs sont utilises par GEMDOS
BAD_FUNC_NO                   =                 -32
FILE_NF                             =                 -33
PATH_NF                             =                 -34
NO_HNDL                             =                 -35
ACC_DENIED                    =                 -36
NO_MEMOR`Y                    =                 -39
HNDL_INVALID                        =                 -37
DRV_INVALID                   =                 -46
EXFILE_INVALID                =                 -66
NO_FILES                            =                 -47
                  .text

APPENDICE D


Appels et entres grs

Voici une liste de tous les appels et entres vectoriss de
MetaDOS disponibles sur le gestionnaire de priphriques logiques.
Comme il est indiqu auparavant, les appels ne sont pas tous
vectoriss au gestionnaire de priphriques logiques. Cette
section ne fait que rpertorier l'information que MetaDOS fournit
au gestionnaire de priphriques logiques. Les entres de la pile
normale pour ces appels sont toujours disponibles sur la pile.

Dgetdrv();
      Jamais vectoris au gestionnaire de priphriques logiques
Dsetdrv();
      Jamais vectoris au gestionnaire de priphriques logiques
Dgetpath();
      Jamais vectoris au gestionnaire de priphriques logiques
Dsetpath();

1)a3.L = pointeur de la mmoire tampon des priphriques logiques
(valeur longue que le gestionnaire a retourne au temps init du
priphrique)
2)a4.L = pointeur du nom du chemin GEMDOS
3)a6.L = pointeur du tableau de vecteurs +4(long mot que le
gestionnaire a retourn  l'init du gestionnaire)

REMARQUE :Aprs que le gestionnaire ait t excut, MetaDOS
reprend la main, ensuite le nom du chemin courant pour ce
priphrique est initialis au pointeur de la chane par le
registre a4.L.

Dfree();
1)a3.L=pointeur de la mmoire tampon des priphriques logiques
(mot long que le gestionnaire a retourn au temps init des
priphriques)
2)a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Dcreate();
1) a3.L=pointeur de la mmoire tampon des priphriques logiques
(long mot que le gestionnaire a retourn au temps init du
priphrique)
2) a4.L=pointeur du nom du chemin de GEMDOS
3) a6.L= pointeur de tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Ddelete();

1)a3.L= pointeur de la mmoire tampon des priphriques logiques
(mot long que le gestionnaire a retourn au temps init du
priphrique)
2) a4.L=pointeur du nom du chemin de GEMDOS.
3) a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fattrib();

1)a3.L = pointeur de la mmoire tampon des priphriques logiques
(long mot que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a6.L=pointeur du tableau de vecteurs +4(mot long que le
gesionnaire a retourn  l'init du gestionnaire)

Fopen();

1)a3.lL=pointeur de la mmoire tampon des priphriques logiques
(long mot que le gestionnaire a retourn au temps init des
priphriques)
2)a4.L=pointeur du nom du chemin du GEMDOS
3)A5.L=pointeur enregistrement des donnes qui pointe sur un
enregistrement de l'identificateur de fichier
4)a6.L=pointeur du tableau des vecteurs +4(long mot que le
gestionnaire a retourn  l'init du gestionnaire)

Fclose();

1)a3.L=pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a5.L=pointeur d'enregistrement des donnes qui pointe sur
l'enregistrement de l'identificateur du fichier
3)a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fread();

1)a3.L=pointeur de la mmoire tampon de priphriques logiques
(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a5.L=pointeur d'enregistrement des donnes qui pointe sur
l'enregistrement de l'identificateur du fichier
3)a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fwrite();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a5.L=pointeur d'enregistrement des donnes qui pointe sur
l'enregistrement de l'identificateur du fichier
3)a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fseek();


1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a5.L=pointeur d'enregistrement des donnes qui pointe sur
l'enregistrement de l'identificateur du fichier
3)a6.L=pointeur du tableau des vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fsfirst();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a5.L=pointeur d'enregistrement des donnes qui pointe sur une
adresse de transfert de disque (DTA)
4)a6.L=pointeur du tableau de vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fsnext();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a5.L=pointeur d'enregistrement des donnes qui pointe sur une
adresse de transfert de disque (DTA)
4)a6.L=pointeur du tableau de vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fcreate();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a5.L=pointeur d'enregistrement des donnes qui pointe sur un
enregistrement de l'identificateur du fichier
4)a6.L=pointeur du tableau de vecteurs +4(mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fdelete();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a6.L=pointeur du tableau des vecteurs +4 (mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fdatime();

1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a5.L=Pointeur de l'enregistrement des donnes qui pointe sur un
enregistrement  de l'identificateur du fichier
3)a6.L=pointeur du tableau des vecteurs +4 (mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Frename();


1)a3.L = pointeur de la mmoire tampon des priphriques
logiques(mot long que le gestionnaire a retourn au temps init du
gestionnaire)
2)a4.L=pointeur du nom du chemin de GEMDOS
3)a6.L=pointeur du tableau des vecteurs +4 (mot long que le
gestionnaire a retourn  l'init du gestionnaire)

Fsetdta();

Jamais vectoris au gestionnaire de priphriques logiques

Fgetdta();

Jamais vectoris au gestionnaire de priphriques logiques
