★ CODING ★ INITIATION A CP/M - CPC n°25 ★ |
Initiation a CP/M (18/xx) (CPC Revue n°25) |
Nous poursuivons ce mois-ci notre étude avec les fonctions présentes uniquement en CP/M Plus, c'est-à-dire celles dont le numéro est supérieur à 40. VERROUILLAGE Ce sont les fonctions 42 et 43 qui n'ont aucune action en CP/M Plus, mais sont présentes pour assurer la compatibilité avec MP/M, le système d'exploitation multitâche et multiposte de Digital Research. En entrée : C = 42 ou 43 DE = adresse du FCB du fichier concerné. POSITIONNEMENT Rappelons que toutes les opérations de lecture ou écriture de CP/M travaillent au niveau "secteur CP/M", c'est-à-dire 128 octets. Cette fonction permet de positionner un compteur qui donnera le nombre de "secteurs" de 128 octets que l'on va lire ou écrire en une seule opération. En entrée : C = 44 E = la valeur du compteur multi-secteurs POSITIONNE LE MODE ERREUR DU BDOS Cette fonction permet de choisir la façon dont le BDOS va traiter les erreurs physiques, telles qi: une erreur de lecture sur disque ou d'écriture sur imprimante par exemple. Par défaut, le BDOS affiche un message explicatif de l'erreur qui vient de se produire, puis termine le programme en cours et redonne la main au CCP. Il est possible de modifier ce comportement pour obtenir deux autres actions : la première, aucun affichage de message d'erreur et retour au programme appelant avec un code explicatif ; la deuxième, affichage d'un message d'erreur avant retour à l'appelant toujours avec un code. En entrée : C = 45 LECTURE DE L'ESPACE LIBRE SUR UNE DISQUETTE Cette fonction permet de connaître, par programme, le nombre d'enregistrements de 128 octets disponibles sur une disquette donnée. Le résultat est un chiffre binaire sur trois octets, de même nature qu'un numéro d'enregistrement en mode "Random", c'est-à-dire une valeur sur 16 bits suivie d'un octet en général à 0. Ce résultat est inscrit dans les 3 premiers octets du tampon DMA courant (voir fonction 26). En entrée : C = 46 E = Numéro de l'unité où se trouve la disquette (A = 0 B=1, etc.). Taille en nombre de "secteurs" de 128 octets dans les trois premiers octets de l'adresse DMA courante. ENCHAINEMENT DE PROGRAMME Cette fonction permet dans un programme de donner le contrôle à un autre programme tout comme la commande RUN "Nom de Fichier" du BASIC. Elle permet donc un développement de programmes modulaires en assembleur, ou même un appel d'un programme écrit dans un autre langage, l'appel d'un utilitaire, etc. En effet, le mécanisme invoqué est le chargement du CCP et le passage au CCP de la ligpe de commande que l'on a stockée à l'adresse courante du DMA. Bien sûr, une fois cette fonction exécutée, le programme appelant n'est plus actif et est remplacé en mémoire par l'appelé. La ligne de commande passée est terminée par un octet à 0. En entrée : C = 47 E = OFFH si on désire que le CCP initialise numéro de USER et disque courant aux valeurs du programme appelant. ECRITURE FORCEE DES TAMPONS CP/M Plus utilise, pour optimiser les accès aux disquettes, des zones de travail en mémoire appelées Tampons (Buffers en anglais). Ceci a pour conséquence que lorsqu'un programme demande une écriture d'un enregistrement dans un fichier, cet enregistrement n'est pas toujours physiquement écrit dans le fichier concerné, mais stocké dans un tampon. Ceci peut avoir pour effet une perte de données en cas de coupure d'alimentation secteur par exemple. Pour éviter cela, il est donc possible de demander l'écriture forcée de tous les tampons sur les supports physiques concernés. En entrée : C = 48 E = OFFH si on désire en même temps "vider" les tampons
Le System Control Block (SCB) est une zone du BDOS de 100 octets qui contient, comme son nom l'indique, un certain nombre de paramètres du système. Cette zone ne doit en aucun cas être adressée directement et la fonction 49 est destinée à son utilisation. La figure 1 vous indique la signification des zones accessibles, une croix dans la colonne RO indique que cette zone est une zone Read Only, c'est-à-dire qui ne doit pas être modifiée par l'utilisateur. Pour utiliser cette fonction, il faut créer un bloc de contrôle de quatre octets maxi qui est composé comme suit : - 1 octet donnant l'offset de la zone dans le SCB. La figure 2 vous donne un exemple d'utilisation de cette fonction.
Voilà, le mois prochain notre article sera un peu spécial car consacré uniquement à la fonction 50 qui permet l'interfaçage avec le BIOS et sera illustré par la liste complète d'un utilitaire permettant lecture et écriture physique d'un secteur sur une disquette.
|