Outils de développement Thomson

0. Introduction

L'id√©e de construire une cha√ģne de d√©veloppement compl√®te pour micro-ordinateurs Thomson sur PC a √©t√© propos√©e par Edouard Forler. Il a r√©sult√© de la discussion qui s'en est suivi qu'elle pouvait √™tre constitu√©e autour de GCC, le compilateur multi-langage et multi-plateforme du projet GNU et de la Free Software Foundation. Les autres composants de cette cha√ģne sont d'origines diverses mais s'imbriquent parfaitement les uns dans les autres, apr√®s quelques modifications parfois substantielles pour certains d'entre eux.

1. Cha√ģne de d√©veloppement

Le concept de cha√ģne de d√©veloppement trouve ses racines dans la philosophie qui a pr√©sid√© √† la conception du syst√®me UNIX √† la fin des ann√©es 1960 (et que l'on pourrait faire remonter jusqu'√† Descartes et son Discours de la M√©thode ;-), √† savoir la division d'un probl√®me en autant de sous-probl√®mes simples qu'il est n√©cessaire pour r√©soudre le probl√®me de d√©part.

Le probl√®me en question ici est la traduction d'un programme √©crit en langage de programmation de haut-niveau (Pascal, C, C++, Fortran par exemple) en un programme machine directement √©x√©cutable sur un micro-ordinateur Thomson. Des outils ont √©t√© cr√©√©s sur machines Thomson pour le r√©soudre; ainsi le compilateur Pascal d√©velopp√© √† l'Universit√© de Californie √† San Diego au cours des ann√©es 1970 (Pascal UCSD) a √©t√© port√© sur Thomson. N√©anmoins, le concept de d√©veloppement crois√© (cross-development en anglais) s'est vite impos√© dans le cas o√Ļ la machine cible est limit√©e, particuli√®rement en terme de m√©moire.

La cha√ģne de d√©veloppement d√©crite ci-dessous est donc une cha√ģne de d√©veloppement crois√©, c'est-√†-dire qu'elle fonctionne sur un autre type de machine (le PC) que celui qu'elle cible (les Thomson). Elle a √©t√© initialement con√ßue pour Linux, mais peut parfaitement tourner sous MS-DOS ou Windows; enfin elle transforme un programme √©crit en langage C ou C++ (Objective-C et Fortran pourrait facilement √™tre ajout√©s) en un programme binaire Thomson √©x√©cutable sur disquette.

¬† cha√ģne devel

sch√©ma de la cha√ģne

1.1 gcc09, le compilateur C/C++

Le compilateur gcc09 est un portage de GCC vers l'architecture Motorola MC6809 (avec quelques modifications mineures additionnelles pour Thomson). Seule la partie finale du compilateur est sp√©cifique √† la machine cible, les parties frontales (qui traduisent les langages, ici C ou C++) et la partie interm√©diaire (qui optimise le code produit) √©tant identiques pour toutes les architectures. L'adaptation pour Motorola MC6809 a √©t√© r√©alis√©e par un informaticien am√©ricain du Laboratoire d'Astronomie Spatiale de l'Universit√© du Wisconsin, Tom Jones, au d√©but des ann√©es 1990; elle a ensuite √©t√© modifi√©e pour √™tre utilis√©e avec une version plus r√©cente de GCC (2.5.8) par un √©tudiant allemand de l'Universit√© d'Erlangen, Matthias D√∂rfel, en 1997; enfin elle a √©t√© modifi√©e pour les besoins de la cha√ģne de d√©veloppement Thomson et pour fonctionner avec une version r√©cente de GCC, la version 2.95.3 sortie le 16 Mars 2001.

GCC est un compilateur optimisant qui traduit un langage de haut-niveau (ici C ou C++) en langage d'assemblage, via un langage interm√©diaire appel√© RTL (Register Transfer Language) sur lequel sont effectu√©es les optimisations. Il poss√®de une large palette d'options qui permettent aussi bien de contr√īler le dialecte du langage source que le type et le nombre des optimisations √† appliquer au langage interm√©diaire.

1.2 as09, l'assembleur 6809

L'assembleur as09 est une adaptation de l'assembleur AS6809 au format de code d'assemblage produit par gcc09, réalisée par Matthias Dörfel. AS6809 est à l'origine la version 6809 d'une famille d'assembleurs croisés dédiés aux microprocesseurs 8-bit Motorola (6800, 6081, 6802, 6803, 6804, 6805, 6808, 6809, 6811), Intel (8080, 8085) et Zilog (Z80), imaginée à la fin des années 1980 par un informaticien américain de l'Université d'état Kent dans l'Ohio, Alan R. Baldwin.

as09 est un assembleur avancé qui traduit le langage d'assemblage du 6809 en un module objet relogeable, c'est-à-dire en un fichier contenant aussi bien du code machine pour le 6809 que les informations nécessaires au déplacement de ce code à n'importe quel emplacement de la mémoire et à la liaison de ce code avec celui d'autres modules objet. L'assembleur gère les symboles locaux et globaux, les labels, les directives d'assemblage conditionnel, les directives d'inclusion et utilise un format de code objet propriétaire mais simple.

1.3 ld09, l'éditeur de liens (linker)

L'éditeur de liens ld09 est une adaptation de l'éditeur de liens ASLINK 6809, d'abord à l'environnement gcc09 (Matthias Dörfel) puis au format éxécutable Thomson. ASLINK 6809 est le compagnon de l'assembleur AS6809 et a été lui aussi écrit par Alan R. Baldwin. L'adaptation à gcc09 a principalement consisté en la possibilité d'importer des modules objets contenus dans des librairies pré-compilées, en particulier la possibilité d'importer plusieurs fois la même librairie, tandis que l'adaptation au format éxécutable Thomson a consisté en l'augmentation du nombre de passes, l'ordonnancement de la production du code machine tout au long de ces multiples passes et l'ajout d'un nouveau format de sortie, le BIN Thomson.

ld09 est un éditeur de liens relogeant qui imbrique entre eux plusieurs modules objet, importe si nécessaire d'autres modules objet à partir de librairies pré-compilées, et produit un fichier binaire à l'emplacement mémoire spécifié.

1.4 La libc et ar09, l'archiveur de librairies

La libc est une librairie (collection) de modules objet pr√©-compil√©s √† partir de fichiers source en langage C ou en assembleur. Elle fournit au programmeur des fonctions courantes de manipulation de cha√ģnes de caract√®res, d'affichage, de lecture et d'√©criture de fichiers, de gestion de la m√©moire, √©crites sp√©cifiquement pour la machine cible. Ces modules objet sont ajout√©s √† la demande par l'√©diteur de liens aux modules objet du programme en cours de compilation, par le simple r√©f√©rencement (en g√©n√©ral le simple appel) de ces fonctions dans le code source du programme.

La libc est constituée de la juxtaposition des modules objet qu'elle contient en un fichier unique. Cette opération est réalisée par l'archiveur de librairies, ar09 (non représenté sur le schéma), écrit par Matthias Dörfel en complément de son adaptation de l'éditeur de liens ld09.

1.5 sapfs, l'empaqueteur (packager)

sapfs est un utilitaire de manipulation des archives au format SAP, qui est le format de transfert des disquettes du monde Thomson au monde PC. Il permet de cr√©er, de formater, de lire, de v√©rifier une archive SAP; d'y ajouter ou d'y effacer des fichiers √† partir du seul PC. Il a √©t√© √©crit en parall√®le √† l'int√©gration des composants de la cha√ģne de d√©veloppement car il √©tait le seul cha√ģnon manquant pour leur assemblage.

sapfs contient entre autres choses une implémentation enrichie du DOS BASIC Thomson, qui lui permet de manipuler les fichiers Thomson aussi bien individuellement que par groupes (par exemple, effacer tous les fichiers .BIN ou extraire tous les fichiers contenant les 4 lettres VAMP).

1.6 sap2, l'utilitaire de transfert

sap2 est un utilitaire de transfert des archives au format SAP entre le monde PC et le monde Thomson. Il permet de transférer une archive SAP vers une disquette 3"5 ou 5"25 Thomson, ou dans l'autre sens de créer une telle archive à partir d'une disquette Thomson. sap2 est une version entièrement réécrite de l'utilitaire original sap d'Alexandre Pukall, qui ajoute principalement la prise en charge du formatage des disquettes et du format 5"25 Thomson.

2. Exemple

Le code source suivant, écrit en langage C, est une version quelque peu intriquée du célèbre programme qui affiche "Hello world !" à l'écran:

#include <stdio.h>

char hello_str[]="Hello world !";

int main(void)
{
   int i = 0;
   char c;

   while ((c=hello_str[i])) {
      putchar(c);
      i++;
   }
   
   return 0;
} 

La ligne de commandes pour compiler ce code source avec la cha√ģne de d√©veloppement Thomson est:

gcc09 -Wall -Wl,-b,_CODE=0xA000 -O2 -fomit-frame-pointer -o hello.bin hello.c

Par d√©faut GCC est configur√© pour appeler tour √† tour le compilateur, l'assembleur et l'√©diteur de liens, de sorte qu'il r√©alise automatiquement les trois premi√®res √©tapes de la cha√ģne et transforme directement hello.c en hello.bin (l'option -o hello.bin permet de sp√©cifier le nom du fichier de sortie). Il est bien s√Ľr possible de r√©aliser chaque √©tape l'une apr√®s l'autre:

L'étape suivante est l'inclusion du fichier éxécutable dans une archive SAP à l'aide de sapfs:

sapfs --create hello.sap
sapfs --add hello.sap hello.bin

Enfin l'étape finale est le transfert de l'archive sur disquette Thomson à l'aide de sap2: (on utilise ici le lecteur A: du PC)

sap2 --unpack hello.sap 0

Le programme peut ensuite être éxécuté sur toute machine TO munie d'un lecteur de disquettes par:

LOADM"hello.bin",,R

3. Conclusion

La cha√ģne de d√©veloppement Thomson est disponible sur le site des Nostalgies Thomsonistes, √† la fois sous forme de code source et de binaires pr√©-compil√©s pour MS-DOS. Elle est pleinement fonctionnelle et permet de produire des √©x√©cutables Thomson √† partir de programmes √©crits en langages C et C++.

La principale t√Ęche restante est l'√©criture de la libc; elle contient pour le moment environ 70 fonctions qui repr√©sentent un sous-ensemble de la librairie ISO C, ainsi que quelques fonctions POSIX, mais l'interface bas-niveau avec le mat√©riel est encore √† l'√©tat embryonnaire.

J'esp√®re que ce rapide aper√ßu vous incitera √† essayer et √† tester la cha√ģne de d√©veloppement Thomson, et √† contribuer √† son √©volution.

Eric Botcazou