Appels d'entrée/sortie TRSDOS fondamentaux
Il existe huit routines TRSDOS fondamentales impliquées dans la gestion des entrées/sorties de fichiers. Il y a :
Routines | Description |
---|---|
INIT | Crée un nouveau fichier dans le répertoire et l'ouvre. Aucune allocation de granules n'est effectuée. |
OPEN | Ouvre un fichier disque existant. |
POSN | Position de lecture/écriture d'un enregistrement logique particulier. |
READ | Lit un enregistrement logique dans la RAM à partir du disque ou du tampon physique. |
WRITE | Écrit un enregistrement logique de la RAM sur le disque ou dans le tampon physique. |
VERF | Les écritures vérifient ensuite en relisant et en comparant les données d'origine écrites à partir de la RAM. Ne concerne que les enregistrements physiques LRL=0. |
CLOSE | Ferme un fichier ouvert. |
KILL | Ferme un fichier et l'efface du répertoire. |
Les séquences d'appel détaillées et les discussions pour chacune de ces routines suivent. Notez que tous ces appels système utilisent le registre F et ne restaurent pas sa valeur avant le retour. Afin d'appliquer correctement ces données, vous devez lire toutes ces descriptions et clarifier tous les points ne vous semblant pas évidents en utilisant d'autres documents de référence. Si vous y parvenez, vous constaterez que TRSDOS est un outil pratique pour vos idées de programmation. Les vecteurs de saut fournis ici et les descriptions concernent en particulier TRSDOS version 2.1 uniquement. Les futures versions de TRSDOS peuvent modifier certaines de ces descriptions ou adresses.
INIT |
Initialise |
---|---|
Vecteur de saut=X'4420' |
Description
INIT est fourni comme point d'entrée à TRSDOS créant une nouvelle entrée de fichier dans le répertoire et ouvrira le DCB pour ce fichier. INIT analyse le répertoire à la recherche du nom de spécification de fichier indiqué dans le DCB. Si le nom filespec est trouvé, INIT ouvre simplement le fichier pour l'utiliser. Si le nom n'est pas trouvé, un nouveau fichier est créé avec le nom filespec.
Entrée
Registre | Valeur ou description |
---|---|
HL | BUFFER (Tampon) |
DE | DCB |
B | LRL |
Appeler avec cet code :
- CALL 4420h
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
C | Le drapeau de retenue est activé si un nouveau fichier a été créé. |
A | Code d'erreur TRSDOS. |
OPEN |
Ouvrir |
---|---|
Vecteur de saut=X'4424' |
Description
OPEN fournit un moyen d'ouvrir le DCB d'un fichier qui existe déjà dans le répertoire. Le DCB doit contenir la filespec du fichier à ouvrir avant l'entrée dans OPEN.
Entrée
Registre | Valeur ou description |
---|---|
HL | BUFFER (Tampon) |
DE | DCB |
B | LRL |
Appeler avec cet code :
- CALL 4424h
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
Z | 0 si le fichier n'existe pas. |
A | Code d'erreur TRSDOS. |
POSN |
Position |
---|---|
Vecteur de saut=X'4442' |
Description
POSN positionne un fichier pour lire ou écrire un enregistrement logique sélectionné au hasard. Puisqu'il s'agit d'enregistrements logiques, le calcul approprié est effectué pour localiser le ou les enregistrements physiques contenant les données. Suivre un POSN avec un READ ou WRITE transférera l'enregistrement vers/depuis la RAM.
Notez que le positionnement sur l'enregistrement logique zéro définit le fichier pour lire le premier enregistrement logique du fichier. Pour se positionner en fin de fichier afin d'ajouter de nouveaux enregistrements à la fin, utilisez le numéro d'enregistrement ERN+1.
Entrée
Registre | Valeur ou description |
---|---|
DE | DCB |
BC | Numéro d'enregistrement logique pour lequel positionner. |
Appeler avec cet code :
- CALL 4442h
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. |
READ |
Lecture |
---|---|
Vecteur de saut=X'4436' |
Description
Si LRL>0, READ transfère l'enregistrement logique dont le numéro est dans le DCB comme NRN dans la zone RAM adressée comme UREC pour la longueur LRL définie à l'ouverture. L'enregistrement provient du BUFFER de la RAM définie à l'ouverture. Si TRSDOS doit lire un nouvel enregistrement physique pour satisfaire la demande, il le fera. Les enregistrements logiques «fractionnés» seront réassemblés si nécessaire. READ incrémente automatiquement NRN de un dans le DCB une fois le transfert terminé. INIT/OPEN positionne NRN=X'0000' afin de lire le premier enregistrement avec le premier READ.
Si LRL=0, READ transfère un enregistrement physique dans le RAM BUFFER, ayant été défini au moment de l'ouverture, à partir du fichier disque. Les registres HL sont ignorés. READ incrémente NRN comme ci-dessus.
Entrée
Registre | Valeur ou description |
---|---|
HL | UREC si LRL n'est pas nul. Inutilisé si LRL=0. |
DE | DCB |
Appeler avec cet code :
- CALL 4436
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. (EOF=X'1C' ou X'1D') |
WRITE |
Écriture |
---|---|
Vecteur de saut=X'4439' |
Description
Si LRL>0, WRITE transfère le seul enregistrement logique de l'adresse de la zone RAM comme UREC pour la longueur LRL telle que définie au moment de l'ouverture. L'enregistrement va dans le BUFFER (Tampon) dans la RAM ayant été défini au moment de l'ouverture. Si TRSDOS doit écrire un enregistrement physique afin de satisfaire la demande, il le fera. Le fractionnement sera géré par TRSDOS si nécessaire. Au moment INIT/OPEN, la valeur DCB de NRN est définie sur X'0000' afin que le premier enregistrement soit écrit. Après le transfert de chaque enregistrement logique, le NRN est défini sur X'0000' afin que le premier enregistrement soit écrit. Après le transfert de chaque enregistrement logique, la valeur NRN dans le DCB sera incrémentée de un.
Si LRL=0, WRITE transfère un enregistrement physique du BUFFER (Tampon) de la RAM dans le fichier disque en utilisant le NRN dans le DCB. Le BUFFER est défini uniquement au temps INIT/OPEN. La valeur DCB NRN est mise à jour comme ci-dessus, après le WRITE.
Entrée
Registre | Valeur ou description |
---|---|
HL | UREC si LRL n'est pas nul. Inutilisé si LRL=0. |
DE | DCB |
Appeler avec cet code :
- CALL 4439h
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. (EOF=X'1C' ou X'1D') |
VERF |
Vérifie |
---|---|
Vecteur de saut=X'443C' |
Description
La seule différence entre VERF et WRITE est que VERF écrit un enregistrement physique sur le disque, puis le relit dans une zone RAM TRSDOS spéciale non définie par l'utilisateur. Cette zone spéciale et le tampon d'écriture d'origine sont ensuite comparés octet par octet pour s'assurer que l'enregistrement a été écrit avec succès.
Entrée
Registre | Valeur ou description |
---|---|
HL | UREC si LRL n'est pas nul. Inutilisé si LRL=0. |
DE | DCB |
Appeler avec cet code :
- CALL 443Ch
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. |
CLOSE |
Ferme |
---|---|
Vecteur de saut=X'4428' |
Description
CLOSE ferme un fichier depuis le dernier traitement effectué. Il est très important de faire une CLOSE sur chaque fichier ouvert avant la fin du programme. Si vous ne fermez pas un fichier, l'entrée de répertoire pour ce fichier est incorrecte si de nouveaux enregistrements ont été écrits dans le fichier. Les autres cas ne sont pas donnés ici, mais il est très important pour TRSDOS que tout le "ménage" soit terminé pour la gestion des fichiers.
Entrée
Registre | Valeur ou description |
---|---|
DE | DCB |
Appeler avec cet code :
- CALL 4428h
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. |
KILL |
Tuer |
---|---|
Vecteur de saut=X'442C' |
Description
KILL supprime l'entrée de répertoire d'un fichier ouvert, puis termine la fermeture sur le DCB. L'espace disque libéré par l'ancien fichier est désormais réutilisable à d'autres fins. Sinon, KILL est identique à CLOSE.
Entrée
Registre | Valeur ou description |
---|---|
DE | DCB |
Appeler avec cet code :
- CALL 442Ch
Sortie
Registre | Valeur ou description |
---|---|
Z | OK |
A | Code d'erreur TRSDOS. |
Information supplémentaire
D'autres routines et adresses pouvant être intéressantes sont définies ici. Portez une attention particulière à la routine d'erreur. Il n'effectue pas de récupération d'erreur. Il affiche les messages d'erreur TRSDOS sur l'écran vidéo.
Retour normal à TRSDOS en fin de programme :
- CALL 402Dh
Adresse du tampon de 64 octets contenant la dernière commande TRSDOS entrée. Utile pour décoder les paramètres spéciaux saisis lors de l'exécution du programme (run) :
X'4318' |
Si HL => tampon de 8 octets, alors :
Renvoie l'heure du jour dans les 8 octets au format ASCII - HH:MM:SS :
- CALL 446Dh
Renvoie la date dans les 8 octets au format ASCII - MM/JJ/AA :
- CALL 4470h
Les formes binaires de l'heure et de la date sont situées dans la RAM du TRSDOS à ces emplacements :
X'4040' | Horloge - nombre de battements de coeur d'horloge en temps réel. 25ms. |
X'4041' | Temps - binaire - 3 octets - seconde, minutes, heures |
X'4044' | Date - binaire - 3 octets - année, jour, mois |
Affichage du code d'erreur TRSDOS sur l'affichage vidéo :
- CALL 4420h ; Exemple d'appel d'entrée/sortie système. Tout appel est correcte. Le drapeau de zéro non défini signifie qu'une erreur s'est produite lors de la tentative d'entrée/sortie.
- JR Z,OKGO ; Ignorer l'affichage du message d'erreur s'il n'y a pas d'erreur.
- OR 80h ; Facultatif pour un message d'erreur détaillé. Le registre A contient déjà le code approprié pour un affichage de message sur une seule ligne.
- CALL 4409h ; Afficher le message d'erreur sur l'écran vidéo.
-
- ; Le code de récupération d'erreur utilisateur facultatif va ici
-
- ; OKGO continuer avec le programme ici ---
Code d'erreur TRSDOS - Retour dans le registre A
Nombre décimal | Cause probable | Description d'erreur |
---|---|---|
00 | - | Pas d'erreur |
01 | MD | Erreur de parité lors de la lecture de l'entête |
02 | D | Rechercher l'erreur lors de la lecture |
03 | XK | Données perdues lors de la lecture |
04 | MD | Erreur de parité lors de la lecture |
05 | FMD | Enregistrement de données introuvable lors de la lecture |
06 | P | Tentative de lecture de l'enregistrement de données système |
07 | P | Tentative de lecture de l'enregistrement de données système |
08 | UP | Périphérique non disponible |
09 | MD | Erreur de parité lors de l'écriture de l'entête |
10 | D | Recherche d'erreur lors de l'écriture |
11 | XC | Données perdues lors de l'écriture |
12 | MD | Erreur de parité lors de l'écriture |
13 | FMD | Enregistrement de données introuvable lors de l'écriture |
14 | XD | Erreur d'écriture sur le lecteur de disque |
15 | UDX | Disquette protégée en écriture |
16 | PS | Numéro de fichier logique illégal (mauvais DCB) |
17 | MPDS | Erreur de lecture du répertoire |
18 | MPDS | Erreur d'écriture dans le répertoire |
19 | UP | Nom de fichier illégal (mauvais DCB) |
20 | MPDS | Erreur de lecture GAT (Granule Allocate Table) |
21 | MPDS | Erreur d'écriture GAT |
22 | MPDS | Erreur de lecture du HIT (Hash index table) |
23 | MPDS | Erreur d'écriture du HIT (Hash index table) |
24 | UP | Le fichier n'est pas dans le répertoire |
25 | UP | Accès au fichier refusé (violation de la protection) |
26 | UP | Espace de répertoire plein (48 fichiers maximum) |
27 | UP | Espace disque plein (70 granules maximum) |
28 | P | EOF rencontré (fin de fichier) |
29 | P | NRF (Aucun enregistrement trouvé) hors de l'intervalle du fichier |
30 | UP | Répertoire complet. Le fichier ne peut pas être étendu. |
31 | UP | Programme introuvable |
32 | UP | Numéro de l'unité de disque illégal spécifié |
33 | UP | Aucun espace disponible sur le périphérique pour le nouveau périphérique. |
34 | MPUS | Erreur de format de fichier de chargement. Ce n'est pas un programme. |
35 | XCS | Défaut de la mémoire |
36 | PUCX | Tentative de chargement de la mémoire ROM |
37 | P | Tentative d'accès illégal au fichier protégé |
38 | UP | Le fichier n'a pas été ouvert |
39 à 62 | Ces codes ne sont pas encore défini. Ils sont réservés. | |
63 | P | Code d'erreur inconnu |
Explication des codes de causes probables (colonne 2) :
Code | Description |
---|---|
C | Défaut du processeur TRS80 |
D | Défaut de l'unité de disque |
F | Disquette non formatée |
M | Défaut de support de disquette |
P | Erreur de programme utilisateur |
S | Défaut TRSDOS. Redémarrez. |
U | Erreur de procédure utilisateur |
X | Erreur d'interface d'extension |