source: vital-to8-sdk/docs/mon_disk.txt

Last change on this file was 1, checked in by svn, 4 years ago

Import initial

File size: 13.0 KB
Line 
1Les points d'entrées du Moniteur disque
2Adresses et points d'entrées sont déclarés pour MO et pour TO (avec numéro de CALL pour MO).
3
4$A004/$E004 (CALL $26 sur MO) : Fonctions standard (DKCONT)
5Cette entrée donne la possibilité d’exécuter diverses opérations fondamentales sous les modalités suivantes:
6Reset du contrôleur (tout lecteur sauf RamDisk)
7Registres d’entrée:
8- $2048/$6048               Code de commande $01
9- $20E9-$20EA/$60E9-$20EA   Pointeur sur le buffer de secteur
10- $20ED-$20EE/$60ED-$60EE   Pointeur sur le buffer de FAT
11Sur les lecteurs gérant simultanément la simple et la double densité, si le buffer de FAT et de secteur sont espacés de 256 octets, le reset contrôleur forcera la double densité. S'ils sont espacés de 128 octets, la simple. A l'initialisation de l'ordinateur, ces deux registres sont à $0000, la double densité est donc prioritaire. Il reste possible de forcer la densité par le point d'entrée Moniteur $A004/$E004 (commandes $04 et $10). La mise à jour des pointeurs de buffer pour des lecteurs ne gérant qu'une seule densité est sans conséquence au reset.
12Registres de retour:
13- Si C de CC à 0, $204E/$604E contient le code de densité du lecteur (« D » si double densité, « C » si simple). Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
14Lecture d’un secteur (tout lecteur)
15Registres d’entrée :
16- $2048/$6048               Code de commande $02
17- $2049/$6049               Numéro du lecteur
18- $204A-$204B/$604A-$204B   Numéro de piste
19- $204C/$604C               Numéro de secteur (de 1 à 16)
20- $204F-$2050/$604F-$2050   Pointeur sur la mémoire tampon de réception
21Registres d’entrée pour QDD avec numéro de secteur réel:
22- $2048/$6048               Code de commande $02
23- $2049/$6049               Numéro du lecteur
24- $204A/$604A               $FF
25- $204C-$204D/$604C-$604D   Numéro de secteur (de 1 à 400)
26- $204F-$2050/$604F-$2050   Pointeur sur la mémoire tampon de réception
27Registres de retour :
28- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
29Passage en simple densité (floppy exclusivement)
30Registres d’entrée :
31- $2048/$6048               Code de commande $04
32Registres de retour :
33Aucun
34Ecriture d’un secteur (tout lecteur)
35Registres d’entrée :
36- $2048/$6048               Code de commande $08 ($88 pour écriture avec vérification)
37- $2049/$6049               Numéro du lecteur
38- $204A-$204B/$604A-$204B   Numéro de piste
39- $204C/$604C               Numéro de secteur
40- $204F-$2050/$604F-$2050   Pointeur sur la mémoire tampon de réception
41Registres d’entrée pour QDD avec numéro de secteur réel:
42- $2048/$6048               Code de commande $08 ($88 pour écriture avec vérification)
43- $2049/$6049               Numéro du lecteur
44- $204A/$604A               $FF
45- $204C-$204D/$604C-$604D   Numéro de secteur (de 1 à 400)
46- $204F-$2050/$604F-$2050   Pointeur sur la mémoire tampon de réception
47Registres de retour :
48- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
49Passage en double densité (floppy exclusivement)
50Registres d’entrée :
51- $2048/$6048               Code de commande $10
52Registres de retour :
53Aucun
54Recherche de la piste 0 (floppy exclusivement)
55Registres d’entrée :
56- $2048/$6048               Code de commande $20
57Registres de retour :
58- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
59Recherche d’une piste quelconque (floppy exclusivement)
60Registres d’entrée :
61- $2048/$6048               Code de commande $40
62- $204A-$204B/$604A-$204B   Numéro de piste (sur 16 bits)
63Registres de retour :
64- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
65
66Remarque : dans le manuel, il est inscrit que le passage de densité peut provoquer une erreur mais elle n’est pas délivrée par les programmes de changement de densité, puisque ceux-ci ne renvoient jamais d’erreur. Une erreur, donc, que seule la logique impose... 
67
68$A007/$E007 (CALL $28 sur MO) : Lancement du boot(DKBOOT)
69Registres d’entrée :
70Aucun
71Registres de retour :
72Aucun
73
74$A00A/$E00A (CALL $2A sur MO) : Formatage (DKFMT)
75Registres d’entrée :
76- $2048/$6048               Code $80 si vérification demandée, sinon $00 (floppy exclusivement)
77- $204D/$604D               Facteur d’entrelacement de 1 à 15 (floppy exclusivement)
78Registres de retour :
79- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
80
81$A00D/$E00D (CALL $34 sur MO) : Lecture de la FAT (LECFA)
82Registres d’entrée :
83- $20ED/$60ED               Pointeur sur la mémoire tampon de FAT (128 ou 256 octets selon la densité)
84Registres de retour :
85- C de CC à 1 si erreur de chargement. 0 si pas d’erreur.
86
87$A010/$E010 (CALL $38 sur MO) : Recherche d’un fichier (RECFI)
88Registres d’entrée :
89- La FAT a été chargée (entrée $A00D/$E00D)
90- $20E9-$20EA/$60E9-$60EA   Pointeur sur la mémoire tampon de secteur
91- $20E7-$20E8/$60E7-$60E8   Pointeur sur le descripteur de fichier (11 octets)
92- $20F0/$60F0               Mode d’ouverture du fichier
93- $20EB/$60EB               Type du fichier recherché
94- $20EC/$60EC               Flag du fichier recherché
95Registres de retour :
96- C de CC à 1 si erreur de chargement. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $03 si I/O Error (aussi dans A). Registre à 0 et C de CC à 0 si pas d’erreur.
97- $20F9/$60F9               Numéro du secteur de l'entrée du fichier dans le catalogue. Si une sauvegarde avec écrasement est demandée ($03 dans le registre $20F0/$60F0), c’est le fichier nommé « SCRATCH.DOS » qui sera recherché. Si l’entrée du fichier n’a pas été trouvée, ce registre est à 0. ATTENTION! Le flag C de CC n’est pas mis à 1 dans ce dernier cas.
98- $20F6/$60F6               Numéro du premier bloc de fichier
99- $20F5/$60F5               Compteur de secteur à 0
100- $20F7-$20F8/$60F7-$60F8   Nombre d’octets dans le dernier secteur du fichier (sur 16 bits)
101- $20FA-$20FB/$60FA-$60FB   Pointeur sur l’entrée du fichier dans le secteur
102
103$A013/$E013 (CALL $3A sur MO) : Récupération de la place occupée par un fichier (RECUP)
104Registres d’entrée :
105- La FAT a été chargée (entrée $A00D/$E00D).
106- Le fichier à effacer doit avoir été recherché dans le catalogue au préalable (entrée $A010/$E010).
107Registres de retour :
108- C de CC à 1 si erreur de sauvegarde du secteur de catalogue. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $03 si I/O Error. Registre à 0 et C de CC à 0 si pas d’erreur.
109- Y contient le pointeur sur la mémoire tampon de FAT.
110- L’entrée du fichier a été effacée, le secteur de catalogue a été sauvé, la FAT a été mise à jour mais pas sauvée sur le disque. Pour sauver la FAT, positionner le mode « écriture d’un fichier sans écrasement » (code $02) et appeler la routine de clôture en $A022/$E022.
111
112$A016/$E016 (CALL $30 sur MO) : Ecriture d’un secteur (ECRSE)
113Registres d’entrée :
114- $20E9-$20EA/$60E9-$60EA   Pointeur sur la mémoire tampon de secteur
115Registres de retour :
116- Le secteur courant est sauvé sur le disque.
117- C de CC à 0. Si erreur, C de CC à 1, code d’erreur dans $204E/$604E, code contrôleur $03 (IO Error) dans $20E5/$60E5, la FAT est rétablie.
118On peut remarquer que pour faciliter le travail du programmeur, le registre Y pointe sur le début du secteur tampon.
119
120$A019/$E019 (CALL $2E sur MO) : Allocation de départ (ALLOD)
121Registres d’entrée :
122- La FAT doit avoir été chargée.
123- $20E9-$20EA/$60E9-$60EA   Pointeur sur la mémoire tampon de secteur
124- $20E7-$20E8/$60E7-$60E8   Pointeur sur le descripteur de fichier (11 octets)
125- $20F0/$60F0               Mode d’ouverture du fichier ($02 ou $03)
126- $20EB/$60EB               Type du fichier
127- $20EC/$60EC               Flag du fichier
128Registres de retour :
129- C de CC à 0. Si erreur, C de CC à 1, code d’erreur dans $204E/$604E, code d’erreur contrôleur dans $20E5/$60E5.
130- $20F6/$60F6               Nouveau numéro de bloc
131Le secteur de catalogue à été sauvé sur le disque avec:
132- Nom de fichier mis à jour (SCRATCH.DOS si code $03, nom du fichier courant si code $02).
133- Type de fichier mis à jour.
134- Flag de fichier mis à jour.
135- Bloc de départ du fichier mis à jour.
136
137$A01C/$E01C (CALL $2C sur MO) : Allocation d’un bloc (ALLOB)
138Registres d’entrée :
139- La FAT doit avoir été chargée.
140- $20F6-$60F6               Numéro du bloc courant
141Registres de retour :
142- Si FAT pleine, C de CC à 1. Le registre $20E5/$60E5 contient le code d’erreur du système d’exploitation logique $05 si « Disk Full ».Registre à 0 et C de CC à 0 si pas d’erreur.
143- $20F9/$60F9               Nouveau numéro de bloc
144- Dans la FAT, en mémoire, la nouvelle place passe de $FF à $00.
145
146$A01F/$E01F (CALL $36 sur MO) : Mise à jour cluster (MAJCL)
147Registres d’entrée :
148- $20F6/$60F6               Numéro du bloc courant
149Registres de retour :
150- $20F5/$60F5               Nombre de secteur du dernier bloc (initialisé à 1 pour écriture de bloc)
151- $20FA/$60FA               Numéro du premier secteur du bloc (1 ou 9)
152- $20FB/$60FB               Numéro de piste (sur 16 bits)
153
154$A022/$E022 (CALL $32 sur MO) : Fin du transfert (FINTR)
155Registres d’entrée :
156- La FAT a été chargée (entrée $A00D/$E00D)
157- Le fichier a été ouvert en mode sauvegarde.
158- $20E9-$20EA/$60E9-$60EA   Pointeur sur la mémoire tampon de secteur
159- $20E7-$20E8/$60E7-$60E8   Pointeur sur le descripteur de fichier de 11 caractères
160- $20F0/$60F0               Mode d’ouverture du fichier ($02 ou $03)
161Registres de retour :
162- C de CC à 0. Si erreur, C de CC à 1 et code d’erreur dans $204E/$604E.
163Si le mode d’ouverture du fichier est $02 (sauvegarde sans écrasement), les opérations suivantes sont effectuées : 
164- Rétablissement de la FAT en mémoire
165- Sauvegarde de la FAT sur le disque
166Si le mode d’ouverture du fichier est $03 (sauvegarde avec écrasement), les opérations suivantes son effectuées :
167- Recherche dans le catalogue du fichier de nom courant
168- Effacement du fichier de nom courant
169- Recherche du fichier SCRATCH.DOS
170- Remplacement du nom SCRATCH.DOS avec le nom de fichier courant
171- Ecriture du secteur de catalogue
172- Sauvegarde de la FAT sur le disque
173- Rétablissement de la FAT en mémoire
174ATTENTION ! Le nombre de secteurs du dernier bloc dans la FAT ainsi que la taille du dernier secteur dans le catalogue n’ont pas été mis à jour. Prévoyez d’inscrire l’un dans la FAT avant sa sauvegarde, puis recherchez le fichier en mode $02 dans le catalogue par l’entrée $A010/$E010, mettez l’autre à jour et sauvegardez le secteur par l’entrée $A016/$E016.
175
176$A025/$E025 : Fonctions standard avec numéro de secteur réel (QDD exclusivement).
177Equivalente aux fonctions standard en $A004/$E004 mais $204A/$604A doit être à $FF et le numéro de secteur de 1 à 400 dans le registre $204B-$204C/$604B-$604C.
178
179
180
181Procédures standard du système logique
182
183Lecture d’un fichier :
184- $A00D/$E00D Chargement de la FAT
185- Code $01 dans $20F0/$60F0 (lecture)
186- $A010/$E010 Recherche du fichier
187...< chargement du fichier >...
188
189Sauvegarde d’un fichier sans écrasement:
190- $A00D/$E00D Chargement de la FAT
191- Code $02 dans $20F0/$60F0 (écriture sans écrasement)
192- $A019/$E019 Création du fichier
193- Si le fichier existe déjà, erreur et sort
194...< sauvegarde du fichier >...
195- $A022/$E022 Clôture d’opération en écriture
196- Code $01 dans $20F0/$60F0 (lecture)
197- $A010/$E010 Recherche du fichier dans le catalogue
198- Mise à jour de la taille du dernier secteur dans le catalogue
199- $A016/$E016 Sauvegarde du secteur de catalogue
200
201Sauvegarde d’un fichier avec écrasement :
202- $A00D/$E00D Chargement de la FAT
203- Code $03 dans $20F0/$60F0 (écriture avec écrasement)
204- $A019/$E019 Création de l'entrée du fichier (SCRATCH.DOS si code $03, nom de fichier courant si code $02)
205...<sauvegarde du fichier >...
206- $A022/$E022 Clôture d’opération en écriture (Efface fichier courant et renomme « SCRATCH.DOS » avec nom du fichier courant si code $03)
207- Code $01 dans $20F0/$60F0 (lecture)
208- $A010/$E010 Recherche du fichier dans le catalogue
209- Mise à jour de la taille du dernier secteur dans le catalogue
210- $A016/$E016 Sauvegarde du secteur de catalogue
211
212Effacement d’un fichier :
213- Code $02 dans $20F0/$60F0 (écriture sans écrasement)
214- $A00D/$E00D Chargement de la FAT
215- $A010/$E010 Recherche du fichier dans le catalogue
216- $A013/$E013 Effacement du fichier courant
217- $A022/$E022 Clôture d’opération en écriture
218
Note: See TracBrowser for help on using the repository browser.