Fonction 21h |
Lecture aléatoire |
CP/M 80 |
Description
Cette fonction permet d'effectuer une lecture aléatoire.
Entrée
Registre |
Valeur ou description |
C |
21h |
DE |
Cette paire de registres permet d'indiquer l'adresse d'une structure FCB. |
Sortie
Registre |
Valeur ou description |
A |
Ce registre permet d'indiquer un code de retour. Les codes d'erreur renvoyés dans le registre A suite à une lecture aléatoire sont répertoriés ci-dessous : |
01h |
Cette valeur permet d'indiquer que la lecture de données est non écrites. |
02h |
Cette valeur permet d'indiquer qu'il n'a pas retourné en mode aléatoire. |
03h |
Cette valeur permet d'indiquer qu'il est impossible de fermer l'étendue actuelle. |
04h |
Cette valeur permet de chercher dans une mesure non écrite. |
05h |
Cette valeur permet d'indiquer qu'il n'a pas retourné en mode lecture. |
06h |
Cette valeur permet d'indiquer qu'il recherche la fin physique passée du disque. |
Remarques
- La fonction 21h est similaire à l'opération de lecture de fichier séquentiel des versions précédentes, sauf que l'opération de lecture a lieu à un numéro d'enregistrement
particulier, sélectionné par la valeur de 24 bits construite à partir du champ de 3 octets suivant le FCB (positions d'octet r0 à 33, r1 à 34 et r2 à 35). L'utilisateur doit
noter que la séquence de 24 bits est entreposée avec l'octet le moins significatif en premier (r0), l'octet du milieu suivant (r1) et l'octet de poids fort en dernier (r2).
Le CP/M ne référence pas l'octet r2, sauf pour calculer la taille d'un fichier (voir Fonction 23h). L'octet r2 doit cependant être égal à zéro, car une valeur différente
de zéro indique un débordement après la fin du fichier.
- Ainsi, la paire d'octets r0, r1 est traitée comme un double octet, ou valeur de mot, contenant l'enregistrement à lire. Cette valeur est comprise entre 0 et 65535, permettant
d'accéder à n'importe quel enregistrement particulier du fichier de 8 mégaoctets. Pour traiter un fichier en accès aléatoire, l'étendue de base (étendue 0) doit d'abord être
ouverte. Bien que l'étendue de base puisse ou non contenir des données allouées, cela garantit que le fichier est correctement enregistré dans le répertoire et qu'il est visible
dans les requêtes DIR. Le numéro d'enregistrement sélectionné est ensuite entreposé dans le champ d'enregistrement aléatoire (r0, r1) et le BDOS est appelé pour lire
l'enregistrement.
- Au retour de l'appel, le registre A contient soit un code d'erreur, comme indiqué ci-dessous, soit la valeur 00, indiquant que l'opération a réussi. Dans ce dernier cas,
l'adresse DMA actuelle contient l'enregistrement accédé de manière aléatoire. A noter que contrairement à l'opération de lecture séquentielle, le numéro d'enregistrement
n'est pas avancé. Ainsi, les opérations de lecture aléatoire ultérieures continuent à lire le même enregistrement.
- À chaque opération de lecture aléatoire, l'étendue logique et les valeurs d'enregistrement actuelles sont automatiquement définies. Ainsi, le fichier peut être lu ou
écrit de manière séquentielle, à partir de la position actuelle accédée de manière aléatoire. Cependant, notez que dans ce cas, le dernier enregistrement lu aléatoirement sera
relu au passage du mode aléatoire à la lecture séquentielle et le dernier enregistrement sera réécrit au passage en écriture séquentielle. L'utilisateur peut simplement avancer
la position d'enregistrement aléatoire après chaque lecture ou écriture aléatoire pour obtenir l'effet d'une opération d'entrée/sortie séquentielle.
- Les codes d'erreur 01 et 04 se produisent lorsqu'une opération de lecture aléatoire accède à un bloc de données n'ayant pas été écrit précédemment ou à une étendue n'ayant
pas été créée, étant des conditions équivalentes. Le code d'erreur 03 ne se produit normalement pas lorsque le système fonctionne correctement. Si c'est le cas, il peut être
effacé simplement en relisant ou en rouvrant l'étendue zéro tant que le disque n'est pas physiquement protégé en écriture. Le code d'erreur 06 se produit chaque fois que l'octet
r2 est différent de zéro sous la version 2.0 actuelle. Normalement, les codes de retour non nuls peuvent être traités comme des données manquantes, le code de retour zéro
indiquant que l'opération est terminée correctement.
Dernière mise à jour : Lundi, le 18 juillet 2022