CODINGCLASSEURS WEKA ★ CLASSEURS WEKA : Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

3/4.2.2 - Table d'indirection des fonctions BDOS en page zéroCoding Classeurs Weka
Les fonctions BDOS sont accessibles à travers la page zéro par un numéro de fonction. Elles sont activées en assembleur en chargeant dans le registre C le numéro de la fonction désirée. Eventuellement, un ou plusieurs paramètres peuvent être échangés à travers les autres registres.

Nous allons donner la liste des fonctions BDOS de CP/M + de 0 à 152.

Fonction 0: SYSTEM RESET
Initialisation du système

  • Entrée : C = #00
  • Sortie : Aucune

L'appel à cette fonction a le même effet qu'un saut à l'adresse #0000. Le système est initialisé et le contrôle est donné au CCP.

Sous CP/M + , le système disque n'est pas initialisé par l'appel à cette fonction. Le programme appelant peut passer un code de retour au CCP en activant la fonction 108 avant de faire appel à la fonction BDOS 0.

Fonction 1: CONSOLE INPUT
Lecture d'un caractère alphanumérique sur le clavier

  • Entrée : C = #01
  • Sortie : A = Caractère ASCII lu

Cette fonction attend qu'un caractère soit entré sur l'unité logique CONIN : (clavier) pour rendre le contrôle au programme appelant et stocke le code ASCII de ce caractère dans le registre A.

Les caractères CR, LF, BS et CTRL-H ont un écho sur l'écran. Les fabulations CTRL-I sont converties en déplacements de 8 caractères et ont un écho sur l'écran.

Lorsque le mode d'affichage est celui par défaut, les caractères CTRL-S (stop scroll), CRTL-Q (start scroll) et CTRL-P (start/stop print echo) sont interceptés par la fonction BDOS 1 et ont un écho sur l'écran. Cependant, si les fonctions associées à cas caractères sont dévalidées par le mode d'affichage, CTRL-S, CTRL-Q et CTRL-P ne sont pas interceptés par la fonction BDOS 1 et n'ont donc aucun écho sur l'écran.

Fonction 2 : CONSOLE OUTPUT
Affichage d'un caractère sur l'unité CONOUT:.

  • Entrée : C = #02
    E = Caractère ASCII
  • Sortie : Aucune

Cette fonction envoie le caractère dont le code ASCII se trouve dans le registre E sur l'unité CONOUT: (écran).

Lorsque le mode d'affichage est celui par défaut, la fonction BDOS 2 le caractère CTRL-I est converti en une tabulation de 8 caractères, et les caractères CTRL S, CTRL-Q et CTRL P sont interprétés.

Fonction 3 : AUXILIARY INPUT
Lecture d'un caractère sur l'entrée auxiliaire.

  • Entrée : C = #03
  • Sortie : A = Caractère lu

Cette fonction permet de lire un caractère sur l'entrée AUXIN:.
Elle rend le contrôle au programme appelant lorsqu'un caractère se présente sur cette entrée. Le caractère se trouve dans le registre A.

Fonction 4 : AUXILIARY OUTPUT
Envoi d'un caractère sur l'unité AUXOUT:.

  • Entrée : C = #04
    E = Caractère ASCII
  • Sortie : Aucune

Cette fonction envoie le caractère dont le code ASCII se trouve dans le registre E sur l'unité logique AUXOUT:.

Fonction 5 : LIST OUTPUT
Envoi d'un caractère sur l'unité LST:

  • Entrée : C = #05
    E = Caractère ASCII
  • Sortie : aucune

Cette fonction envoie le caractère dont le code ASCII se trouve dans le registre E sur l'unité logique LST:.

Fonction 6 : DIRECT CONSOLE I/O
Lecture ou écriture directe d'un caractère sur l'unité CONIN:.

  • Entrée : C = #06
    E = #FF (Entrée ou Etat), #FE (Etat), #FD (Entrée), caractère (Sortie)
  • Sortie : A = caractère lu le cas échéant.

Cette fonction BDOS permet de lire (avec ou sans attente) ou d'écrire un caractère sur l'unité CONIN:, en fonction de la valeur contenue dans le registre E:

    • E = #FF Lecture d'un caractère. A contient la valeur zéro si aucun caractère n'est disponible.
    • E = #FE Lecture de l'état de CONIN:. A contient la valeur zéro si aucun caractère n'est disponible, #FF sinon.
    • E = # FD Attente de l'entrée d'un caractère sur I'unité CONIN :. Le code ASCII du caractère se trouve dans le registre A.
    • E = ASC Lorsque le registre E contient la valeur ASCII d'un caractère, ce dernier est envoyé sur l'unité CONOUT:

Fonction 7 : AUXILIARY INPUT STATUS
Lecture de l'état de l'entrée auxiliaire

  • Entrée : C = #07
  • Sortie : A = Etat de l'entrée auxiliaire

Cette fonction renvoie dans le registre A l'état de l'entrée auxiliaire AUXIN:. Le registre A prend la valeur # FF si un caractère n'est pas disponible sur AUXIN: et #00 si aucun caractère n'est disponible sur AUXIN:.

Fonction 8 : AUXILIARY OUTPUT STATUS
Lecture de l'état de la sortie auxiliaire.

  • Entrée : C = #08
  • Sortie : A = Etat de la sortie auxiliaire.

Cette fonction renvoie dans le registre A l'état de la sortie auxiliaire AUXOUT:. Le registre A prend la valeur # FF si la sortie auxiliaire AUXOUT: est prête à recevoir un caractère et #00 si AUXOUT: n'est pas prête à recevoir un caractère.

Fonction 9 : PRINT STRING
Affichage d'une chaîne de caractères

  • Entrée : C = #09
    DE = Adresse de début de chaîne
  • Sortie : Aucune.

Cette fonction envoie une chaîne de caractères sur la sortie logique CONOUT: jusqu'à ce que le caractère délimiteur $ soit rencontré dans la chaîne. La fonction BDOS 110 permet de changer la valeur ASCII du caractère délimiteur.

Lorsque le mode d'affichage est le mode par défaut, la fonction BDOS 9 convertit les caractères tabulations CTRL-I en déplacements de 8 caractères et les caractères CTRL-Q, CTRL-S et CTRL-P sont interprétés.

Fonction 10 : READ CONSOLE BUFFER
Lecture du buffer de la console CONIN:

  • Entrée : C = #0A
    DE = Adresse du buffer ou #0000
  • Sortie : Le buffer est rempli.

Cette fonction lit une « ligne » sur l'unité logique CONIN: et range les caractères lus dans le buffer dont l'adresse de début est donnée dans le registre DE. La « ligne » est considérée terminée lorsqu'un des caractères suivants est rencontré : CTRL-M, CTRL-J ou CR. Un caractère BEL (CTRL-G) est envoyé sur CONOUT: lorsque le buffer est plein.

L'adresse pointée par le contenu du registre DE doit être positionnée avant l'appel à la fonction BDOS 10. Son contenu est la longueur maximum du buffer de lecture (entre 1 et 255). Les données lues sont rangées en (DE+ 2), (DE+3), etc. La mémoire (DE+ 1) contient le nombre de caractères lus (entre 0 et (DE)).

Si DE = #0000, la fonction BDOS 10 suppose que le buffer de lecture est initialisé (DE + 2) à (DE + n + 1 ) contiennent les valeurs désirées et (DE + n + 2) le terminateur #001 et se trouve par défaut à l'adresse DMA courante. Lorsque le terminateur est rencontré, BDOS 10 attend une entrée de caractère(s) sur CONIN:. Cette méthode permet à l'opérateur d'accepter la chaîne qui est affichée (il presse alors ENTER! ou de la modifier en utilisant au besoin les caractères de contrôle suivants :

    • CTRL-A déplace le curseur vers la gauche d'une position
    • CRTL-B déplace le curseur au début de la ligne ou à la fin de la ligne s'il se trouve déjà au début de la ligne.
    • CTRL-C annule la modification de la chaîne
    • CTRL-E provoque un passage à la ligne des caractères qui se trouvent à la droite du curseur.
    • CTRL-F déplace le curseur vers la droite d'une position
    • CTRL-G efface le caractère qui occupe la position courante
    • CTRL-H efface le caractère qui se trouve à la gauche du curseur
    • CTRL-J marque la fin de la lecture
    • CTRL-K efface les caractères qui se trouvent à la droite du curseur
    • CTRL-M identique à CTRL-J
    • CTRL-P écho sur l'équipement logique LST:
    • CTRL-R le caractère à gauche du curseur est réaffiché sur la nouvelle ligne
    • CTRL-U La ligne précédente du buffer contient le caractère à gauche du curseur, la ligne courante est effacée et il y a un passage à la nouvelle ligne
    • CTRL-W Réaffiche la ligne précédente si la ligne courante est vide ou déplace le curseur en fin de ligne dans un autre cas
    • CTRL-X Efface tous les caractères à gauche du curseur
    • DEL Efface le caractère à gauche du curseur.

Fonction 11 : GET CONSOLE STATUS
Donne l'état de la console CONIN:

  • Entrée : C = #0B
  • Sortie : A = Etat de la console

Cette fonction indique si un caractère a été tapé sur l'unité logique CONIN:.
Lorsque le mode d'affichage est le mode par défaut, le registre A contient la valeur 1 lorsqu'un caractère a été tapé et la valeur 0 dans le cas contraire.
Lorsque le mode d'affichage est « CTRL-C », le registre A contient la valeur 1 uniquement si la séquence CTRL-C a été tapée.

Fonction 12 : RETURN VERSION NUMBER
Numéro de version du fichier système BDOS

  • Entrée : C = #0C
  • Sortie : HL = Numéro de version

Cette fonction retourne dans le registre HL le numéro de version du fichier système BDOS. De cette manière les logiciels CP/M peuvent exploiter les possibilités particulières de chaque CP/M et ainsi fonctionner sur des CP/M de versions différentes.

Fonction 13 : RESET DISK SYSTEM
Etat initial du système de fichiers BDOS.

  • Entrée : C = #0D
  • Sortie : Aucune

Cette fonction positionne le système de fichiers BDOS dans un état initial (disque par défaut - A:, adresse de DMA par défaut : #0080, lecteurs) de disques positionné(s) en lecture/écriture).

Fonction 14 : SELECT DISK
Définition du lecteur de disques par défaut

  • Entrée : C = #0EH
    E = Disque par défaut (0 à 15)
  • Sortie : A = Indicateur d'erreur
    H = Indicateur d'erreur physique

Cette fonction définit le disque qui sera accédé par défaut pour toutes les opérations CP/M à venir. Le registre E désigne ce disque : 0 pour le lecteur A jusqu'à 15 pour le lecteur P.

En retour de fonction, le registre A est à zéro si la définition du disque par défaut s'est déroulée correctement. Dans le cas contraire, la valeur de A dépend du mode d'erreur BDOS:

    • mode par défaut : un message identifiant le type d'erreur est affiché,
    • autre mode : A = #FF et H = #01 pour une erreur Disk I/O Error #04 pour une erreur Invalid drive

Fonction 15 : OPEN FILE
Ouverture d'un fichier disque

  • Entrée : C = #0F
    DE = Adresse de FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur

Cette fonction active le FCB (File Control Block) d'un fichier disque qui appartient au numéro d'utilisateur courant (ou zéro).

L'adresse du FCB est donnée dans le registre DE. Elle pointe sur une zone mémoire qui respecte les conventions suivantes :

    • Octet 0 : Référence du lecteur (0 = par défaut, 1 =A, 2 = B, etc.)
    • Octets 1 à 8 : Nom du fichier en minuscule ou majuscule. Toutes les lettres sont converties en majuscules
    • Octets 9 à 11 : Extension du fichier en minuscule ou majuscule. Toutes les lettres sont converties en majuscules.
    • Octets 12 à 15 : A zéro

Si le fichier que l'on tente d'accéder est protégé en lecture, le mot de passe correct doit se trouver dans les huit premiers octets de la zone DMA courante ou avoir été défini par la fonction BDOS 106.

Lorsque le numéro d'utilisateur courant n'est pas zéro, et que le fichier que l'on tente d'ouvrir par la fonction 15 n'existe pas sous le numéro d'utilisateur courant, le fichier spécifié est cherché sous le numéro d'utilisateur zéro. Pour que l'ouverture aboutisse, il est nécessaire que le fichier ait l'attribut « système » positionné.

Les données renvoyées par la fonction BDOS 15 sont les suivantes :

Code répertoire dans le registre A:

    • #00 si l'ouverture s'est déroulée correctement ;
    • #FF si le fichier n'a pas été trouvé.

Code d'erreur dans le registre H:

    • #00 si l'ouverture s'est déroulée correctement ou si le fichier n'a pas été trouvé,

      Un message d'erreur est affiché si le mode d'erreur est celui par défaut. Sinon, le registre A est positionné à #FF et le registre H contient :

    • #01 pour une erreur « Disk I/O Error »,
    • #04 pour une erreur « Invalid Drive Error »,
    • #07 pour une erreur « File Password Error »,
    • #09 pour une erreur sur les champs nom ou extension du FCB.

Fonction 16 : CLOSE FILE
Fermeture d'un fichier

  • Entrée : C = #10
    DE = Adresse du FCB
  • Sortie : A = Code répertoire H = Code d'erreur

Cette fonction ferme un fichier ouvert par une des fonctions BDOS 15 ou 22.

L'attribut d'interfaçage f5 indique si la fermeture du fichier est permanente (f5 = 0) ou partielle (f5= 1). Dans ce dernier cas, le fichier est maintenu ouvert mais le repertoire est mis à jour.

Les données renvoyées par la fonction BDOS 16 sont les suivantes :

Code répertoire dans le registre A:

    • #00 si la fermeture s'est déroulée correctement ;
    • #FF si le fichier n'a pas été trouvé.

Code d'erreur dans le registre H:

    • #00 si l'ouverture s'est déroulée correctement ou si le fichier n'a pas été trouvé,

Un message d'erreur est affiché si le mode d'erreur est celui par défaut. Sinon, le registre A est positionné à #FF et le registre H contient :

    • #01 pour une erreur « Disk I/O Error »,
    • #02 pour une erreur « Read/Only Disk »,
    • #04 pour une erreur « Invalid Drive Error ».

Fonction 17 : SEARCH FOR FIRST
Recherche du premier fichier qui satisfait le FCB

  • Entrée : C = #11
    DE = Adresse de FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur

Cette fonction recherche dans le répertoire courant le premier fichier qui s'accorde avec les éléments fournis dans le FCB (File Control Bloc). L'adresse du FCB est spécifiée dans le registre DE. Rappelons la structure du bloc FCB :

    • Octet 0 : Référence du lecteur (0 = par défaut, 1 = A, 2 = B, etc.)
    • Octets 1 à 8 : Nom du fichier en minuscule ou majuscule. Toutes les lettres sont converties en majuscules.
    • Octets 9 à 11 : Extension du fichier en minuscule ou majuscule. Toutes les lettres sont converties en majuscules.
    • Octets 12 à 15 : A zéro
    • Octets 16 à 23 : Mot de passe en minuscule ou majuscule ou caractères espaces si aucun mot de passe n'est désiré.
    • Octets 24 à 31 : Réservés pour CP/M

La fonction BDOS 17 peut être complétée par la fonction BDOS 18 (SEARCH FOR NEXT) qui détermine le ou les fichiers suivants qui satisfont les données indiquées dans le bloc FCB.

Les données renvoyées par la fonction BDOS 17 sont les suivantes :

    • Code répertoire dans le registre A:

      Ce code contient le nom du lecteur (0 à 3) si la recherche a abouti, et #FF sinon.

    • Code d'erreur dans le registre H:

      Si le code renvoyé dans le registre A est 0, 1, 2, 3 ou #FF, le registre H contient la valeur zéro.

Un message d'erreur est affiché si le mode d'erreur est celui par défaut.
Sinon, le registre A est positionné à #FF et le registre H contient :

    • #01 pour une erreur « Disk I/O Error »,
    • #04 pour une erreur « Invalid Drive Error ».

Fonction 18 : SEARCH FOR NEXT
Recherche du prochain fichier qui satisfait le FCB

  • Entrée : C = #12
  • Sortie : A = Code répertoire
    H = Code d'erreur

Cette fonction est identique à la fonction BDOS 17, à ceci près qu'elle poursuit la recherche de fichier qui avait commencé par une fonction 17.

Fonction 19 : DELETE FILE
Effacement d'un fichier

  • Entrée :C = #13
    DE = Adresse du FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur

Cette fonction permet d'effacer le fichier dont le FCB correspond à celui pointé par le registre DE. La structure du FCB est donnée dans la fonction BDOS 17. Les champs « nom du fichier » et « extension » peuvent contenir des jockers « ? ». L'attribut d'interfaçage f5 définit le type d'effacement désiré.

    • f5 = 0 pour un effacement standard :

      Le FCB du répertoire et fe fichier sont effacés et la place disque ainsi libérée est disponible pour y stocker d'autres informations.

    • f5 = 1 pour un effacement de FCB dans le répertoire seulement.

      Dans ce cas, le fichier n'est pas effacé mais n'est plus accessible car le FCB du répertoire n'existe plus. De cette manière, le fichier est rendu « invisible » lors des opérations DIR.

Les données renvoyées par la fonction BDOS 19 sont les suivantes :

Code répertoire dans le registre A:

Ce code contient zéro si l'effacement s'est bien déroulé, et #FF sinon. Code d'erreur dans le registre H:

Si le code renvoyé dans le registre A est 0 ou #FF, le registre H contient la valeur zéro.

Un message d'erreur est affiché si le mode d'erreur est celui par défaut. Sinon, le registre A est positionné à #FF et le registre H contient :

    • #01 pour une erreur « Disk I/O Error »,
    • #02 pour une erreur « Read-Only Disk »,
    • #03 pour une erreur « Read-Oniy File »,
    • #04 pour une erreur « Invalid Drive Error »,
    • #07 pour une erreur « File Password Error »

Fonction 20 : READ SEQUENTIAL
Lecture d'un ou plusieurs enregistrement(s)

  • Entrée : C = #14H
    DE = Adresse FCB 3
  • Sortie : A = Code d'erreur
    H = Erreur physique

Cette fonction transfère de 1 à 128 enregistrements de 128 octets d'un fichier disque ouvert vers la mémoire centrale à partir de l'adresse DMA courante.

Reportez-vous à la fonction BDOS 44 pour définir le nombre d'enregistrements) à lire.
Les données renvoyées par la fonction BDOS 20 sont les suivantes :

    • Code d'erreur dans le registre A:

      Ce code est nul si l'opération de lecture s'est bien déroulée, sinon, le registre A contient un des codes d'erreur suivants :

      • #01 : End Of File rencontré
      • #09 : FCB invalide
      • #0A : Changement de disquette entre l'ouverture et la lecture #FF : Erreur physique pendant la lecture.
    • Code d'erreur physique dans le registre H:

      Ce registre signifie qu'une erreur physique s'est produite uniquement quand le registre A contient # FF. Dans ce cas, H peut avoir une des deux valeurs suivantes :

      • #01 : Disk I/O Error
      • #04 : Invalid Drive Error
      • Si A< > #FF, le registre H contient le nombre de secteurs lus avant que ne se produise une erreur.

Fonction 21: WRITE SEQUENTIAL
Ecriture d'un ou plusieurs enregistrement!s)

  • Entrée : C = #15
    DE = Adresse FCB
  • Sortie : A = Code d'erreur
    H = Erreur physique

Cette fonction transfère de 1 à 128 enregistrements de 128 octets de la mémoire centrale (à partir de l'adresse DMA courante) vers un fichier ouvert.

Reportez-vous à la fonction BDOS 44 pour définir le nombre d'enregistrements) à écrire.

Les données renvoyées par la fonction BDOS 21 sont les suivantes :

    • Code d'erreur dans le registre A:
      • Ce code est nul si l'opération d'écriture s'est bien déroulée, sinon, le registre A contient un des codes d'erreur suivants :
        • #01 : Espace non disponible dans le répertoire
        • #02 : Bloc non disponible
        • #09 : FCB invalide
        • #0A : Changement de disquette entre l'ouverture et l'écriture #FF : Erreur physique pendant la lecture.
    • Code d'erreur physique dans le registre H:
      • Ce registre signifie qu'une erreur physique s'est produite uniquement quand le registre A contient # FF. Dans ce cas, H peut avoir une des quatre valeurs suivantes :
        • #01 : Disk I/O Error
        • #02 : Read-Only disk
        • #03 : Read-Only file
        • #04 : Invalid Drive Error

          Si A< > #FF, fe registre H contient le nombre de secteurs écrits avant que ne se produise une erreur.

Fonction 22 : MAKE FILE
Création d'une entrée dans un répertoire

  • Entrée : C = #16
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur physique où étendue

Cette fonction crée :

    • une entrée dans le répertoire courant ;
    • un XFCB si le répertoire courant autorise les mots de passe. Un mot de passe est alors affecté au fichier.

L'adresse du FCB est passée à la fonction 22 dans le registre DE. Le premier octet (octet 0) du FCB contient le numéro du lecteur de disquettes, les octets suivants (1 à 11) indiquent le nom du fichier et son type. L'octet 12 indique le numéro d'extension (souvent zéro). L'attribut f6 indique si un mot de passe doit ou non être attribué au fichier (f6 = 0 pour qu'aucun mot de passe ne soit attribué, f6 = 1 pour qu'un mot de passe soit attribué). Lorsque l'attribut f6 est positionné, le mot de passe doit être placé dans les huit premiers octets du buffer courant de DMA.

La fonction MAKE FILE renvoie un code d'erreur si le FCB fait référence à un nom de fichier déjà existant dans le répertoire courant.

MAKE FILE initialisé également les champs « date de création » et « date de mise à jour » du fichier si :

    • le nombre d'extension est nul ;
    • le répertoire courant demande une telle datation. En sortie, la fonction MAKE FILE retourne un code répertoire :
    • nul dans le registre A si tout s'est bien passé ;
    • égal à #FF s'il n'y a plus de place dans le répertoire.

Le registre H est nul dans ces deux cas. Si une erreur d'ordre physique ou étendu survient, un message est affiché et le programme appelant est avorté dans le cas où le mode d'erreur BDOS est le mode standard. Dans un autre cas, le retour vers l'appelant se fait avec un des codes d'erreur suivant :

    • 01 : Erreur d'entrée/sortie disque ;
    • 02 : Disque à lecture seule ;
    • 04 : Lecteur invalide ;
    • 08 : Le fichier existe déjà ;
    • 09 : Caractère « ? » dans le nom du fichier ou dans le type.

Fonction 23 : RENAME FILE
Renomme un fichier

  • Entrée : C = #17
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur physique ou étendue

Cette fonction renomme un fichier ou un groupe de fichiers en passant par le FCB dont l'adresse se trouve dans le registre DE. Les seize premiers octets du FCB contiennent le nom du fichier à renommer, et les seize suivants, le nouveau nom du fichier. Lorsque l'accès au fichier nécessite un mot de passe, celui-ci doit être placé dans les huit premiers octets du buffer de DMA courant, ou encore doit avoir été déclaré comme mot de passe courant grâce à la fonction BDOS 106.

En sortie, RENAME FILE renvoie un code répertoire nul dans A si tout s'est bien passé, et un code répertoire égal à # FF si le fichier à renommer n'a pu être trouvé dans le répertoire courant. Le registre H est nul dans ces deux cas. Si une erreur physique ou étendue se produit, la fonction RENAME FILE réagit différemment en fonction du mode d'erreur BDOS. Si c'est le mode standard, un message d'erreur est envoyé à l'écran, et le programme est avorté. Sinon, un code d'erreur est retourné au programme appelant selon la convention suivante :

    • 01 : Erreur d'entrée/sortie ;
    • 02 : Disque à lecture seule ;
    • 03 : Fichier à lecture seule ;
    • 04 : Disque invalide ;
    • 07 : Erreur sur le mot de passe ;
    • 08 : Le fichier existe déjà ;
    • 09 : Caractère « ? » dans le nom ou dans le type.

Fonction 24 : RETURN LOGIN VECTOR

  • Identification du lecteur de disque
    Entrée : C = #18
  • Sortie : HL = Vecteur LOGIN

Cette fonction indique quel est le lecteur de disque actif. La convention de codage du registre HL en sortie de fonction est la suivante : le bit 0 du registre HL représente le lecteur A, le bit 15 du registre HL représente le lecteur P. Un des bits de HL positionné à un indique quel est le lecteur actuellement actif.

Fonction 25: RETURN CURRENT DISK
Identification du lecteur de disque par défaut

  • Entrée : C = #19
  • Sortie : A = Disque courant

Cette fonction indique le numéro du lecteur de disque par défaut. Pour ce faire, le registre A prend une valeur comprise entre 0 et 15, correspondant respectivement aux lecteurs A à P.

Fonction 26 : SET DMA ADDRESS
Initialisation de l'adresse d'accès direct à la mémoire (DMA)

  • Entrée : C = #1A
  • Sortie : Adresse de DMA

Sous CP/M +, une zone en mémoire est définie dans le but de stocker un enregistrement (ou plus) issu d'une lecture sur disque ou destiné à être écrit sur disque. La fonction BDOS 44 (SET MULTI-SECTOR COUNT) permet de définir la taille de cette zone mémoire. L'adresse de DMA la plus fréquente est #0080. C'est également l'adresse initialisée par la fonction BDOS 13. La fonction SET DMA ADDRESS modifie cette adresse qui reste ainsi initialisée jusqu'à ce qu'elle soit changée par un autre appel à la fonction 26 ou jusqu'à ce qu'un RESET se produise.

Fonction 27 : GET ADDR
Lecture de l'adresse du vecteur d'allocation

  • Entrée : C = #1B
  • Sortie : HL = Adresse du vecteur

Cette fonction permet de lire l'adresse de base du vecteur d'allocation du lecteur de disque courant. Ce vecteur se trouve en mémoire RAM et permet entre autres de déterminer la quantité de mémoire libre sur une disquette. Lorsqu'aucune erreur physique ne se produit, le registre HL contient l'adresse du vecteur. Dans le cas contraire, le registre HL contient 0FFFF.

Fonction 28 : WRITE PROTECT DISK
Positionne un lecteur de disque en lecture seule

  • Entrée : C = #1C

Cette fonction permet de positionner temporairement (jusqu'au prochain « DRIVE RESET ») un lecteur de disquettes ou de disque dur en lecture seule. De cette manière, tout accès en écriture sur ce lecteur (pour renommer ou effacer un fichier, écrire des données, etc.) sera refusé.

Fonction 29 : GET READ-ONLY VECTOR
Identification des lecteurs autorisés en lecture seulement

  • Entrée : C = # 1D
  • Sortie: HL = Vecteur d'identification ,

Cette fonction renvoie un vecteur dans HL dont chaque bit à un identifie un lecteur autorisé à lecture seule. Le bit de poids le plus faible correspond au lecteur A:, le bit de poids le plus fort correspond au lecteur P:.

Fonction 30 :SET FILE ATTRIBUTES
Modification des attributs d'un fichier

  • Entrée : C = #1E
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Code d'erreur physique ou étendu

Cette fonction permet de modifier les attributs d'un fichier et de positionner les derniers compteurs d'octets. Les attributs que peut modifier cette fonction sont les suivants :

    • f1' à f4' ;
    • Read-Only ;
    • t1 ;
    • System ;
    • t2' ;
    • archive ;
    • t3'.

Le FCB accédé par l'adresse contenue dans le registre DE doit contenir le nom du fichier dont les attributs vont être modifiés ainsi que (es attributs positionnés comme nécessaire. Si le fichier est protégé par un mot de passe, ce dernier doit se trouver dans les huit premiers octets du buffer de DMA ou avoir été spécifié comme mot de passe par défaut par la fonction 106.

L'attribut f6 indique si le compteur du dernier enregistrement doit être modifiéEn sortie, SET FILE ATTRIBUTES renvoie un code répertoire nul dans le registre A si tout s'est bien passé, et un code répertoire égal à #FF dans le registre A si le fichier à accéder n'a pu être trouvé dans te répertoire courant. Le registre H est nul dans ces deux cas. Si une erreur physique ou étendue se produit, la fonction SET FILE ATTRIBUTES réagit différemment en fonction du mode d'erreur BDOS. Si c'est le mode standard, un message d'erreur est envoyé à l'écran, et le programme est avorté. Sinon, un code d'erreur est retourné au programme appelant selon la convention suivante :

    • 01 : Erreur d'entrée/sortie ;
    • 02 : Disque à lecture seule ; '3 04 : Disque invalide ; 07 : Erreur sur le mot de passe ; 09 : Caractère « ? » dans le nom ou dans le type.

Fonction 31 : GET ADDR
Lecture de l'adresse du DPB

  • Entrée : C = # 1F
  • Sortie : HL = Adresse du DPB

Cette fonction lit l'adresse du DPB (Disk Parameter Block) du disque courant et la stocke dans le registre HL.

Si une erreur physique se produit alors que le mode d'erreur BDOS est un des modes de retour, la valeur #FFFF est renvoyée dans le registre HL. (Cf. Fonction 45).

Fonction 32 : SET/GET USER CODE

  • Lecture/modification du numéro d'utilisateur courant
  • Entrée : C = #20
    E = #FF (lecture) / numéro (écriture)
  • Sortie : A = code courant (dans le cas d'une lecture) valeur quelconque dans le cas d'une écriture

Lorsque le registre E vaut #FF, le numéro d'utilisateur est renvoyé dans le registre A en sortie de la fonction. Si le registre E est différent de # FF, le numéro utilisateur devient celui indiqué dans le registre E (modulo 16).

Fonction 33 : READ RANDOM
Lecture en accès direct dans un fichier

  • Entrée : C = #21
    DE = Adresse FCB
  • Sortie : A = Code d'erreur
    H = Code d'erreur physique

Cette fonction est identique à la lecture séquentielle, à ceci près que le pointeur de lecture est placé sur un enregistrement particulier avant d'effectuer la lecture. La position de lecture est indiquée dans les octets rO (poids faible), r1 et r2 (poids fort) qui se trouvent dans le FCB à partir de la position 33. Avant d'utiliser la fonction READ RANDOM, te fichier concerné doit avoir été ouvert avec une dimension de base 0.

Lorsque le compteur de secteurs BDOS est plus grand que 1, la fonction READ RANDOM lit un nombre d'enregistrements en conséquence. Les champs r0, r1 et r2 sont automatiquement incrémentés.

En sortie de la fonction READ RANDOM, le registre A contient 0 si tout s'est déroulé correctement. Si ce n'est pas le cas, A contient un des codes d'erreur suivants :

    • 01 : Fin de fichier rencontrée ;
    • 02 : L'enregistrement courant ne peut être fermé ;
    • 04 : Positionnement sur un enregistrement non initialisé ;
    • 06 : Numéro d'enregistrement en dehors des limites permises (r2 > 3) ;
    • 10 : Changement de disquette entre l'ouverture et la lecture ;
    • 255 : Erreur physique.

Lorsqu'une erreur physique est détectée (A=255), le registre H contient 01 si une erreur d'entrée/sortie s'est produite et 04 si le lecteur de disquette ou de disque dur ne peut être accédé.

Fonction 34 : WRITE RANDOM
Ecriture en accès direct dans un fichier

  • Entrée : C = #22
    DE = Adresse FCB
  • Sortie : A = Code d'erreur
    H = Code d'erreur physique

Cette fonction est identique à la précédente, à ceci près qu'elle provoque une écriture et non une lecture dans le fichier ouvert.

En sortie de la fonction WRITE RANDOM, le registre A contient 0 si tout s'est déroulé correctement. Si ce n'est pas le cas, A contient un des codes d'erreur suivants :

    • 02 : Bloc de données non valide ; '
    • 03 : L'enregistrement courant ne peut être fermé ;
    • 05 : Pas de place dans le répertoire ;
    • 06 : Numéro d'enregistrement en dehors des limites permises (r2 >3) ;
    • 10 : Changement de disquette entre l'ouverture et la lecture ; 255 : Erreur physique. Lorsqu'une erreur physique est détectée (A - 255), le registre H contient :
    • 01 si une erreur d'entrée/sortie s'est produite ;
    • 02 si le disque est à lecture seule ;
    • 03 si le fichier est à lecture seule ;
    • 04 si le lecteur de disquette ne peut être accédé.

Fonction 35 : COMPUTE FILE SIZE
Détermination de la taille d'un fichier

  • Entrée : C = #23
    DE = Adresse FCB
  • Sortie : A = Code d'erreur
    H = Code d'erreur physique

Cette fonction détermine la taille d'un fichier. Cette taille est la taille réelle si le fichier est accédé en séquentiel, mais elle est inférieure à la taille réelle si le fichier est accédé en direct. Pour ce faire, le pointeur d'enregistrement du FCB (passé en entrée dans DE) est positionné sur le dernier enregistrement +1 du fichier.

En sortie, le registre A est nul si la fonction s'est déroulée correctement. Le registre A contient #FF si le fichier spécifié n'a pas été trouvé. Dans ces deux cas, le registre H est positionné à zéro. Si une erreur physique se produit, la fonction COMPUTE FILE SIZE réagit différemment selon le mode d'erreur BDOS courant. Si ce mode est Je mode par défaut, un message d'erreur est affiché à l'écran, et le programme appelant est avorté. Dans un autre cas, le registre H peut contenir une des valeurs suivantes :

    • 01 si une erreur d'entrée/sortie disque s'est produite ;
    • 04 si le lecteur de disquettes est invalide.

Fonction 36 : SET RANDOM RECORD

Numéro du prochain enregistrement accédé

  • Entrée : C = #24DE = Adresse FCB
  • Sortie : r0, r1 et r2 du FCB

Cette fonction indique dans les champs r1, r2 et r3 du FCB la position du prochain enregistrement accédé par une instruction de lecture ou d'écriture séquentielle.

Fonction 37 : RESET DRIVE

Initialisation des lecteurs de disquettes

  • Entrée : C = #25
    DE = Numéro du lecteur de disquette
  • Sortie : A = #00

Cette fonction positionne les lecteurs de disquettes dans un état initial. Le numéro du lecteur de disquettes est indiqué dans le registre DE en entrée de la fonction. Le bit de poids faible de ce registre correspond au lecteur A:. Le bit de poids fort correspond au lecteur P:, Lorsqu'un bit est à un, il désigne Je lecteur à réinitialiser.

Fonction 38 : ACCESS DRIVE
Non utilisé sous CP/M +

Fonction 39 : FREE DRIVE
Non utilisé sous CP/M +

Fonction 40 : WRITE RANDOM WITH ZERO FILL
Ecriture en accès direct dans un fichier

  • Entrée : C = #28
    DE = Adresse FCB
  • Sortie : A = Code d'erreur
    H = Code d'erreur physique

Identique à la fonction 34 (WRITE RANDOM) à ceci près qu'une zone mémoire est initialisée à 0 avant l'accès à la disquette. Si cette fonction a été utilisée pour créer un fichier, les enregistrements non écrits accé-dés par la fonction 33 {READ RANDOM) contiendront des zéros. Si le fichier avait été créé par la fonction 34 (WRITE RANDOM), ces mêmes enregistrements contiendraient des valeurs quelconques non prévisibles.

Fonction 41 : TEST AND WRITE RECORD
Non utilisé sous CP/M +

Fonction 42 : LOCK RECORD
Non utilisé sous CP/M +

Fonction 43 : UNLOCK RECORD
Non utilisé sous CP/M +

Fonction 44 : SET MULTI-SECTOR COUNT
Initialisation du nombre de secteurs lus ou écrits en accès direct.

  • Entrée : C = #2C
    E = Nombre de secteurs
  • Sortie : A = Code d'erreur

Cette fonction définit le nombre de secteurs tus à chaque accès direct à un fichier en lecture ou en écriture. Le registre E contient le nombre de secteurs entre 1 et 128. Ce nombre reste ainsi défini jusqu'à ce que la fonction UNLOCK RECORD soit appelée.

En sortie, le registre A contient 0 si le registre E a été passé avec une valeur comprise entre 1 et 128. Sinon, le registre A contient #FF.

Fonction 45 : SET BDOS ERROR MODE
Définition du mode d'erreur du BDOS.

  • Entrée : C = #2D
    E = Mode d'erreur BDOS
  • Sortie : Aucune

Cette fonction définit le mode d'erreur du BDOS en fonction de ia valeur qui se trouve dans le registre E au moment de l'appel :
ESignification
#FFRenvoi du code d'erreur
#FERenvoi et affichage du code d'erreur
AutreMode d'erreur par défaut
Valeur

    • Lorsque le mode d'erreur par défaut est actif, chaque erreur provoque l'affichage d'un message système (qui identifie l'erreur) et la terminaison prématurée du programme.
    • Lorsque le mode d'erreur est initialisé à « Renvoi du code d'erreur », le code de l'erreur est placé dans le registre H et retourné au programme sans aucun affichage.
    • Lorsque le mode d'erreur est initialisé à « Renvoi et affichage du code d'erreur », chaque erreur provoque l'affichage d'un messsage système (qui identifie l'erreur) et le retour au programme.

Fonction : 46 GET DISK FREE SPACE
Espace disponible sur un disque.

  • Entrée : C = #2E
    E = Lecteur (0 = A, 1=B, etc., 15 = P)
  • Sortie : les trois premiers octets du buffer DMA courant
    A = Flag d'erreur
    H = Erreur physique

Cette fonction renvoie le nombre de secteurs (128 octets) de disquette non utilisés. Le résultat se trouve dans les trois premiers octets du buffer DMA. Le premier représente le poids faible, le second le poids intermédiaire et le troisième le poids fort.

En sortie, le registre A vaut 0 si la fonction a pu s'exécuter et un cod< d'erreur dans le cas contraire. Dans ce cas, le registre H contient l'uni des deux valeurs suivantes :

    • #01 = Erreur d'entrée/sortie disque
    • #04 = Lecteur invalide.

Fonction 47 : CHAIN TO PROGRAM
Exécution chaînée d'un programme

  • Entrée : C = #2F
    E = Flag de chaînage
  • Sortie : Aucune

Cette fonction permet de lancer l'exécution d'un programme à partir du programme courant. Pour ce faire, le buffer DMA doit contenir une ligne de commande terminée par un octet nul.

Lorsque le registre E vaut 0 en entrée de la fonction, le programme est appelé avec les valeurs par défaut du lecteur et du numéro d'utilisateur. Dans le cas contraire, le lecteur et le numéro d'utilisateur sont issus des valeurs par défaut du CCP.

Fonction 48 : FLUSH BUFFERS
Purge des buffers d'écriture disque.

  • Entrée : C = #30
    E = Flag d'effacement
  • Sortie : A = Flag d'erreur
    H = Erreur physique

Cette fonction force l'écriture du ou des buffer(s) de données non vides. Ce (ou ces) buffer(s) est (sont) effacé(s) si le registre E vaut # FF en entrée.

En sortie, le registre A vaut 0 si la fonction a pu s'exécuter. Dans le cas contraire, un code d'erreur physique est éventuellement retourné dans le registre H (en fonction du mode d'erreur courant, voir fonction 45) :

HSignification
#01Erreur d'entrée/sortie disque
#02Disque en lecture seule
#04Lecteur invalide

Fonction 49 : GET/SET SYSTEM CONTROL BLOCK
Lecture ou écriture du SCB [System Control Block)

  • Entrée : C = #31
    DE = Adresse du SCBPB (System Control Block Parameter Block)
  • Sortie : A = Octet éventuellement retourné HL = Mot éventuellement retourné

Cette fonction permet d'accéder {en lecture ou en écriture) aux données qui se trouvent dans le SCB (System Control Block). Reportez-vous à la Partie 3, Chap. 4.2,1.2 pour prendre connaissance de la structure du SCB.

Les registres D et E pointent sur une structure qui identifie l'opération effectuée dans le SCB. Cette structure est la suivante :
NomDimensionSignification
DéplacementOctetDéplacement du ou des octet(s) à accéder par rapport au début du SCB
OpérationOctet#FF pour initialiser un octet
#FE pour initialiser un mot
#00 pour lire une valeur
les valeurs #01 à #FD ne doivent pas être utilisées
ValeurMotOctet ou mot à écrire pour les initialisations


La table suivante résume le type d'accès pouvant être effectué à chaque valeur du SCB :

OctetType d'accès
#00 à #04
#05
#06 à #09
#0A à #0F
#10 à #11
#12 à #19
#1A
#18
#1C
#1D à #21
#22 à #23
#24 à #25
#26 à #27
#28 à #29
#2A à #2B
#2C
#2D
#2E
#2F
#30 à #32
#33 à #34
#35 à #36
#37
#38
#39 à #38
#3C à #3D
#3E
#3F à #43
#44
#45 à #49
#4A
#4B
#4C à #4F
#50
#51
#52 à #56
#57
#58 à #59
#5A
#5B
#5C
#5D à #5E
#5F à #63
RO
RO
RW
RO
RW
RO
RW
RO
RW
RO
RW
RW
RW
RW
RW
RW
RO
RW
RW
RO
RW
RO
RW
RW
RO
RO
RO
RO
RO
RO
RW
RW
RW
RW
RO
RO
RO
RW
RW
RW
RW
RO
RO

RO = Read Only (lecture seule)
RW = Read/Write (Lecture et Ecriture).

Fonction 50 : DIRECT BIOS CALLS
Activation d'une fonction du BIOS.

  • Entrée : C = #32
    DE = Adresse du bloc de paramètres du BIOS (BIOS PB)
  • Sortie : Données renvoyées par le BIOS.

Cette fonction permet d'accéder aux fonctions du BIOS. Le numéro de la fonction à accéder et la valeur des registres en entrée sont spécifiés dans le bloc de paramètres (BIOSPB) dont l'adresse se trouve dans le registre DE en entrée de la fonction. Le bloc de paramètres doit avoir la structure suivante :
NomDimensionSignification
FonctionOctetNuméro de la fonction BIOS à accéder
Registre AOctetContenu du registre A
Registre BCMotContenu des registres B et C (*)
Registre DEMotContenu des registres D et E (*)
Registre HLMotContenu des registres H et L (*)


(*) Le premier octet va dans le second registre. Le second octet va dans le premier registre.

Fonction 59 : LOAD OVERLAY
Chargement d'un bloc de recouvrement (overlay)

  • Entrée : C = #3B
    DE = Adresse d'un FCB
  • Sortie : A = Code d'erreur
    H = Erreur physique

Cette fonction ne peut être utilisée que par les programmes résidants. Elle charge en mémoire un module relogeable ou absolu. Le FCB spécifié dans DE soit être ouvert avant d'activer la fonction BDOS 59.

Le registre A est nul en sortie de la fonction si elle a pu s'exécuter. Dans le cas contraire, le registre A contient un code d'erreur et le registre H un code d'erreur physique. Reportez-vous à la fonction BDOS 20 pour avoir la liste des erreurs possibles (voir Partie 3, Chap. 4.2.2 p. 10).

Fonction 60 : CALL RESIDENT SYSTEM EXTENSION
Appel d'un programme RSX.

  • Entrée : C = #3C
    DE = RSX PB (adresse du bloc de paramètres du RSX)
  • Sortie : A = Code d'erreur
    H = Erreur physique

Cette fonction permet d'activer une des fonctions d'une RSX. Cette fonction ainsi que les paramètres passés sont définis dans un bloc de paramètres dont la structure est la suivante :
NomDimensionSignification
FonctionOctetNuméro de la fonction RSX à accéder
NbParamOctetNombre de paramètres mots
P1MotPremier paramètre
......
PnMotParamètre n


Les fonctions RSX 0 à 127 sont à la disposition de l'utilisateur. Les fonctions RSX 128 à 255 sont réservées au système.

Les registres A et H contiennent #FF en sortie si le RSX spécifié n'est pas accessible.

Fonction 98 : FREE BLOCKS
Libération des blocs temporaires.

  • Entrée : C = #62
  • Sortie : A = Code d'erreur
    H = Erreur physique

Cette fonction libère tous les blocs occupés par des fichiers temporaires (c'est-à-dire des fichiers ouverts en écriture mais non fermés) sur tous les lecteurs connectés. Assurez-vous que vos fichiers ont bien été fermés avant d'appeler cette fonction, sans quoi, les données qu'ils contiennent seront perdues.

Le registre A contient la valeur 0 en sortie de la fonction si elle a pu s'exécuter. Dans le cas contraire, le registre A contient la valeur #FF et le registre H (en fonction du mode d'erreur) la valeur # 04 (lecteur invalide).

Fonction 99 : TRUNCATE FILE
Réduction d'un fichier à accès direct.

  • Entrée : C = #63
    DE = Adresse du FCB
  • Sortie : A = Code répertoire
    H = Erreur étendue ou physique

Cette fonction initialisé le dernier enregistrement d'un fichier au numéro d'enregistrement qui se trouve dans le FCB pointé par DE. Le fichier représenté par le FCB ne doit pas être ouvert.
La valeur retournée dans le registre A est 0 si la fonction s'est exécutée,

#FF si le fichier n'existe pas ou si le numéro d'enregistrement est fantaisiste. Le registre H contient (en fonction du mode d'erreur) une des valeurs suivantes :

ValeurSignification
#01Erreur d'entrée/sortie disque
#02Disque à lecture seule
#03Fichier à lecture seule
#04Lecteur invalide
#07Erreur dans le mot de passe du fichier
#09? dans le champ nom du fichier ou type du fichier

Fonction 100 : SET DIRECTORY LABEL
Modification d'une entrée de répertoire.

  • Entrée : C = #64
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Erreur étendue ou physiqùé

Cette fonction crée urt label de répertoire ou met à jour un label de répertoire existant. En entrée de la fonction, lé registre DE doit pointer sur l'adresse d'une FCB dans lequel se trouvent les champs nom, type et extension du label de répertoire.

L'octet 12 du FCB contient les informations suivantes :

BitSignification
7Nécessité de mot de passe pour les fichiers protégés
6Accès aux champs date et heure
5Mise à jour des champs date et heure
4Création des champs date et heure
0Affectation d'un nouveau mot de passe

Dans le cas où le fichier est protégé par un mot de passe, ce dernier doit se trouver dans les 8 premiers octets du DMA ou avoir été spécifié dans la fonction BDOS 106.

Si le bit 0 de l'octet 12 du FCB vaut 1, le nouveau mot de passe doit avoir été placé dans le second jeu de 8 octets du DMA.

L'Utilitaire INITDIR doit avoir été exécuté avant d'activer cette fonction pour permettre l'utilisation des champs date et heure.

Le registre A vaut 0 en sortie si la fonction s'est exécutée. Il vaut # FF dans le cas contraire, et le registre H contient un des codes suivants (si le mode d'erreur le permet) :

ValeurSignification
#01Erreur d'entrée/sortie disque
#02Disque à lecture seule
#04Lecteur invalide
#07Erreur dans le mot de passe du fichier

Fonction 101 : RETURN DIRECTORY LABEL DATA
Lecture d'un label de répertoire.

  • Entrée : C = #65
    E = Lecteur (0 = A, 1 =B.....15 = P)
  • Sortie : A = Octet d'information du répertoire H = Erreur physique

Cette fonction renvoie dans le registre A le label de répertoire du lecteur spécifié. Les bits de ce registre ont la signification suivante :

BitSignification
7Nécessité de mot de passe pour les fichiers protégés
6Accès aux champs date et heure
5Mise à jour des champs date et heure
4Création des champs date et heure
0Affectation d'un nouveau mot de passe


Le registre A vaut 0 en sortie si le label de répertoire est inexistant. Il vaut # FF si une erreur s'est produite. Dans ce cas, le registre H contient un des codes suivants {si le mode d'erreur le permet) :
ValeurSignification
#01Erreur d'entrée/sortie disque
#04Lecteur invalide

Fonction 102 : READ FILE DATE STAMPS AND PASSWORD MODE

Lecture des champs date et heure et du type de mot de passe.

  • Entrée : C = #66
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Erreur physique

Cette fonction renvoie dans le FCB tes informations date et heure et le type de l'éventuel mot de passe utilisé pour le fichier spécifié :
Octet(s)Signification
12Mot de passe
Bit 7 = en lecture
Bit 6 = en écriture
Bit 4 = en effacement
24-27Création ou lecture des champs date et heure
28-31Modification des champs date et heure

La valeur retournée dans le registre A est 0 si la fonction s'est exécutée, #FF si le fichier n'existe pas. Le registre H contient (en fonction du mode d'erreur) une des valeurs suivantes :
ValeurSignification
#01Erreur d'entrée/sortie disque
#04Lecteur invalide
#09? dans le champ nom du fichier ou type du fichier


Fonction 103 : WRITE FILE XFCB

ou d'un XFCB

  • Entrée : C = #67
    DE = Adresse FCB
  • Sortie : A = Code répertoire
    H = Erreur physique

Cette fonction crée un XFCB ou met à jour un XFCB existant. En entrée, le registre DE pointe sur un FCB pour lequel les champs nom, type et extension ont été initialisés. Le champ extension spécifie le type de mot de passe utilisé :

    • bit 7 = en lecture
    • bit 6 = en écriture
    • bit 4 = en effacement
    • bit 0 = affectation d'un nouveau mot de passe

Dans le cas où le fichier est protégé par un mot de passe, ce dernier doit se trouver dans les 8 premiers octets du DMA ou avoir été spécifié dans la fonction BDOS 106.

Si le bit 0 de l'octet 12 du FCB vaut 1, le nouveau mot de passe doit avoir été placé dans le second jeu de 8 octets du DMA.

La valeur retournée dans le registre A est 0 si la fonction s'est exécutée, # FF si le fichier n'existe pas ou si aucun label n'existe pour le répertoire spécifié. Le registre H contient (en fonction du mode d'erreur) une des valeurs suivantes :

ValeurSignification
#01Erreur d'entrée/sortie disque
#02Disque à lecture seule
#04Lecteur invalide
#07Erreur dans le mot de passe du fichier
#09? dans le champ nom du fichier ou type du fichier


Fonction : 104 SET DATE AND TIME

Initialisation de la date et de l'heure système.

  • Entrée : C = # 68
    DE = Adresse d'un buffer
  • Sortie : Aucune

Cette fonction initialisé les date et heure courantes. Le registre DE pointe sur un buffer qui contient les informations suivantes :
Octet(s)Information
0 et 1Date (1 = 1/1/1978)
2Heure (en BCD)
3Minute (en BCD)


Fonction 105 : GET DATE AND TIME
Lecture de la date et de l'heure système.

  • Entrée : C = #69
    DE = Adresse d'un buffer
  • Sortie : A = Secondes

Cette fonction renvoie les date et heure systèmes dans le buffer pointé par le registre DE. En sortie de la fonction, ce buffer contient les informations suivantes :

Octet(s)Information
0 et 1Date (1 = 1/1/1978)
2Heure (en BCD)
3Minute (en BCD)

Fonction 106 : SET DEFAULT PASSWORD
Définition du mot de passe par défaut.

  • Entrée : C = #6A
    DE = Adresse du mot de passe
  • Sortie : Aucune

Cette fonction définit le mot de passe par défaut. En entrée de la fonction, le registe DE soit pointer sur une zone mémoire de 8 octets dans laquelle se trouve le mot de passe.

Fonction 107 : RETURN SERIAL NUMBER
Lecture du numéro de série de CP/M Plus.

  • Entrée : C = #6B
    DE = Pointeur sur le buffer numéro de série
  • Sortie : Numéro de série initialisé.

Cette fonction renvoie le numéro de série de CP/M Plus dans un buffer de 6 octets pointé par le registre DE en entrée de la fonction.

Fonction 108 : GET/SET PROGRAM RETURN CODE
Lecture ou initialisation du code de retour.

  • Entrée : C = #6CH
    DE = #FFFF (Lecture) ou Code de retour (Ecriture)
  • Sortie : HL = Code retourné par le programme (le cas échéant)

Cette fonction lit ou définit un code de retour. Si le registre DE vaut #FFFF en entrée de la fonction, le code de retour du programme est renvoyé dans le registre HL. Si le registre DE est différent de #FFFF en entrée de la fonction, il est interprété comme le code de retour du programme.

Fonction 109 : GET/SET CONSOLE MODE
Lecture ou initialisation du mode d'écran.

  • Entrée : C = #6D
    DE = #FFFF (lecture) ou Mode (écriture)
  • Sortie : HL = Mode d'écran (le cas échéant)

Cette fonction lit ou initialisé le mode d'écran. Si le registre DE vaut #FFFF en entrée de la fonction, le mode d'écran est retourné dans le registre HL selon les conventions suivantes :
BitSignification
0si 0 : La fonction BDOS 11 renseigne la frappe d'une touche quelconque
si 1 : La fonction BDOS 11 renseigne uniquement frappe de la séquence Ctrl C
1si 0 : Les touches Ctrl S et Ctrl Q permettent (respec vement) de stopper et de reprendre l'affichage
si 1 : Les touches Ctrl S et Ctrl Q sont dévalidées
2si 0 : Fonctions de sortie normales
si 1 : Dévalidation des touches Tab pour les fonctions BDOS 2, 9 et 11 et de l'appui sur Ctrl P
3si 0 : Validation du Ctrl C
si 1 : Dévalidation du Ctrl C
8 et 9Etat de la console pour les RSX qui utilisent la redirection :
0 0 : Etat conditionnel
0 1 : Etat False
1 0 : Etat True
1 1 : Redirection

Fonction 110 : GET/SET OUTPUT DELIMITER
Lecture ou initialisation de délimiteur de sortie.

  • Entrée : C = #6E
    DE = #FFFF (lecture) ou E = Délimiteur de sortie (écriture)
  • Sortie : A = Délimiteur de sortie (le cas échéant)

Cette fonction lit ou initialisé le délimiteur de sortie. Si le registre DE contient # FFFF en entrée de la fonction, le délimiteur courant est retourné Jans Je registre A. Si le registre E ne contient pas la valeur #FF, il représente le code ASCII du nouveau délimiteur.

Le délimiteur par défaut est le signe dollar ($).

Fonction 111 : PRINT BLOCK
Envoi d'une chaîne vers CONOUT:.

  • Entrée : C = #6F
    DE = Adresse CCB (Character Control Block)
  • Sortie : Aucune

Cette fonction envoie la chaîne pointée par le CCB dont l'adresse se trouve dans le registre DE vers le périphérique CONOUT:.

Le format du CCB doit être le suivant :

OctetContenu
0 et 1Adresse de la chaîne
2 et 3Longueur de la chaîne


Fonction 112 : LIST BLOCK
Envoi d'une chaîne vers LST:.

  • Entrée : C = #70
    DE = Adresse CCB
  • Sortie : Aucune

Cette fonction envoie la chaîhe pointée par le CCB dont l'adresse se trouve dans le registre DE vers le périphérique LST:.

Le format du CCB doit être le suivant :
OctetContenu
0 et 1Adresse de la chaîne
2 et 3Longueur de la chaîne


Fonction 152 : PARSE FILENAME

Extraction d'un nom de fichier.

  • Entrée : C = #98
    DE = Adresse d'un buffer
  • Sortie : HL = Code de retour

Cette fonction crée un FCB à partir d'une chaîne ASCII de 128 caractères au maximum qui doit contenir une spécification de fichier sous la forme suivante :

[ < Lecteur: > ] < Nom > [. < Type > ][; < Passe > ]

    • où < Lecteur > est un nom d'unité,
    • < Nom > un nom de fichier,
    • < Type > un type de fichier,
    • et < Passe > un mot de passe.

Le registre DE pointe sur un buffer qui doit contenir les informations suivantes ::
TailleInformation
2Adresse de la chaîne
2Adresse du FCB


Les caractères blancs et tabulations sont éliminés de la chaîne, et le FCB est rempli en extrayant le premier nom de fichier valide dans la chaîne. Ce nom doit être suivi d'un des délimiteurs suivants :

Espace, Tab, Carriage Return, Nul, Point Virgule (;), Egal à ( = ), Inférieur à (< ), Supérieur à O), Deux points (:), Point (.), Virgule (,), Barre verticale (I), Crochet ouvrant ([), Crochet fermant (]).

La rencontre d'un autre caractère de code ASCII inférieur à 31 produit une erreur.


En sortie de la fonction, Je format du FCB est le suivant :

Octet(s)Signification
00 Lecteur (0 = par défaut, 1 =A:, 2 = B :, ...)
1 à 8Nom du fichier. Les caractères sont convertis en majuscules. Le nom est éventuellement complété avec des blancs.
9 à 11Extension, éventuellement complétée avec des blancs. Chaque caractère est converti en majuscule.
12 à 15Octets nuls.
16 à 23Mot de passe ou suite de blancs si aucun mot de passe n'est utilisé. Chaque caractère est converti l en majuscule.
24 à 31Réservé.


Une erreur se produit si le nom du fichier dépasse 8 caractères, si l'extension dépasse 3 caractères, ou si le mot de passe dépasse 8 caractères. Le registre HL est alors initialisé à #FFFF.

Si aucune erreur ne s'est produite, HL contient 0 si la chaîne a été entièrement parcourue et la position du prochain délimiteur, blanc, ou tabu-lation dans le cas contraire.

Page précédente : 3/4.2.1.2 - SCB (System Control Bloc)
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 310 millisecondes et consultée 1149 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.