CODING ★ L'ERE DES SIXTIES ★

Bidouilles ACPC n°31 - RSX

RSX : l'art de créer et d'appeler des programmes et extensions assembleurs sous Basic et système. Si certains sont connus, d'autres sont peu utilisés. Les voici.

QUE CHOISIR

Comme vous l'avez constaté le mois dernier, l'appel d'un RSX de l'Amsdos peut se faire soit en passant par le RST #18.

soit par un petit JP #1B de derrière les fagots. Il existe cependant, entre ces deux appels, des différences fondamentales. Premièrement, l'adresse de la routine, à laquelle sera branché le programme, est contenue dans l'adresse pointée par les deux octets suivant le RST (d'où le DW AD dans notre routine de lecture de secteur du mois d'octobre). Alors qu'en passant par le JP #1B, on charge cette adresse dans le registre HL. Dans le cas de l'appel au #1B. on comprend aisément que le registre HL ne passera aucun paramètre, car il est déjà occupe à faire l'aiguilleur dans ce monde ô combien complexe qu'est l'univers des circuits de nos machines.

Ne cherchez pas plus longtemps l'avantage du #1B, il est tout simplement plus facile à programmer et nous prendra moins la tête pour passer les paramètres à la routine, basta. Vous avez eu le courage de nous suivre le mois dernier ? Il est donc tout à fait naturel que vous attendiez avec impatience les routines qui vous permettront d'écrire les données, directement sur la disquette. Pour cela nous allons procéder par étape.

ECRIS, KIKI, ECRIS

L'RSX, nommé par le code ASCII 5 , s'occupe à merveille de l'écriture des secteurs. Pour cela nous allons à travers le vecteur #BC34 demander son adresse qui, dans le cas présent, se trouve en ROM. Pour le bon fonctionnement de cette opération, HL pointe sur l'adresse d'un octet contenant le numéro de notre RSX avec le septième bit du dernier octet de sa chaîne (le seul dans le cas des RSX de l'Amsdos) à 1.

Il se peut, qu'une erreur quelconque vienne perturber le déroulement des opérations : dans ce cas, la Carry est faux et on retourne chez même à l'aide d'un Ret NC. Dans le cas contraire, la routine est exécutée et en retour HL contient l'adresse en Rom
de la routine RSX.

Sachant que cette adresse sera utilisée par le RST #18, je ne me donnerai pas la peine de vous expliquer le stockage de HL derrière le RST. Idem pour le numéro de ROM qui sera stocké au label correspondant en passant par le registre C.

Il ne nous reste plus qu'à initialiser les paramètres qui seront passés à la routine. En l'occurrence, l'adresse du butter d'écriture (la zone mémoire qui va bientôt être sauvée sur le disque) qui est pointée par HL, le numéro du secteur qui est chargé dans le registre C. celui de la piste dans D, sans oublier celui du lecteur chargé dans le registre E qui est égal à zéro pour le lecteur A et 1 pour le lecteur B. Pour les fauchés qui n'ont pas les moyens de se payer un deuxième lecteur, on utilisera toujours le lecteur A , donc E=0.

THIS BIT IS ELECTRONIQUE

Pour les plus futés d'entre vous qui vont travailler grâce à nos routines (si vous nous le demandez en masse et que Sined trouve le moyen d'être là au bon moment) sur des secteurs de plus de 512 octets, je signale que le système se débrouille comme un grand et écrit les données mémoire, tant que le secteur n'est pas rempli. Donc pas de bile à se faire côté taille (il va de soit que cela est également valable pour la routine de lecture du mois passé). Vous pourrez buter sur moult problèmes lors de l'écriture d'un secteur, comme la rencontre avec les pistes non ou mal formatées, des disquettes absentes dans le drive et je ne sais quoi encore. Pour cela, un conseil d'ami : testez toujours le flag C après l'écriture de vos précieuses données. Si la Carry est vrai (ou égal à 1), l'écriture s'est passée sans problème ; dans le cas contraire, vous serez avertis d'une anomalie qu'il faudra traiter par les moyens adéquats.

UN PEU D'INITIATIVE, VOYONS

Vous ayez dores et déjà tout le matos nécessaire pour faire vos écritures et lectures secteur sans passer par les horreurs que sont les fichiers et tous les inconvénients qu'ils traînent derrière eux.

Prenez votre courage à deux mains, rehaussez la tête, respirez un bon coup et formatez une disquette. Chargez une image écran (ou utilisez les bla-bla lors de l'initialisation de votre bécane). Sauvez cette page écran sur la disquette en l'écrivant secteur par secteur. Sachez d'ailleurs q'une image est formée de &4000 octets, donc stockée sur 32 secteurs. Si mes calculs sont bons, vous devez réussir à rentrer le tout sur 3 pistes et 5 secteurs. Vous devrez utiliser des boucles pointant sur les pistes et secteurs de votre choix. Quant au pointeur de zone d'écriture, il sera incrémenté de 512 octets à chaque écriture. Faites également le chemin inverse en rappelant cette image, et je vous garantis que vous ne pourrez plus vous passer de ces routines qui donneront un look d'enfer à vos programmes et vous feront gagner de précieux octets sur vos disquettes (une disquette formatée en 41 pistes de 9 secteur pourra stocker 189 ko au lieu des 178 classiques). Vous connaissez désormais le principal. Il reste cependant six autres RSX que nous ne pourrons traiter en détail : mais pour être-complets, nous vous donnons un résumé des fonctions que vous utiliserez sans trop de problème.

AIE, AIE AIE, PAS SUR LA TETE

Le RSX 2 initialise les paramètres du disque. On l'appelle en faisant pointer HL sur une zone de huit octets contenant les données. Les octets 0 et 1 contiennent le temps d'accès après le démarrage du moteur. Vous pouvez donc régler ce temps, sachant qu'il est exprimé en cinquantièmes de seconde. Sa valeur par défaut est d'une seconde.

Dans le même registre, si je puis m'exprimer ainsi, les octets 2 et 3 stockent le temps d'arrêt du moteur après les lectures et écritures sur la disquette. Comme pour le démarrage du moteur, la valeur stockée est exprimée en cinquantièmes de seconde et sa valeur par défaut est de 5 secondes. Vous pouvez modifier ces valeurs, en évitant de descendre trop bas car rien ne peut être instantané, même avec un CPC. L'octet 4 donne le temps de retombée du courant d'écriture qui est exprimé en dizaines de microsecondes avec 175 comme valeur par défaut. L'octet 5 vous donnera le temps de positionnement de la tête de lecture sur les secteurs des pistes. L'unité de ce temps est en millisecondes et sa valeur par défaut est de 15. Comme pour les temps de démâtage et d'arrêt, n'abusez pas des bonnes choses. Le sixième octet stocke le temps de déplacement de la tête de lecture d'une piste à l'autre. On l'exprime également en millisecondes et par défaut il en contient 12. Il ne nous reste plus que l'octet 7 qui donne le temps de retrait de la tête de lecture et l'octet 8 qui donne le temps de chargement de la tête et indicateur DMA.

ET LES FORMES, ALOUETTE

Le RSX 3 sélectionne le format de la disquette. Vous trouverez son utilité lors du chargement des secteurs du catalogue, etc. Pour l'appel de ta routine, l'accu contient le numéro du premier secteur d'une piste. Ces valeurs sont &41 pour les formats système, &C1 pour les formats data et &01 pour le format IBM qui n'est utilisé par personne (car il faut être fou pour formater une disquette en système et virer ce dernier pour perdre de la place, m'enfin...). Dans le cas des deux dernier RSX, sachez que tous les doubles registres sont modifiés.

UN FORMAT VITE FAIT

Il existe un RSX portant le code ASCII 6 qui s'occupe du formatage des pistes de vos disquettes. Il est hors de question de développer cette commande en trois lignes car cela demanderait des explications sur les ID et tout le comment du pourquoi des pistes et secteurs.

Sachez simplement que HL doit pointer avant l'appel sur un tampon contenant les données de l'en-tête , alors que le registre D contient le numéro de la piste à formater et E le numéro de drive (0 pour A et 3 pour B). Si vous voulez en savoir plus, écrivez-nous et, selon la tendance du marché, on vous refilera toutes les informations nécessaires pour formater vos disquettes avec plein de pistes bourrées de secteurs zarbis.

ON ARRETE LES DEGATS

L'appel du RSX 7 déplace la tête de lecture sur la piste de votre choix. Pour cela, placez dans le registre D le numéro de cette piste et dans E le numéro du drive (comme d'habitude, E=0 pour le drive A et 1 pour le drive B). Si le système ne rencontre pas de pétouilles, la Carry est vraie. Vous voulez tout savoir sur l'état de votre disquette ? Pas de problème, appelez le RSX 8 de l'Amsdos et il vous donnera tout ce que vous avez toujours voulu savoir sans jamais oser le demander.

Vous avez tout simplement à placer dans l'accu le numéro du drive (comme d'habittide) et si après l'appel la Carry est vraie, l'accu contiendra diverses informations déchiffrables à la lecture des bits de. ce dernier. En effet, le bit 6 vous indique si oui ou non le 5 vous dit si une disquette est dans le drive, et le zéro le drive sélectionné. Le bit 4 vous indique si la tête de lecture est bien positionnée sur la piste zéro. Les autres bits ne servent que de décoration.

POUR FINIR, LES RSX

En appelant le RSX 9 de l'Amsdos, vous positionnerez le nombre d'essais lors des erreurs de lecture ou d'écriture. Il suffit de placer cette valeur dans l'accu et le tour est joué. Sur ce, on vous laisse bosser comme des fous, et on vous prépare plein de bonnes choses comme la gestion des sons, les enveloppes de fréquence et le volume. Et si cela ne vous convient pas, écrivez-nous pour nous faire profiter de vos suggestions.

Poum & Sined, A100 n°31

Page précédente : Bidouilles ACPC n°30 - Catalogue et heresie

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

Lien(s):
» Coding » Bidouilles ACPC n°38 - Lecture sans AMSDOS
» Coding » Bidouilles ACPC n°13 - Bidouilles pas bidon - MODE 1 en 13 couleurs
» Coding » Bidouilles ACPC n°34 - Banques de mémoire
» Coding » Assembleur ACPC n°10: ADES un assembleur d'enfer
» Coding » Bidouilles ACPC n°37 - Gestion de la matrice de caractere
» Coding » Bidouilles ACPC n°14 - Les secrets du GATE ARRAY (1/2)
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 279 millisecondes et consultée 2356 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.