Spécifications de fonction
Cette page décrit en détail les appels de fonction MSX-DOS fournis par MSX-DOS version 2.20.
Il existe deux façons d'effectuer des appels de fonction MSX-DOS, reflétant les deux environnements différents (MSX-DOS et Disk BASIC) dans lesquels le système peut s'exécuter. Les programmes transitoires s'exécutant dans l'environnement MSX-DOS doivent accéder aux fonctions avec une instruction "CALL 0005h". Disk BASIC et les autres programmes MSX exécutés dans l'environnement Disk BASIC (généralement exécutés à partir de la ROM) doivent accéder au système via une instruction "CALL 0F37Dh".
Il existe certaines limitations lors de l'appel du système via 0F37Dh, en particulier en ce qui concerne la gestion des erreurs et les routines d'abandon. De plus, aucun paramètre ne peut être passé dans la page-1, à moins qu'ils ne soient dans la ROM du disque maître (comme ils le seront pour le Disk BASIC) car la ROM du disque maître sera paginée dans la page-1 lorsqu'un tel appel de fonction est effectué. Les descriptions de fonctions individuelles mentionnent les différences pour des fonctions particulières.
Liste des fonctions
Vous trouverez ci-dessous une liste complète des appels de fonctions. "CPM" indique que la fonction est compatible avec la fonction équivalente CP/M 2.2, "MSX1" indique la compatibilité avec MSX-DOS version 1 et "nouveau" indique une fonction étant nouvelle pour ce système. Un astérisque ("*") indique que la fonction peut être appelée en toute sécurité à partir d'une routine d'erreur de disque utilisateur (voir fonction 64h et fonction 70h).
Liste des appels de fonction MSX-DOS 2 :
Prérequis | Numéro | Description |
---|---|---|
CPM MSX1 | 00h | Terminaison de programme |
CPM MSX1 * | 01h | Entrée de console |
CPM MSX1 * | 02h | Sortie de console |
CPM MSX1 * | 03h | Entrée auxiliaire |
CPM MSX1 * | 04h | Sortie auxiliaire |
CPM MSX1 * | 05h | Sortie d'imprimante |
CPM MSX1 * | 06h | Entrée/sortie de console directe |
MSX1 * | 07h | Entrée de console directe |
MSX1 * | 08h | Entrée console sans écho |
CPM MSX1 * | 09h | Sortie de chaîne de caractères |
CPM MSX1 * | 0Ah | Entrée de ligne tampon |
CPM MSX1 * | 0Bh | État de console |
CPM MSX1 * | 0Ch | Retourne le numéro de version |
CPM MSX1 | 0Dh | Réinitialise le disque |
CPM MSX1 | 0Eh | Sélectionne le disque |
CPM MSX1 | 0Fh | Ouvre le fichier (FCB) |
CPM MSX1 | 10h | Ferme le fichier (FCB) |
CPM MSX1 | 11h | Recherche le premier entrée (FCB) |
CPM MSX1 | 12h | Recherche la prochaine entrée (FCB) |
CPM MSX1 | 13h | Supprime le fichier (FCB) |
CPM MSX1 | 14h | Lecture séquentielle (FCB) |
CPM MSX1 | 15h | Écriture séquentielle (FCB) |
CPM MSX1 | 16h | Crée un fichier (FCB) |
CPM MSX1 | 17h | Renomme un fichier (FCB) |
CPM MSX1 * | 18h | Demande le vecteur de connexion |
CPM MSX1 * | 19h | Demande l'unité de disque courante |
CPM MSX1 | 1Ah | Fixe l'adresse de la zone de transfère du disque |
MSX1 | 1Bh | Demande les informations d'allocation |
1Ch | Non utilisé | |
1Dh | Non utilisé | |
1Eh | Non utilisé | |
1Fh | Non utilisé | |
20h | Non utilisé | |
CPM MSX1 | 21h | Lecture aléatoire (FCB) |
CPM MSX1 | 22h | Écriture aléatoire (FCB) |
CPM MSX1 | 23h | Demande la taille du fichier (FCB) |
CPM MSX1 | 24h | Fixe l'enregistrement aléatoire (FCB) |
25h | Non utilisé | |
MSX1 | 26h | Écrire aléatoire de bloc (FCB) |
MSX1 | 27h | Lecture aléatoire de bloc (FCB) |
CPM MSX1 | 28h | Écriture aléatoire avec remplissage à zéro (FCB) |
29h | Non utilisé | |
MSX1 * | 2Ah | Demande la date |
MSX1 * | 2Bh | Fixe la date |
MSX1 * | 2Ch | Demande l'heure |
MSX1 * | 2Dh | Fixe l'heure |
MSX1 * | 2Eh | Fixe/réinitialise le drapeau de vérification |
MSX1 * | 2Fh | Lecture absolue du secteur |
MSX1 * | 30h | Écriture absolue du secteur |
Nouveau * | 31h | Demande les paramètres de disque |
32h à 3Fh | Non utilisé | |
Nouveau | 40h | Recherche la première entrée |
Nouveau | 41h | Recherche la prochaine entrée |
Nouveau | 42h | Recherche une nouvelle entrée |
Nouveau | 43h | Ouvre un descripteur de fichier |
Nouveau | 44h | Crée un descripteur de fichier |
Nouveau | 45h | Ferme un descripteur de fichier |
Nouveau | 46h | Assure le traitement du fichier |
Nouveau | 47h | Duplique le descripteur de fichier |
Nouveau | 48h | Lecture d'un descripteur de fichier |
Nouveau | 49h | Écrire vers un descripteur de fichier |
Nouveau | 4Ah | Pointeur vers un déplacement de descripteur de fichier |
Nouveau | 4Bh | Contrôle d'entrée/sortie pour les périphériques |
Nouveau | 4Ch | Test de descripteur de fichier |
Nouveau | 4Dh | Supprime le fichier ou le sous-répertoire |
Nouveau | 4Eh | Renomme le fichier ou le sous-répertoire |
Nouveau | 4Fh | Déplace le fichier ou le sous-répertoire |
Nouveau | 50h | Demande/fixe les attributs de fichier |
Nouveau | 51h | Demande/fixe la date et l'heure du fichier |
Nouveau | 52h | Supprime avec le descripteur de fichier |
Nouveau | 53h | Renomme avec le descripteur de fichier |
Nouveau | 54h | Déplace avec le descripteur de fichier |
Nouveau | 55h | Demande/fixe les attributs avec le descripteur de fichier |
Nouveau | 56h | Demande/fixe la date et l'heure avec le descripteur de fichier |
Nouveau * | 57h | Demande l'adresse de transfère de disque |
Nouveau * | 58h | Demande les ajustements du drapeau de vérification |
Nouveau | 59h | Demande le répertoire courant |
Nouveau | 5Ah | Change le répertoire courant |
Nouveau | 5Bh | Analyse le nom du chemin |
Nouveau | 5Ch | Analyse le nom du fichier |
Nouveau * | 5Dh | Vérifie le caractère |
Nouveau | 5Eh | Demande la chaîne de caractères de chemin complète |
Nouveau | 5Fh | Vide les tampons sur le disque |
Nouveau | 60h | Forker un processus enfant |
Nouveau | 61h | Rejoindre un processus parent |
Nouveau | 62h | Termine avec un code d'erreur |
Nouveau | 63h | Définir la routine de sortie d'abandon |
Nouveau | 64h | Définir la routine du gestionnaire d'erreurs de disque |
Nouveau * | 65h | Demande le code d'erreur précédent |
Nouveau * | 66h | Explique le code d'erreur |
Nouveau | 67h | Formate un disque |
Nouveau | 68h | Crée ou détruit un disque en RAM |
Nouveau | 69h | Attribuer des tampons pour les secteurs |
Nouveau * | 6Ah | Affectation d'unité de disque logique |
Nouveau * | 6Bh | Demande un élément de l'environnement |
Nouveau * | 6Ch | Fixe un élément de l'environnement |
Nouveau * | 6Dh | Recherche un élément de l'environnement |
Nouveau * | 6Eh | Demande/fixe l'état de vérification du disque |
Nouveau * | 6Fh | Demande le numéro de version MSX-DOS |
Nouveau * | 70h | Demande/fixe l'état de redirection |
Définitions fonction par fonction
Vous trouverez ci-dessous des descriptions détaillées de chacune des fonctions MSX-DOS, y compris les anciennes et les nouvelles. Les noms entre parenthèses après les numéros de fonction sont les étiquettes publics des codes de fonction étant définis dans "CODES.MAC". Les programmes doivent utiliser ces noms dans la mesure du possible.
La plupart des fonctions inférieures à 40h renvoient un drapeau d'erreur plutôt qu'un code d'erreur. Si le drapeau d'erreur est établi, alors le code d'erreur actuel indiquant la cause de l'erreur peut être obtenu par la fonction "obtenir le code d'erreur précédent" (fonction 65h). Toutes les fonctions au-dessus de 40h renvoient un code d'erreur dans le registre A. Les spécifications de fonction individuelles décrivent ici les principales conditions d'erreur spécifiques à des fonctions particulières.
Notez que de nombreux appels de fonction modifiant les informations sur un disque ne vident pas automatiquement les tampons du disque et que le disque n'est donc pas nécessairement correctement mis à jour immédiatement après l'appel de la fonction. Ces appels incluent tous les types d'appels de fonction "créer", "écrire", "supprimer", "renommer", "modifier les attributs de fichier" et "modifier la date et l'heure du fichier". Les seules fonctions vidant toujours les tampons du disque sont "vider les tampons", "fermer" et "traitement". Après ces opérations, le disque sera toujours correctement mis à jour.
00h |
Terminaison de programme |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 00h (_TERM0) |
Résultats
Ne revient pas
Description
Cette fonction termine le programme avec un code de retour zéro. Il est fourni pour la compatibilité avec MSX-DOS 1 et CP/M, la méthode préférée pour quitter un programme est d'utiliser l'appel de fonction "terminer avec code d'erreur" (fonction 62h), en passant un code d'erreur zéro si c'est ce que l'on souhaite. Voir la description de cet appel de fonction. Cet appel de fonction ne revient jamais à l'appelant.
01h |
Entrée de console |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 01h (_CONIN) |
Résultats
Registre | Description |
---|---|
A | Caractère du clavier |
L | Caractère du clavier |
Description
Un caractère sera lu à partir de l'entrée standard (descripteur de fichier 0 - généralement le clavier) et envoyé en écho à la sortie standard (descripteur de fichier 1 - généralement l'écran). Si aucun caractère n'est prêt, cette fonction en attendra un. Divers caractères de contrôle, tels que spécifiés pour la fonction "état de la console" (fonction 0Bh), seront piégés par cette fonction à diverses fins de contrôle. Si un de ces caractères est détecté alors il sera traité et cette fonction attendra un autre caractère. Ainsi ces caractères ne seront jamais retournés à l'utilisateur par cette fonction.
02h |
Sortie de console |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 02h (_CONOUT) |
E | Caractère vers la sortie |
Résultats
Aucun
Description
Le caractère passé dans le registre E est écrit sur la sortie standard (descripteur de fichier 1 - généralement l'écran). Si l'écho de l'imprimante est activé, le caractère est également écrit sur cette imprimante. Divers codes de contrôle et séquences d'échappement sont interprétés comme des codes de contrôle d'écran. Une liste de ceux-ci est incluse dans Codes de contrôle d'écran, ils sont un sous-ensemble des codes de contrôle standard VT-52. Les tabulations seront étendues à chaque huitième colonne.
03h |
Entrée auxiliaire |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 03h (_AUXIN) |
Résultats
Registre | Description |
---|---|
A | Caractère d'entrée |
L | Caractère d'entrée |
Description
Un caractère est lu à partir du périphérique d'entrée auxiliaire (descripteur de fichier 3) et si aucun caractère n'est prêt, il en attendra un. Le périphérique d'entrée auxiliaire doit avoir été installé avant que cette fonction puisse être utilisée. Si aucun périphérique de ce type n'a été installé, cette fonction renverra toujours le caractère de fin de fichier (CTRL+Z).
04h |
Sortie auxiliaire |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 04h (_AUXOUT) |
E | Caractère vers la sortie |
Résultats
Aucun
Description
Le caractère passé dans le registre E sera écrit sur le périphérique de sortie auxiliaire (descripteur de fichier 3). Le périphérique de sortie auxiliaire doit avoir été installé avant que cette fonction puisse être utilisée. Si aucun périphérique de ce type n'a été installé, cette fonction supprimera simplement le caractère.
05h |
Sortie d'imprimante |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 05h (_LSTOUT) |
E | Caractère vers la sortie |
Résultats
Aucun
Description
Le caractère passé dans le registre E sera envoyé au périphérique d'impression standard (descripteur de fichier 4 - généralement l'imprimante parallèle). Le même canal est utilisé pour la sortie de la console étant renvoyée à l'imprimante. Les tabulations ne sont pas développées par cette fonction, bien qu'elles soient développées lorsque la sortie d'écran est renvoyée à l'imprimante avec CTRL+P.
06h |
Entrée/sortie de console directe |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 06h (_DIRIO) |
E | 00h..FEh - caractère pour la sortie FFh - requête d'entrée |
Résultats
Registre | Description |
---|---|
A | Entrée - 00h - pas de caractères sinon une entrée de caractères |
L | Entrée - 00h - pas de caractères sinon une entrée de caractères |
Description
Si E=FFh à l'entrée alors le clavier sera examiné pour un caractère de l'entrée standard (descripteur de fichier 0) et 00h retourné si aucun caractère n'est prêt. Si un caractère est prêt, il sera lu à partir de l'entrée standard (entrée de fichier 0) et renvoyé dans le registre A sans être renvoyé en écho et sans vérification des caractères de contrôle.
Si E!=FFh à l'entrée, le caractère du registre E sera imprimé directement sur la sortie standard (descripteur de fichier 1) sans extension TAB ni écho d'imprimante. De plus, aucune vérification de l'état de la console n'est effectuée par cette fonction. Notez que bien que cette fonction n'étende pas les TAB, les codes de contrôle VT-52 incluent l'extension TAB, de sorte que l'effet sur l'écran est le même.
07h |
Entrée de console directe |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 07h (_DIRIN) |
Résultats
Registre | Description |
---|---|
A | Caractère d'entrée |
L | Caractère d'entrée |
Description
Cette fonction est identique à l'option d'entrée de la fonction 06h, sauf que si aucun caractère n'est prêt, elle en attendra un. Comme pour la fonction 06h, aucune vérification d'écho ou de caractères de contrôle ne sera effectuée. Cette fonction n'est pas compatible avec CP/M utilisant ce numéro de fonction pour «Demande l'octet d'entrée/sortie».
08h |
Entrée console sans écho |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 08h (_INNOE) |
Résultats
Registre | Description |
---|---|
A | Caractère d'entrée |
L | Caractère d'entrée |
Description
Cette fonction est identique à la fonction 01h sauf que le caractère d'entrée ne sera pas répercuté sur la sortie standard. Les mêmes vérifications des caractères de contrôle seront effectuées. Cette fonction n'est pas compatible avec CP/M lequel utilisant ce numéro de fonction pour "Définir l'octet d'entrée/sortie".
09h |
Sortie de chaîne de caractères |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 09h (_STROUT) |
DE | Adresse d'une chaîne de caractères |
Résultats
Aucun
Description
Les caractères de la chaîne de caractères pointée par le registre DE seront sortis en utilisant la routine de sortie normale de la console (appel de fonction 02h). La chaîne de caractères se termine par "$" (ASCII 24h).
0Ah |
Entrée de ligne tampon |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 0Ah (_BUFIN) |
DE | Adresse d'un tampon d'entrée |
Résultats
Aucun
Description
DE doit pointer vers un tampon à utiliser pour l'entrée. Le premier octet de ce tampon doit contenir le nombre de caractères que le tampon peut contenir (0..255). Une ligne d'entrée sera lue à partir du périphérique d'entrée standard (descripteur de fichier 0 - généralement le clavier) et entreposée dans la mémoire tampon. L'entrée se termine lorsqu'un CR est lu à partir de l'entrée standard. Le nombre de caractères saisis, qui n'inclut pas le CR lui-même, sera stocké dans (DE+1). S'il y a de la place dans la mémoire tampon, le CR sera entreposé après le dernier caractère.
Lors de la saisie à partir du clavier (ce qui sera normalement le cas), un simple éditeur de ligne est fourni, ainsi qu'un tampon circulaire de 256 octets des lignes précédentes qui peuvent être éditées et ré-entrées. Lorsque le tampon d'entrée est plein, le son de cloche de la console sonnera pour chaque caractère tapé ne pouvant pas être mis dans le tampon. Chaque caractère saisi sera répercuté sur la sortie standard et également sur l'imprimante si l'écho de l'imprimante est activé.
0Bh |
État de console |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 0Bh (_CONST) |
Résultats
Registre | Description |
---|---|
A | 00h s'il n'y a pas de touche d'enfoncé FFh s'il y a une touche d'enfoncé |
L | 00h s'il n'y a pas de touche d'enfoncé FFh s'il y a une touche d'enfoncé |
Description
Un drapeau est renvoyé dans le registre A pour indiquer si un caractère est prêt (c'est-à-dire si une touche a été enfoncée) pour une entrée à partir du clavier. Si un caractère est prêt, il sera lu et testé pour certains caractères de contrôle spéciaux. Si ce n'est pas l'un d'entre eux, il est entreposé dans un tampon interne à un seul octet et les appels ultérieurs à cette fonction renverront immédiatement "caractère prêt" sans vérifier le clavier. Si cette fonction indique qu'un caractère est prêt, le caractère peut être lu par la fonction 02h ou 08h.
Si le caractère est CTRL+C, alors le programme se terminera avec une erreur ".CTRLC" via la routine d'abandon de l'utilisateur si elle est définie. Si le caractère est CTRL+P, l'écho de l'imprimante sera activé et il sera désactivé s'il s'agit de CTRL+N. Si le caractère est CTRL+S, alors la routine raccrochera en attendant qu'un autre caractère soit pressé, puis retournera "aucun caractère prêt", fournissant ainsi une fonction "d'attente". Le caractère tapé pour continuer l'opération sera ignoré, sauf s'il s'agit de CTRL+C alors le programme sera terminé. Ces mêmes contrôles d'entrée sont également effectués pour les fonctions 01h, 02h, 08h, 09h et 0Ah.
0Ch |
Retourne le numéro de version |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 0Ch (_CPMVER) |
Résultats
Registre | Description |
---|---|
A | 22h |
L | 22h |
H | 00h |
B | 00h |
Description
Cette fonction renvoie simplement le numéro de version du CP/M en cours d'émulation. Il s'agit toujours de la version 2.2 dans les systèmes actuels.
0Dh |
Réinitialise le disque |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 0Dh (_DSKRST) |
Résultats
Aucun
Description
Toutes les données en attente dans les tampons internes sont écrites sur le disque. Il n'est pas nécessaire d'appeler cette fonction pour permettre un changement de disque comme c'est le cas avec CP/M. L'adresse de transfert du disque est également remise à sa valeur par défaut de 80h par cette fonction.
0Eh |
Sélectionne le disque |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 0Eh (_SELDSK) |
E | Numéro de disque : 0=A:, 1=B:,... |
Résultats
Registre | Description |
---|---|
A | Nombre d'unités (1..8) |
L | Nombre d'unités (1..8) |
Description
Cette fonction sélectionne simplement l'unité de disque spécifié comme l'unité de disque par défaut. L'unité de disque actuel est également entreposé à l'adresse 00004h pour la compatibilité CP/M. Le nombre de l'unité de disque disponibles est retourné dans le registre A mais cela n'inclura pas le disque RAM.
0Fh |
Ouvre le fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 0Fh (_FOPEN) |
DE | Pointeur vers un fichier FCB non-ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
L | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
Description
Le FCB non ouvert doit contenir un unité de disque pouvant être zéro pour indiquer l'unité de disque actuel et un nom de fichier et une extension pouvant être ambigus. Le répertoire actuel de l'unité de disque spécifié sera recherché pour un fichier correspondant et s'il est trouvé, il sera ouvert. Les entrées correspondantes étant des sous-répertoires ou des fichiers système seront ignorées, et si le nom de fichier est ambigu, la première entrée correspondante appropriée sera ouverte.
Les noms de périphériques peuvent être placés dans le FCB (sans deux-points) pour permettre l'accès aux périphériques comme s'il s'agissait en fait de fichiers disque.
L'octet de poids faible du numéro d'étendue n'est pas modifié par cette fonction, et un fichier ne sera ouvert que s'il est suffisamment grand pour contenir l'étendue spécifiée. Normalement, le programme transitoire mettra le numéro d'étendue à zéro avant d'appeler cette fonction. Cet octet de poids fort du numéro d'étendue sera mis à zéro pour assurer la compatibilité avec CP/M.
Le nom de fichier et l'extension dans le FCB seront remplacés par le nom réel du fichier ouvert à partir de l'entrée de répertoire. Ce sera normalement le même que ce qui existait auparavant, mais peut être différent si un nom de fichier ambigu ou contenant des lettres minuscules a été utilisé.
Le nombre d'enregistrements sera défini sur le nombre d'enregistrements de 128 octets dans l'étendue spécifiée, étant calculé à partir de la taille du fichier. Le champ de taille de fichier lui-même, le volume-id et les 8 octets réservés seront également configurés. Les champs fiche courante et fiche aléatoire ne seront pas modifiés par cette fonction, il appartient au programme application de les initialiser avant d'utiliser les fonctions de lecture ou d'écriture.
Si le fichier est introuvable, l'élément d'environnement «APPEND» sera examiné. S'il est défini, il est interprété comme une chaîne de caractères de l'unité de disque/chemin spécifiant un deuxième répertoire dans lequel rechercher le fichier. Le répertoire spécifié sera recherché pour le fichier et s'il est trouvé, il sera ouvert comme ci-dessus. Dans ce cas, l'octet de l'unité de disque du FCB sera défini sur l'unité de disque sur lequel le fichier a été trouvé pour garantir un accès correct au fichier si l'octet de l'unité de disque d'origine était zéro (par défaut).
10h |
Ferme le fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 10h (_FCLOSE) |
DE | Pointeur vers un fichier FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si un échec se produit 000h si c'est un succès |
L | 0FFh si un échec se produit 000h si c'est un succès |
Description
Le FCB doit avoir été ouvert au préalable avec un appel de fonction d'ouverture ou de création. Si le fichier a seulement été lu alors cette fonction ne fait rien. Si le fichier a été écrit, toutes les données mises en mémoire tampon seront écrites sur le disque et l'entrée de répertoire sera mise à jour de manière appropriée. Le fichier peut toujours être consulté après une fermeture, de sorte que la fonction peut être considérée comme faisant une fonction "traitement".
11h |
Recherche le premier entrée (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 11h (_SFIRST) |
DE | Pointeur vers un fichier FCB non-ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
L | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
Description
Cette fonction recherche dans le répertoire actuel de l'unité de disque spécifié dans le FCB (l'unité de disque par défaut si le FCB contient zéro) un fichier correspondant au nom de fichier et à l'extension dans le FCB. Le nom de fichier peut être ambigu (contenant des caractères "?"), auquel cas la première correspondance sera trouvée. L'octet de poids faible du champ d'étendue sera utilisé et un fichier ne sera trouvé que s'il est suffisamment grand pour contenir ce numéro d'étendue. Normalement, le champ d'étendue sera mis à zéro par le programme avant d'appeler cette fonction. Le fichier système et les entrées de sous-répertoire ne seront pas trouvés.
Si une correspondance appropriée est trouvée (A=0), l'entrée de répertoire sera copiée à l'adresse DTA, précédée du numéro de l'unité de disque. Celui-ci peut être utilisé directement comme FCB pour un appel de fonction d'ouverture de fichier (OPEN) si vous le souhaitez. Le numéro d'étendue sera défini sur l'octet de poids faible de l'étendue du FCB de recherche et le nombre d'enregistrements sera initialisé de manière appropriée (comme pour OPEN). L'octet d'attributs de l'entrée de répertoire sera entreposé dans la position d'octet S1, puisque sa position normale (immédiatement après le champ d'extension du nom de fichier) est utilisée pour l'octet d'étendue.
Si aucune correspondance n'est trouvée (A=0FFh), le DTA ne sera pas modifié. En aucun cas le FCB pointé par DE ne sera modifié pour tous. Cette fonction mémorise suffisamment d'informations en interne pour lui permettre de continuer la recherche avec une fonction de recherche pour le prochain, il n'est donc pas nécessaire que le FCB soit conservé si vous effectuez une fonction de recherche pour le prochain.
Dans CP/M, si le numéro de l'unité de disque est défini sur "?" dans cette fonction, toutes les entrées du répertoire, allouées ou libres, seront mises en correspondance. De plus, si le champ d'étendue est défini sur "?" alors n'importe quelle étendue d'un fichier sera mise en correspondance. Ces deux fonctionnalités ne sont normalement utilisées que par des programmes CP/M à usage spécial étant généralement spécifiques au système de classement CP/M (tels que "STAT"). Aucune fonctionnalité n'est présente dans MSX-DOS 1/2.
12h |
Recherche la prochaine entrée (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 12h (_SNEXT) |
Résultats
Registre | Description |
---|---|
A | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
L | 0FFh si le fichier n'est pas trouvé 000h si le fichier est trouvé |
Description
Il continue la recherche pour rechercher la prochaine correspondance avec le nom de fichier. Les résultats renvoyés par cette fonction sont identiques à rechercher en premier et tous les mêmes commentaires s'appliquent. Les informations utilisées pour poursuivre la recherche sont conservées en interne dans MSX-DOS et le FCB d'origine utilisé dans la recherche du premier n'a donc pas besoin d'exister.
13h |
Supprime le fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 13h (_FDEL) |
DE | Pointeur vers un FCB non ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si le fichier n'est pas supprimé |
L | 0FFh si le fichier n'est pas supprimé |
Description
Tous les fichiers du répertoire courant du disque spécifié par le FCB, et correspondant au nom de fichier ambigu dans le FCB, sont supprimés. Les sous-répertoires, les fichiers système, les fichiers cachés et les fichiers en lecture seulement ne sont pas supprimés. Si des fichiers sont supprimés avec succès, cette fonction retourne avec A=0. Un retour avec A=FFh indique qu'aucun fichier n'a été supprimé.
14h |
Lecture séquentielle (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 14h (_RDSEQ) |
DE | Pointeur vers un FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 01h si erreur (fin de fichier) = 00h si lue avec succès |
L | 01h si erreur (fin de fichier) = 00h si lue avec succès |
Description
Cette fonction lit le prochain enregistrement séquentiel de 128 octets du fichier dans l'adresse de transfert de disque actuelle. L'enregistrement est défini par l'étendue actuelle (octets de poids fort et de poids faible) et l'enregistrement actuel. Après avoir lu avec succès l'enregistrement, cette fonction incrémente l'enregistrement en cours et s'il atteint 080h, le remet à zéro et incrémente le numéro d'extension. Le champ du nombre d'enregistrements est également mis à jour si nécessaire.
Contrairement à CP/M, il est possible d'avoir des enregistrements partiellement remplis, car la taille du fichier n'est pas nécessairement un multiple de 128 octets. Si cela se produit, l'enregistrement partiel est rempli de zéros lorsqu'il est copié à l'adresse DTA du programme transitoire.
15h |
Écriture séquentielle (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 15h (_WRSEQ) |
DE | Pointeur vers un FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 01h si erreur (disque plein) = 00h si écrit avec succès |
L | 01h si erreur (disque plein) = 00h si écrit avec succès |
Description
Cette fonction écrit les 128 octets de l'adresse de transfert de disque actuelle dans le fichier à la position définie par l'enregistrement et l'étendue actuels, étant ensuite incrémentés de manière appropriée. L'octet du nombre d'enregistrements est correctement mis à jour si le fichier est étendu ou si l'écriture se déplace dans une nouvelle extension. La taille du fichier dans le FCB est également mise à jour si le fichier est étendu.
16h |
Crée un fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 16h (_FMAKE) |
DE | Pointeur vers un FCB non-ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si erreur c'est produite = 00h si c'est un succès |
L | 0FFh si erreur c'est produite = 00h si c'est un succès |
Description
La fonction crée un nouveau fichier dans le répertoire courant de l'unité de disque spécifié et l'ouvre prêt pour la lecture et l'écriture. L'unité de disque, le nom de fichier et l'octet de poids faible du numéro d'extension doivent être configurés dans le FCB et le nom de fichier ne doit pas être ambigu. Des vérifications seront effectuées pour s'assurer que des noms de fichiers invalides ne sont pas créés.
S'il existe déjà un fichier du nom requis, l'action dépend de la valeur de l'octet du numéro d'extension. Normalement, ce sera zéro et dans ce cas, l'ancien fichier sera supprimé et un nouveau créé. Cependant, si le numéro d'extension est différent de zéro, le fichier existant sera ouvert sans créer de nouveau fichier. Cela garantit la compatibilité avec les premières versions de CP/M où chaque extension devait être explicitement créée.
Dans tous les cas, le fichier résultant sera ouvert avec le numéro d'extension requis exactement comme si un appel de fonction d'ouverture avait été effectué.
17h |
Renomme un fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 17h (_FREN) |
DE | Pointeur vers un FCB non-ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si erreur c'est produite = 00h si c'est un succès |
L | 0FFh si erreur c'est produite = 00h si c'est un succès |
Description
Le FCB non ouvert a le lecteur et le nom de fichier normaux, ainsi qu'un deuxième nom de fichier commençant par (DE+17). Chaque fichier du répertoire actuel de l'unité de disque spécifié correspondant au premier nom de fichier est remplacé par le deuxième nom de fichier avec "?" caractères dans le deuxième nom de fichier en laissant le caractère approprié inchangé. Des vérifications sont effectuées pour empêcher la création de noms de fichiers en double ou illégaux. Les entrées pour les sous-répertoires, les fichiers cachés et les fichiers système ne seront pas renommés.
18h |
Demande le vecteur de connexion |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 18h (_LOGIN) |
Résultats
Registre | Description |
---|---|
HL | Vecteur de connexion |
Description
Cette fonction renvoie un bit défini dans HL pour chaque unité de disque disponible, le bit-0 de L correspondant au unité de disque "A:". Jusqu'à huit unités de disque ("A:" à "H:") sont actuellement pris en charge par le système, donc le registre H sera généralement à zéro au retour.
19h |
Demande l'unité de disque courante |
---|---|
CPM MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 19h (_CURDRV) |
Résultats
Registre | Description |
---|---|
L | Unité de disque courante (0=A: ...) |
Description
Cette fonction renvoie simplement le numéro de l'unité de disque actuel.
1Ah |
Fixe l'adresse de la zone de transfère du disque |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 1Ah (_SETDTA) |
DE | Adresse de transfert de disque requise |
Résultats
Aucun
Description
Cette fonction enregistre simplement l'adresse passée dans DE comme adresse de transfert de disque. Cette adresse sera utilisée pour tous les appels de lecture et d'écriture FCB ultérieurs, pour les appels "recherche du premier" et "recherche du prochain" pour entreposer l'entrée de répertoire, et pour les appels de lecture et d'écriture absolus. Il n'est pas utilisé par les nouvelles fonctions de lecture et d'écriture MSX-DOS. L'adresse est remise à 80h par un appel de réinitialisation de disque.
1Bh |
Demande les informations d'allocation |
---|---|
MSX1 |
Paramètres
Registre | Description |
---|---|
C | 1Bh (_ALLOC) |
E | Numéro d'unité de disque (0=courant, 1=A: ...) |
Résultats
Registre | Description |
---|---|
A | Secteurs par unité d'allocation |
BC | Taille du secteur (toujours 512) |
DE | Unités d'allocation total dans le disque |
HL | Unités d'allocation libre dans le disque |
IX | Pointeur vers DPB |
IY | Pointeur vers le premier secteur FAT |
Description
Cette fonction renvoie diverses informations sur le disque dans l'unité de disque spécifié. Il n'est pas compatible avec CP/M utilisant ce numéro de fonction pour retourner l'adresse d'un vecteur d'allocation. Notez que contrairement à MSX-DOS 1, seul le premier secteur de la FAT est accessible à partir de l'adresse dans IY, et les données qu'il contient ne resteront valides que jusqu'au prochain appel MSX-DOS.
21h |
Lecture aléatoire (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 21h (_RDRND) |
DE | Pointeur vers un FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 001h si erreur (fin de fichier) = 00h si lecture avec succès |
L | 001h si erreur (fin de fichier) = 00h si lecture avec succès |
Description
Cette fonction lit un enregistrement de 128 octets du fichier à l'adresse de transfert de disque actuelle. La position du fichier est définie par le numéro d'enregistrement aléatoire à trois octets dans le FCB (octets 21h..23h). Contrairement à CP/M, les trois octets du numéro d'enregistrement aléatoire sont utilisés. Un enregistrement partiel à la fin du fichier sera rempli de zéros avant d'être copié dans le DTA de l'utilisateur.
Le numéro d'enregistrement aléatoire n'est pas modifié, de sorte que les appels successifs à cette fonction liront le même enregistrement à moins que le programme transitoire ne modifie le numéro d'enregistrement aléatoire. Un effet secondaire est que l'enregistrement et l'étendue actuels sont configurés pour faire référence au même enregistrement que le numéro d'enregistrement aléatoire. Cela signifie que les lectures (ou écritures) séquentielles peuvent suivre une lecture aléatoire et commenceront à partir du même enregistrement. L'octet de comptage d'enregistrements est également configuré correctement pour l'étendue.
22h |
Écriture aléatoire (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 22h (_WRRND) |
DE | Pointeur vers un FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 001h si erreur (disque plein) = 00h si pas d'erreur |
L | 001h si erreur (disque plein) = 00h si pas d'erreur |
Description
Cette fonction écrit un enregistrement de 128 octets à partir de l'adresse de transfert de disque actuelle vers le fichier, à la position d'enregistrement spécifiée par le numéro d'enregistrement aléatoire à trois octets (octets 21h...23h). Les trois octets du numéro d'enregistrement aléatoire sont utilisés. Si la position d'enregistrement est au-delà de la fin actuelle du fichier, l'espace disque non initialisé sera alloué pour combler le vide.
Le champ du numéro d'enregistrement aléatoire ne sera pas modifié, mais les champs de l'enregistrement actuel et de l'étendue seront configurés pour faire référence au même enregistrement. L'octet de comptage d'enregistrements sera ajusté si nécessaire si le fichier est étendu ou si l'écriture va dans une nouvelle extension.
23h |
Demande la taille du fichier (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 23h (_FSIZE) |
DE | Pointeur vers un FCB non-ouvert |
Résultats
Registre | Description |
---|---|
A | 0FFh si le fichier n'est pas trouvé = 00h si le fichier est trouvé |
L | 0FFh si le fichier n'est pas trouvé = 00h si le fichier est trouvé |
Description
Cette fonction recherche la première correspondance avec le nom de fichier dans le FCB, exactement comme ouvrir le fichier (fonction 0Fh). La taille du fichier localisé est arrondie aux 128 octets les plus proches et le nombre d'enregistrements déterminé. Le champ d'enregistrement aléatoire de trois octets du FCB est défini sur le nombre d'enregistrements, c'est donc le numéro du premier enregistrement n'existant pas. Le quatrième octet du numéro d'enregistrement aléatoire n'est pas modifié.
24h |
Fixe l'enregistrement aléatoire (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 24h (_SETRND) |
DE | Pointeur vers un FCB ouvert |
Résultats
Aucun
Description
Cette fonction définit simplement le champ d'enregistrement aléatoire de trois octets dans le FCB sur l'enregistrement déterminé par l'enregistrement actuel et le numéro d'extension. Le quatrième octet du numéro d'enregistrement aléatoire n'est pas modifié. Aucune vérification n'est effectuée pour savoir si l'enregistrement existe réellement dans le fichier.
26h |
Écrire aléatoire de bloc (FCB) |
---|---|
MSX1 |
Paramètres
Registre | Description |
---|---|
C | 26h (_WRBLK) |
DE | Pointeur vers un FCB ouvert |
HL | Nombre d'enregistrements en écriture |
Résultats
Registre | Description |
---|---|
A | 01h si une erreur se produit = 00h s'il n'y a pas d'erreur |
Description
Les données sont écrites à partir de l'adresse de transfert de disque actuelle vers la position dans le fichier définie par le numéro d'enregistrement aléatoire. La taille d'enregistrement est déterminée par le champ de taille d'enregistrement dans le FCB (octets 0Eh et 0Fh) devant être défini par l'utilisateur après l'ouverture du fichier et avant d'appeler cette fonction. Si la taille de l'enregistrement est inférieure à 64 octets, les quatre octets du numéro d'enregistrement aléatoire sont utilisés, sinon seuls les trois premiers sont utilisés.
Le nombre d'enregistrements à écrire est spécifié par HL et, avec la taille de l'enregistrement, cela détermine la quantité de données à écrire. Une erreur sera retournée si la taille dépasse 64 Ko, limitant ainsi la taille maximale d'un transfert.
Après avoir écrit les données, le champ d'enregistrement aléatoire est ajusté au numéro d'enregistrement suivant dans le fichier (c'est-à-dire que HL y est ajouté). Les champs d'enregistrement et d'étendue actuels ne sont ni utilisés ni modifiés. Le champ de taille de fichier est mis à jour si le fichier a été étendu.
La taille d'enregistrement peut être n'importe quelle valeur comprise entre 1 et 0FFFFh. Les petites tailles d'enregistrement ne sont pas moins efficaces que les grandes tailles d'enregistrement, donc si vous le souhaitez, la taille d'enregistrement peut être définie sur un et le nombre d'enregistrements devient alors un nombre d'octets. Il est souhaitable d'écrire autant que possible avec un seul appel de fonction car un gros transfert sera plus rapide que plusieurs petits.
Si le nombre d'enregistrements à écrire (HL) est zéro, aucune donnée ne sera écrite, mais la taille du fichier sera modifiée à la valeur spécifiée par le champ d'enregistrement aléatoire. Cela peut être plus long ou plus court que la taille actuelle du fichier et l'espace disque sera alloué ou libéré selon les besoins. L'espace disque supplémentaire alloué de cette manière ne sera initialisé à aucune valeur particulière.
27h |
Lecture aléatoire de bloc (FCB) |
---|---|
MSX1 |
Paramètres
Registre | Description |
---|---|
C | 27h (_RDBLK) |
DE | Pointeur vers un FCB ouvert |
HL | Nombre d'enregistrements à lire |
Résultats
Registre | Description |
---|---|
A | 01h si une erreur se produit (potentiellement à cause que la fin du fichier est atteinte) = 00h s'il n'y a pas d'erreur |
HL | Nombre d'enregistrements actuellement lue |
Description
Cette fonction est le complément de la fonction d'écriture de bloc décrite ci-dessus et la plupart des mêmes remarques s'appliquent quant à son utilisation. Encore une fois, si de gros blocs sont lus, ce sera beaucoup plus rapide que l'opération CP/M normale.
Par exemple, si l'on souhaite lire 20 Ko à partir d'un fichier, il est préférable de lire les 20 Ko avec un seul appel de fonction plutôt que 20 appels de fonction séparés de 1 Ko chacun. Cependant, cela ne fait aucune différence que la lecture de 20 Ko soit effectuée avec une taille d'enregistrement de 1 et un nombre d'enregistrements de 20 Ko, avec une taille d'enregistrement de 20 Ko et un nombre d'enregistrements de 1, ou toute combinaison intermédiaire.
Le nombre d'enregistrements réellement lus est renvoyé dans HL. Cela peut être inférieur au nombre d'enregistrements demandés si la fin du fichier a été rencontrée. Dans ce cas, tout enregistrement partiel sera rempli de zéros avant d'être copié dans le DTA de l'utilisateur. Le champ de l'enregistrement aléatoire est ajusté au premier enregistrement non lu, c'est-à-dire que la valeur renvoyée dans HL lui est ajoutée.
28h |
Écriture aléatoire avec remplissage à zéro (FCB) |
---|---|
CPM MSX1 |
Paramètres
Registre | Description |
---|---|
C | 28h (_WRZER) |
DE | Pointeur vers un FCB ouvert |
Résultats
Registre | Description |
---|---|
A | 01h si une erreur se produit = 00h s'il n'y a pas d'erreur |
H | 01h si une erreur se produit = 00h s'il n'y a pas d'erreur |
Description
Cette fonction est identique à l'écriture aléatoire (fonction 22h) sauf que si le fichier doit être étendu, tous les unités d'allocation de disques supplémentaires alloués seront remplis de zéros avant d'écrire les données.
2Ah |
Demande la date |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Ah (_GDATE) |
Résultats
Registre | Description |
---|---|
HL | Année 1980..2079 |
D | Mois (1=Janvier...12=Décembre) |
E | Date (1..31) |
A | Jour de la semaine (0=Dimanche...6=Samedi) |
Description
Cette fonction renvoie simplement la valeur actuelle du calendrier interne dans le format indiqué.
2Bh |
Fixe la date |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Bh (_SDATE) |
HL | Année 1980..2079 |
D | Mois (1=Janvier...12=Décembre) |
E | Date (1..31) |
Résultats
Registre | Description |
---|---|
A | 00h si la date est valide FFh si la date est invalide |
Description
La validité de la date fournie est vérifiée et si elle est valide, elle est stockée comme nouvelle date. Les contrôles de validité comprennent une vérification complète du nombre de jours de chaque mois et des années bissextiles. Si la date n'est pas valide, la date actuelle ne sera pas modifiée. La date est entreposée dans la puce de l'horloge en temps réel afin qu'elle soit mémorisée lorsque la machine est éteinte.
2Ch |
Demande l'heure |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Ch (_GTIME) |
Résultats
Registre | Description |
---|---|
H | Heures (0...23) |
L | Minutes (0...59) |
D | Secondes (0..59) |
E | Centièmes de secondes (toujours zéro) |
Description
Cette fonction renvoie la valeur actuelle de l'horloge système dans le format indiqué.
2Dh |
Fixe l'heure |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Dh (_STIME) |
H | Heures (0...23) |
L | Minutes (0...59) |
D | Secondes (0..59) |
E | Centièmes de secondes (toujours zéro) |
Résultats
Registre | Description |
---|---|
A | 00h si l'heure est valide FFh si l'heure est invalide |
Description
Cette fonction règle l'horloge système interne sur la valeur horaire spécifiée. Si l'heure n'est pas valide, le registre A sera renvoyé sous la forme 0FFh pour indiquer une erreur et l'heure actuelle ne sera pas modifiée. L'heure est entreposée dans la puce de l'horloge en temps réel et elle sera donc mémorisée et maintenue correcte lorsque la machine sera éteinte.
2Eh |
Fixe/réinitialise le drapeau de vérification |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Eh (_VERIFY) |
E | = 0 si la vérification est désactivé != si la vérification est activé |
Résultats
Aucun
Description
La fonction active ou désactive simplement la vérification automatique de toutes les écritures. Il est désactivé par défaut au démarrage de MSX-DOS. L'activation de la vérification améliore la fiabilité du système mais ralentit également les opérations d'écriture. Notez que cette fonction dépend du pilote de disque et que la vérification ne sera pas effectuée si le pilote ne la prend pas en charge.
2Fh |
Lecture absolue du secteur |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 2Fh (_RDABS) |
DE | Numéro de secteur |
L | Numéro d'unité de disque (0 = A: ...) |
H | Nombre de secteurs à lire |
Résultats
Registre | Description |
---|---|
A | Code d'erreur (0 => pas d'erreur) |
Description
Cette fonction lit les secteurs directement à partir du disque sans les interpréter comme des fichiers. Le disque doit être un disque DOS valide pour que le numéro de secteur soit traduit en une position physique sur le disque. Les secteurs seront lus à l'adresse de transfert de disque actuelle. Toute erreur de disque sera signalée par le système de la manière habituelle.
30h |
Écriture absolue du secteur |
---|---|
MSX1 * |
Paramètres
Registre | Description |
---|---|
C | 30h (_WRABS) |
DE | Numéro de secteur |
L | Numéro d'unité de disque (0 = A: ...) |
H | Nombre de secteurs à écriture |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction écrit des secteurs directement sur le disque sans les interpréter comme des fichiers. Le disque doit être un disque DOS valide pour que le numéro de secteur soit traduit en une position physique sur le disque. Les secteurs seront écrits à partir de l'adresse de transfert actuelle du disque. Toutes les erreurs de disque sont signalées par le système de la manière habituelle.
31h |
Demande les paramètres de disque |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 31h (_DPARM) |
DE | Pointeur vers un tampon de 32 octets |
L | Numéro d'unité de disque (0 = A: ...) |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
DE | Préservé |
Description
Cette fonction renvoie une série de paramètres relatifs au format du disque dans l'unité de disque spécifié, au tampon alloué dans le programme de l'utilisateur. C'est utile pour les programmes qui vont faire des unités de disque et des écritures de secteurs absolus, afin qu'ils puissent interpréter les numéros de secteurs absolus. Les paramètres renvoyés contiennent des informations redondantes afin de fournir des paramètres indispensables aux programmes transitoires. Le format du bloc de paramètres renvoyé est :
Champ | Description |
---|---|
DE+0 | Numéro d'unité de disque physique (1=A: ...) |
DE+1,2 | Taille de secteur (toujours 512) |
DE+3 | Secteurs pour unité d'allocation (puissance non-zéro de 2) |
DE+4,5 | Nombre de secteurs réservés (généralement 1) |
DE+6 | Nombre de copies de FAT (généralement 2) |
DE+7,8 | Nombre d'entrées de répertoire dans la racine |
DE+9,10 | Nombre total de secteurs logique |
DE+11 | Descripteur d'octet du média |
DE+12 | Nombre de secteurs par FAT |
DE+13..14 | Premier numéro de secteur du répertoire racine |
DE+15..16 | Premier numéro de secteur de données |
DE+17..18 | Nombre maximal d'unité d'allocation |
DE+19 | Drapeau de disque impropre |
DE+20..23 | Identificateur de volume (-1 => pas d'identificateur de volume) |
DE+24..31 | Réservé (actuellement toujours 0) |
Le drapeau de disque sale indique si le disque contient un fichier pouvant être récupéré par la commande UNDEL. Il est réinitialisé lorsque l'allocation du fichier est effectuée.
40h |
Recherche la première entrée |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 40h (_DPARM) |
DE | Unité de disque/chemin/chaîne de caractères de fichier ASCIIZ ou pointeur de bloc d'information de fichier |
HL | Chaîne de caractères de nom de fichier ASCIIZ (seulement si DE = pointeur d'information de fichier |
B | Recherche d'attributs |
IX | Pointeur vers le nouveau bloc d'information de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
(IX) | Rempli avec l'entrée correspondante |
Description
La partie "Unité de disque/chemin" de la chaîne de caractères, ou le bloc d'informations sur le fichier, spécifie un répertoire dans lequel la recherche doit être effectuée. Une erreur ".IATTR" sera renvoyée si un bloc d'informations sur le fichier qui spécifie un fichier est passé. La partie "fichier" de la chaîne de caractères, ou la chaîne de caractères ASCIIZ du nom de fichier dans HL, détermine les noms de fichiers qui seront mis en correspondance. Si aucune correspondance n'est trouvée, une erreur ".NOFIL" est renvoyée, sinon le bloc d'informations sur le fichier pointé par IX est rempli avec les détails de l'entrée correspondante.
Le nom de fichier peut contenir des caractères de nom de fichier ambigus ("?" ou "*") auquel cas la première entrée correspondante sera renvoyée. Si le nom de fichier est nul (soit la chaîne ASCIIZ pointée par DE est nulle ou se termine par un "\" ou la chaîne de caractères de nom de fichier pointée par HL est nulle), alors cette fonction se comportera exactement comme si le nom de fichier était "*.* " donc n'importe quel nom correspondra.
L'octet d'attributs dans le registre B spécifie quel type d'entrée sera mis en correspondance. S'il est égal à zéro, seuls les fichiers non cachés et non système seront trouvés. Si le répertoire, les bits cachés ou système du registre B sont définis, les entrées avec ces attributs seront mises en correspondance ainsi que les fichiers ordinaires. Les bits de lecture seule et d'archive du registre B sont ignorés.
Si le bit de nom de volume du registre B est défini, alors la recherche est exclusive, seule l'entrée d'étiquette de volume sera trouvée. Dans ce cas également, le bloc d'informations sur le fichier et le nom du fichier ou la chaîne lecteur/chemin/fichier sont ignorés, à l'exception de la spécification de l'unité de disque. Cela signifie que le nom du volume sera toujours trouvé dans le répertoire racine s'il existe, qu'il corresponde ou non au nom de fichier donné.
Si DE pointe vers un bloc d'informations de fichier, alors si vous le souhaitez, IX peut pointer vers le même bloc d'informations de fichier. Dans ce cas, lorsqu'une correspondance est trouvée, le nouveau bloc d'informations sur le fichier écrasera l'ancien.
41h |
Recherche la prochaine entrée |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 41h (_FNEXT) |
IX | Pointeur vers le bloc d'informations sur le fichier de la précédente fonction de recherche en premier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
(IX) | Rempli avec la prochaine entrée correspondante |
Description
Cette fonction ne doit être utilisée qu'après un appel de la fonction "trouver la première entrée". Il recherche dans le répertoire la prochaine correspondance avec le nom de fichier (vraisemblablement ambigu) ayant été donné à l'appel de fonction "trouver la première entrée". S'il n'y a plus d'entrées correspondantes, une erreur ".NOFIL" est renvoyée, sinon le bloc d'informations sur le fichier est rempli avec les informations sur la nouvelle entrée correspondante.
42h |
Recherche une nouvelle entrée |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 42h (_FNEW) |
DE | Chaîne de caractères ASCIIZ de l'unité de disque/chemin/fichier |
HL | Chaîne de caractères ASCIIZ de nom de fichier (seulement si DE = pointeur vers information de fichier) |
B | b0..b6 = Attributs requis b7 = Crée un nouveau drapeau |
IX | Pointeur vers un nouveau bloc d'informations de fichier contenant un gabarit de nom de fichier. |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
(IX) | Rempli avec une nouvelle entrée |
Description
Cette fonction est très similaire à la fonction "trouver la première entrée" décrite ci-dessus. Les paramètres dans HL et DE sont utilisés exactement de la même manière pour spécifier une entrée de répertoire. Cependant, au lieu de rechercher dans le répertoire sélectionné une entrée correspondant au nom spécifié, une nouvelle entrée sera créée avec ce nom. Le pointeur de bloc d'informations sur le fichier vers par IX sera rempli avec des informations sur la nouvelle entrée comme si elle avait été trouvée avec un appel "trouver la première entrée".
S'il y a des caractères ambigus ("?" ou "*") dans le nom de fichier, ils seront remplacés par le caractère approprié d'un "nom de fichier gabarit" à la position du nom de fichier du nouveau bloc d'informations de fichier pointé vers IX. Si le résultat est toujours ambigu ou illégal, une erreur ".IFNM" est renvoyée. Ceci est utile pour les opérations de copie effectuant un changement de nom automatique.
Comme "trouver la première entrée", si le nom de fichier est nul, il sera traité exactement comme s'il s'agissait de "*.*". Pour cette fonction, cela signifie que le nom du fichier gabarit sera utilisé comme nouveau nom de fichier à créer.
Une erreur ".DRFUL" sera renvoyée s'il n'y a pas de place dans le répertoire racine, et un ".DKFUL" si un sous-répertoire doit être étendu et que le disque est déjà plein.
L'octet d'attribut passé dans le registre B est l'attribut auquel sera donnée la nouvelle entrée. Si le bit de nom de volume est défini, un nom de volume sera créé dans le répertoire racine. Si le bit de répertoire est défini, l'entrée créée sera pour un sous-répertoire, sinon ce sera pour un fichier. Les bits système, cachés et en lecture seulement peuvent être définis pour un fichier, et le bit caché pour un sous-répertoire. Un fichier sera toujours créé avec le bit d'attribut d'archive activé.
Un fichier sera créé avec une longueur nulle avec la date et l'heure actuelles. Un sous-répertoire aura un seul unité d'allocation lui étant alloué et le "." et les entrées ".." seront initialisées de manière appropriée.
S'il existe déjà une entrée avec le nom spécifié dans le répertoire, l'action dépend du drapeau "créer nouveau" (bit 7 du registre B) et également du type de l'entrée. Si le drapeau "créer un nouveau" est défini, une erreur ".FILEX" sera toujours renvoyée. La définition de ce drapeau garantit donc qu'un fichier existant ne sera pas supprimé.
Si une entrée existe déjà et que le drapeau "créer un nouveau" n'est pas défini, le type de l'entrée existante est examiné pour voir s'il peut être supprimé pour faire de la place pour le nouveau fichier. Une erreur sera renvoyée si l'entrée est un fichier en lecture seulement (erreur .FILRO), un fichier système (erreur ".SYSX") ou un sous-répertoire (erreur ".DIRX") ou s'il existe un descripteur de fichier déjà ouvert pour ce fichier (erreur ".FOPEN"). Si nous essayons de créer un sous-répertoire, même un fichier ordinaire ne sera pas supprimé (erreur ".FILEX").
Pour tous ces codes d'erreur ("".FILEX", ".FILRO", ".SYSX", ".DIRX", ".FOPEN"), le bloc d'informations de fichier sera rempli avec les détails de l'entrée déjà existante et ce Le bloc d'informations sur le fichier peut être utilisé exactement comme s'il avait été renvoyé par une fonction "trouver en premier".
43h |
Ouvre un descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 43h (_OPEN) |
DE | Chaîne de caractères ASCIIZ de l'unité de disque/chemin/fichier |
A | Mode d'ouverture b0 fixé => pas d'écriture b1 fixé => pas de lecture b2 fixé => hériter b3..b7 - Doit être effacé |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
B | Nouveau descripteur de fichier |
Description
La chaîne de caractères "unité de disque/chemin/fichier" ou le bloc d'informations sur le fichier doit normalement faire référence à un fichier plutôt qu'à un sous-répertoire ou à un nom de volume. S'il s'agit d'un nom de volume, une erreur ".IATTR" sera renvoyée. S'il s'agit d'un sous-répertoire, l'erreur ".DIRX" sera renvoyée.
En supposant qu'un fichier est spécifié, il sera ouvert prêt pour la lecture et/ou l'écriture (selon le mode d'ouverture dans A) et un nouveau descripteur de fichier sera renvoyé dans le registre B. Le plus petit numéro de descripteur de fichier disponible sera utilisé. et un résultat d'erreur s'il n'y a pas de descripteurs de fichiers de rechange (erreur ".NHAND") ou de mémoire insuffisante (erreur ".NORAM").
Si le bit "pas de lecture" du registre A est défini, les lectures à partir du descripteur de fichier seront rejetées et si le bit "pas d'écriture" est défini, les écritures seront rejetées, dans les deux cas avec une erreur ".ACCV". Les écritures seront également rejetées si le fichier est en lecture seule (erreur ".FILRO"). Si le bit "héritable" du registre A est défini, le descripteur de fichier sera hérité par un nouveau processus créé par l'appel de fonction "fork" (voir fonction 60h).
Si un descripteur de fichier de périphérique est ouvert en donnant un nom de fichier qui correspond à l'un des périphériques intégrés (par exemple "CON" ou "NUL"), il sera toujours ouvert initialement en mode ASCII. La fonction IOCTL (fonction 4Bh) peut être utilisée pour passer en mode binaire mais il faut être très prudent lors de la lecture à partir des périphériques en mode binaire car il n'y a pas de condition de fin de fichier.
44h |
Crée un descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 44h (_CREATE) |
DE | Chaîne de caractères ASCIIZ de l'unité de disque/chemin/fichier |
A | Mode d'ouverture b0 fixé => pas d'écriture b1 fixé => pas de lecture b2 fixé => hériter b3..b7 - Doit être effacé |
B | b0..b6 = Attributs requis b7 = Crée un nouveau drapeau |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
B | Nouveau descripteur de fichier |
Description
Un fichier ou sous-répertoire, tel que spécifié par les attributs du registre B, sera créé avec le nom et dans le répertoire spécifié par la chaîne de caractères "unité de disque/chemin/fichier". Une erreur ".IATTR" est renvoyée si le registre B spécifie un nom de volume.
Une erreur sera renvoyée si le fichier ou le sous-répertoire ne peut pas être créé. Les conditions d'erreur dans ce cas sont les mêmes que pour la fonction "trouver une nouvelle entrée" (fonction 42h) avec le code d'erreur principal étant ".FILEX", ".DIRX", ".SYSX", ".FILRO", ". FOPEN", ".DRFUL" et ".DKFUL". Comme la fonction "trouver nouveau", si le drapeau "créer nouveau" (bit-7 du registre B) est défini, un fichier existant ne sera pas supprimé et renverra toujours une erreur ".FILEX".
Si l'octet d'attributs spécifie un sous-répertoire, le bit masqué peut également être défini pour créer un sous-répertoire masqué. Pour un fichier, les bits cachés, système ou en lecture seulement peuvent être définis pour créer un fichier avec les attributs appropriés. Un bit d'attribut invalide sera ignoré. Un fichier sera toujours créé avec le bit d'attribut d'archive activé.
Un fichier sera automatiquement ouvert comme pour la fonction "ouverture de fichier" décrite ci-dessus, et un descripteur de fichier retourné dans le registre B. Le paramètre "mode d'ouverture" s'interprète de la même manière que pour la fonction "ouverture de fichier". Un sous-répertoire ne sera pas ouvert (parce que cela n'a pas de sens) donc le registre B sera renvoyé comme 0FFh ne pouvant jamais être un descripteur de fichier valide.
45h |
Ferme un descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 45h (_CLOSE) |
B | Descripteur de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction libère le descripteur de fichier spécifié pour une réutilisation. Si le fichier associé a été écrit, son entrée de répertoire sera mise à jour avec une nouvelle date et heure, le bit d'attributs d'archive sera défini et toutes les données mises en mémoire tampon seront vidées sur le disque. Toute tentative d'utilisation de ce descripteur de fichier dans une sous-séquence renverra une erreur. S'il existe d'autres copies de ce descripteur de fichier, créées par "descripteur de fichier dupliqué" ou "fork", ces autres copies peuvent toujours être utilisées.
46h |
Assure le traitement du fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 46h (_ENSURE) |
B | Descripteur de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Si le fichier associé au descripteur de fichier a été écrit, son entrée de répertoire sera mise à jour avec une nouvelle date et heure, le bit d'attributs d'archive sera défini et toutes les données mises en mémoire tampon seront vidées sur le disque. Le descripteur de fichier n'est pas libéré et il peut donc toujours être utilisé pour accéder au fichier, et le paramètre actuel du pointeur de fichier ne sera pas modifié.
47h |
Duplique le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 47h (_DUP) |
B | Descripteur de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
B | Nouveau descripteur de fichier |
Description
Cette fonction crée une copie du descripteur de fichier spécifié. Le plus petit numéro de descripteur de fichier disponible sera toujours utilisé et une erreur ".NHAND" sera renvoyée s'il n'y en a pas de disponible. Le nouveau descripteur de fichier fera référence au même fichier que l'original et l'un ou l'autre peut être utilisé. Si le pointeur de fichier d'une descripteur de fichier est déplacé, l'autre sera également déplacé. Si l'une des descripteurs de fichiers est fermée, l'autre peut encore être utilisée.
Notez que, comme les descripteurs de fichiers en double créés par cette fonction ne sont pas ouverts séparément, ils ne comptent pas comme des descripteurs de fichiers distincts aux fins de générer des erreurs ".FOPEN". Ainsi, par exemple, un descripteur de fichier "DUP" peut être renommé (fonction 53h) ou voir ses attributs modifiés (fonction 55h) et l'effet s'appliquera aux deux descripteurs de fichier. Notez en particulier que si une copie d'un descripteur de fichier "DUP" est supprimé (fonction 54h), alors le fichier sera réellement supprimé et l'autre descripteur de fichier, bien qu'encore ouvert, ne pourra plus être utilisé en toute sécurité. S'il est utilisé (autrement que fermé, assuré ou supprimé), une erreur ".FDEL" sera renvoyée.
48h |
Lecture d'un descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 48h (_READ) |
B | Descripteur de fichier |
DE | Adresse de tampon |
HL | Nombre d'octets à lire |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
HL | Nombre d'octets actuellement lues |
Description
Le nombre d'octets spécifié est lu à partir du fichier à la position actuelle du pointeur de fichier et copié à l'adresse de tampon spécifiée dans le registre DE. Le pointeur de fichier est alors mis à jour à l'octet séquentiel suivant. Une erreur ".ACCV" sera renvoyée si le descripteur de fichier a été ouvert avec le bit d'accès "pas de lecture" défini.
Le nombre d'octets lus peut être inférieur au nombre demandé pour diverses raisons, et le nombre lu sera retourné dans le registre HL s'il n'y a pas d'erreur. En général, si moins de lecture que demandé, cela ne doit pas être traité comme une condition d'erreur, mais une autre lecture doit être effectuée pour lire la partie suivante, jusqu'à ce qu'une erreur ".EOF" soit renvoyée. Une erreur ".EOF" ne sera jamais renvoyée pour une lecture partielle, uniquement pour une lecture lisant zéro octet. La lecture des fichiers de cette manière garantit que les poignées de périphérique fonctionneront correctement (voir ci-dessous).
Pour les fichiers disque, le nombre d'octets lus rad ne sera inférieur au nombre demandé que si la fin du fichier est atteinte et dans ce cas, la prochaine opération de lecture lira zéro octet et renverra une erreur ".EOF". Lors de la lecture à partir d'un descripteur de fichier de périphérique (par exemple, les descripteurs de fichier standard 0 à 4), le comportement dépend du périphérique particulier et du fait qu'il est lu en mode ASCII ou binaire (voir la fonction 4Bh ci-dessous). Le périphérique "CON" sera décrit à titre d'exemple car c'est le périphérique le plus couramment utilisé, mais d'autres périphériques se comportent de manière similaire.
Lors de la lecture depuis le périphérique "CON" en mode binaire, les caractères seront lus depuis le clavier, sans aucune interprétation et sans être renvoyés à l'écran ou à l'imprimante. Le nombre exact de caractères demandés sera toujours lu et il n'y a pas de condition de fin de fichier. En raison de l'absence d'indication de fin de fichier, il faut faire très attention lors de la lecture à partir d'appareils en mode binaire.
Un appel de fonction de lecture au périphérique "CON" en mode ASCII (le mode par défaut et celui s'appliquant normalement pour lire le canal d'entrée), ne lira qu'une seule ligne d'entrée. La ligne de saisie sera lue à partir du clavier avec les fonctions d'édition de ligne normales disponibles pour l'utilisateur, et le caractère tapé sera renvoyé à l'écran et à l'imprimante si CTRL+P, CTRL+N, CTRL+S et CTRL+C sera testé et sera traité exactement comme pour la fonction d'état de la console 0Bh.
Lorsque l'utilisateur tape un retour chariot, la ligne sera copiée dans le tampon de lecture, terminée par une séquence CR-LF et la fonction de lecture reviendra avec un nombre d'octets approprié. La lecture suivante démarrera une autre opération d'entrée de ligne en mémoire tampon. Si le nombre d'octets demandés dans la lecture était inférieur à la longueur de l'entrée de ligne, alors autant de caractères que demandé seront renvoyés, et le prochain appel de fonction de lecture reviendra immédiatement avec la partie suivante de la ligne jusqu'à ce qu'elle ait été entièrement lue.
Si l'utilisateur tape une ligne qui commence par un caractère CTRL+Z, cela sera interprété comme indiquant la fin du fichier. La ligne sera ignorée et l'appel de la fonction de lecture lira zéro octet et renverra une erreur ".EOF". Une lecture ultérieure après cela reviendra à la normale et commencera une autre entrée de ligne. La condition de fin de fichier n'est donc pas permanente.
49h |
Écrire vers un descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 49h (_WRITE) |
B | Descripteur de fichier |
DE | Adresse de tampon |
HL | Nombre d'octets à écrire |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
HL | Nombre d'octets actuellement écritures |
Description
Cette fonction est très similaire à la fonction "lire" ci-dessus (fonction 48h). Le nombre d'octets spécifié sera écrit à la position actuelle du pointeur de fichier dans le fichier, et le pointeur de fichier sera ajusté pour pointer juste après le dernier octet écrit. Si le fichier a été ouvert avec le bit d'accès "pas d'écriture" défini, une erreur ".ACCV" sera renvoyée, et si le fichier est en lecture seule, une erreur ".FILRO" sera renvoyée.
Si l'écriture va au-delà de la fin actuelle du fichier, le fichier sera étendu si nécessaire. Si le pointeur de fichier est déjà au-delà de la fin du fichier, l'espace disque sera alloué pour combler le vide et ne sera pas initialisé. Si l'espace disque est insuffisant, une erreur ".DKFUL" sera renvoyée et aucune donnée ne sera écrite, même s'il y avait de la place pour certaines données.
Le nombre d'octets écrits peut généralement être ignoré puisqu'il sera égal à zéro si une erreur est renvoyée ou égal au nombre demandé si l'écriture a réussi. S'il est beaucoup plus efficace d'écrire des fichiers dans quelques grands blocs plutôt que dans plusieurs petits, les programmes doivent donc toujours essayer d'écrire dans des blocs aussi grands que possible.
Cette fonction définit un bit "modifié" pour le descripteur de fichier garantissant que lorsque le descripteur de fichier est fermé ou assuré, explicitement ou implicitement, l'entrée de répertoire sera mise à jour avec les nouvelles informations de date, d'heure et d'allocation. De plus, le bit d'archive sera défini pour indiquer que ce fichier a été modifié depuis son dernier archivage.
L'écriture dans les descripteurs de fichiers de périphérique n'est pas aussi compliquée que leur lecture, car il n'y a pas de conditions de fin de fichier ou d'entrée de ligne à craindre. Il existe quelques différences entre le mode ASCII et le mode binaire lors de l'écriture sur le périphérique "CON", en ce sens qu'une vérification de l'état de la console est effectuée en mode ASCII uniquement. De plus, l'écho de l'imprimante, s'il est activé, ne sera effectué qu'en mode ASCII.
4Ah |
Pointeur vers un déplacement de descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Ah (_SEEK) |
B | Descripteur de fichier |
DE:HL | Adresse de tampon |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
DE:HL | Pointeur vers un nouveau fichier |
Description
Le pointeur de fichier associé au descripteur de fichier spécifié sera modifié en fonction du code de méthode et du déplacement, ainsi que de la nouvelle valeur de pointeur renvoyée dans DE:HL. Le code de la méthode spécifie où le déplacement signé est relatif comme suit :
Valeur | Description |
---|---|
A=0 | Relatif au début du fichier |
A=1 | Relatif à la position courante |
A=2 | Relatif à la fin du fichier |
Notez qu'un décalage de zéro avec un code de méthode de 1 renverra simplement la valeur du pointeur, et avec un code de méthode de 2 renverra la taille du fichier. Aucune vérification de fin de fichier n'est effectuée, il est donc tout à fait possible (et parfois utile) de définir le pointeur de fichier au-delà de la fin du fichier. S'il existe des copies de ce descripteur de fichier créées par la fonction "dupliquer le descripteur de fichier" (fonction 47h) ou la fonction "fork" (fonction 60h), leur pointeur de fichier sera également modifié.
Le pointeur de fichier n'a de sens réel que sur les fichiers du disque puisque l'accès aléatoire est possible. Sur les fichiers de périphérique, le pointeur de fichier est mis à jour de manière appropriée lorsqu'une lecture ou une écriture est effectuée, et peut être examiné ou modifié par cette fonction. Cependant, changer n'aura aucun effet et l'examiner est très peu susceptible d'être utile.
4Bh |
Contrôle d'entrée/sortie pour les périphériques |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Bh (_IOCTL) |
B | Descripteur de fichier |
A | Code de sous-fonction :
01h -> Demande l'état du descripteur de fichier 02h -> Fixe le mode l'ASCII/binaire 03h -> Test d'entrée prêt 04h -> Test de sortie prêt |
DE | Autres paramètres |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
DE | Autres résultats |
Description
La fonction permet d'examiner et de modifier divers aspects des descripteurs de fichiers. En particulier, il peut être utilisé pour déterminer si un descripteur de fichier fait référence à un fichier disque ou à un périphérique. Ceci est utile pour les programmes voulant se comporter différemment pour les fichiers de disque et les entrées/sorties de périphérique.
Cette fonction reçoit le descripteur de fichier dans le registre B et un code de sous-fonction dans le registre A spécifiant l'une des différentes opérations. Tous les autres paramètres requis par la sous-fonction particulière sont passés dans le registre DE et les résultats sont renvoyés dans le registre DE. Si le code de la sous-fonction n'est pas valide, une erreur ".ISBN" sera renvoyée.
Si A = 0, l'opération est "obtenir l'état du descripteur de fichier". Cela renvoie un mot de drapeaux donnant diverses informations sur le descripteur de fichier. Le format de ce mot est différent pour les descripteurs de fichier de périphérique et les descripteurs de fichier de disque, et le bit-7 spécifie de quoi il s'agit. Le format du mot est le suivant :
Pour les périphériques :
DE: b0 fixe -> périphérique d'entrée de console b1 fixe -> périphérique de sortie de console b2..b4 réservé b5 fixé -> mode ASCII effacé -> mode binaire b6 fixé -> fin du fichier b7 toujours fixé (-> périphérique) b8..b15 réservé |
Pour les fichiers disques :
DE: b0..b5 nombre d'unité de disque (0=A: ...) b6 fixé -> fin de fichier b7 toujours effacé (-> fichier disque) b8..b15 réservé |
Notez que le drapeau de fin de fichier est le même pour les périphériques que pour les fichiers de disque. Pour les périphériques, il sera défini si la précédente tentative de lecture à partir du périphérique a produit une erreur ".EOF" et sera effacé par la prochaine lecture. Pour les fichiers de disque, cela se calcule en comparant le pointeur de fichier avec la taille du fichier.
Si A = 1, alors l'opération est un "mode ASCII/binaire défini". Cette opération n'est autorisée que pour les descripteurs de fichiers de périphérique. Un drapeau ASCII/binaire doit être passé dans le bit-5 du registre E (exactement là où il est renvoyé par "demande l'état du descripteur de fichier"). Ceci est défini pour le mode ASCII et effacé pour le mode binaire. Tous les autres bits ou registre DE sont ignorés.
Si A=2 ou 3, alors l'opération est "test entrée prête" ou "test sortie prête" respectivement. Dans les deux cas, un drapeau est retourné dans le registre E qui est FFh si le descripteur de fichier est prêt pour un caractère et 00h sinon. La signification exacte de "prêt pour un caractère" dépend du périphérique. Les descripteurs de fichier de disque sont toujours prêts pour la sortie et sont toujours prêts pour l'entrée à moins que le pointeur de fichier ne se trouve à la fin du fichier. Le périphérique "CON" vérifie l'état du clavier pour déterminer s'il est prêt à être saisi ou non.
Si A=4 l'opération est "obtenir la taille de l'écran". Cela renvoie la taille d'écran logique pour le descripteur de fichier avec le nombre de lignes dans le registre D et le nombre de colonnes dans le registre E. Pour les périphériques sans taille d'écran (tels que les fichiers de disque), D et E seront à zéro. Zéro pour l'un ou l'autre des résultats doit donc être interprété comme "illimité". Par exemple, cette fonction est utilisée par la commande "DIR /W" pour déterminer le nombre de fichiers à afficher par ligne, et une valeur de zéro pour le registre E est par défaut 80.
4Ch |
Test de descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Ch (_HTEST) |
B | Descripteur de fichier |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
B | 00h -> pas le même fichier FFh -> même fichier |
Description
Cette fonction plutôt spécialisée reçoit un descripteur de fichier et soit une chaîne de caractères d'unité de disque/chemin/fichier, soit un bloc d'informations sur le fichier qui identifie un fichier. Il détermine si les deux fichiers sont en fait le même fichier et renvoie un drapeau indiquant le résultat. Notez que si le descripteur de fichier est destiné à un périphérique plutôt qu'à un fichier disque, il renverra toujours "B=00h" pour indiquer "pas le même fichier".
Cette fonction permet à la commande "COPY" de détecter certaines conditions d'erreur telles que la copie de fichiers sur eux-mêmes et de donner à l'utilisateur des messages d'erreur informatifs. Cela peut également être utile pour d'autres programmes qui doivent effectuer des tests similaires.
4Dh |
Supprime le fichier ou le sous-répertoire |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Dh (_DELETE) |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ ou pointeur vers un bloc d'informations de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction supprime l'objet (fichier ou sous-répertoire) spécifié par la chaîne de caractères d'unité de disque/chemin/fichier ou le bloc d'informations sur le fichier. Les caractères de nom de fichier globaux ne sont pas autorisés, donc un seul fichier ou sous-répertoire peut être supprimé avec cette fonction. Un sous-répertoire ne peut être supprimé que s'il est vide ou si une erreur (".DIRNE") se produit sinon le "." et les entrées ".." dans un sous-répertoire ne peuvent pas être supprimées (erreur ".DOT") et le répertoire racine non plus. Un fichier ne peut pas être supprimé si un descripteur de fichier est ouvert (erreur .FOPEN) ou s'il est en lecture seulement (erreur .FILRO).
S'il s'agit d'un fichier, l'espace disque lui étant alloué sera libéré. Si le disque est un disque MSX-DOS 2, suffisamment d'informations sont conservées sur le disque pour permettre au programme utilitaire "UNDEL" de restaurer le fichier. Ces informations ne sont conservées que jusqu'à ce que la prochaine allocation d'espace disque (généralement une écriture dans un fichier) soit effectuée sur ce disque. Après avoir effectué cet appel de fonction, si un bloc d'informations sur le fichier a été transmis, il ne doit plus être utilisé (autrement que de le transmettre à une fonction "trouver l'entrée suivante") puisque le fichier auquel il se réfère n'existe plus.
Si un nom de périphérique tel que "CON" est spécifié, aucune erreur ne sera renvoyée mais le périphérique ne sera pas réellement supprimé.
4Eh |
Renomme le fichier ou le sous-répertoire |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Eh (_RENAME) |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ ou pointeur vers un bloc d'informations de fichier |
HL | Chaîne de caractères ASCII du nouveau nom de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction renomme l'objet (fichier ou sous-répertoire) spécifié par la chaîne de caractères d'unité de disque/chemin/fichier ou le bloc d'informations sur le fichier, avec le nouveau nom dans la chaîne de caractères pointée par HL. La nouvelle chaîne de caractères de nom de fichier ne doit pas contenir de lettre de l'unité de disque ou de chemin de répertoire (erreur ".IFNM" si c'est le cas). Si un nom de périphérique tel que "CON" est spécifié, aucune erreur ne sera renvoyée mais le périphérique ne sera pas réellement renommé.
Les caractères de nom de fichier global ne sont pas autorisés dans la chaîne de caractères d'unité de disque/chemin/fichier, donc un seul objet peut être renommé par cette fonction. Cependant, les caractères de nom de fichier globaux sont autorisés dans le nouveau nom de fichier transmis dans HL et là où ils se produisent, le caractère de nom de fichier existant ne sera pas modifié. Des vérifications sont effectuées pour éviter de créer un nom de fichier illégal, par exemple un fichier appelé "XYZ" ne peut pas être renommé avec une nouvelle chaîne de caractères de nom de fichier "????A" car le nouveau nom de fichier serait "XYZA", ce qui est illégal. Dans ce cas, une erreur ".IFNM" sera renvoyée.
S'il existe déjà une entrée avec le nouveau nom de fichier, une erreur (".DUPF") est renvoyée pour éviter de créer des noms de fichiers en double. Les "." et les entrées ".." dans un sous-répertoire ne peuvent pas être renommées (erreur ".IDOT") et le répertoire racine non plus (il n'a pas de nom). Un fichier ne peut pas être renommé si un descripteur de fichier lui est ouvert (erreur ".FOPEN"), bien qu'un fichier en lecture seule puisse être renommé.
Notez que si DE pointait vers un bloc d'informations de fichier, celui-ci n'est pas mis à jour avec le nouveau nom du fichier. Par conséquent, des précautions doivent être prises lors de l'utilisation du bloc d'informations de fichier après avoir effectué cet appel de fonction.
4Fh |
Déplace le fichier ou le sous-répertoire |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 4Fh (_MOVE) |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ ou pointeur vers un bloc d'informations de fichier |
HL | Chaîne de caractères ASCII du nouveau nom de chemin |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction déplace l'objet (fichier ou sous-répertoire) spécifié par la chaîne de caractères de l'unité de disque/chemin/fichier ou le bloc d'informations de fichier, vers le répertoire spécifié par la nouvelle chaîne de caractères de chemin pointée par HL. Il ne doit pas y avoir de nom d'unité de disque dans la nouvelle chaîne de caractères de chemin. Si un nom de périphérique tel que "CON" est spécifié, aucune erreur ne sera renvoyée mais le périphérique ne sera pas réellement déplacé.
Les caractères de nom de fichier global ne sont autorisés dans aucune des chaînes de caractères, donc un seul objet (fichier ou sous-répertoire) peut être déplacé par cette fonction, bien que si un sous-répertoire est déplacé, tous ses descendants seront déplacés par cette fonction, bien que si un sous-répertoire est déplacé, tous ses descendants seront déplacés avec lui. S'il existe déjà une entrée du nom requis dans le répertoire cible, une erreur ".DUPF" est renvoyée pour empêcher la création de noms de fichiers en double. Les "." et les entrées ".." dans un sous-répertoire ne peuvent pas être déplacées (erreur ".DOT") et un répertoire ne peut pas non plus être déplacé dans l'un de ses propres descendants (erreur ".DIRE") car cela créerait une boucle isolée dans le système de fichiers. Un fichier ne peut pas être déplacé si un descripteur de fichier lui est ouvert (erreur ".FOPEN").
Notez que si un bloc d'informations sur le fichier est transmis à cette fonction, les informations internes du bloc d'informations sur le fichier ne sont pas mises à jour pour refléter le nouvel emplacement du fichier. Ceci est nécessaire car sinon le bloc d'informations sur le fichier ne pourrait pas être utilisé pour un appel de fonction "rechercher suivant" ultérieur. Cependant, cela signifie que le bloc d'informations sur le fichier ne fait plus référence au fichier déplacé et ne doit donc pas être utilisé pour des opérations telles que "renommer" ou "ouvrir".
50h |
Demande/fixe les attributs de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 50h (_ATTR) |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ ou pointeur vers un bloc d'informations de fichier |
A | 0 => demande les attributs 1 => fixe les attributs |
L | Octet des nouveaux attributs (seulement si A=1) |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
L | Octets des attributs actuels |
Description
Cette fonction est normalement utilisée pour modifier les attributs d'un fichier ou d'un sous-répertoire. Il peut également être utilisé pour connaître les attributs courants mais cela se fait plus généralement avec la fonction "trouver la première entrée" (fonction 40h). Si A=0 alors l'octet d'attributs courant pour le fichier ou le sous-répertoire sera simplement retourné dans le registre L.
Si A = 1 alors l'octet d'attributs sera mis à la nouvelle valeur spécifiée dans le registre L, et cette nouvelle valeur sera également renvoyée dans le registre L. Seuls les bits système, cachés, en lecture seulement et d'archive peuvent être modifiés pour un fichier, et seulement le bit caché pour un sous-répertoire. Une erreur ".IATTR" sera renvoyée si une tentative est faite pour modifier tout autre bit d'attribut. Si un bloc d'informations sur le fichier est transmis, l'octet d'attributs qu'il contient ne sera pas mis à jour avec la nouvelle chaîne de caractères.
Les caractères de nom de fichier globaux ne sont pas autorisés, donc un seul objet (fichier ou sous-répertoire) peut avoir ses attributs définis par cette fonction. Les attributs du répertoire racine ne peuvent pas être modifiés car il n'en a pas. Les attributs d'un fichier ne peuvent pas être modifiés si un descripteur de fichier est ouvert (erreur ".FOPEN"). Les attributs du "." et les entrées de répertoire ".." peuvent toutefois être modifiées. Si un nom d'appareil tel que "CON" est spécifié, aucune erreur ne sera renvoyée mais les attributs du périphériques ne seront pas réellement modifiés (puisqu'il n'en a pas).
51h |
Demande/fixe la date et l'heure du fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 51h (_FTIME) |
DE | Chaîne de caractères d'unité de disque/chemin/fichier ASCIIZ ou pointeur vers un bloc d'informations de fichier |
A | 0 => demande la date et l'heure 1 => fixe la date et l'heure |
IX | Nouvelle valeur de l'heure (seulement si A=1) |
HL | Nouvelle valeur de la date (seulement si A=1) |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
DE | Valeur actuel de l'heure du fichier |
HL | VAleur actuel de la date du fichier |
Description
Si A=1 alors cette fonction fixe la date et l'heure de la dernière modification du fichier ou du sous-répertoire spécifié par la chaîne de caractères d'unité de disque/chemin/fichier ou le bloc d'informations sur le fichier. Les caractères de nom de fichier globaux ne sont autorisés dans aucune partie de la chaîne de caractères, donc un seul fichier peut voir sa date et son heure modifiées par cette fonction. Si un nom de périphérique tel que "CON" est spécifié, aucune erreur ne sera renvoyée mais la date et l'heure du périphérique ne seront pas réellement modifiées.
Le format de la date et de l'heure est exactement celui contenu dans les blocs d'entrée de répertoire et d'informations sur le fichier. Aucune vérification n'est effectuée pour les dates ou heures sensibles, les valeurs sont simplement entreposées. Notez que si un bloc d'informations sur le fichier est transmis, la date et l'heure y étant entreposées ne seront pas mises à jour par cette fonction.
Si A=0, les valeurs actuelles sont simplement renvoyées. Notez que bien que la valeur de temps soit transmise dans IX, elle est renvoyée dans DE. La date et l'heure d'un fichier ne peuvent pas être modifiées (bien qu'elles puissent être lues) si un descripteur de fichier est ouvert pour le fichier (erreur ".FOPEN").
52h |
Supprime avec le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 52h (_HDELETE) |
B | Descripteur de fichier |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction supprime le descripteur de fichier associé au fichier spécifié et ferme le descripteur de fichier. Un descripteur de fichier ne peut pas être supprimé s'il existe d'autres descripteurs de fichier ouverts séparément pour le même fichier (erreur ".FOPEN"). S'il existe des doublons du descripteur de fichier (créé par une fonction "descripteur de fichier en double" ou "fork"), ces doublons seront marqués comme non valides et toute tentative de les utiliser produira une erreur ".HDEAD".
Les conditions d'erreur de cette fonction sont les mêmes que pour la fonction "supprimer un fichier ou un sous-répertoire" (fonction 4Dh). Le descripteur de fichier sera toujours fermé, même s'il existe une condition d'erreur telle que ".FILR0" ou ".FOPEN".
53h |
Renomme avec le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 53h (_HRENAME) |
B | Descripteur de fichier |
HL | Chaîne de caractères du nouveau nom de fichier ASCIIZ |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction renomme le fichier associé au descripteur de fichier spécifié avec le nouveau nom dans la chaîne pointée par HL. Outre le fait que le fichier est spécifié par un descripteur de fichier plutôt qu'une chaîne ASCIIZ ou un bloc d'informations sur le fichier, cette fonction est identique à la fonction "renommer le fichier ou le sous-répertoire" (fonction 4Eh) et présente les mêmes conditions d'erreur.
Un descripteur de fichier ne peut pas être renommé s'il existe d'autres descripteurs de fichier ouverts séparément pour ce fichier (erreur ".FOPEN"), bien qu'il puisse être renommé s'il existe des copies de ce descripteur de fichier, et dans ce cas les copies seront renommées. Renommer un descripteur de fichier ne modifiera pas le pointeur de fichier, mais il effectuera une opération de "traitement" implicite.
54h |
Déplace avec le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 54h (_HMOVE) |
B | Descripteur de fichier |
HL | Chaîne de caractères du nouveau nom de chemin ASCIIZ |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
Description
Cette fonction déplace le fichier associé au descripteur de fichier spécifié vers le répertoire spécifié par la nouvelle chaîne de caractères de chemin pointée par HL. Outre le fait que le fichier est spécifié par un descripteur de fichier plutôt qu'une chaîne ASCIIZ ou un bloc d'informations sur le fichier, cette fonction est identique à la fonction "déplacer un fichier ou un sous-répertoire" (fonction 4Fh) et présente les mêmes conditions d'erreur.
Un descripteur de fichier ne peut pas être déplacé s'il existe d'autres descripteurs de fichier ouverts séparément pour ce fichier (erreur ".FOPEN"), bien qu'il puisse être déplacé s'il existe des copies de ce descripteur de fichier, et dans ce cas les copies seront également déplacées . Le déplacement d'un descripteur de fichier ne modifiera pas le pointeur de fichier, mais il effectuera une opération de "traitement" implicite.
55h |
Demande/fixe les attributs avec le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 55h (_HATTR) |
B | Descripteur de fichier |
A | 0 => demande les attributs 1 => fixe les attributs |
L | Octet des nouveaux attributs (seulement si A=1) |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
L | Octet des attributs actuelles |
Description
Cette fonction obtient ou définit l'octet d'attributs du fichier associé au descripteur de fichier spécifié. Outre le fait que le fichier est spécifié par un descripteur de fichier plutôt qu'une chaîne de caractères ASCIIZ ou un bloc d'informations sur le fichier, cette fonction est identique à la fonction "obtenir/définir les attributs du fichier" (fonction 50h) et présente les mêmes conditions d'erreur.
Un descripteur de fichier ne peut pas voir ses attributs modifiés (bien qu'ils puissent être lus) s'il existe d'autres descripteurs de fichier ouverts séparément pour ce fichier (erreur ".FOPEN"). Le pointeur de fichier ne sera pas altéré mais une opération implicite "s'assurer" sera effectuée.
56h |
Demande/fixe la date et l'heure avec le descripteur de fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 56h (_HFTIME) |
B | Descripteur de fichier |
A | 0 => demande la date et l'heure 1 => fixe la date et l'heure |
IX | Nouvelle valeur de l'heure (seulement si A=1) |
HL | Nouvelle valeur de la date (seulement si A=1) |
Résultats
Registre | Description |
---|---|
A | Code d'erreur |
DE | Valeur actuel de l'heure du fichier |
HL | Valeur actuel de la date du fichier |
Description
Cette fonction obtient ou définit la date et l'heure du fichier associé au descripteur de fichier spécifié. Outre le fait que le fichier est spécifié par un descripteur de fichier plutôt qu'une chaîne de caractères ASCIIZ ou un bloc d'informations sur le fichier, cette fonction est identique à la fonction "obtenir/définir la date et l'heure du fichier" (fonction 51h), et a la même erreur les conditions.
La date et l'heure d'un descripteur de fichier ne peuvent pas être modifiées (bien qu'elles puissent être lues) s'il existe d'autres descripteurs de fichier ouverts séparément pour ce fichier (erreur ".FOPEN"). Le pointeur de fichier ne sera pas modifié mais une opération de «traitement» implicite sera effectuée.
57h |
Demande l'adresse de transfère de disque |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 57h (_GETDTA) |
Résultats
Registre | Description |
---|---|
DE | Adresse de transfère de disque courant |
Description
Cette fonction renvoie l'adresse de transfert de disque actuelle. Cette adresse n'est utilisée que pour les fonctions FCB traditionnelles de style CP/M et les fonctions de lecture et d'écriture de secteur absolu.
58h |
Demande les ajustements du drapeau de vérification |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 58h (_GETVFY) |
Résultats
Registre | Description |
---|---|
B | 00h => vérification désactivé FFh => vérification activé |
Description
Cette fonction renvoie simplement l'état actuel du drapeau de vérification pouvant être défini avec la fonction MSX-DOS 2Eh.
59h |
Demande le répertoire courant |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 59h (_GETCD) |
B | Numéro d'unité (0=courant, 1=A:,...) |
DE | Pointeur vers un tampon de 64 octets |
Résultats
Registre | Description |
---|---|
A | Erreur |
DE | Rempli avec le chemin actuel |
Description
Cette fonction obtient simplement une chaîne de caractères ASCIIZ représentant le répertoire actuel de l'unité de disque spécifié sur le tampon pointé vers DE. La chaîne de caractères n'inclura pas de nom de l'unité de disque ni de caractère "\" de début ou de fin, de sorte que le répertoire racine est représenté par une chaîne de caractères nulle. L'unité de disque sera accédé pour s'assurer que le répertoire actuel existe réellement sur le disque actuel, et si ce n'est pas le cas, le répertoire actuel sera défini sur la racine et une chaîne de caractères nulle sera renvoyée.
5Ah |
Change le répertoire courant |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 5Ah (_CHDIR) |
DE | Chaîne de caractères ASCIIZ d'unité de disque/chemin/fichier |
Résultats
Registre | Description |
---|---|
A | Erreur |
Description
La chaîne de caractères d'unité de disque/chemin/fichier doit spécifier un répertoire plutôt qu'un fichier. Le répertoire actuel de l'unité de disque sera modifié pour devenir ce répertoire. Si le répertoire spécifié n'existe pas, le paramètre actuel ne sera pas modifié et une erreur ".NODIR" sera renvoyée.
5Bh |
Analyse le nom du chemin |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 5Bh (_PARSE) |
DE | Chaîne de caractères ASCIIZ pour analyser |
Résultats
Registre | Description |
---|---|
A | Erreur |
DE | Pointeur vers le caractère de terminaison |
HL | Pointeur vers le début du dernière élément |
B | Drapeaux d'analyse |
C | Nombre d'unité de disque logique (1=A:...) |
Description
Cette fonction est purement une fonction de manipulation de chaîne de caractères, elle n'accédera pas du tout aux disques et ne modifiera pas du tout la chaîne de l'utilisateur. Il est destiné à aider les programmes transitoires à analyser les lignes de commande.
Le drapeau de nom de volume (bit 4 du registre B ; il est dans la même position de bit que le bit de nom de volume dans un octet d'attributs) détermine si la chaîne de caractères sera analysée comme une chaîne de caractères d'unité de disque/chemin/fichier (si le bit est effacé) ou une chaîne de caractères unité de disque/volume (si le bit est défini).
Le pointeur retourné dans DE pointera vers le premier caractère n'étant pas valide dans une chaîne de caractères de nom de chemin, et peut être le NULL à la fin de la chaîne de caractères.
Le pointeur retourné dans HL pointera sur le premier caractère du dernier élément d'une chaîne de caractères (partie nom de fichier). Par exemple, lorsqu'une chaîne "A:\XYZ\P.Q /F" a été transmise, DE pointera vers le caractère d'espace d'écriture avant "/F" et HL pointera vers "P". Si la chaîne de caractères analysée se termine par un caractère "\" ou est nulle (a en dehors du nom de l'unité de disque), alors il n'y aura pas de "dernier élément", ainsi HL et DE pointeront vers le même caractère. Dans ce cas, des procédures spéciales seront nécessaires pour tous les programmes utilisant cette fonction.
Le numéro de l'unité de disque renvoyé dans le registre C est l'unité de disque logique spécifié dans la chaîne de caractères. Si la chaîne de caractères ne commence pas par une lettre d'unité de disque, le registre C contiendra le numéro de l'unité de disque par défaut, puisque l'unité de disque par défaut a été implicitement spécifié. Le registre C ne sera jamais nul.
Les drapeaux d'analyse renvoyés dans le registre B indiquent diverses choses utiles sur la chaîne de caractères. Pour un nom de volume, les bits 1, 4, 5, 6 et 7 seront toujours clairs. Pour un nom de fichier, les bits 3 à 7 se rapportent au dernier élément de la chaîne de caractères (la composante "nom de fichier"). Les affectations de bits sont les suivantes :
Bit | Description |
---|---|
b0 | Fixé si des caractères analysés autres que le nom de l'unité de disque sont définis |
b1 | Fixé si un chemin de répertoire est spécifié |
b2 | Fixé si le nom de l'unité de disque est spécifié |
b3 | Fixé si le nom du fichier principal est spécifié dans le dernier élément |
b4 | Fixé si l'extension du nom de fichier est spécifiée dans le dernier élément |
b5 | Fixé si le dernier élément est ambigu |
b6 | Fixé si le dernier élément est "." ou alors ".." |
b7 | Fixé si le dernier élément est "." |
5Ch |
Analyse le nom du fichier |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 5Ch (_PFILE) |
DE | Chaîne de caractères ASCIIZ pour analyser |
HL | Pointeur vers le tampon de 11 octets |
Résultats
Registre | Description |
---|---|
A | Erreur |
DE | Pointeur vers le caractère de terminaison |
HL | Préservé, tampon rempli avec |
B | Drapeaux d'analyse |
Description
Cette fonction est purement une fonction de manipulation de chaîne de caractères, elle n'accédera pas du tout aux disques et ne modifiera pas du tout la chaîne de caractères. Il est principalement destiné à aider les programmes transitoires à afficher les noms de fichiers d'une manière formatée. La chaîne de caractères ASCIIZ sera analysée comme un élément de nom de fichier unique et le nom de fichier sera entreposé dans le tampon de 11 octets de l'utilisateur sous forme développée, avec le nom de fichier et l'extension complétés par des espaces.
Les drapeaux d'analyse renvoyés dans le registre B sont identiques à ceux de la fonction "Analyse le nom du chemin" ci-dessus (fonction 5Bh), sauf que les bits 0, 1 et 2 seront toujours clairs. Le tampon de l'utilisateur sera toujours rempli, même s'il n'y a pas de nom de fichier valide dans la chaîne de caractères, auquel cas le tampon sera rempli d'espaces. Les caractères "*" seront étendus au nombre approprié de "?". Si le nom de fichier ou l'extension du nom de fichier est trop long, les caractères en trop seront ignorés.
Le pointeur renvoyé dans le registre DE pointera sur le premier caractère de la chaîne de caractères ne faisant pas partie du nom de fichier, pouvant être le nul à la fin de la chaîne de caractères. Ce caractère ne sera jamais un caractère de nom de fichier valide.
5Dh |
Vérifie le caractère |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 5Dh (_CHKCHR) |
D | Caractère de drapeau |
E | Caractère à vérifier |
Résultats
Registre | Description |
---|---|
A | 0 (ne retourne jamais une e) |
D | Drapeau de caractères mis à jour |
E | Caractère de contrôle (majuscule) |
Description
Cette fonction permet la mise en majuscule des caractères indépendamment de la langue et aide également à gérer les caractères 16 bits et la manipulation des noms de fichiers. Les affectations de bits dans les drapeaux de caractères sont les suivantes :
Bit | Description |
---|---|
b0 | Fixé pour supprimer les majuscules |
b1 | Fixé si le premier octet du caractère 16 bits |
b2 | Fixé si le deuxième octet du caractère 16 bits |
b3 | Fixe => nom du volume (plutôt que le nom du fichier) |
b4 | Fixe => pas un caractère de nom de fichier/volume valide |
b5..b7 | Réservé (toujours effacé) |
Le bit 0 est utilisé pour contrôler la casse supérieure. S'il est effacé, le caractère sera en majuscule selon le réglage de la langue de la machine. Si ce bit est défini, le caractère renvoyé sera toujours le même que le caractère passé.
Les deux drapeaux de caractères 16 bits (bits 1 et 2) peuvent tous deux être effacés lorsque le premier caractère d'une chaîne de caractères est vérifié et les paramètres renvoyés peuvent être renvoyés directement à cette fonction pour chaque caractère suivant. Des précautions doivent être prises avec ces drapeaux lors du déplacement vers l'arrière dans les chaînes de caractères pouvant contenir des caractères 16 bits.
Le bit 4 est activé au retour si le caractère fait partie du jeu de caractères de fin de nom de fichier ou de nom de volume. Le bit 3 est simplement utilisé pour déterminer s'il faut tester les caractères de nom de fichier ou de nom de volume puisque les ensembles sont différents. Les caractères 16 bits (n'importe quel octet) ne sont jamais considérés comme des terminateurs de volume ou de nom de fichier.
5Eh |
Demande la chaîne de caractères de chemin complète |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 5Eh (_WPATH) |
DE | Pointeur vers un tampon de 64 octets |
Résultats
Registre | Description |
---|---|
A | Erreur |
DE | Rempli avec la chaîne de caractères chemin entière |
HL | Pointeur au début du dernier élément |
Description
Cette fonction copie simplement une chaîne de caractères de chemin ASCIIZ d'un tampon interne dans le tampon de l'utilisateur. La chaîne de caractères représente le chemin d'accès complet et le nom de fichier, à partir du répertoire racine, d'un fichier ou d'un sous-répertoire localisé par une fonction précédente "trouver la première entrée" ou "trouver une nouvelle entrée". La chaîne de caractères renvoyée n'inclura pas de l'unité de disque ni de caractère "\" initial. Le registre HL pointera sur le premier caractère du dernier élément de la chaîne de caractères, exactement comme pour la fonction "analyse le chemin" (fonction 5Bh).
Si un appel de fonction "trouver la première entrée" ou "trouver une nouvelle entrée" est effectué avec DE pointant vers une chaîne de caractères ASCIIZ, un appel de fonction "obtenir le chemin complet" suivant renverra une chaîne représentant le sous-répertoire ou fichier correspondant au bloc d'informations de fichier renvoyé par la fonction "trouver". S'il s'agit d'un sous-répertoire, le bloc d'informations sur le fichier peut être retransmis dans le registre DE à un autre appel de fonction "trouver la première entrée", localisant un fichier dans ce sous-répertoire. Dans ce cas, le fichier nouvellement localisé sera ajouté en interne à la chaîne de caractères de chemin complet déjà existante, et ainsi un appel de fonction "obtenir la chaîne de chemin complet" ultérieur renverra une chaîne de caractères chemin complet correcte pour le fichier localisé.
Il faut faire très attention lors de l'utilisation de cette fonction car la chaîne de caractères de chemin interne complète est modifiée par de nombreux appels de fonction et, dans de nombreux cas, peut être invalide. L'appel de la fonction "obtenir le chemin complet" doit être effectué immédiatement après la fonction "trouver la première entrée" ou "trouver une nouvelle entrée" à laquelle il se rapporte.
5Fh |
Vide les tampons sur le disque |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 5Fh (_FLUSH) |
B | Nombre d'unité de disque (0=courant, FFh=tous) |
D | 00h -> Vide seulement = FFh -> Vide et invalide |
Résultats
Registre | Description |
---|---|
A | Erreur |
Description
Cette fonction vide tous les tampons de disque impropres pour l'unité de disque spécifié, ou pour tous les unités de disques si B=FFh. Si le registre d est FFh, tous les tampons de cette unité de disque seront également invalidés.
60h |
Forker un processus enfant |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 60h (_FORK) |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Identificateur de processus du processus parent |
Description
Cette fonction informe le système qu'un processus enfant est sur le point d'être démarré. Il s'agit généralement d'un nouveau programme ou d'une sous-commande en cours d'exécution. Par exemple, COMMAND2.COM effectue un appel de fonction "fork" avant d'exécuter une commande ou un programme transitoire.
Un nouvel ensemble de descripteurs de fichiers est créé, et tous les descripteurs de fichiers actuels qui ont été ouverts avec le bit de mode d'accès "héritable" activé (voir la fonction "ouvrir un descripteur de fichier" - fonction 43h), sont copiés dans le nouvel ensemble de descripteurs de fichiers. Tous les descripteurs de fichiers ayant été ouverts avec le bit «héritable» désactivé ne seront pas copiés et ne seront donc pas disponibles pour le processus enfant. Les descripteurs de fichiers standard (00h..05h) sont héritables et seront donc copiés.
Un nouvel identificateur de processus est alloué au processus enfant et l'identificateur de processus du processus parent est renvoyé afin qu'un appel de fonction filtre de "jointure" puisse revenir au processus parent. Une erreur ".NORAM" peut être produite par cette fonction si la mémoire est insuffisante pour dupliquer les descripteurs de fichiers.
Étant donné que le processus enfant a maintenant une copie des descripteurs de fichiers précédents plutôt que des originaux, si l'un d'eux est fermé, l'original restera ouvert. Ainsi, par exemple, si le processus enfant ferme le descripteur de fichier de sortie standard (descripteur de fichier numéro 1) et le rouvre dans un nouveau fichier, alors lorsqu'une fonction "joindre" est effectuée pour revenir au processus parent, le canal de sortie standard d'origine sera être encore là.
61h |
Rejoindre un processus parent |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 61h (_JOIN) |
B | Identificateur de processus de parent, ou zéro |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Code d'erreur primaire de l'enfant |
C | Code d'erreur secondaire de l'enfant |
Description
Cette fonction revient au processus parent spécifié et renvoie le code d'erreur avec lequel le processus enfant s'est terminé dans le registre B, et un code d'erreur secondaire de l'enfant dans le registre C. Bien que la relation entre les processus parent et enfant soit strictement univoque, cette fonction peut remonter plusieurs niveaux en lui donnant un identifiant de processus approprié. Une erreur ".IPROC" sera renvoyée si l'identificateur de processus n'est pas valide.
L'ensemble de descripteurs de fichiers du processus enfant est automatiquement fermé et l'ensemble de descripteurs de fichiers du processus parent redevient actif. De plus, tous les segments de RAM utilisateur que le processus enfant avait alloués seront libérés.
Si l'identificateur de processus transmis à cette fonction est zéro, une réinitialisation partielle du système est effectuée. Tous les descripteurs de fichiers sont fermés et les descripteurs d'entrée et de sortie standard rouverts et tous les segments utilisateur sont libérés. Cela ne devrait normalement pas être fait par un programme utilisateur s'il a l'intention de revenir à l'interpréteur de commandes puisque l'interpréteur de commandes ne sera pas dans un état cohérent après cela.
Cette fonction veille à ce que la libération de la mémoire et l'ajustement de l'identificateur du processus soient effectués avant de fermer réellement les descripteurs de fichiers et donc avant d'accéder au disque. Cela garantit que si une erreur de disque se produit et est abandonnée, l'opération de jointure aura été effectuée avec succès. Cependant si un "join 0" produit une erreur disque étant abandonnée, alors la réinitialisation des descripteurs de fichiers par défaut n'aura pas été effectuée. Dans ce cas, un autre appel de la fonction "join 0" doit être effectué par le programme d'application. Le code d'erreur aura été passé au vecteur d'abandon et le code là-bas doit se souvenir du code d'erreur s'il le faut. Voir la fonction "terminer avec code d'erreur" (fonction 62h) pour la signification du code d'erreur primaire et secondaire.
62h |
Termine avec un code d'erreur |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 62h (_TERM) |
B | Code d'erreur pour terminaison |
Résultats
Ne revient pas
Description
Cette fonction termine le programme avec le code d'erreur spécifié, pouvant être zéro indiquant qu'il n'y a pas d'erreur. Cet appel de fonction ne reviendra jamais à l'appelant (à moins qu'une exécution de routine d'abandon de l'utilisateur ne l'y oblige - voir la fonction 63h). Le fonctionnement de cette fonction est différent selon qu'elle a été appelée depuis l'environnement MSX-DOS via 00005h ou depuis l'environnement Disk BASIC via 0F3Dh.
S'il est appelé via 00005h, si une routine d'abandon utilisateur a été définie par la fonction 63h, elle sera appelée avec le code d'erreur spécifié (et un code d'erreur secondaire nul). En supposant que cette routine revient, ou s'il n'y avait pas de routine d'abandon définie par l'utilisateur, alors le contrôle sera renvoyé à tout ce qui a chargé le programme transitoire via un saut à l'emplacement 00000h. Ce sera presque toujours l'interpréteur de commandes, mais dans certains cas, il peut s'agir d'un autre programme transitoire. Le code d'erreur sera mémorisé par le système et la prochaine fonction "jointure" (fonction 61h) qui sera effectuée renverra ce code d'erreur. L'interpréteur de commandes affichera un message d'erreur pour tout code dans l'intervalle 20h..FFh, mais n'affichera pas de message pour les erreurs en dessous.
Si cette fonction est appelée depuis l'environnement Disk BASIC via 0F37Dh, le contrôle sera passé au vecteur d'abandon à l'emplacement "BREAKVECT". Dans cet environnement, il n'y a pas de routine d'abandon utilisateur définie séparément et le code d'erreur doit être mémorisé par le code à "BREAKVECT" car la "jointure" ne renverra pas le code d'erreur.
63h |
Définir la routine de sortie d'abandon |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 63h (_DEFAB) |
DE | Adresse de la routine d'annulation de sortie 0000h vers une routine non-définit |
Résultats
Registre | Description |
---|---|
A | 0 (une erreur n'est jamais généré) |
Description
Cette fonction n'est disponible que lorsqu'elle est appelée via l'emplacement 00005h dans l'environnement MSX-DOS. Il ne peut pas être appelé à l'emplacement 0F37Dh à partir de l'environnement Disk BASIC.
Si le registre DE est zéro, alors une routine d'abandon précédemment définie sera indéfinie, sinon une nouvelle sera définie. La routine d'abandon sera appelée par le système chaque fois que le programme transitoire est sur le point de se terminer pour une raison quelconque autre qu'un saut direct à l'emplacement 0000h. Les programmes écrits pour MSX-DOS 2 doivent se terminer avec un appel de fonction "terminer avec code d'erreur" (fonction 061h) plutôt qu'un saut à l'emplacement 0000h.
La routine d'abandon de l'utilisateur sera entrée avec la pile utilisateur active, avec IX, IY et le registre alternatif définis tels qu'ils étaient lorsque l'appel de fonction a été effectué et avec l'ensemble du TPA paginé. Le code d'erreur de terminaison sera transmis à la routine dans registre A avec un code d'erreur secondaire dans le registre B et si la routine exécute un "RET", alors les valeurs renvoyées dans les registres A et B seront entreposées comme codes d'erreur à renvoyer par la fonction "jointure", et normalement affichées par l'interpréteur de commandes. Alternativement, la routine peut sauter à un certain code de démarrage à chaud dans le programme transitoire plutôt que de revenir. Le système sera dans un état parfaitement stable capable d'accepter tous les appels de fonction.
Le code d'erreur principal passé à la routine dans le registre A sera le code que le programme lui-même a passé à la fonction "terminer avec code d'erreur" (qui peut être zéro) si c'est la raison de l'arrêt. La routine sera également appelée si un CTRL+C ou CTRL+STOP est détecté (erreur ".CTRLC" ou ".STOP"), si une erreur disque est abandonnée (erreur ".ABORT"), ou si une erreur se produit sur l'un des canaux d'entrée ou de sortie standard accessible via les appels de fonction MSX-DOS 01h..0Bh ("".INERR" ou ".OUTERR").
Les erreurs ".ABORT", ".INERR" et ".OUTERR" sont générées par le système à la suite d'une autre erreur. Par exemple, un ".ABORT" peut résulter d'une erreur ".NRDY", ou un ".INERR" peut résulter d'une erreur ".EOF". Dans ces cas, le code d'erreur d'origine ("".NRDY" ou ".EOF") est transmis à la routine d'abandon dans le registre B en tant que code d'erreur secondaire. Pour toutes les autres erreurs, il n'y a pas de code d'erreur secondaire et le registre B sera à zéro.
Si la routine d'abandon exécute "POP HL : RET" (ou équivalent) plutôt qu'un simple retour, alors le contrôle passera à l'instruction suivant immédiatement l'appel MSX-DOS ou le BIOS dans lequel l'erreur s'est produite. Cela peut être utile en conjonction avec une routine de gestionnaire d'erreurs de disque (voir fonction 64h) pour permettre à une option d'abandonner l'appel MSX-DOS en cours lorsqu'une erreur de disque se produit.
64h |
Définir la routine du gestionnaire d'erreurs de disque |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 64h (_DEFER) |
DE | Adresse de la routine d'erreur disque 0000h vers une routine non-définit |
Résultats
Registre | Description |
---|---|
A | 0 (une erreur n'est jamais généré) |
Description
Cette fonction spécifie l'adresse d'une routine utilisateur étant appelée en cas d'erreur disque. La routine sera entrée avec le TPA complet paginé, mais avec la pile système de la page 3 active et aucun des registres ne sera conservé à partir du moment où l'appel de fonction MSX-DOS a été effectué.
La routine d'erreur peut effectuer des appels MSX-DOS mais doit être très prudente pour éviter la récursivité. La liste des appels de fonction au début de cette page indique quels appels de fonction peuvent être effectués en toute sécurité à partir d'une routine d'erreur utilisateur. Cette routine est appelée avec l'état de redirection temporairement invalidé dans le cas où les canaux d'entrées/sorties standard ont été redirigés. Voir la fonction "demande/fixe l'état de redirection" (fonction 70h) pour plus de détails à ce sujet.
La spécification des paramètres et des résultats pour la routine elle-même est la suivante. Tous les registres, y compris IX, IY et l'ensemble de registres alternatifs peuvent être détruits, mais la pagination et la pile doivent être préservées. La routine doit revenir au système, elle ne doit pas sauter pour continuer le programme transitoire. S'il veut le faire, il doit alors renvoyer A=1 («abandonner») et une routine d'abandon de l'utilisateur prendra alors le contrôle et pourra faire ce qu'elle veut :
Paramètres
Registre | Description |
---|---|
A | Code d'erreur ayant provoqué l'erreur |
B | Unité de disque physique |
C | b0 - fixé si écriture b1 - fixé si ignoré n'est pas recommandé b2 - fixé si auto annulé suggéré b3 - fixé si le nombre de secteur est valide |
DE | Nombre de secteur (si b3 de C est fixé) |
Résultats
Registre | Description |
---|---|
A | 0 -> Routine d'appel système 1 -> Annulé 2 -> Ressayé 3 -> Ignore |
65h |
Demande le code d'erreur précédent |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 65h (_ERROR) |
Résultats
Registre | Description |
---|---|
A | 0 |
B | Code d'erreur de la fonction précédente |
Description
Cette fonction permet à un programme utilisateur de connaître le code d'erreur ayant provoqué l'échec de l'appel de fonction MSX-DOS précédent. Il est destiné à être utilisé avec les anciennes fonctions compatibles CP/M ne renvoyant pas de code d'erreur. Par exemple, si une fonction "créer un fichier FCB" renvoie A=FFh, il peut y avoir plusieurs raisons à l'échec et cette fonction renverra le cas approprié, par exemple ".DRFUL" ou ".SYSX".
66h |
Explique le code d'erreur |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 66h (_EXPLAIN) |
B | Code d'erreur devant être expliqué |
DE | Pointeur vers un tampon de chaîne de caractères de 64 octets |
Résultats
Registre | Description |
---|---|
A | 0 |
B | 0 ou inchangé |
DE | Rempli avec le message d'erreur |
Description
Cette fonction permet à un programme utilisateur d'obtenir une chaîne de caractères d'explication ASCIIZ pour un code d'erreur particulier renvoyé par l'une des fonctions MSX-DOS. Si une erreur provient de l'une des anciennes fonctions, "obtenir le code d'erreur précédent" doit d'abord être appelé pour obtenir le code d'erreur réel, puis cette fonction peut être appelée pour obtenir une chaîne de caractères d'explication.
Les erreurs contient une liste de tous les codes d'erreur actuellement définis et les messages correspondants. Les versions en langue étrangère du système auront bien sûr des messages différents. Si le code d'erreur a une chaîne de caractères d'explication intégrée, la chaîne de caractères sera renvoyée et le registre B sera mis à zéro. S'il n'y a pas de chaîne de caractères d'explication, une chaîne de caractères de la forme : "System error 194" ou "User error 45" sera renvoyée et le registre B restera inchangé. (Les erreurs système sont celles comprises dans l'intervalle 40h..FFh et les erreurs utilisateur sont 00h..3Fh).
67h |
Formate un disque |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 67h (_FORMAT) |
B | Numéro d'unité de disque (0=courant, 1=A:,...) |
A | 00h -> retourne une chaîne de caractères : 01h...09h -> Formate ce choix 0Ah...FDh -> Illégale FFh, FFh -> nouveau secteur de démarrage |
HL | Pointeur vers le tampon (si A=1...9) |
DE | Taille du tampon (si A=1..9) |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Fente d'un choix de chaîne de caractères (seulement si A=0 dans l'entrée) |
HL | Adresse d'une chaîne de caractères (seulement si A=0 dans l'entrée |
Description
Cette fonction est utilisée pour formater les disques et n'est vraiment fournie que pour la commande "FORMAT" bien que d'autres programmes puissent l'utiliser (avec précaution) s'ils la trouvent utile. Il a trois options différentes étant sélectionnées par le code passé dans le registre A.
Si A=0 alors les registres B et HL renvoient respectivement le numéro de fente et l'adresse d'une chaîne ASCIIZ précisant le choix des formats disponibles. Une erreur ".IFORM" sera retournée si le disque ne peut pas être formaté (par exemple le disque RAM). Normalement, la chaîne de caractères sera lue à l'aide de la routine "RDSLT" et affichée à l'écran suivie d'un "?" rapide. L'utilisateur spécifie alors un choix "1"..."9" et ce choix est renvoyé à la fonction "formater", après une invite d'avertissement appropriée, pour formater réellement le disque. Si A=0, dans certains cas zéro est retourné dans HL. Cela signifie qu'il n'y a qu'un seul type de format et qu'aucun prompt n'est requise. Il n'y a aucun moyen de savoir à quel format de disque un choix particulier fait référence puisque cela dépend du pilote de disque particulier.
Si A=01h...09h, ceci est interprété comme un choix de format et un disque sera formaté dans l'unité de disque spécifié sans autre prompt. Les registres HL et DE doivent spécifier une zone tampon à utiliser par le pilote de disque. Il n'y a aucun moyen de savoir quelle devrait être la taille de ce tampon, il est donc préférable de le rendre aussi grand que possible. Si le tampon franchit les limites de la page, la fonction sélectionnera la plus grande partie de celui-ci qui se trouve dans une page pour la transmettre au pilote de disque. De nombreux pilotes de disque n'utilisent pas du tout ce tampon.
Si A = FFh, le disque ne sera pas réellement formaté, mais un nouveau secteur de démarrage lui sera attribué pour faire du disque un véritable disque MSX-DOS 2. Ceci est conçu pour mettre à jour les anciens disques MSX-DOS 1.0 afin qu'ils aient un identifiant de volume et permettre ainsi la vérification et la restauration complètes du disque autorisées par MSX-DOS 2. Le cas A=FEh est identique à A=FFh sauf que seuls les paramètres du disque sont mis à jour correctement et que l'ID de volume n'écrase pas le programme de démarrage. De plus, certaines implémentations de MSX-DOS 1.0 placent un secteur de démarrage incorrect sur le disque et ces disques ne peuvent pas être utilisés par MSX-DOS 2 tant qu'ils n'ont pas été corrigés par cette fonction.
La fonction "nouveau secteur de démarrage" est principalement destinée au programme utilitaire "FIXDISK", mais peut être utilisée par d'autres programmes s'ils le trouvent utile. S'il est utilisé, un appel de fonction "obtenir le choix du format" (A=0) doit être effectué en premier et si cela renvoie une erreur (généralement ".IFORM"), l'opération doit être abandonnée car il s'agit d'un lecteur qui n'aime pas être formaté et le disque pourrait être endommagé par cette fonction.
68h |
Crée ou détruit un disque en RAM |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 68h (_RAMD) |
B | 00H -> détruit le disque RAM 1...FEh -> crée un nouveau disque RAM FFh -> retourne la taille du disque RAM |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Taille du disque en RAM |
Description
Si le registre B = 0FFh, cette routine renvoie simplement le nombre de segments de RAM de 16 Ko étant actuellement alloués au disque RAM. Une valeur de zéro indique qu'aucun disque RAM n'est actuellement défini. Si B = 0, le disque RAM actuel sera détruit, perdant toutes les données qu'il contenait et aucune erreur ne sera renvoyée s'il n'y avait pas de disque RAM.
Sinon, si B est dans l'intervalle 01h..FE alors cette fonction tentera de créer un nouveau disque RAM en utilisant le nombre de segments de 16 Ko spécifié dans le registre B. Une erreur sera retournée s'il y a déjà un disque RAM (".RAMDX") ou s'il n'y a même pas un segment libre (".NORAM"). S'il n'y a pas suffisamment de segments de RAM libres pour créer un disque RAM de la taille spécifiée, le plus grand possible sera créé. Aucune erreur n'est retournée dans ce cas.
Dans tous les cas la taille du disque RAM sera retournée dans le registre B en nombre de segments. Notez qu'une partie de la RAM est utilisée pour les tables d'allocation de fichiers et le répertoire racine, de sorte que la taille du disque RAM indiquée par "DIR" ou "CHKDSK" sera légèrement inférieure à la quantité totale de RAM utilisée. La RAM se verra toujours attribuer la lettre de l'unité de disque "H:" quel que soit le nombre de l'unité de disques dans le système.
69h |
Attribuer des tampons pour les secteurs |
---|---|
Nouveau |
Paramètres
Registre | Description |
---|---|
C | 69h (_BUFFER) |
B | 0 -> renvoie le nombre de tampons sinon le nombre de tampons requis |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Nombre actuel de tampons |
Description
Si B = 0, cette fonction renvoie simplement le nombre de secteurs de tampons actuellement alloués. Si B!=0 alors cette fonction tentera d'utiliser ce nombre de tampons de secteur (doit toujours être au moins 2). S'il ne peut pas en allouer autant que demandé, il en allouera autant que possible et renverra le nombre dans le registre B mais ne renverra pas d'erreur. Le nombre de tampons sectoriels peut être réduit ou augmenté.
Les tampons de secteur sont alloués dans un segment de RAM de 16 Ko en dehors des 64 Ko normaux, de sorte que le nombre de tampons ne diminue pas la taille du TPA. Cependant, le nombre de mémoires tampons affecte l'efficacité car avec plus de mémoires tampons, plus de secteurs FAT et de répertoires restent résidents. Le nombre maximum de tampons sera d'environ 20.
6Ah |
Affectation d'unité de disque logique |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Ah (_ASSIGN) |
B | Nombre d'unité de disque logique (1=A: ...) |
D | Nombre d'unité de disque physique (1=A: ...) |
Résultats
Registre | Description |
---|---|
A | Erreur |
D | Nombre d'unité de disque physique (1=A: ...) |
Description
Cette fonction contrôle la fonction d'affectation des disques logiques aux disques physiques. Il est principalement destiné à la commande "ASSIGN", bien que les programmes utilisateur veuillent l'utiliser pour traduire les numéros de l'unité de disque logique en numéros de l'unité de disque physique.
Si B et D sont différents de zéro, une nouvelle affectation sera établie. Si le registre B est différent de zéro et que le registre D est nul, toute affectation pour le disque physique logique spécifié par B sera annulée. Si le registre B est différent de zéro et que le registre D est FFh, l'affectation actuelle pour l'unité de disque logique spécifié par le registre B sera simplement renvoyée dans le registre D.
Tous les unités de disques utilisés dans les divers appels de fonction, y compris les noms de l'unité de disque dans les chaînes de caractères et les numéros de l'unité de disque comme paramètres des appels de fonction, sont de l'unité de disque logiques. Cependant, le numéro de l'unité de disque transmis aux routines d'erreur de disque est un unité de disque physique, donc si "ASSIGN" a été utilisé, il peut être différent de l'unité de disque logique correspondant.
6Bh |
Demande un élément de l'environnement |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Bh (_GENV) |
HL | Nom de chaîne de caractères ASCIIZ |
DE | Pointeur vers un tampon pour une valeur |
B | Taille du tampon |
Résultats
Registre | Description |
---|---|
A | Erreur |
DE | Conservé, tampon rempli si A=0 |
Description
Cette fonction récupère la valeur courante de l'item d'environnement dont le nom est passé dans le registre HL. Une erreur ".IENV" est renvoyée si la chaîne de caractères de nom n'est pas valide. S'il n'y a pas d'élément d'environnement de ce nom, sa chaîne de caractères de valeur sera copiée dans le tampon. Si le tampon est trop petit, la chaîne de caractères de valeur sera tronquée sans nulle de fin et une erreur ".ELONG" sera renvoyée. Un tampon de 255 octets sera toujours assez grand car les chaînes de caractères de valeur ne peuvent pas être plus longues que cela (y compris le NULL de fin).
6Ch |
Fixe un élément de l'environnement |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Ch (_SENV) |
HL | Nom de chaîne de caractères ASCIIZ |
DE | Valeur de chaîne de caractères ASCIIZ |
Résultats
Registre | Description |
---|---|
A | Erreur |
Description
Cette fonction définit un nouvel élément d'environnement. Si la chaîne de caractères de nom est invalide alors une erreur ".IENV" est renvoyée, sinon la chaîne de caractères de valeur est vérifiée et une erreur ".ELONG" renvoyée si elle fait plus de 255 caractères, ou une erreur ".NORAM" si la mémoire est insuffisante pour entreposer le nouvel élément. Si tout va bien, tout ancien élément de ce nom est supprimé et le nouvel élément est ajouté au début de la liste des environnements. Si la chaîne de caractères de valeur est nulle, l'élément d'environnement sera supprimé.
6Dh |
Recherche un élément de l'environnement |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Dh (_FENV) |
DE | Nombre d'éléments de l'environnement |
HL | Pointeur vers un tampon pour la chaîne de caractères de nom |
Résultats
Registre | Description |
---|---|
A | Erreur |
HL | Préservé, tampon rempli |
Description
Cette fonction est utilisée pour savoir quels éléments d'environnement sont actuellement définis. Le numéro d'article dans le registre DE identifie quel article de la liste doit être trouvé (le premier article correspond à DE=1). S'il existe un numéro d'élément DE, la chaîne de caractères de nom de cet élément sera copiée dans le tampon pointé par HL. Si le tampon est trop petit, le nom sera tronqué sans nulle de fin et une erreur ".ELONG" sera renvoyée. Un tampon de 255 octets ne sera jamais trop petit. S'il n'y a pas de numéro d'élément DE, une chaîne de caractères nulle sera renvoyée, car un élément ne peut jamais avoir une chaîne de caractères nom nulle.
6Eh |
Demande/fixe l'état de vérification du disque |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Eh (_DSKCHK) |
A | 00H -> demande l'état de vérification de disque 01H -> fixe l'état de vérification du disque |
B | 00H -> active (seulement si A=01h) FFh -> désactive (seulement si A=01h) |
Résultats
Registre | Description |
---|---|
A | Erreur |
B | Ajustement de vérification de disque courant |
Description
Si A = 0, la valeur actuelle de la variable de vérification du disque est renvoyée dans le registre B. Si A = 01h, la variable est définie sur la valeur du registre B. Une valeur de 00h signifie que la vérification du disque est activée et une valeur différente de zéro. signifie qu'il est désactivé. L'état par défaut est activé.
La variable de vérification de disque contrôle si le système revérifiera le secteur de démarrage d'un disque pour voir s'il a changé, chaque fois qu'un descripteur de fichier, un bloc d'informations de fichier ou un FCB est accédé. S'il est activé, il sera impossible d'accéder accidentellement au mauvais disque en changeant un disque au milieu d'une opération, sinon cela sera possible et pourrait entraîner un disque corrompu. Selon le type d'interface de disque, l'activation de cette fonctionnalité peut entraîner des frais supplémentaires, bien qu'avec de nombreux types de disques (ceux dotés d'un matériel de détection de changement de disque explicite), cela ne fera aucune différence et la sécurité supplémentaire en vaut la peine.
6Fh |
Demande le numéro de version MSX-DOS |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 6Fh (_DOSVER) |
Résultats
Registre | Description |
---|---|
A | Erreur (toujours zéro) |
BC | Version du noyau de MSX-DOS |
DE | Nombre de version MSXDOS2.SYS |
Description
La fonction permet à un programme de déterminer sous quelle version de MSX-DOS il s'exécute. Deux numéros de version sont renvoyés, un en BC pour le noyau MSX-DOS dans la ROM et l'autre en DE pour le fichier système MSXDOS2.SYS. Ces deux numéros de version sont des valeurs BCD avec le numéro de version majeur dans l'octet de poids fort et le numéro de version à deux chiffres dans l'octet de poids faible. Par exemple, s'il existait une version 2.34 du système, elle serait représentée par 0234h.
Pour la compatibilité avec MSX-DOS 1.0, la procédure suivante doit toujours être suivie lors de l'utilisation de cette fonction. Tout d'abord, s'il y a une erreur (A!=0), ce n'est pas du tout MSX-DOS. Regardez ensuite le registre B. S'il est inférieur à 2, le système est antérieur à 2.00 et les registres C et DE ne sont pas définis. Si le registre B est supérieur ou égal à 2, les registres BC et DE peuvent être utilisés comme décrit ci-dessus. En général, le numéro de version à vérifier (après cette procédure) est la version MSXDOS2.SYS dans le registre DE.
70h |
Demande/fixe l'état de redirection |
---|---|
Nouveau * |
Paramètres
Registre | Description |
---|---|
C | 70h (_REDIR) |
A | 00h - Demande l'état de redirection 01h - Fixe l'état de redirection |
B | Nouvelle état: b0 - entrée standard b1 - sortie standard |
Résultats
Registre | Description |
---|---|
A | Erreur (toujours zéro) |
B | État de redirection avant la commande :
b0 fixé - entrée est en redirection b1 fixé - sortie est en redirection |
Description
Cette fonction est fournie principalement pour les routines d'erreur de disque et autres d'entrée/sortie de caractères devant toujours aller à la console indépendamment de toute redirection. Lorsque les fonctions de caractères CP/M (fonctions 01h..0Bh) sont utilisées, elles se réfèrent normalement à la console. Cependant, si les descripteurs de fichier d'entrée ou de sortie standard (descripteurs de fichier 0 et 1) ont été fermés et rouverts dans un fichier disque, les fonctions de caractères CP/M iront également dans le fichier disque. Cependant, certaines sorties telles que la sortie d'erreur de disque doivent toujours aller à l'écran malgré tout.
Cette fonction permet d'annuler temporairement une telle redirection en appelant cette fonction avec A=1 et B=0. Cela garantira que toute entrée/sortie ultérieure de la console CP/M ira à la console et renverra également le paramètre précédent afin qu'il puisse être restauré par la suite. Le système est dans un état quelque peu instable lorsque l'état de la redirection a été modifié de cette manière et qu'il existe de nombreux appels de fonction réinitialisant la redirection à son état réel en remplaçant cette fonction. En général, tout appel de fonction qui manipule les descripteurs de fichiers, tels que "ouvrir", "fermer", "dupliquer" et ainsi de suite, réinitialisera l'état de la redirection. L'effet de cette fonction est donc purement temporaire.