Laboratoire Architecture et Systèmes


Introduction

Les kits 68332 ne possèdent pas par défaut de mémoire de masse, ils ne possèdent donc aucun des outils habituels nécessaires à la création de programmes (compilateur, éditeur de liens) ni de système d'exploitation pour gérer l'ensemble. Développer des programmes pour de telles machines ne peut se réaliser que si l'on dispose d'une autre machine, dite machine de développement, qui elle, comporte ces outils. Nous utiliserons donc les stations de travail HP du Labo comme machine de développement croisé.

Quand on développe sur une machine des programmes devant s'exécuter sur une autre machine, on dit que l'on fait du développement croisé. Les outils utilisés dans ce cas s'appelle outils de développement croisés, les outils habituels, ceux qui génèrent des programmes qui devront s'exécuter sur la même machine s'appellent outils de développement natifs.

La machine sur laquelle on fait le développement s'appelle machine hôte (la station de travail). La machine sur laquelle s'exécutent les programmes s'appelle machine cible (le kit 68332).
 

 Le développement croisé

En développement natif,  le programmeur doit passer par les étapes suivantes:

    - édition du programme source.
    - assemblage/compilation et édition de liens .
    - exécution du programme sur la machine.

En développement croisé c'est un peu plus compliqué:

Sur la machine hôte (la station HP):

    - édition du programme.
    - assemblage/compilation croisé (génération de code pour processeur 68k de notre kit)
    - édition de liens adaptée a la machine cible (le kit 68332) et non  pour la machine hôte (la station) !.

Sur la machine cible (le kit 68332):

    - récupérer le code exécutable de la machine hôte (la station).
    - lancer l'exécution de ce code.

La machine hôte et la machine cible doivent être reliés d'une manière ou d'une autre pour permettre le transférer du code exécutable :
 

Les outils de développement croisés

Ces outils existent sur votre station de travail sous deux formes: la forme native et la forme croisé pour la famille des processeurs Motorola 68k. Les commandes essentiels sont:

    - m68k-linux-gcc : le compilateur
    - m68k-linux-as   : l'assembleur
    - m68k-linux-ld    : l'éditeur de liens
    - m68k-linux-ar   : gestionnaire de librairie

Pour simplifier à l'extrême l'utilisation de ces commandes vous disposez des scripts suivants:

    cckit            : pour compiler
    assemblage : pour assembler
    ldkit             : pour lier vos fichiers .o (objet)

Génération de code

Assembler un ficher source en assembleur 68k

Pour assembler le fichier asm.s, il suffit d'utiliser la commande:

    assemblage  asm.s (avec ou sans extension .s)

Cette commande produit 4 fichiers:

asm.o      : contient le code objet translatable
asm.lst: contient la traduction de votre source assembleur en code machine 680X0
asm.map : contient le plan memoire d'implentation de votre code
asm.s29  : est le fichier a telecharger dans la memoire du kit
Man du script assemblage:

            UTILSATION: assemblage [OPTIONS] FICHIER[.s]

 FICHIER:
     fichier contenant le code assembleur 68k

  OPTIONS:
   -k suivit du processeur du kit cible: 68000, 68010, 68030, 68040 ou 68332
      le kit par defaut est le 68332

   -e + adresse (en hexadecimal) d'emplacement du code dans la memoire du kit cible
      par defaut elle vaut:
      0x800      pour un kit 68000
      0xff9000 pour un kit 68010
      0x1000    pour un kit 68030
      0x10000  pour un kit 68040
      0xa000    pour un kit 68332

EXEMPLE:
   assemblage -k 68332 -e 0x100 source.s

Compiler un ficher source en langage C

Il faut utiliser la commande de compilation:

  cckit     [OPTIONS]     fichier[.c]

  FICHIER:
     fichier contenant le code C

  OPTIONS:
     -clean efface les fichiers deja produits (= commande rm -f *.s29 *.o *.map *.lst)
     -e        + adresse (en hexadecimal) d'emplacement du code dans la memoire du kit cible
                   par defaut elle vaut 0x100
    -oo
     ne produit que les fichiers .o (objet), pour une edition des liens separees
     -k        suivit du processeur du kit cible: 68040 ou 68332 le processeur par defaut est le 68332

Cette commande produit 4 fichiers:

  cckit  test.c

     la cible est un kit 68040
     le code doit etre loge a partir de l'adresse 0x1000

     test.s      : contient la traduction en memonique assembleur de votre code C
     test.o      : contient le code objet translatable
     test.map: contient le plan memoire d'implentation de votre code
     test.s29  : est le fichier a telecharger dans la memoire du kit

    Le Fichier.lst  qui contient le mnémonique assembleur  (en correspondance avec le source C ). Le Fichier.map qui est le rapport de l'édition des liens, il contient le mapping d'implantation de votre code dans la mémoire du kit cible. Le Fichier.o est le fichier objet. Le Fichier.s29 est le fichier a télécharger dans la mémoire du kit.

Remarque: cckit ajoute au début de votre programme une section de code nommé startup, qui implémente l'algorithme suivant:

        - initialisation de l'environnement d'exécution
        - jsr main (appel de la fonction main)
        - fin du programme: retour au moniteur du kit.

Votre code est donc placé juste derrière celui du startup. Vous pouvez le constater en regardent le test.map.
 

Pour une application comportant des modules en langages C et assembleur 68k

    Votre applications comporte des fichiers en langage C et des fichier en langage assembleur,  prenons l'exemple suivant:

        1 fichier main.c (qui contient le programme principal en langage C).
        1 module fonction.s  (qui contient une fonction ecrite en langage assembleur 68k a appeler par un programme C).

    TRADUCTIONS SÉPARÉES :

    a) Compilation des sources C avec la commande cckit  nomfichier et l'option -oo:
           info18 4: ls
           main.c
            fonction.s

            info18 5: cckit main -oo

            info18 6: ls
            main.c    main.s    main.o  fonction.s

        La commande cckit utilisée avec l'option  -oo ne produit  que les fichiers objet  ( main.o) et main.s

   b) Assemblage des sources assembleur avec la commande a68   nomfichier et l'option -oo:

        info18 6: ls
        main.c   main.s    main.o  fonction.s

        info18 7: assemblage fonction.s -oo

        info18 8: ls
        main.c   main.s    main.o  fonction.s fonction.lst fonction.o

        La commande assemblage utilisée avec l'option  -oo ne produit  que les fichiers objet  (fonction.o) et fonction.lst

   c) ÉDITION DES LIENS

        La commande ldkit permet de lier vos differents fichiers objets (extension .o) et produit un executable pour les kits 68040 uniquement au format srecord (.s29).

L'option permet de préciser le kit cible pour implanter votre code à des adresses compatibles avec la RAM du kit cible et de lui ajouter le bon code de startup. Cette option fait en faite référence a un fichier de commande qui contient les ordres pris en compte par l'éditeur de liens. Ces fichiers de commandes sont Kit68000.k, Kit68010.k, Kit68030.k et Kit68040.k. Ils indiquent a l'éditeur de liens ou placer les différentes sections des code de la mémoire de la machine cible.

Si vous voulez changer l'adresse d'implantation de votre programme ou ajouter une autre librairie (par exemple iofischer10 qui contient les routines pour piloter une maquette Fischer) vous devrez écrire vous même ce fichier de commande. Vous trouverez dans le répertoire /user/info_lib/Kits68k/exemple/LinkCom un exemple (commencer par lire ALIRE).

        info18 8: ls *.o
            main.o   fonction.o

        info18 9: ldkit main.o fonction.o -e 0 -o test.s29

L'option -e permet de preciser l'adresse de debut d'implentation du code dans la memoire du kit cible.
l'option -o permet de preciser le nom du fichier executable au format srecord

        info18 10: ls executable.*
            test.s29   test.map

Présentation d'un poste de travail du labo 5201


Édition d'un programme en assembleur

L'édition du programme se fait sous un éditeur du réseau (nedit, emacs, vi, ect...). ATTENTION votre nom de fichier doit avoir une extension en .s (Source.s par exemple) Il est obligatoire de respecter un certain nombre de règles au moment de l'édition:

Il faut respecter les champs séparés par des tabulations:

Étiquette   Tabulation   Mnémonique Assembleur      Tabulation Opérande Tabulation ; Commentaire
                                        Ou  Directive  d'assemblage

Un commentaire situé en début de ligne doit être précédé d'une étoile *, s'il est situé après l'opérande il doit être précédé d'un point-virgule ;. exemple:

Tout nombre est par défaut considéré comme décimal. Pour que l'assembleur considère un nombre dans une autre base vous devez ajouter un préfixe ou un suffixe comme le montre le tableau suivant:
 
BASE PRÉFIXE SUFFIXE
binaire % B
octal @ O ou Q
décimal aucun D
hexadécimal $ (un 0 doit être ajouter devant un nombre
 hexa d'on le premier caractère ne 
commence pas par un nombre décimal).

exemples de constantes numériques:

%1001     =     1001B
@56         =      56O
678290    (base 10 par défaut)
$A2CF9   =     0A2CFH
$4C1D0   =     4C1D0H
L'adressage immédiat est indiqué par une dièse #:
MOVE.B  #0C3H,D1
L'adressage indirect est symbolisé par des parenthèses ( ):
ADD.L    (A5),D4    ; Le contenu pointé par A5 est ajouté au
                                 ;  registre D4

Chargement d'un programme sous 162bug: