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
|
|
|
|
Point de vue : Assembleur et Amiga
(Article écrit par Charles Vassallo et extrait d'A-News (Amiga News) - août 1988)
|
|
Que les choses soient claires : je n'ai qu'une connaissance de bric et de broc de l'Amiga. Douze brics ici, neuf brocs là,
et pas grand-chose ailleurs. La vie serait triste si on ne parlait que de ce qu'on connaît à fond. Je vais donc parler
d'assembleur à ma façon. Si vous avez une expérience dans ce domaine qui contredise la mienne ou qui la complète, prenez la
plume à votre tour, pour le plus grand bénéfice des lecteurs de A-News - et le mien.
Pourquoi faire de l'assembleur ? Dans mon cas, par plaisir et par paresse. Le plaisir de commander directement le coeur de
la machine. Comme cela passe pour difficile, on savoure d'autant plus les réussites. Paresse : je suis généralement très
satisfait d'AmigaBasic et je n'ai jamais eu le courage de me mesurer au C ou à Modula-2. C'est lent ? Mettez-y un peu de
langage machine !
Parenthèse sur le BASIC
Parenthèse sur AmigaBasic : certains font la fine bouche sur cette survivance du passé et ne jurent que par les langages
totalement structurés genre C, Pascal, Modula-2. A la rigueur, quelques BASIC modernes (True Basic par exemple) également
très structurés. Les mêmes personnes daignent trouver un grand intérêt à l'assembleur et je trouve cela piquant, car
l'assembleur en lui-même est encore moins structuré que AmigaBasic.
A mon avis, le seul problème, dans n'importe quel langage, est de savoir écrire un programme que vous pourriez reprendre
un an après sans avoir à le réécrire en entier. Cela s'apprend, quels que soient les avantages ou les chausse-trappes
que le langage vous tend. Le grand intérêt d'AmigaBasic est de grandement simplifier la vie en gérant directement un large
éventail des ressources de la machine. Son grand inconvénient est qu'il stérilise plus de 100 ko en mémoire ; si vous avez
un gros programme graphique... Sa lenteur ? Revenons à l'assembleur.
Avez-vous déjà programmé une calculette de poche style HP41 ? Si oui, vous savez faire de l'assembleur. Un peu plus de registres,
un peu plus d'instructions, mais c'est la même philosophie.
Comment faire de l'assembleur ? Il faut satisfaire à trois conditions :
1. Avoir un programme assembleur, c'est-à-dire le logiciel qui va traduire les instructions symboliques comme "move.l d0,(a1)"
en code 68000.
2. Connaître les règles du jeu concernant le 68000 (ses registres, ses instructions, ses modes d'adressage).
Vous ne trouverez pas cela dans la notice de votre assembleur. En français, vous pouvez acquérir "Mise en oeuvre du 68000"
par C. Vieillefond (Sybex, 238 FF).
3. Connaître les règles du jeu du côté Amiga, c'est-à-dire son système d'exploitation. Rien en français (à part le manuel
AmigaDOS) ; la série des Reference Manuals (ROM Kernel I et II, Intuition, Hardware) par Addinson-Wesley, se trouve aisément
en France pour environ 1500 FF et... 2000 pages. Trop cher, trop gros ? Je comprends que vous hésitiez, mais c'est pourtant
indispensable pour tout travail sérieux. Notez qu'il s'agit des mêmes manuels techniques que pour faire du C ou du Modula-2.
Mais on deviendrait triste à toujours être sérieux. Si vous voulez seulement goûter à l'assembleur en réservant à plus tard
la décision d'investir plus... sérieusement, essayez donc "Amiga : le livre du langage machine", chez Éditions Micro Application
(199 FF). Je crois qu'il s'agit d'un très bon ouvrage d'initiation, qui se suffit à lui-même. On y trouve une présentation rapide
mais efficace des instructions du 68000, puis une succession de programmes permettant un véritable apprentissage, depuis de
simples programmes de conversion binaires/décimal/hexa jusqu'à une présentation solide de la programmation sous Intuition,
en passant entre autres par l'accès des registres machines et le travail avec les fonctions de la bibliothèque
DOS.
Le livre est écrit pour un assembleur bien précis : K-Seka de Kuma Computers Ltd (Royaume-Uni). On y propose aussi de se servir d'un
autre produit, Profimat de Micro Application, mais celui-ci ne serait disponible qu'en septembre 1988 (j'ai l'impression
qu'une version américaine existe déjà sous le nom Assem-Pro, commercialisée par Abacus). N'essayez pas de vous en sortir
avec le Macro-Assembler de MetaComCo ou l'un des produits disponibles dans le domaine public. Il faut absolument un produit
interactif où l'on passe instantanément de l'éditeur à l'assembleur et au débogueur et réciproquement.
K-Seka est idéal pour cela. Vous appuyez sur "Escape" et vous êtes dans l'éditeur. Vous tapez quelques instructions, vous
réappuyez sur "Escape" et vous êtes au niveau assembleur-débogueur. Vous tapez "a" pour assembler. En cas d'erreur,
l'assemblage s'arrête avec une indication sur la faute commise : parfait pour apprendre sur le tas ce qui est permis ou
interdit en matière de modes d'adressage. S'il n'y a pas d'erreur, votre programme est déjà chargé dans le débogueur.
Vous pouvez le lancer et l'arrêter où vous le souhaitez, puis poursuivre pas à pas pour vérifier si tout se passe bien dans les
registres et les mémoires. Ça ne va pas ? "Escape", et vous êtes de retour dans l'éditeur, où votre programme source attend
la suite de vos cogitations.
Pas de miracle
Ce livre aborde donc de nombreux domaines - plus en fait que je n'en ai pratiqués. Mais n'en attendez pas de miracle : on ne
peut pas résumer en 200 pages les 2000 pages des manuels de référence. Il y a donc des pans entiers de l'Amiga qui ne sont pas
effleurés, tout le système graphique par exemple, mais il fallait évidemment faire un choix. Il y a tout de même au moins
un oubli fâcheux : on ne dit pas qu'il faut répondre (avec "ReplyMsg") à chaque message reçu par Intuition et lu par GetMsg.
Ce manque de courtoisie envers le système risque de faire vivre le lecteur dangereusement, surtout s'il essaie de suivre
les mouvements de la souris. Sans que cela soit aussi grave, on peut aussi regretter le silence sur les fonctions "Wait" et "WaitPort"
que je crois indispensables à la philosophie multitâche de l'Amiga. Enfin, on peut regretter l'absence de références pour
approfondir l'étude du système.
Je voudrais citer une anecdote personnelle pour insister sur l'intérêt initiatique de ce livre. Après avoir acquis un Amiga,
j'avais rapidement cherché un assembleur pour faire une routine de calcul d'ensemble de Mandelbrot. A l'époque, je ne connaissais
que le produit quasi officiel de MetaComCo. Il n'était pas disponible en France et j'avais dû me contenter de K-Seka,
produit inconnu, avec pratiquement aucune information sur le système interne de l'Amiga. Cela ne m'avait pas gêné pour faire
ma routine, que j'avais interfacée au BASIC à grand renfort de "Peek" et de "Poke" mais j'avais dû ensuite laissé dormir
mon K-Seka, craignant fort de ne jamais pouvoir en tirer grand-chose sur l'Amiga.
Quand j'ai vu apparaître des articles d'initiation à l'assembleur dans des revues américaines, j'ai même acheté le Macro-Assembler
pour faire les exercices et c'est seulement là que j'ai compris comment je pouvais les transcrire sur K-Seka.
Du même coup, un exercice d'ouverture d'une fenêtre sous Intuition, qui demandait quelques jongleries de fichiers et de 5
à 10 minutes avec le Macro-Assembler, devenait quasi instantané ! Ce livre permet de faire l'économie de ce parcours spirituel
et de tout de suite expérimenter sur le système. A mon avis, c'est un ouvrage à recommander pour faire ses premiers pas en
assembleur sur l'Amiga, en dépit de ses limitations - à condition de le lire K-Seka (ou Profimat, quand celui-ci sortira)
en main.
Le problème des fichiers "include"
La grande différence entre K-Seka et les assembleurs plus classiques genre Macro-Assembler vient du traitement des fichiers
"include". Quand on programme l'Amiga, on passe énormément de temps à remplir des listes de variables, à appeler les fonctions
dans telle ou telle bibliothèque, puis à lire les listes de variables retournées par ces fonctions. Toutes ces variables ont
des noms officiels qui sont répertoriés dans ces fameux fichiers "include". Par exemple, pour savoir quel gadget
a envoyé un message au programme, on écrira :
include 'intuition.i'
......
move.l message,a0
move.l im_IAddress(a0),a1
......
|
Dans cet exemple, "message" est une adresse fournie par le programme, et "im_IAddress" est l'un de ces noms officiels. En fait,
c'est un nombre ($IC = 28), qui est calculé lors de l'assemblage de l'instruction "include", à partir du fichier "intuition.i".
C'est cet assemblage des fichiers "include" qui prend si longtemps avec le Macro-Assembler, tout simplement parce que
l'ensemble de ces fichiers est énorme (environ 270 ko). On n'appelle pas tout à la fois, mais on a vite fait d'en demander la moitié.
K-Seka règle le problème de manière expéditive : il ignore l'instruction "include". Il faut faire soi-même le travail correspondant
(ce n'est pas très difficile, simplement casse-pied) et remplacer la ligne "include" par :
(les points de suspension signifient qu'il faudra de nombreuses définitions de ce type, en fait pour toutes les variables système
dont on aura besoin). On pourrait aussi s'épargner la ligne de définition et écrire directement :
...mais comprendrez-vous de quoi il s'agit quand vous relirez votre programme un an après ?
Conclusion
On aura compris que suis très content de K-Seka. Il y a néanmoins quelques faiblesses qui peuvent être gênantes.
Il y a des problèmes entre le débogueur et l'extension mémoire ; je dois geler celle-ci avec un utilitaire du genre
NoFastMem pour tout programme impliquant la création d'un nouvel écran. L'assemblage conditionnel des macros ne fonctionne
pas toujours correctement. Je n'ai jamais été longtemps bloqué par ces misères, mais il faut préciser que je ne fais pas
de très longs programmes (je n'ai pas dépassé le millier de lignes). Peut-être d'autres problèmes plus graves sont embusqués
et attendent les programmeurs plus gourmands.
Cela ne change pas ma conclusion : K-Seka est un excellent outil pour s'initier à l'assembleur sur l'Amiga.
|