MOTOROLA 68000 - architecture et programmation




PRELUDE

Avant de commencer, je tiens à remercier C.Pascalada pour ces nombreux articles d'initiations sur l'assembleur 68000 parus dans ST-Magazine ainsi qu'a C.Vieillefond auteur de nombreux ouvrages de référence dont l'excellent "Mise en oeuvre du 68000" ( Edition Sybex ).

Pour une consultation plus rapide dans cette page, un sommaire dynamique est à votre disposition. Au sein de chaque rubrique, vous trouverez le symbole qui vous permettra de revenir à ce sommaire.

I) PRESENTATION
--------------------------------------------------------------------------------------------------
II) ARCHITECTURE ET NOTIONS ESSENTIELLESA) Modèle de programmation et registres internes
B) Fonctionnement de la pile
--------------------------------------------------------------------------------------------------
III) PROGRAMMATIONA) Jeu d'instructions
B) Modes d'adressages
B.1/ Adressage absolu
B.2/ Adressage direct de registres
B.3/ Adressage immédiat
B.4/ Adressage indirect de registres
B.5/ Adressage relatif au compteur programme
--------------------------------------------------------------------------------------------------
IV) OUTILS DE DEVELOPPEMENT


I) PRESENTATION

Le 68000 est un microprocesseur CISC 16/32 bits sorti en 1979. il devint rapidement le processeur le plus prisé de sa génération. Le formidable succés des machines comme le Mac, l'Amiga ou l'Atari est en grande partie due à cet innovant processeur.

Voici les caractéristiques du composant :

- Mémoire adressable de 16Mo ( 24 lignes d'adresse ).
- Jeu d'instruction trés complet ( 56 Instructions ).
- 14 modes d'adressage différents.
- 8 registres de donnée 32 bits.
- 7 registres d'adresse 32 bits.
- Gestion de privilèges ( Utilisateur / Superviseur ).
- Deux pointeurs de pile 32 bits différents.

Le terme 16/32 bits résume la façon dont le circuit manipule les données. Le bus de données interne est sur 32 bits mais le processeur communique avec le reste du monde sur un bus externe de 16 bits.

Aujourd'hui la série "microprocesseur 680x0" se compose du 68010, 68020, 68030, 68040 et 68060. Ces processeurs constituent la base des versions microcontroleurs 683xx. Les caractéristiques de ces composants ainsi que de nombreux manuels utilisateurs peuvent être télécharger sur le site de MOTOROLA.

Je vous conseille vivement de télécharger et d'imprimer le manuel utilisateur du 68000 ( Format Acrobat Reader / 800Ko ). Cet ouvrage constituera une référence indispensable pour cette initiation et pour vos futures créations.

II) ARCHITECTURE ET NOTIONS ESSENTIELLES

A) Modèle de programmation et registres internes

Voici le modèle de programmation du 68000. Tous les registres sont sur 32 bits excepté le registre d'état CCR 16 bits.

Petit rappel sur les formats de données :

Quartet = 4 bits
Octet = 8 bits
Mot / Word = 16 bits
Long mot / Long Word = 32 bits

Les registres de données et d'adresses sont banalisés à l'exception de A7 aussi appelé SP ( Stack pointer ) qui représente le pointeur de pile.

En interne, il existe en fait deux pointeurs différents l'USP ( User Stack Pointer ) en mode utilisateur et le SSP ( Supervisor Stack Pointer ) en mode superviseur.

Il s'agit toujours du registre A7, le 68000 utilisant implicitement l'un ou l'autre en fonction de son mode de fonctionnement.

Le mode utilisateur est le mode classique de fonctionnement du processeur, c'est dans ce cadre que la plupart des applications sont exécutées. Le mode superviseur autorise un accés complet aux ressources systèmes, il est habituellement utilisé par le système d'exploitation.


Le registre d'état CCR ( Condition Code Register ) est divisé en deux octets. Le registre complet est accéssible en mode superviseur. Dans le mode utilisateur seul l'accés à l'octet de poid faible est autorisé.

Bit Z: positionné si le résultat d'une opération est nul.
Bit V: positionné s'il y a dépassement arithmétique.
Bit C: positionné si une retenue est générée.
Bit X: bit de retenue pour les opérations de calculs étendues.
Bit N: positionné si le résultat d'une opération est négatif.

Les bits I0 à I2 représentent le niveau du masque d'interruption. Les interruptions dont le niveau est inférieur ou égal au masque ne sont pas prisent en compte. ( Cf tableau ci-contre ).

Le bit S définit le mode de fonctionnement du processeur, 0 pour le mode Utilisateur et 1 pour le mode Superviseur.

Le bit T, s'il est positionné met le processeur en mode trace. Dans ce mode, le processeur s'arrête aprés l'execution de chaque instruction et génère une exception permettant, par exemple, la mise en place d'un programme de débuguage.

Sans entrer dans le détail, une exception est un évènement matériel ( interruptions ) ou logiciel qui déroute le processeur vers une procédure particulière. Je reviendrais sur ces notions ultérieurement.


B) Fonctionnement de la pile

Examinons le fonctionnement de la pile, un élément fondamental pour le fonctionnement du processeur. La pile est en fait une portion de mémoire dont l'adresse se trouve dans A7 et qui permet la sauvegarde temporaire de données. On parle d'empilement lors d'une écriture dans la pile et de dépilement lors d'une lecture. Ce processus est utilisé, soit automatiquement par le micro lors de l'appel d'un sous-programme par exemple, soit par le programmeur.

Pour bien comprendre le fonctionnement d'un pile, on peut imaginer la pile comme une pile d'assiettes de différentes couleurs. En prenant comme condition initiale A7=10, on empile une assiette bleu, une assiette rouge puis une assiette verte. L'assiette bleu sera stockée en position 10, la rouge en 9 et la verte en 8, au final A7 vaut 8. L'opération de dépilement est identique à l'empilement mais à l'envers, en récupère l'assiette verte, la rouge puis la bleu et A7 revient à sa position initiale soit 10.

On peut remarquer que lors du processus d'empilement la première assiette empilé est bleu, lors du dépilement c'est la dernière. C'est pour cette raison que l'on parle de pile LIFO ( Last In First Out ) le dernier élément empilé sera le premier dépilé. En remplaçant les assiettes par des données, nous arrivons au diagramme ci-contre.

Pour information, il existe un autre type de pile appelée pile FIFO ( First In First Out ). Dans ce cas le premier élément empilé sera le premier dépilé.


III) PROGRAMMATION DU 68000

A) Jeu d'instructions

Les instructions du 68000 peuvent être classer en huit catégories. Toutes les instructions sont présentées en détail dans le manuel utilisateur ( Section 2 - Chapître 2.5 )

Instructions de transfert de données



Instructions arithmétiques


Instructions d'opérations décimales


Instructions d'opérations logiques


Instructions de décalages et de rotations


Instructions de test de bits


Instruction de contrôle programme


Instruction de contrôle système


L'écriture d'une instruction utilise toujours le schéma suivant :

Mnémonique.Taille du traitement(.B, .W, .L) opérande(s) source(s),opérande(s) destination(s)


B) Modes d'adressages

Le type de donnée contenu dans le champ opérandes caractérise le mode d'adressage. Il existe 14 modes d'adressage distincts, déterminant le procédé utilisé permettant d'accéder à une donnée avant son traitement.Les divers modes possibles peuvent être regrouper en cinq rubriques.

1/ Adressage absolu

Ce mode d'adressage est caractérisé par la présence dans l'instruction de l'adresse de l'opérande. Il existe deux variantes à ce mode : L'adressage absolu court et absolu long selon que l'adresse de l'opérande est donnée sur 16 et inférieur ou supérieur à 16 Bits.

MOVE.L $1000,$2000 ( Abs. court ) - Tranfert 32Bits de la donnée présente en $1000 en $2000
MOVE.L $10000,$2000 ( Abs. long ) - Transfert 32Bits de la donnée présente en $10000 en $2000.

2/ Adressage direct de registres

Ce mode d'adressage est caractérisé par la présence dans le champ opérande en source ou en destination d'un registre interne.

MOVE.L A2,D1 - Tranfert de la valeur de A2 dans D0

3/ Adressage immédiat

Dans ce mode, la donnée à traiter est directement contenu dans l'instruction

MOVE.L #$10,D0 - Chargement dans D0 de la donnée #$10

4/ Adressage indirect de registres

Ces modes sont trés intéréssants pour le programmeur. Si vous programmez en C, vous devez connaitre les pointeurs. Et bien c'est encore plus facile de les manipuler en assembleur 68000.

4.a/ Adressage indirect simple

Le registre d'adresse spécifié dans l'instruction contient l'adresse de l'opérande

MOVE.L (A0),D0 - Transfert de la valeur pointée par A0 dans D0

4.b/ Adressage indirect postincrémenté

La définition est la même que précédemment. Dans ce mode la valeur du registre d'adresse est modifié aprés traitement de l'instruction. ici on a incrémentation le registre d'adresse aprés l'exécution de l'instruction.

MOVE.L (A0)+,D0 - Transfert de la valeur pointée par A0 dans D0 puis incrémentation de la valeur de A0. Cette valeur d'incrémentation N dépend de la taille du transfert 32Bits (.L), on ajoute 4 (Long = 4 octets), 16 Bits (.W) on ajoute 2 ( Word = 2 Octets ) et 8Bits (.B) on ajoute 1 ( Byte = 1 Octet ).

On peut tout aussi bien écrire ceci. Attention, ça se complique un peu.
MOVE.L (A0)+,(A1)+ - Transfert de la valeur pointée par A0 à l'adresse spécifié par le contenu de l'adresse pointée par A1 puis incrémentation des deux registres.

4.c/ Adressage indirect prédécrémenté

La définition est la même que précédemment. Dans ce mode la valeur du registre d'adresse est modifié aprés traitement de l'instruction. ici on a décrémente le registre d'adresse avant l'exécution de l'instruction.

MOVE.L -(A0),D0 - Transfert de la valeur pointée par A0-N dans D0. idem pour la valeur de N, elle dépend de la taille du transfert 32Bits (.L), on enlève 4 (Long = 4 octets), 16 Bits (.W) on enlève 2 ( Word = 2 Octets ) et 8Bits (.B) on enlève 1 ( Byte = 1 Octet ).

MOVE.L -(A0),-(A1) - Transfert de la valeur pointée par A0-N à l'adresse spécifié par le contenu de l'adresse pointée par A1-N.

4.d/ Adressage indirect avec déplacement

La définition est la même que précédemment. Dans ce mode la valeur du registre d'adresse n'est pas modifié. Le micro fait la somme en interne entre le déplacement est l'adresse spécifié par le registre d'adresse.

MOVE.L $200(A0),D0 - Transfert de la valeur pointée par A0+$200 dans D0.

4.e/ Adressage indirect indexé avec déplacement

La définition est la même que précédemment. Dans ce mode la valeur du registre d'adresse n'est pas modifié. Le micro fait la somme en interne entre le déplacement, le contenu du registre d'index et l'adresse spécifié par le registre d'adresse.

MOVE.L $200(A0,D0),$200 - Transfert de la valeur pointée par A0 + $200 + D0 à l'adresse $200.

5/ Adressage relatif au compteur programme avec déplacement

Le principe de ce mode est le même que le précédent mais en travaillant avec le PC ( Program Counter ).

MOVE.L $10(PC),$200 - Transfert de la valeur pointée par le PC + $10 à l'adresse $200

Voilà pour l'essentiel, Il reste quelques subtilitées mais nous les analyserons plus tard. Attaquons maintenant le plus intéressant : La programmation. La meilleure façon d'apprendre restant la pratique !!!!


III) OUTILS DE DEVELOPPEMENT

Pour vous lancer dans la programmation, je vous propose deux excellents logiciels l'un sous environnement Dos, l'autre sous Windows. Ces logiciels permettent la saisie du programme, son assemblage et sa simulation. Les documentations sont inclues dans les archives.


68000 Editor, Assembler & Simulator pour Windows
Un programme de XRMX Software Solution
Taille 1.4Mo
25/07/99
Système de developpement 68000 sous Dos
Un programme de Marwan Shaban
Taille 160Ko
25/07/99


J'attend vos commentaires et critiques sur cette page pour la faire évoluer en fonction de vos attentes.

A bientôt





Go Back