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 : GFA Basic - timer.device
(Article écrit par Pierre-Philippe Launay et extrait d'Amiga News Tech - janvier 1992)
|
|
En quelques années, GFA Basic a acquis une immense renommée, au point d'être possédé par environ un million
de personnes. Et c'est un juste retour des choses après ses débuts difficiles. Comme tout nouveau produit,
il avait souffert de nombreux bogues de jeunesse.
GFA Basic est maintenant plus performant que le C dans de nombreux domaines (NDLR : cet avis n'engage que l'auteur !).
Et on va le prouver. J'utilise la version 3.52F mais attention, la dernière version disponible en France est
la 3.042 (ni 3.1, ni 3.2, ni 3.3, ni même 3.4). Il faut également signaler qu'il existe plusieurs ouvrages,
publiés par Micro Application, qui traitent du GFA Basic version Amiga.
Un logiciel professionnel se reconnaît à la simplicité de son codage et à la puissance de son exécutable. Pour
commencer la série, je voulais frapper un grand coup en proposant un plasma, géré sur toutes les lignes
et non pas une ligne sur deux comme cela se voit trop souvent dans les démos. Micro Application me dit qu'il
serait plus professionnel de montrer la gestion d'un périphérique logique ("device").
Mais voilà, c'est compliqué pour des lecteurs ne connaissant que l'aspect BASIC du GFA.
Sauf peut-être le timer.device. Et en plus, on s'aperçoit de l'ignoble vérité : GFA est souvent plus rapide que
Lattice C, de 1% à 15%. Le programmeur recherche toujours trois choses : la simplicité, la rapidité et la
synchronisation. Le délai se calcule fréquemment avec les fonctions TIMER, DELAY et PAUSE. Pour plus de précision,
on utilise également souvent le blanc vertical avec le registre VPOSR. Ou mieux, on ouvre le dispositif approprié.
Le timer.device permet de gérer les deux chronomètres internes de l'Amiga grâce aux unités UNIT VBLANK et UNIT
MICROHZ.
UNIT_BLANK (valeur 1) sélectionne le chronomètre de synchronisation sur le retour du faisceau d'électrons.
C'est celui des longs moments (précision de 0,02 seconde). Avec UNIT_MICROHZ (valeur 0), on sélectionne
le chronomètre du CIA 8520, ultra-précis, mais qui accapare trop le microprocesseur pour être valable
sur des durées dépassant la seconde.
Peut-on programmer directement le matériel en GFA Basic ? Oui, mais ce n'est pas élégant. La vraie solution
passe donc par le timer.device, qui assurera la pérennité de vos applications avec l'évolution de l'Amiga.
Le codage commence par charger instantanément une image de cinq plans de bits. Heureux utilisateurs
des disquettes ANT,
vous êtes des privilégiés car vous aurez l'exécutable IMENSITE et la source IMENSITE.GFA
(deux fois 75 ko, dont une bonne partie pour l'image). On crée ensuite une structure de port que l'on étend
à 40 octets. Puis l'on ouvre le dispositif périphérique timer.device et l'on nomme les parties intéressantes
de la structure timerequest%. On est prêt, timer.device peut commencer à s'amuser.
Il charge donc le nombre de secondes écoulées depuis la création de l'univers, le premier janvier 1978,
peu de temps avant la naissance des mammouths préhistoriques. Après ces milliards et ces milliards de secondes, il
affiche sa différence. Le programme est fortement inspiré des pages 677 et suivantes de la Nouvelle Bible
de l'Amiga.
Rassasié, on referme le tout puis on passe à la deuxième partie qui utilise la fonction CurrentTime de la
bibliothèque Intuition. Une fois compilé, le codage se synchronise au début de la seconde suivante pour éviter
les aberrations de mesure, puis il teste la ou les fonctions désirées. Une boucle à vide met 64 cycles en
GFA Basic compilé avec un plan de bits de 320 pixels sur 256. Ce résultat varie bien sûr selon les autres
tâches en cours. Je trouve de 62 à 65 sur un Amiga 500, 68000 à 7 MHz, lecteur externe, 1 Mo de mémoire.
En Lattice C, on aura 70 cycles et plus. De même, pour afficher la lettre A avec printf('A'),
on met 10 535 cycles en Lattice C, contre 10 490 en GFA qui déteste pourtant le PRINT. En
utilisant des fonctions spécifiques GFA Basic, on descend à 1409 cycles, et moins quand on ruse.
Puis on passe à la troisième partie, qui ne dure que le temps que reste enfoncé le bouton de la souris.
|