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
|
|
|
|
En pratique : Recommandations officielles du CATS aux programmeurs
(Article écrit par CATS et extrait d'Amiga News Tech - avril 1991)
|
|
Depuis le temps qu'on vous le dit et le répète : l'Amiga n'est pas une machine comme les autres ;
ne faîtes pas ceci, ne faîtes pas cela, au contraire faîtes comme ça... Voici une bonne fois pour toutes les
recommandations officielles des gens qui ont fait l'Amiga (le CATS, Commodore Amiga Technical Support).
La première chose à faire lorsque l'on programme "système" est d'utiliser les includes officiels de Commodore-Amiga,
et non des includes personnels, pouvant être source d'erreur dans certains cas, mais qui
surtout limitent la maintenance du logiciel en cas de mise à jour du système. Et ceci quel que soit
le langage utilisé : C, assembleur, Pascal, Fortran... Certaines sociétés proposent leurs propres
includes, souvent avec l'aval de Commodore-Amiga. Ceux-ci sont également sains à utiliser.
Règles générales de développement
L'environnement de l'Amiga est très différent de celui d'autres ordinateurs plus anciens.
L'Amiga est multitâche, ce qui signifie que plusieurs programmes doivent se partager la même machine
sans interférer les uns avec les autres. Cela impose quelques règles à suivre.
1. Assurez-vous toujours de recevoir ce que vous demandez : allocations de mémoire, fenêtres,
écrans, fichiers, bibliothèques, périphérique logique, ports, etc. Quand une fonction peut provoquer une erreur,
prévoyez une porte de sortie beaucoup de programmes mal écrits semblent fonctionner correctement,
jusqu'à ce que des conditions inhabituelles surviennent (manque de mémoire, disque corrompu...),
qui le font travailler avec des pointeurs invalides ou se brancher sur des routines non testées.
2. Faites le ménage derrière vous ! Cela s'applique aussi bien à une fin normale de programme
qu'à une sortie prématurée, à cause d'erreurs inattendues. Tout ce qui a été ouvert doit être
fermé, tout ce qui a été alloué doit être désalloué. Il est généralement conseillé de fermer en sens
inverse des ouvertures. Vérifiez dans le manuel de votre système de développement que les routines
startup ne libèrent pas certaines ressources pour vous en cas de terminaison anormale, pour ne pas
les libérer deux fois. Si vous programmez en C, faites en sorte que l'appui sur "Ctrl-C" provoque
toujours une porte dé sortie de votre programme.
3. Rappelez-vous que la taille mémoire, les périphériques et même les ROM
peuvent différer d'une machine à tuie autre. Ne supposez jamais comme valides certaines plages
d'adresses ou certaines noms de volumes, spécialement de disques durs. Ne sautez jamais directement
en ROM. Ne vous attendez pas à trouver certaines structures système à une adresse particulière.
La seule adresse absolue dans le système est l'adresse 0x00000004, qui contient l'adresse de base
d'exec.library.
4. Votre programme ne peut et ne doit jamais accéder au matériel directement. Le matériel
est contrôlé par un système qui n'apprécie guère les ingérences. Partager du matériel entre
plusieurs programmes requiert des protocoles stricts. Utiliser les interfaces définies pour vous
assurera votre logiciel de tourner sur les prochaines version de l'Amiga.
5. N'accédez jamais à des structures publiques sans les avoir au préalable réservées
("lock, verrou") : d'autres programmes que le vôtre peuvent vouloir y accéder en même temps.
6. Le système ne gère pas la pile de ses tâches. Attention au débordement de pile. Des
versions futures du système pourront réclamer plus d'espace libre sur la pile qu'actuellement.
Prévoyez large.
7. Si votre programme doit attendre des évènements extérieurs, comme la sélection d'un
menu ou l'appui sur une touche, n'entrez pas dans une boucle répétitive, qui ralentirait
considérablement le système. Laissez plutôt votre programme "en sommeil" avec Wait()
jusqu'à ce que l'évènement ait lieu. Assurez-vous de répondre avec ReplyMsg() à tous
les messages que le système ou d'autres tâches peuvent vous envoyer.
8. Les tâches et les processus s'exécutent dans le mode utilisateur du 68000. Le mode
superviseur est réservé pour les interruptions, les traps, et le partage du temps entre les
tâches. Faites très attention si certaines de vos routines s'exécutent en mode superviseur :
les exceptions en mode superviseur sont irréparables.
9. La plupart des fonctions du système requièrent certaines conditions particulières pour
fonctionner. Toutes les fonctions du DOS et celles qui peuvent appeler le DOS indirectement (comme
l'ouverture d'un périphérique logique, d'une bibliothèque...) ne peuvent le faire que depuis un processus. Une
tâche n'est pas suffisante.
10. N'interdisez pas le multitâche (par Forbid()) ou les interruptions (par Disable())
pendant de trop longues périodes. Il faut également savoir que toutes les fonctions qui, à
un moment ou à un autre, attendent (Wait()) brisent provisoirement l'interdiction du multitâche.
Ceci inclut les fonctions DOS et les entrées-sorties standard, comme printf().
11. Toutes les données des circuits spécialisés doivent être logées en mémoire Chip :
plans de bits, échantillons sonores, tampon mémoire pour le trackdisk, images, sprites, BOB...
La fonètion AllocMem() dispose d'un drapeau qui spécifie la mémoire Chip.
12. N'utilisez pas de boucles de temporisation ! Dans un environnement multitâche, une
même boucle peut s'exécuter deux à dix fois plus vite, selon le nombre de tâches actives et le
processeur utilisé. La fonction Delay() d'AmigaDOS assure un moyen simple d'attendre quelques
instants. Les deux 8520 disposent chacun de deux chronomètres que les programmeurs qui oublient
le système n'en on sans doute entendu parlé.
13. Obéissez aux conventions :
- Toute adresse accédant à un mot ou à un mot long doit être paire.
- Tous les pointeurs sont 32 bits (non 24). Les 8 bits supplémentaires ne doivent pas être
utilisés pour stocker des données.
- Tout champ non défini ou réservé dans une structure doit être mis à NULL, pour
compatibilité antérieure.
- L'allocation dynamique de structures assure qu'elles seront alignées sur des adresses paires.
Notes aux programmeurs en assembleur
1. N'utilisez pas l'instruction "TAS", qui assume un cycle indivisible de lecture-modification-écriture.
Le DMA système pourrait entrer en conflit avec ce cycle spécial.
2. Les fonctions du système sont appelées avec a6 pointant sur l'adresse de
base de la bibliothèque ou du périphérique logique concerné.
3. Sauf quand indiqué, les fonctions système peuvent utiliser les registres a0, a1, d0
et d1. Les autres registres sont préservés.
4. Les fonctions qui retournent une valeur n'affectent pas obligatoirement les drapeaux
du processeur. C'est au programmeur de s'assurer de la validité du retour (soit avec TST, soit
avec MOVE).
5. Compatibilité 60000/68010/68020/68030 :
- N'utilisez pas l'instruction "MOVE SR,...", privilégiée sur certaines catégories de 680x0.
Utilisez à la place GetCC-) d'exec.library.
- N'utilisez pas de code auto-modifiable.
Si vous suivez toutes ces recommandations, alors votre programme est assuré d'une longue
vie sur l'Amiga. Le non-respect de l'une de ces règles peut empêcher votre application
de fonctionner sur une machine particulière !
|