Section courante

A propos

Section administrative du site

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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. 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 :

  1. CALL 446Dh

Renvoie la date dans les 8 octets au format ASCII - MM/JJ/AA :

  1. 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 :

  1. 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.
  2. JR   Z,OKGO  ; Ignorer l'affichage du message d'erreur s'il n'y a pas d'erreur.
  3. 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.
  4. CALL 4409h   ; Afficher le message d'erreur sur l'écran vidéo.
  5.  
  6. ; Le code de récupération d'erreur utilisateur facultatif va ici
  7.  
  8. ; 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


Dernière mise à jour : Mercredi, le 22 février 2023