CODING ★ Catalogue et heresie ★

Bidouilles ACPC n°30 - Catalogue et heresie
Comme vous l'avez remarque, depuis quelque temps on vous apprend a piloter des formules 1 pour être dignes des plus grands de ce monde. Mais attention...

Piloter oui, mais ne pas confondre la conduite avec la mécanique. En deux mots, pour l'instant on s'occupe des vecteurs système pour ensuite être capable de se débrouiller sans. Plus tard, nous verrons comment faire la cour aux circuits de votre bécane comme la lecture et écriture des secteurs, le tout sans aucun appel système (euh, dis p'tit Poum, ça fait un peu plus de deux mots, non ?).

LE CATALOGUE

On est toujours épate de voir a la teloche les sondages genre: "'3,24 % des Français mettent deux sucres dans leur café du matin." Si on considère que 34,65 % des Français ne prennent pas de café et que, pour le reste, 12,92 % n'aiment pas le sucre, on comprend facilement pourquoi les journaux informatiques ludiques consacres exclusivement aux CPC ayant des pages de bidouilles écrites par Sined et Poum marchent si fort (NDSepth : et l'age du capitaine, t'y as pensé à l'age du capitaine ?).

Pour faire ce type de sondage, ceux de l'INSEE et autres boites envoient sur le terrain des agents pour voir qui a quoi dans le ventre. Sur CPC c'est pareil, on place une disquette dans la fente de notre bête préférée, on envoie ragent répondant au matricule BC9B, il va faire un tour du cote de chez Fred et revient avec plein d'informations. Mais pour ne pas rester dans l'abstrait, suivons de très près une journée de notre agent BC9B enquêteur de catalogues.

TOUS LES MATINS...

Au petit matin, après une bonne douche, l'agent BC9B saute dans son falzard et sans prendre son café (car il fait partie des 12,92 %) (NDSepth : avec combien de sucres ?) se rend au bureau. La secrétaire :
— Salade de lokoum.
— De lokoum salade.

Elle lui donne le planning de la journée: tu vas travailler sur la ville Face A dans le quartier User-Courant. N'oublie surtout pas, avant de partir, tu préviens monsieur DE de l'emplacement qu'il doit te réserver pour stocker tes informations, sinon il les mettra ou bon lui semble et, pour les retrouver, bonjour l'angoisse.

Et voila notre héros sorti des sentiers battus a la recherche d'informations. Comme tout aventurier, il pourra rencontrer un paquet de problèmes, par exemple, une zone occupée par le Basic ou ses variables. Dans ce cas, la Carry sera a 0 et le flag Zéro a 1 (donc, si le buffer est occupe, JR NC ou JR Z Erreur).
La lecture peut être vaine car l'utilisateur avait oublie d'insérer la disquette, ou encore impossible (disque non formate, etc.). Mêmes résultats, mêmes tests. Dans le cas contraire, si tout se passe bien, la Carry est a 1 et le Zéro a 0 (JR C ou JR NZ Pas d'erreur).

Comme vous le constatez, si vous voulez traiter les erreurs, de deux choses l'une, ou on tient compte de l'erreur rencontrée par remplacement d'un buffer occupe. Dans ce cas. on branche la routine d'erreur par un JR NC,ERR ; dans le cas contraire, on ne traite que les erreurs de lecture en se branchant par un petit JR Z,ERR.

Tout ça c'est bien gentil, mais pour utiliser ce docteur il faut savoir encore quelques petits trucs que l'on ne trouve pas dans les livres, seulement dans les bidouilles du Cent Pour Cent (vous me direz, c'est pour ça que l'on nous paye si mal).

Les données du catalogue sont stockées, si tout va bien. dans le buffer pointe par DE avant rappel du vecteur. L'organisation est légèrement différente de ce que l'on a l'habitude de voir avec des éditeurs de secteur comme Disco et compagnie. Le début du fichier est marque par un 255, sa longueur est de 11 dont 8 pour le nom et 3 pour l'extension (le point séparateur n'apparaît pas dans les noms des fichiers, OK?).
Encore un dernier détail, rappel du BC9B n 'empêche en rien l'affichage de la belle page de catalogue a l'écran. Pour supprimer cet inconvénient, il suffit de poker avant rappel de la routine un &C9 a l'octet &BB5A et le remplacer par &CF des son retour.

Pour être encore plus complet, on peut également inhiber les messages d'erreur de l'Amsdos (Disc missing, Read fail, etc.) en passant par des vecteurs comme le BC6B qui ne marche absolument pas sur 6128 ou les RSX cachées du Dos qui, elles, par contre, marchent très bien. Mais c'est une autre histoire.

L'AUTRE HISTOIRE DES RSX

Il existe neuf RSX qui ne peuvent être appelées a partir du Zicba. Imaginez toute cette puissance inexploitable. Leur emploi est assez délicat mais loin être impossible. Tout est dans le passage de paramètre. Avant de voir comment elles fonctionnent, voici quelques explications. Avec ces commandes, vous pouvez autoriser ou interdire l'affichage des messages d'erreur (sympa pour réécrire la commande CAT), initialiser les paramètres du disque (sympa pour les accès super rapides), sélectionner un format particulier (sympa pour les copains), lire et écrire directement les secteurs en mémoire (sympa la grammaire), formater les pistes (sympa les scratchages), balader la tête de lecture sur les pistes (sympa comme boite a rythme), lire le statut du lecteur (sympa comme lecture) et enfin fournir le nombre d'essais pour les opérations de lecture, formatage et écriture (sympa tatrac).

La première commande inhibe et autorise l'affichage des messages d'erreur, je dirais même plus, non seulement elle interdit l'affichage, mais elle ne lance même pas la routine des erreurs (en deux mots, rien a l'écran et pas de R, I ou C a faire, juste a gérer a sa manière).

LA MAGIE DE L'AMSDOS

Les RSX, moins connues sous le nom de Résident System eXtension, si notre mémoire ne nous fait pas défaut, sont des petits programmes uniquement en langage machine qu 'on appellera directement a partir du Basic par l'intermédiaire d'un mot clef dont l'initiale est '|' sur Qwerty et "ù" sur les claviers Azerty. Malheureusement, les RSX consacrées a ce sacre con de lecteur vont de 1 a 9. Comme la première lettre des tokens est aussi la dernière, donc la seule, il faut mettre son bit 7 a 1, soit ajouter 128 a son code ASCII (format des RSX oblige). De ce fait, les RSX sont difficilement implantables sous Basic. Même si leur installation était réalisable, le format des paramètres qu 'elles réclament n'est pas matériellement possible depuis ce langage dit évolue. Il est donc obligatoire de passer par une petite moulinette en langage machine permettant de récupérer les informations si précieuses au bon fonctionnement des routines.

Si nous vous montrons comment appeler ces programmes résidant en ROM a partir du Basic, faire la petite moulinette si chère aux puristes du Basic sera pour vous un jeu d'enfant. Voici donc le problème soumis:

Comment appeler une RSX a partir de son nom tout en sachant que nous aurons besoin de presque tous les registres, donc l'impossibilité de passer son adresse par run de ceux-ci. C'est ici que tout se corse. Heureusement que l'Amsdos contient un petit vecteur a l'adresse &18. Ce RST (ReStarT) permet de lancer une routine située sur une ROM de second plan. Pour cela, il suffit de le faire suivre par un mot contenant l'adresse d'un tampon contenant lui-même l'adresse de la routine (un mot), puis du numéro de ROM (un octet). Cela donne rembrouillamini infâme que nous avons utilise dans le source ci-joint. Par exemple, si nous parlons de lancer une routine imaginaire située en &CCCC sur la ROM 3, étant donne que ces données seront a l'adresse &4000, il nous suffit d'écrire:

RST &18
DEFW &4000
RET

Le vecteur ira chercher avant tout l'adresse du tampon, soit &4000, puis y prendra le mot contenant l'adresse de la routine, soit &CCCC et enfin soutirera de la mémoire l'octet de commutation de ROM comprenant la valeur 3. Cette forme d'appel est très pratique car aucun des registres, si ce n'est IX, n'est modifie par ce lancement. Comme les conditions d'entrée des RSX utilisent souvent HL, il n'est pas possible de travailler avec un autre vecteur ; presque tous nécessitent ce double registre. Seules quelques opérations, comme l'inhibition des messages d'erreur, ne font pas appel a HL et sont donc accessibles différemment.

;Prg1
ORG #9000
ENT $
; Cherche l'adresse du RSX.
LD HL,COMM
CALL #BCD4
RET NC
; Actualisation du tampon.
LD (AD) , HL
LD A,C
LD (ROM) ,A
; Mise en place parametres
; de la routine a appeler.
LD HL,#8000
LD C,#Cl
LD D,0
LD E,D
; Appel de la routine (les
; deux octets qui suivent
; pointent sur le tampon
; contenant l'adresse et le
; numéro de ROM desires). RST #18
DW AD
RET
; Adresse de la routine.
AD DW 0
; Numero de ROM.
ROM DB 0
; RSX de lecture de secteur
COMM DB #84
;

;Prg2
LD HL,NUMCOM
CALL #BCD4
; Si erreur, casse toi.
RET NC
; Sinon, inhibe les
; messages d'erreur.
LD A,#FF
JP #1B
NUMCOM DEFB 1+#80
;

C'EST DE SA FAUTE

Je tiens a signaler haut et fort que si nous manquons ici de place, c'est parce que Poum s'est largement étale, voire répandu sur le catalogue. Nous tacherons être plus concis le mois prochain. En attendant, bons RSX.

Et Sined dans le Poum, ACPC n°30, oct 90, p58-59

Page précédente : Bidouilles ACPC n°29 - Le secret des disquettes

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

Lien(s):
» Coding » Assembleur ACPC n 02 - Les vecteurs d'interruption
» Coding » Assembleur ACPC n°26
» Coding » Bidouilles ACPC n°16 - Bidouilles bizarres
» Coding » Bidouilles ACPC n°37 - Gestion de la matrice de caractere
» Coding » Assembleur ACPC n°24
» Applications » Rodos Catalogue (RODOS disc tree reader)
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 301 millisecondes et consultée 2179 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.