Avenir OpenWork pour l'électronique et l'informatique libre
Vendredi 29 Août 2008 Sitemap | Fr | En

Menu

Le projet FS22-647

Software

Actuellement, il n'existe pas de gestionnaire global à proprement parler, mais un rassemblement de plusieurs programmes qui gèrent une partie ou quelques parties de la machine. Le but étant de réussir à maîtriser chaque périphérique séparément, puis de rassembler ces routines afin de pouvoir en faire un OS. A cela s'ajoute, le désir de porter le langage C sur le FS22-647, car pour l'instant tout est écrit en assembleur, or l'auteur n'a pas encore le niveau compétent en informatique pour réaliser ceci. L'assembleur des listings ci-dessous est le CALM pour z80. Il s'agit bel est bien de l'assembleur z80 classique, cependant, les mnémoniques et l'ordre de certaines opérations ont été changés. Par exemple, LD A,B devient MOVE B,A. La casse n'ayant pas d'importance.

Accès rapide aux chapitres.

MUBUS

Le premier programme, écrit toutes les valeurs possibles en boucle sur des LEDs d'un testeur MUBUS.

Mubus.asm

.area   PROGRAM (ABS,OVR)
.z80

;On commence au début
.org 0

MUBWL = 0            ;Adresse des 8 bits de poids faible du port MUBUS
MUBWH = 1            ;Adresse des 8 bits de poids fort du port MUBUS

boucle:
    inc   hl         ;incrémente la valeur à afficher
    ld    a,h        ;on passe les 8 bits de poids fort dans l'accumulateur
    out   (MUBWL),a  ;et on écrit sur le MUBUS
    ld    a,l        ;pareil pour les 8 bits de poids faible
    out   (MUBWH),a
    call  attente1   ;on appelle une boucle d'attente
    jp    boucle

attente1:
    push  af
    ld    a,#0h80
l$: dec   a
    jr    nz,l$
    pop   af
    ret


La première pseudo-instruction .area   PROGRAM (ABS,OVR) sert à définir la zone mémoire dans laquelle le code sera écrit. La seconde .z80 indique à l'assembleur qu'on écrit un listing pour le processeur z80. La troisième .org 0 nous permet de définir de façon absolue l'emplacement mémoire du code, pour autant que la zone dans laquelle nous nous trouvions le permette. Ce qui est le cas ici vu que PROGRAM est en absolu avec (ABS). Ensuite nous définissons les constantes MUBWL et MUBWH à 0 et 1, soit lors de l'assemblage, le cross-assembleur remplacera toute occurence MUBWL par 0 et MUBWH par 1. Ceci est très commode car lorsque l'on programme, le listing devient plus agréable à lire et aussi beaucoup plus compréhensible.
Les labels, eux sont aussi des liens symboliques et correspondent à une adresse mémoire à laquelle on va s'adresser par un call ou un jump généralement. On les reconnaît car ils sont tout à gauche dans le listing et se terminent par le double-point «:». Lorsqu'ils ont un $ juste avant le double-point, il s'agit d'un label à courte porté, qui ne peut être appelé qu'au sein de sa procédure ou fonction. Il s'agit là toutefois d'une convention.
L'instrution ld sert à copier le contenu aprè la virgule, dans le destinataire avant la virgule, on peut ainsi, copier une valeur immédiate dans un registre, un registre dans un registre, une valeur à une adresse, etc. Les instructions in et out permettent d'accéder aux périphériques de la machine. Il s'agit donc d'opérations de lecture ou d'écriture. push sert à sauver un registre sur la pile et pop à le récupérer. inc incrémente un registre de 1, est équivalent à l'opérateur ++ en C. Quant à dec, cette instruction fait l'inverse, soit elle soustrait 1 d'un registre. call appelle une procédure ou une fonction par son adresse de début, généralement représentée par un label, et l'instruction RET, à la fin de la procédure ou de la fonction, retourne à l'adresse + 1 où call a fait son appel. jr, quant à lui saute à une adresse mémoire relative (i.e. au maximum à 128 octets de son emplacement), là aussi généralement indiquée par un label, et ne peut pas revenir par un ret.

Les listings assembleur prennent vite de la taille, c'est pourquoi il vaut mieux se restreindre à ce cours exemple concernant l'assembleur en lui même.
Les codes sources des programmes en assembleurs prennent vitent du volume, car chaque instruction, correspond à une action du processeur. Aussi, pour afficher un simple texte à l'écran, là où un printf("Hello world!\n"); suffit en C, des dizaines, voire des centaines d'instructions seront nécessaires pour y parvenir à l'équivalent en assembleur.

Retour au haut de la page

Tous les programmes

Si vous avez compris comment fonctionne les deux programmes ci-dessus, vous ne devriez, alors, pas avoir de peine à comprendre les autres. Par soucis de place, ils ne sont pas présentés comme les deux exemples. En outre, vous pouvez les télécharger ci-dessous.

Programme Taille Commentaire
mubus.asm 656 octets Ecrit toutes les valeurs possibles sur le port Mubus
ecran2.asm 7019 octets Exploite les routines pour écrire sur l'écran LCD alphanumérique
LCD_Intelligent_MUBUS.asm 11'468 octets Lit et écrit sur le port Mubus, affiche sur l'écran LCD alphanumérique les valeurs lues
port_parallele.asm 16'121 octets Exploite les routines du port parralèle pour imprimer un texte
lcd_graphique.asm 20'164 octets Exploite lse routines pour afficher du texte et des images sur l'écran LCD graphique
test_ram.asm 18'190 octets Compte la RAM disponible sur la machine et l'affiche sur l'écran graphique
clavier.asm 107'042 octets Permet d'utiliser un clavier AT ou PS/2.
CALM-23.10.2006.zip 126'949 octets Pack de tous les programmes avec des images pour l'écran graphique
CALM-23.10.2006.tar.gz 113'319 octets Pack de tous les programmes avec des images pour l'écran graphique
fond.blh 3'840 octets Image pour afficher sur l'écran graphique

Retour au haut de la page

Outils

Afin de pouvoir s'exercer, des outils ont été développés pour programmer sous Linux. Il est nécessaire d'avoir ASxxxx, un cross assembleur qui permet d'assembler des listings pour le z80, disponible sur cette page : shop-pdp.kent.edu/ashtml/asxget.htm. Ce programme est un freeware, mais nefait pas parti du domaine public, c'est pourquoi vous ne le trouverez probablement pas dans vos repositories. Un autre utilitaire : SRecord permet de convertir les fichiers au format intel hex de aslink en binaires que l'on pourra programmer sur les EPROMs du FS22-647. Vous pourrez normalement le trouver dans vos repositories.

Un template a été réalisé. Il contient tout le code d'initialisation standard ainsi que les includes nécessaires pour travailler avec les périphériques actuels du FS22-647. Il y a un label __main depuis lequel vous pouvez écrire votre propre code. Bien entendu, vous êtes cordialement invité à consulter les fichiers assurant les fonctions de gestion du matériel et d'y apporter vos propres modifications. Vous pouvez obtenir ce template ici
Pour assembler, une fois les outils ci-dessus installés, un petit script bash qui se nomme assemble est fourni avec, il vous suffit de saisir, depuis un terminal dans votre dossier de travail, la commande ./assemble votreNomDeFichier.asm pour assembler et créer le binaire que vous n'aurez alors plus qu'à inscrire dans une EPROM 27128. En tapant ./assemble --help vous obtiendrez toutes les indications quant à l'utilisation du script. ./assemble --version donne la version du script.

Retour au haut de la page

Une petite vidéo

Afin de montrer que tous ces petits logiciels tournent et fonctionnent bien sur le FS22-647, regardez cette petite vidéo faite par moi-même. Laissez-vous charmer par les possibilités. Téléchargez fs22-647.avi. Elle est au format AVI, encodé en Xvid 4.0, et pèse 18'864'664 octets.

Retour au haut de la page

Sondages

Comment avez-vous connu Avenir OpenWork?
 
 Par un-e ami-e
 Par Google
 Autre
 
Souhaiteriez-vous un forum de discution?
 
 Oui
 Non
 

Valid XHTML 1.1

Version 1.4 - Avenir OpenWork concept - février 2008 - Fait depuis kubuntu Linux
Les marques, logos, services et produits cités dans ce site sont la propriété de leurs sociétés et auteurs respectifs.

Valid CSS!