Obligement - L'Amiga au maximum

Vendredi 17 août 2018 - 13:18  

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 : GFA Basic - Temporisation
(Article écrit par Denis Obriot et extrait d'Amiga News Tech - mars 1990)


La rapidité d'exécution d'un programme gêne beaucoup moins les utilisateurs et les programmeurs que ce qu'on imagine. Par contre, un point important est la temporisation. Depuis des années les programmeurs en BASIC font leurs temporisations avec des boucles du style :

FOR i=1 TO 10000: NEXT

Si vous voyez un programme qui fonctionne avec un 68000 et ne fonctionne pas avec un 68020, il y a de fortes chances que ce soit à cause d'une boucle de ce genre. Ceci vient du fait que le 68020 va deux fois plus vite que le 68000 et que la boucle va s'exécuter elle aussi deux fois plus rapidement. Cela peut-être extrêmement gênant dans le cas d'un jeu qui devient injouable car trop rapide. Mais aussi dans beaucoup d'autres applications.

Il existe beaucoup de solutions pour obtenir des délais précis. Je ne parlerai pas de la commande Delay() de l'AmigaDOS qui n'est absolument pas précise pour des temps inférieurs à deux secondes. Les solutions valables passent soit par le circuit CIA 8520, soit par l'interruption de temps mort vertical. Ces deux solutions étant accessibles par le biais du timer.device, nous n'aurons pas besoin d'aller visiter le matériel (Ouf !).

Le chronomètre

Le CIA 8520 est le chronomètre (timer) programmable qui permet d'obtenir des délais inférieurs à la seconde très précis. Par contre, il s'essouffle facilement sur les grandes distances car il utilise trop le processeur. Pour avoir une bonne exactitude avec le 8520, il faut utiliser la fonction du système Disable() suivie de Enable(). En général, il est déconseillé d'utiliser ces fonctions et recommandé d'utiliser Forbid() et Permit() car Disable() désactive aussi les interruptions et gèle le système. C'est exactement ce qu'il nous faut si nous voulons avoir une synchronisation précise. De plus, comme le système n'est arrêté que pour une durée infime, celle de notre mesure, rien de trop grave ne risque d'arriver.

La synchronisation de l'interruption Vertical Blank est moins précise sur de courtes périodes mais plus en ce qui concerne les grandes. Si vous voulez attendre plus d'une seconde utilisez-le donc.

Programme d'exemple

Le programme suivant vous montre comment accéder aux chronomètres en GFA Basic. J'ai retrouvé les offsets de la structure "timerequest" grâce au ROM Kernel Manual Includes & AutoDoc d'Addison-Wesley qui contient une table des structures du système avec la taille de chaque élément. L'utilisation de ABSOLUTE est un truc qui permet de simuler une structure en mémoire. ABSOLUTE place une variable (1n_type par exemple) à l'adresse où l'on a décidé de la mettre. Cela est très pratique pour adresser les registres du matériel et comme ici pour utiliser facilement une structure.

J'ai également réécrit CreateExtIO et DeleteExtIO car CreatExtIO ne fonctionne pas correctement en GFA Basic alors que DeleteExtIO n'existe pas. Le reste du code contient la création du port de messages. L'initialisation de la structure timerequest (ici timereq%), l'ouverture du timer.device et son utilisation. Comme le timer.device peut aussi renvoyer l'heure, j'en ai profité pour vous faire une petite horloge.

GFA Basic
GFA Basic
GFA Basic
GFA Basic


[Retour en haut] / [Retour aux articles]