Obligement - L'Amiga au maximum

Jeudi 21 mars 2019 - 00:16  

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 : Assembleur - Lister les types de périphériques logiques
(Article écrit par Max et extrait d'Amiga News Tech - juin 1991)


Une des possibilités les plus intéressantes d'AmigaDOS est de permettre la définition de périphériques logiques (devices) destinés à faciliter la progression de l'utilisateur dans les méandres de ses répertoires.

Tous ceux qui programment le système de l'Amiga le savant maintenant : il n'y existe qu'une seule adresse fixe, celle du pointeur sur la structure ExecBase. Toutes les autres structures importantes dont allouées dynamiquement à l'initialisation de la machine et peuvent donc se trouver n'importe où en mémoire, suivant la configuration actuelle (extensions, périphériques...). C'est pourquoi Exec est entièrement construit autour du principe fort, simple mais très astucieux des listes a des noeuds : pour un type donné de structure chacune indique l'adresse de sa "fille" (la suivante) et éventuellement, dans le cas des noeuds, celle de sa "mère" (la précédente). Le seul inconvénient de ce système est que si la liste n'est pas triée suivant au moins un critère, il faut la parcourir entièrement pour y retrouver un élément donné. Ceux qui ont déjà tâté des listes chaînées et autres arbres binaires savent de quoi je veux parler.

AmigaDOS, malgré le handicap certain que lui procure sa parenté BCPL, est construit de la même manière. Dans le cas qui nous intéresse, celui des périphériques logiques, la structure DosLibrary contient un pointeur, le premier de la liste, qui pointe sur le second, lui-même pointant sur le troisième, etc.

Arrivé ici, il convient de faire la distinction entre les périphériques au sens Exec et les périphériques au sens AmigaDOS. Pour le premier, un périphérique est une couche logicielle (un ensemble de routines) destinée à gérer une partie du matériel : trackisk.device, audio.device, etc.

AmigaDOS, quant à lui, distingue trois type de périphériques :
  • Les physiques. Ce sont les lecteurs de disquette DFx:, l'interface sérielle SER: et parallèle PAR:. etc.
  • Les logiques. Ce sont les répertoires qui ont été assignés avec la commande Assign comme Libs: ou S:.
  • Les volumes. Il s'agit ni plus ni moins que du nom réel de la disquette et/ou du disque dur, comme "Workbench:", "Work:" ou "Extras:".
La relation entre les deux types est les périphériques logiques AmigaDOS font appel aux périphériques logiques Exec. Ainsi, DF0: utilise le trackdisk.device. DH0:, le hddisk.device ou le scsi.device... Certains font plutôt appel aux gestionnaires (handlers) que l'on trouve dans le répertoire L: de la disquette Workbench : le Aux-Handler pour AUX:, le Speak-Handler pour Speak:, etc. Ce sont alors ces gestionnaires qui se chargent de communiquer avec le ou les périphériques logiques et bibliothèques adéquats, la seule exception étant RAM: qui ne communique avec rien d'autre que la mémoire, et n'a donc pas besoin de périphérique logique particulier.

Parcourir les listes

Comme on l'a dit plus haut, tous les périphériques logiques AmigaDOS chargés en mémoire sont chaînés entre eux, afin de permettre au système de les trouver facilement.

Ainsi, pour savoir quels sont les périphériques logiques présents à un moment donné - par exemple, dans le but de bâtir une requête de fichiers proposant un gadget pour chaque périphérique logique - il suffit de parcourir la liste en filtrant éventuellement les données jugées inintéressantes.

Le début de cette liste se trouve dans la structure DosLibrary. On y trouve un pointeur sur une structure RootNode contenant elle-même un pointeur BCPL sur une structure DosInfo, dans laquelle on trouvera, enfin, un pointeur BCPL sur la structure DeviceList du premier périphérique logique chargé. Cette structure DeviceList est en fait soit une structure DeviceNode, soit une structure DevInfo, suivant le type du périphérique logique concerné. En C, on appelle cela une union.

Toutes ces structures sont définies dans "libraries/dosextens.i" et "libraries/filehandler.i". On y trouve au même offset un mot long indiquant le type du périphérique logique qui peut être :
  • DLT_DEVICE (0) : périphérique physique.
  • DLT_DIRECTORY (1) : périphérique logique.
  • DLT_VOLUME (2) : volume.
Le meilleur moyen de parcourir cette liste est donc de le faire en trois étapes, une pour chaque type de périphérique logique. C'est ce que fait le programme proposé ci-dessous.

Le programme

Son but est d'afficher dans la fenêtre CLI ou Shell courante, la liste de chaque type de périphériques présents au moment de son exécution. L'affichage se fait en trois passes, histoire de bien séparer les trois types. Pour les périphériques physiques (type DLT_DEVICE), le nom du périphérique Exec ou du gestionnaire utilisé est également affiché.

Curieusement, c'est l'assembleur qui se prête le mieux à ce genre de manipulation, notamment à cause de sa facilité à jouer avec les pointeurs et les chaînes de caractères BCPL. Le même programme en C aurait obligé à faire appel à des routines de conversion BSTR vers CSTR.

En bonus, vous y verrez comment gérer l'interruption utilisateur par l'appui sur Ctrl-C. Rien, à part peut-être ma belle-mère, n'est plus énervant qu'un programme qui ne s'arrête pas quand on le lui demande.

Assembleur
Assembleur


[Retour en haut] / [Retour aux articles]