Obligement - L'Amiga au maximum

Vendredi 21 juin 2019 - 02:14  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Assembleur - misc.resource et potgo.resource
(Article écrit par Max et extrait d'Amiga News Tech - juin 1991)


Résumons-nous : la disk.resource et la cia.resource n'ont plus de secrets pour vous (ou si peu). Il est donc maintenant temps d'aller voir du côté des ports série, parallèle et manette ce qui s'y passe.

Quelques lecteurs assidus m'ont téléphoné pour se plaindre du passage un tantinet "rapide" sur la disk.resource, car ils auraient bien aimé apprendre à programmer efficacement les lecteurs de leur Amiga, histoire de faire des démos qui se chargent vite et bien.

Alors d'abord, je n'ai pas honte d'avouer que moi, je ne sais pas comment on les programme directement, les lecteurs. Désolé, mais je préfère et de loin utiliser ce fabuleux système que les gens de chez Commodore-Amiga nous ont pondu. Chacun son truc. De plus, au sein d'une démo, on n'a pas besoin des ressources : on attaque directement le matériel sans demander son avis à personne. De toute façon, vu que l'on rend rarement la main au système après, on se fout un peu de tout remettre en état. Sinon, il reste toujours la réinitialisation (le premier qui me saute directement en ROM, je te me le... Bref, j'en fais de la confiture pour routiers sentimentaux).

La misc.resource

Celle-ci est réservée à ceux qui ont besoin d'une vitesse élevée et constante pour leurs transmissions séries et/ou parallèles. Le "misc" dans "misc.resource" est l'abréviation de "miscellaneous", que nous traduirons approximativement par "accessoire". Après avoir ouvert cette ressource à l'aide de OpenResource() (Cf. mois dernier), deux routines sont mises la disposition du programmeur : MR_ALLOCMISCRESOURCE() et MR_FREEMISCRESOURCE(). Jeu : devinez à quoi elles servent...

Que peut-on donc faite avec cette ressource ? C'est très simple : on s'approprie l'usage des ports parallèle et série ainsi que de leurs différents bits de contrôle. Un petit rappel au passage, l'interface série RS-232 fait partie de Paula (registres personnalisés SERPER et SERDAT) et elle est contrôlée par le port A du CIA B (adresse $BFD000) ; l'interface Centronics parallèle est incluse dans le port B du CIA pour les bits de données et est également contrôlée par le port B du CIA B. Oui, je sais : c'est un véritable bordel. Mais avec un peu de patience et beaucoup de méthode. on y arrive.

La routine MR_ALLOCMISCRESOURCE attend pour paramètre dans d0, le code de la ressource à allouer. On trouve les différents codes possibles dans le fichier Include "ri:sources/misc.i" :

Assembleur

MR_SERIALPORT demande l'accès à SERPER et SERDAT, MR_SERIALBITS au CIA A, MR_PARALLELPORT et PARALLEL_BITS aux CIA A et B. Il est préférable, lorsque l'on désire utiliser l'interface série et/ou parallèle, de se réserver le port et les bits, par deux appels successifs à MR_ALLOCMISCRESOURCE, histoire qu'une autre tâche ne se trouve pas bien embêtée si d'aventure elle s'amusait à vouloir elle aussi accéder à la même ressource que vous.

Contrairement à ce qui se passait avec le trackdisk.device et la disk.resource, il n'existe pas forcément de conflit entre la misc.resource et le serial.device ou le parallel.device, ces derniers n'étant pas constamment en train de travailler. Il va quand même de soi que si vous essayez d'allouer la ressource parallèle, par exemple, alors qu'un traitement de texte est en train d'imprimer, vous vous venez refuser son accès.

Autre point à signaler, un bogue du serial.device fait que s'il a été sollicité ne serait-ce qu'une fois depuis l'initialisation de l'Amiga, la ressource série ne sera jamais libérée, même s'il a terminé son boulot depuis belle lurette et gai luron réunis. Pour régler ce problème, le RKM "Libraries & Devines" propose d'utiliser la routine FlushDevice() ci-dessous, avant toute tentative d'accès à la ressource série. La routine que je vous présente est la version assembleur de celle publiée dans le RKM, page 907.

Assembleur

Ainsi, avant que d'essayer d'ouvrir la misc.resource dans le but de vous approprier l'interface sérielle, il vous faudra faire :

Assembleur

Ce qui n'est tout de même pas grand-chose, non ?

La potgo.resource

Celle-là, elle se charge de gérer les... ports souris et manette ! En fait, on l'utilise lorsqu'un contrôleur proportionnel, par exemple une manette analogique, est connectée à l'un de ces ports. Là encore, vous ne m'en voudrez pas, mais le but de cet article n'est pas de faire un court complet sur les manettes analogiques.

Grâce à la potgo.resource, on peut accéder directement et sans danger aux registres matériels POT0DAT ($DFF012), POT1DAT ($DFF014), POTGO ($DFF034), POTGOR ($DFF016) et au port A du CIA A ($BFE001).

La potgo.resource dispose de trois fonctions pour s'approprier certains bits de ces registres. POTGOR pouvant contrôler à la fois le port gauche et le port droit, il en faut en effet préciser à la ressource quels bits nous intéressent.

Assembleur

Cette fonction tente donc de réserver les bits décrits dans le paramètre "mask". En retour, "bits" doit être égal à "mask", sinon c'est que quelque chose s'est mal passé.

Assembleur

Devinez quoi ? Cette fonction libère les bits alloués avec la précédente, oui. Le paramètre "bits" est évidemment celui renvoyé par AllocPotBits().

Assembleur

Enfin, voici la routine qui vous permettra une valeur quelconque dans le registre matériel POTGO. Le paramètre "data" contient le mot de 16 bits à y écrire, et le paramètre "bits" est celui renvoyé par AllocPotBits. La raison en est que cette valeur servira de masque au système, pour être sûr que nous n'attaquiez que les bits qui vous sont réservés.

C'est fini

Bon, on arrêtera là les dégâts. Pour être sincère, je n'ai abordé ces deux dernières ressources que par soucis d'exhaustivité... Il est clair, je pense, qu'en-dehors des deux CIA, il vaut mieux laisser les devises s'occuper du matériel. C'est nettement plus facile et au moins, sans danger !


[Retour en haut] / [Retour aux articles] [Article précédent]