Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 08:53  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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 liens 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, AmigaDOS utilise les segments ("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 décalages 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]