Suivez-nous sur X
|
|
|
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,
ALL
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
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" :
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.
Ainsi, avant que d'essayer d'ouvrir la misc.resource dans le but de vous approprier
l'interface sérielle, il vous faudra faire :
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.
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é.
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().
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 !
|