Laboratoire Architecture et Systèmes

Introduction

Les kits 68040 ne possédent pas par défaut de m'emoire 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. Pour développer des programmes pour un kit nous utiliserons donc une station de travail HP comme machine de développement croisé.

Quand on développe sur une machine des programmes devant séxécuter sur une autre machine, on dit que l'on fait du développement croisé. Les outils de développement que l'on utilise s'appelle outils de d'eveloppement croisés, les outils habituels, ceux qui générent des programmes séxécutant 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 (une station de travail HP). La machine sur laquelle séxécutent les programmes
s'appelle machine cible (un kit 68040).
 

 Le développement croisé

En dévellopement 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é
    - édition de liens (on génére du code pour la machine cible et non  pour la machine hôte !).
    - transformation du code généré en un format convenable pour la machine cible.

Sur la machine cible (kit):

    - recuperer le code exécutable de la machine hôte.
    - 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 transferer du code exécutable :
 

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

Le poste de travail est composé d'une station de travail HP et d'un kit 68040 constitué d'un rack VME contenant une carte processeur
MVME162LX et éventuéllement d'une carte d'entrées/sorties. Le kit 68040 et la station de travail sont connectés ensemble par une ligne
serie asynchrone, et tous deux sont connectés à leur réseau:

On peut donc contrôler  un kit 68040 ou lui envoyer un programme depuis une station de travail par 2 types de connexions:

    - une connexion série à faible débit sous le moniteur  162bug de Motorola.

    - une connexion réseau à haut débit sous le moniteur XRAY debugeur de Microtec.

A la base l'unique programme fournit par le contructeur de la carte MVME162LX est le moniteur 162bug. Le moniteur 162bug joue vis
à vis d'un Kit 68040 le même rôle  que joue un shell vis à vis d'une machine UNIX. Le 162bug attend, interpréte et retoune le résultat des
commandes de l'utilisateur via sa première ligne serie. Ces commandes permettent de contrôller totalement la carte: vous pouvez par exemple
visualiser/modifier le contenu des registres du processeur ou de la memoire, mais surtout vous pouvez récuperer du code exécutable provenant
d'une station hôte et le debuger.

Dans le but de g'erer des applications temps reels sous VRTX nous avons ajoute' en UVPROM le moniteur XRAY de Microtec. Il fait la
meme chose que le 162bug mais utilise le reseau pour communiquer avec une station hôte. Sur la station vous diposez d'outils puissants
pour la mise au point de vos programmes (en assembleur ou en langage C) comme: le shell xsh qui vous met en communication direct avec
le kit ou le debugeur graphique xmo68ks.

Vous avez aussi la possibilite de demarrer le kit comme une machine diskless: le kit va chercher sur un serveur reseau un programme qu'il execute
ensuite. On utilise se fonctionnement pour booter le kit sur le systeme d'exploitation Linux.

Pour choisir ces  differents mode de fonctionnement nous avons ajoute un ronboot de demarrage. Ce programme se trouve  en UVPROM et s'execute des la mise sous-tension du kit; sont comportement depend de la position des cavaliers 13-14 et 15-16 en J11 sur la carte MVME162LX:

J11

pour booter directement sur LINUXpour booter sur le MENUpour booter directement sur le 162bugpour booter directement sur XTRACE

Prise en main d'un kit 68040

Tout ce passe dans le labo Architecture et Système en 5201. Ce labo n'est pas en libre service et est accessible uniquement aux élèves  en TP
ou en projet.

Les outils de développement croisés

Les outils utilisés pour travailler sur les kits 68000 sont les outils associés au compilateur C. Sur nos stations il y'a 3
marques (au moins) de compilateur C:

    - HP (celui que nous utilisons depuis le debut);
    - MicroTec (le nouveau, celui que l'on devrait utiliser mais qui demande un effort: refaire la doc, les scripts, ect...)
    - GNU (vachement bien, gratuit,  c'est celui que tout le monde utilise sauf à l'ESIEE car partiellement porte sur
                    HPUX 10.2 et pas vraiment maintenu par le SMIG dommage).

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

    - cc68000 : le compilateur
    - as68k      : l'assembleur
    - ld68k      : l'éditeur de liens
    - ar68k      : gestionnaire de librairie

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

    - cckit              : pour compiler
    - assemblage      : pour assembler
    - c68, a68 et l68
 

G'en'eration de code

Assembler un ficher source en assembleur 680X0

    Il suffit simplement d'utiliser la commande:

    assemblage [68000  |  68010  |  68030  |  68040 ] Fichier (sans extension .s, l'option par defaut est 68000)

    Cette commande genere 3 fichiers:
    Fichier.lst Il contient le code machine + le source + la table des symboles + les
    eventuelles erreurs.

    Fichier.o   est le fichier objet.
    Fichier.s29 est le fichier a telecharger dans le kit.

Compiler un ficher source en langage C

    Il faut utiliser la commande de compilation:

    cckit [68000  |  68010  |  68030  |  68040] Fichier (sans extension .c, l'option par defaut est 68000)

    Ne vous trompez pas d'option car elle determine l'adresse d'implentation de votre programme dans la RAM du kit cible.
    Pour un kit 68000 cette adresse est 800h, un kit 68010 cette adresse est FF9000h et un kit 68040 cette adresse est 0h.

    Cette commande genere alors 4 fichiers:

    Fichier.lst  contient le mnemonique assembleur ( en correspondance avec le source C ) + le code machine + la table des symboles + les eventuelles erreurs. ).
    Fichier.map est le rapport de l'edition des liens, il contient le mapping d'implentation de votre code dans la memoire du kit cible.
    Fichier.o   est le fichier objet.
    Fichier.s29 est le fichier a telecharger dans le kit avec la commande.

    Pour implementer les conventions du langage ANSI C, cckit ajoute au debut de votre programme du code nomme startup, qui
    implemente l'algorithme suivant:

        - initialisation de l'environnement d'execution (est fonction du kit)
        - jsr main
        - terminaison propre du programme  (appel a exit(): dans notre cas c'est un retour au moniteur du kit)

    Votre code est donc place' juste derriere celui du startup. Vous pouvez le constater en regardent le fichier .map.
 

Pour une application comportant des modules en langages C et assembleur 680X0

    Soit une application comportant:
        1 module main.c (programme principal en langage C).
        1 module ext.s  (sous-programme en langage assembleur 68000).

    TRADUCTIONS SEPAREES :
    a) Compilation des sources C avec la commande c68  +  nomfichier :
           info18 4: ls
            main.c

            info18 5: c68 main

            info18 6: ls
            main.c    main.lst    main.o

        La commande c68 [68000  |  68010  |  68030  |  68040] + liste de fichiers ne genere que les fichiers .o (pour
        une edition des liens separees) de la liste des fichiers. L'option par defaut est le processeur cible 68000.

        main.c  source C du programme.
        main.o  contient le code objet translatable de main.c ( existe si main.c est sans erreur).
        main.lst contient la traduction du fichier source C main.c en mnemonique assembleur + le code machine 680X0.

    b) Assemblage des sources assembleur avec la commande a68  +  nomfichier

        info18 6: ls
        ext.s

        info18 7: a68 ext

        info18 8: ls
        ext.s   ext.lst   ext.o

        La commande a68 [68000  |  68010  |  68030  |  68040] + liste de fichiers. L'option par defaut est le processeur
        cible 68000.

        ext.s  source 68000, extension en .s obligatoire !
        ext.o  contient le code objet translatable de ext.s
        ext.lst contient le code machine 68000 + la table des symboles + les eventuelles erreurs...

    c) EDITION DES LIENS
        La commande l68 [ kit68000  |  kit68010  |  kit68040 ] NomFichier permet l'edition des liens avec tous les fichiers objets (extension .o)
        presents dans le repertoire courant.
        L'option permet de preciser le kit cible pour implenter votre code a des adresses compatibles avec la RAM du kit cible et de lui ajouter
        le bon code de startup. Cette option fait en faite reference a un fichier de commande qui contient les ordres pris en compte par l'editeur
        de liens. Ces fichiers de commandes sont Kit68000.k, Kit68010.k, Kit68030.k et Kit68040.k. Ils indiquent a l'editeur de liens ou placer
        les differentes sections des code de la memoire de la machine cible.
        Si vous voulez changer l'adresse d'implentation de votre programme ou ajouter une autre librairie (par exemple iofischer10 qui contient
        les routines pour piloter une maquette fischer) vous devrez ecrire vous meme ce fichier de commande. Vous trouverez dans le repertoire
        un exemple dans le repertoire: /user/info_lib/Kits68k/exemple/LinkCom (commencer par lire ALIRE).

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

        info18 9: l68 appli

        info18 10: ls
            ext.s    ext.lst    ext.o    main.c    main.lst    main.o
            appli.map    appli.s29

        appli.s29 executable au format S de Montorola a telecharger sur le kit

        appli.map rapport de edition des liens et eventuellement les erreurs.

Ecrire un programme en assembleur

L'édition du programme se fait sous un éditeur du reseau (ved, ed, vuepad, emacs,...). 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:

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

Un commentaire situé en debut de ligne doit être précédé d'une etoile *, 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éfix ou un suffix comme le montre le tableau suivant:
 
BASE PREFIX SUFFIX
binaire % B
octal @ O ou Q
décimal aucun D
hexadécimal $ (un 0 doit etre ajouter devant un nombre
 hexa d'on le premier caractère ne 
commence pas par un nombre décimal).

exemples de contantes numériques:

%1001        1001B
@56             56O
678290
$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