Obligement - L'Amiga au maximum

Dimanche 24 septembre 2017 - 12:39  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · 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 in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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 - Disk Compare
(Article écrit par Xavier Leclercq et extrait d'Amiga News - octobre 1991)


Disk_Compare est une commande CLI/Shell pour comparer deux disquettes.

Autrefois (je vous parle de la préhistoire sur C64) on trouvait facilement des copieurs qui permettaient de comparer rapidement une disquette à sa copie. Sur Amiga, même la disquette Workbench contient un utilitaire pour réaliser une copie de sauvegarde (DiskCopy). Mais c'est une copie + une vérification qui sont réalisées. Même si l'on peut retirer l'option "Verify", ce que d'ailleurs de nombreux copieurs permettent, il est frustrant de ne pouvoir vérifier le contenu piste par piste de deux disquettes sans faire la copie. Ce n'est pas non plus vraiment un "CheckDisk", mais cela peut remplir le même rôle.

Bref, sur Amiga je n'ai pas eu connaissance d'un utilitaire permettant cette comparaison... Sauf évidemment celui que je vous propose et qui est écrit entièrement en assembleur et largement commenté.

Quel assembleur ?

J'ai choisi l'A68K et le Blink classique comme éditeur de lien disponibles dans le DP (sur de très nombreuses disquettes Fish). Mais le programme est très facilement transposable sur n'importe quel assembleur (il suffit de changer les "DS" en "BLK" pour le Seka par exemple).

Quelques remarques concernant l'A68K

Toutes les commandes doivent être précédées d'une tabulation ou bien d'espaces. Il est important de différencier les majuscules des minuscules sinon l'assembleur ne trouvera pas la référence. Par exemple, si l'étiquette est "Erreur:" et que vous voulez faire "lea erreur(pc),a0" l'assembleur ne pourra traduire (car "E" est différent de "e").

Une fois l'encodage du programme terminé (Compare.S), vous devez l'Assembler et l'éditeur de lien. L'assembleur "traduit" le programme source Compare.S et crée alors un programme objet.

1> A68K Compare.S

Ensuite, il faut effectuer le lien qui relie une séquence de démarrage au programme objet pour le rendre exécutable.

1>Blink Compare.O

Optimisations

Le Seka accepte les "move.l $4.w,a6" mais l'A68K ne l'accepte pas.. Si vous travaillez avec Seka pensez à modifier les lignes utilisant cette séquence pour une meilleure optimisation.

Pour éviter les adressages en absolu devant être placés à des endroits différents de la mémoire l'AmigaDOS utilise les "hunks". Il s'agit donc d'une reconstruction d'adresse absolue à partir du "registre de base" depuis lequel le programme est chargé.

Cela prend de la place et du temps. Pour ne pas tomber dans ce piège, il suffit d'utiliser des instructions à adressages relatifs :

lea MSG(pc),a0

Ou bien :

pea MSG(pc),a0 move.l (a7)+,d0

A la place de...

move.l #MSG,a0

Même remarque pour les instructions de branchements : "BSR" à la place des "JSR". Concernant les branchements, un saut court "BSR.S" à la place d'un saut long "BSR.L" permet une optimisation certaine.

Pour une portabilité maximale du programme, j'ai préféré mettre directement les valeurs des offsets des fonctions des bibliothèques plutôt que d'utiliser les EQU, =, et autres signes cabalistiques dont on peut très bien se passer si le programme est correctement commenté. A plus.

Assembleur
Assembleur
Assembleur
Assembleur
Assembleur


[Retour en haut] / [Retour aux articles]