Obligement - L'Amiga au maximum

Samedi 31 mai 2025 - 15:53  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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() d'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 décalages 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]