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
DEVEROUILLAGE
D'UN ENREGISTREMENT

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é.
En sortie : A = 0

POSITIONNEMENT
DU COMPTEUR
MULTI-SECTEURS

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
En sortie : A = 0 si pas de problème et 0FFH sinon.

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
E = 0FFH si on désire retour à l'appelant sans affichage
E = 0FEH si on désire retour à l'appelant avec affichage
E = toute autre valeur différente des 2 précédentes pour le mode par défaut, c'est-à-dire message d'erreur et arrêt du programme.
En sortie : pas de code retour. Rappel : en cas de retour à l'appelant, le registre A est à 0FFH et le registre H contient le code de l'erreur physique.


Figure 1

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.).
En sortie : A = 0FFH si erreur physique et code dans H.

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.
Si E = 0 les valeurs seront les valeurs par défaut du CCP.
En sortie : rien.

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
En sortie : A = 0 si OK et 0FFH en cas d'erreur, code physique dans H.


LECTURE/ECRITURE DU SYSTEM CONTROL BLOCK

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.
- 1 octet indiquant le type de l'opération que l'on veut réaliser :
- 0FFH : écriture d'un octet
- 0FEH : écriture d'un mot de 16 bits
- 00H : lecture
- 1 ou 2 octets contenant l'octet ou le mot à écrire.
En entrée : C = 49 DE = adresse du bloc de contrôle de 4 octets maxi.
En sortie : en cas de lecture, A contient l'octet présent à l'offset demandé et HL contient le mot.

La figure 2 vous donne un exemple d'utilisation de cette fonction.


Figure 2

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.

CPC n°25

★ ANNÉE: ???
★ AUTEUR: Francis VERSCHEURE

Page précédente : Initiation a CP/M (16/xx)

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Initiation a CP/M (03/xx) (CPC Revue n°9)
» Coding » Initiation a CP/M (16/xx) (CPC Revue n°23)
» Coding » Initiation a CP/M (02/xx) (CPC Revue n°8)
» Coding » Initiation a CP/M - Amstrad Magazine 10 - les Commandes Transitoires - les Fonctions Internes
» Coding » Initiation a CP/M (04/xx) (CPC Revue n°10)
» Coding » Initiation a CP/M (07/xx) (CPC Revue n°13)
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/c
Page créée en 342 millisecondes et consultée 1627 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.