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
|
|
|
|
Le courrier des lecteurs d'Amiga News Tech - décembre 1991
(Rubrique animée par OK et Cancel et extraite d'Amiga News Tech - décembre 1991)
|
|
Débutant en assembleur
Bonjour. Connaissant le BASIC et ayant quelques notions d'assembleur sur une autre machine, je souhaiterais
maintenant apprendre l'assembleur sur Amiga. Je dois donc acquérir un certain nombre de logiciels et de
livres. Quel est à votre avis la meilleure configuration (assembleur, débogueur, environnement permettant à
fois de travailler avec l'assembleur et le débogueur) ? Et quels sont les livres nécessaires (initiation à
l'assembleur, dictionnaire des mnémoniques, ouvrages détaillant le jeu d'instructions du 68000 ou le système...) ?
Et où puis-je trouver ces livres ?
[Benoît Kerdraon, Brest].
Réponse
D'accord, mais c'est la première et la dernière fois que nous répondons à ce genre de lettre : beaucoup de
"débutants" sur Amiga sont dans votre cas, et 80% du courrier que nous recevons pose ces mêmes questions.
Veuillez donc tous bien noter ce qui va suivre, on ne le répétera pas.
Le meilleur environnement de développement en assembleur est à notre humble avis, on n'a pas cessé de le dire,
le Devpac version 2 de la société anglaise HiSoft : éditeur, assembleur et débogueur travaillent de concert
et main dans la main et garantissent un développement rapide et sûr. Toutefois, de petits nouveaux font
leur apparition depuis quelque temps, notamment AsmOne de l'allemand DMV-Verlag, pas mal non plus dans son
genre. Pour les petites bourses, nous vous conseillons de vous tourner vers le domaine public : A68K, pour
ne citer que lui, est un excellent assembleur (qui ne présente qu'un seul défaut, celui d'être incapable
de produire un fichier exécutable sans passer par une phase supplémentaire d'édition de liens).
Côté livres, en plus de l'ANT, il faudra (qui a dit hélas ?) vous tourner du côté de Micro Application :
"Bien Débuter en Assembleur", "Le Livre du Langage-Machine", "La Bible de l'Amiga"... vous permettront, une
fois toutes les erreurs détectées et corrigées, de vous en sortir. Par la suite, si vous désirez vous attaquer
plus avant au système multitâche, les "ROM Kernel Manuals" (en trois volumes) seront indispensables.
Divers ouvrages sur le 68000 lui-même existent çà et là, le meilleur étant - je pense - "Mise en Oeuvre du 68000"
par Christine Viellefond aux éditions Sybex. Sachez également que le mode d'emploi du Devpac contient un
guide du MC68000, véritable petit bijou que tout programmeur en assembleur se devrait de posséder.
Appel de programme du CLI, encapsuler un programme
Chère ANT, je me permets de vous écrire afin que vous puissiez apporter un peu de lumière au pauvre programmeur
que je suis. Je voudrais connaître le moyen d'appeler un programme systématiquement après que toutes les
tentatives de recherche ont échoué et ce à partir de n'importe quel CLI. Par exemple, on tape "bonjour" et
si le programme bonjour n'existe pas (ou bien s'il n'est pas trouvé dans le chemin courant), ce programme par
défaut s'exécute pour afficher, par exemple, "tu t'as gouru".
Je cherche aussi à encapsuler un programme, comme pour IF, ELSE, ECHO...
du Shell d'ARP (ASH), mais pas à la manière du CSH, c'est-à-dire un programme lancé,
qui prend la main et utilise ses propres fonctions pour les exécuter et donc avec aucune modification possible.
Ceci dans le but de créer une sorte de Shell qui serait adaptable au plaisir de chacun, mais qui prendrait moins
de place sur disquette et éviterait de jouer au grille-pain pour ceux qui n'ont qu'un seul lecteur. Quelles sont
les limites de Forbid() et Disable(), dans quelle mesure peut-on les utiliser sans risquer un effondrement du
système ?
Quelques remarques avant de vous quitter. D'abord, quelques erreurs se sont glissées dans
l'article de Loïc Far sur le MC68000 : l'instruction MOVE générale se code comme suit :
15 14 | 13 12 | 11 10 09 08 07 06 | 05 04 03 02 01 00
0 0 | Taille | Adresse effective | Effective Adresse
Où "Size" égale 01 pour un octet, 11 pour un mot et 10 pour un mot long, "Adresse effective" est codée comme
expliqué dans le premier article, ainsi que "Effective adresse", avec toutefois inversion des tribits,
c'est-à-dire Registre (3 bits) + Code-Op (3 bits). De plus, certaines instructions n'ont pas tous les modes
d'adressage. Mais sinon, l'article était bien fait, et je le remercie de l'avoir écrit
[Olivier Garrigues, Lunel].
Réponse
Si l'on excepte le fait qu'ANT est masculin (on dit un Amiga NewsTech, eh oui, qui l'eût cru ?),
votre lettre est exemplaire. Laissez-nous donc vous remercier comme vous le méritez. Merci donc, et
tout d'abord pour cette longue lettre elle-même, dont nous n'avons évidemment pu publier que
quelques passages.
Merci également pour les rectifications apportées à l'article de Loïc Far. Comme quoi personne n'est
jamais parfait... Désolé, mais nous ne sommes pour l'instant pas en mesure de répondre à vos questions
sur le chemin et l'encapsulation de programmes... Avec quelques recherches, la première pourra sans
doute être rapidement résolue (nous vous tiendrons au courant)... Quant à la seconde, je crains qu'il
ne vous faille renoncer à cette idée. Une solution acceptable, aux résultats identiques, serait de profiter de
la possibilité de résidence de quasiment toutes les commandes CLI : une fois en mémoire, elles y restent,
et ce sont les mêmes segments de code qui sont réutilisés à chaque appel...
Forbid() interdit le multitâche, c'est-à-dire qu'Exec ne gère plus le partage du temps processeur
entre les différentes tâches actives, gestion qui intervient à chaque interruption, lesquelles sont
d'ailleurs toujours autorisées. Car c'est justement Disable() qui se charge de les interdire, et donc
le multitâche avec. Le problème, c'est que certaines tâches particulières du système, comme le keyboard.device
et le trackdisk.device, comptent énormément sur la disponibilité d'autres sous-tâches qui leur sont
rattachées... Ainsi par exemple, si vous travaillez en mode multitâche et appelez Fobrid() ou Disable()
pendant un accès disque, des erreurs de lecture peuvent survenir. Par contre, il n'y a aucun problème à
interdire les interruptions, même pendant une très longue période, si votre programme s'approprie la
machine entière (démo, jeu...). Le retour au système (si retour au système il y a...) ne posera aucun problème.
|