mercredi 27 novembre 2019

MONA version 0.5

La version 0.5 de MONA est maintenant complétée. Pour cette version j'ai réogarniser le code source en plusieurs fichiers et ajouter la commande d addr qui est un déssembleur. Le fichier mona/reamdme.md a été mis à jour.

Affichage de la commande

Voici de quoi a l'air l'affichage de la commande.


>d $6000

 $6000  $9B                     SIM
 $6001  $AD  $C                 CALLR  $C 
 $6003  $25 $19                 JRC   $601E 
 $6005  $CE $48 $7E             LDW X,$487E 
 $6008  $A3 $55 $AA             CPW X,#$55AA 
 $600B  $27 $11                 JREQ   $601E 
 $600D  $20 $16                 JRA   $6025 
 $600F  $C6 $80  $0             LD A,$8000 
 $6012  $A1 $82                 CP A,#$82 
 $6014  $27  $6                 JREQ   $601C 
 $6016  $A1 $AC                 CP A,#$AC 
 $6018  $27  $2                 JREQ   $601C 
 $601A  $99                     SCF
 $601B  $81                     RET
 $601C  $98                     RCF
 $601D  $81                     RET
 $601E  $C6 $48  $0             LD A,$4800 
 $6021  $A1 $AA                 CP A,#$AA 
 $6023  $26  $9                 JRNE   $602E 
 $6025  $5F                     CLRW X
 $6026  $4F                     CLR A
 $6027  $4B $28                 PUSH #$28 
 $6029  $86                     POP CC
 $602A  $AC  $0 $80  $0         JPF   $8000 

Tous les entiers sont affichés en hexadécimal. Le champ de gauche est l'adresse mémoire où se situe l'instruction suivit des octets du code de l'instruction. Viens ensuite la traduction en assembleur du code.

vendredi 8 novembre 2019

MONA version 0.4

La version 0.4 de MONA est maintenant disponible. J'ai ajouté la commande f addr string pour faire une recherche en mémoire d'une Chaîne ASCII. Le readme.md a été mis à jour.


>f $8080 "commands"
Found at address: $8CAE 
>h $8cae
$8CAE  $63 $6F $6D $6D $61 $6E $64 $73   commands

>f $8080 "Commands"
String not found.
>f $8080 i "Commands"
Found at address: $8CAE 

Prochaine étape

Pour la version 0.5 je vais ajouter un désassembleur. La commande va fonctionner de la façon suivante:


>d $809E
$00809E $AE $17 $FF    LDW X,#$17FF
$0080A1 $94            LDW SP,X
Une vingtaine d'instructions seront affichées suivit d'une pause. La barre d'espacement va permette d'afficher les 20 instructions suivantes. N'importe qu'elle autre touche pour revenir à l'invite de commande.

mercredi 6 novembre 2019

MONA version 0.3

J'ai encore amélioré MONA. J'ai aussi mis à jour le fichier readme.md pour tenir compte des nouvelles possibilités du programme. J'ai encore d'autres idées pour améliorer ce programme.

lundi 4 novembre 2019

MONA version 0.2

Je poursuis mes expérimentations avec la carte NUCLEO-8S208RB. Je viens de compléter la version 0.2 de MONA

Nouveautés

  • La mémoire étendue au delà de l'adresse 0xfffff (65536) est maintenant accessible.
  • Une commande qui ne reçoit pas suffisamment d'argument ou des arguments invalides est abandonnée et affiche un message d'erreur.
  • La Commande ! accepte maintenant des chaînes de caractères entre guillemets comme arguments.
  • La commande e pour mettre à zéro des plages de mémoire a été ajoutée.

mardi 29 octobre 2019

Apocalypse Tomorrow

Ce titre est bien sur un clin d’œil au film de Francis Ford Coppola, datant de 1979, Apocalypse Now. Une entrée en matière comme une autre pour parler de CollapseOS

L'apocalypse Demain

De quoi aura l'air le monde après l'effondrement appréhendé par plusieurs dont Pablo Servigne. C'est d'ailleurs après avoir lu le livre de M. Servigne que l'auteur de CollapseOS en a eu l'idée.

Bien que le projet me laisse sceptique tant qu'à son utilité future, Il me plait pour des raisons qui n'ont rien à voir avec un possible effondrement. Principalement pour les deux suivantes:

  1. KISS, Keep It Simple,Stupid. En français, Garde ça simple, idiot. Plus les systèmes sont complexes plus ils sont difficiles à gérer et susceptible d'avoir des failles. Il y a de nombreux exemples dans le monde de systèmes informatiques qui ont étés abandonnés, après des dépenses acquisition très élevées, parce qu'on arrivait pas à les faire fonctionner correctement. On en a un bel exemple au Canada avec le nouveau système de paye du gouvernement fédéral nommé Phénix et fourni par IBM. Le système installé en 2015 est plein de bogues et personne n'arrive à le faire fonctionner correctement. Le gouvernement parle de le remplacer, une perte de quelques milliards CAN$.
  2. Small is beautiful, Un principe qui est étroitement lié au précédent et qui me tient aussi à cœur. Il me plaît qu'un système soit suffisamment simple pour qu'une seule personne puisse le comprendre et le maintenir. Autrement dit il faut rester à l'échelle humaine.

CollapseOS répond à ces deux critères. De plus il est basée sur le CPU Z80 qui est encore en production de nos jours. Zilog le vend encore en format PDIP-40. Encore mieux cette version moderne est en technologie CMOS et fonctionne plus rapidement que l'original, jusqu'à 20 Mhz. Plus encore on peut trouver sur tindie.com plusieurs petits ordinateurs basés sur ce CPU et qui permettent de tester CollapseOS sur une vrai machine plutôt que sur un simulateur.

Si ce projet vous intéresse

Pour cloner le dépôt sur votre ordinateur (système Linux avec application git installée).

git clone https://github.com/hsoft/collapseos
Ensuite pour intégrer les mises à jour

git pull

lundi 28 octobre 2019

nucleo-8s208rb et sdcc: frapper un noeud.

J'ai commencé à adapter eForth sur stm8 par C.H. Ting lorsque j'ai réalisé qu'il y avait un problème d'adressage avec ce modèle Forth pour les STM8S haute densité. En effet tel qu'elle est conçue cette machine virtuelle Forth ne peut adresser que les premier 32Ko de mémoire FLASH alors que le STM8S208RB en contient 128Ko. Comme la majorité des Forth sur cpu 8 bits elle utilise un modèle de données de 16 bits. C'est à dire qu'elle est conçu pour travailler avec des entiers de 16 bits et des adresses de 16 bits. Ce qui permet d'adresser 64Ko mais comme la mémoire FLASH des stm8s débute à l'adresse 0x8000 les programmes Forth ne dispose dans les faits que de 32Ko d'espace 0x8000-0xffff soit seulement le quart de la mémoire disponible sur le STM8S208RB. J'ai commencé à réfléchir à la façon dont je pourrais modifier le modèle. Par exemple je pourrais le transformer en un modèle 24 bits au lieu de 16 bits. Je consulte la documentation de SDAS pour voir quelles sont les directives permettant de traiter des données de 3 octets et je trouve les directives .3byte ou .triple dans la table des matières mais elles ne sont pas documentées dans le texte. Malgré tout je fais un test avec l'assembleur mais celui-ci ne reconnais pas la directive dans aucune des deux formes proposées. C'est ce qu'on appelle par chez-nous frapper un noeud. En fait j'en ai frapper deux.

Du même coup je prends conscience que MONA version 0.1 a le même problème puisque lui aussi accède la mémoire avec des adresses de 16 bits. Je suspends donc l'adaptation de eForth et retourne travailler sur MONA vesrion 0.2 pour corriger cette limitation.

mercredi 23 octobre 2019

nucleo-8s208rb

Cet article est le premier consacré à la carte de développement NUCLEO-8S208RB de STMicroelectronics. Je travaille sur système d'exploitation Ubuntu en utilisant le compilateur et l'assembleur SDCC1. De plus pour programmer la carte il faut utiliser stm8flash.

J'ai découvert l’existence d'un livre en anglais sur google book qui explique comment développer pour les microcontrôleurs STM8 sur Ubuntu2. Le livre n'est pas visible au complet dans google book mais seulement le début qui décrit l'installation de SDCC et stm8flash.

Je vais commencer par décrire brièvement comment installer SDCC3 et stm8flash. Pour l'éditeur de texte je vous laisse choisir selon vos préférences. Un simple éditeur comme geany peut aussi bien faire l'affaire, c'est même préférable si vous êtes un débutant et que vous ne voulez pas avoir à apprivoiser les environnement plus complexes comme vscode ou code:blocks.

Installation des outils de développement

Je présume que vous avez déjà une connaissance d'Ubuntu et de l'utilisation de son gestionnaire de paquets en ligne de commandes. Pour installer SDCC rien de plus simple puisque le paquet est disponible dans le dépôt standard d'Ubuntu.


 sudo apt update && sudo apt install sdcc

Pour stm8flash c'est un plus compliqué car il faut construire le logiciel à partir des sources disponible sur github. Normalement le logiciel git est installé avec Unbutu. S'il n'est pas sur votre ordinateur faites simplement la commande:


 sudo apt install git
Choisissez un dossier dans lequel cloner le dépôt github du projet stm8flash et à partir de ce dossier effectuez la commande:

 git clone https://github.com/vdudouyt/stm8flash
Je présume que le compilateur gcc est déjà installé sur votre ordinateur car il est requis pour construire le binaire de stm8flash. À partir du dossier dans lequel se trouve stm8flash il suffit de lancer la commande make.

jacques@HP8200:~/github/stm8flash$ make
cc -g -O0 --std=gnu99 --pedantic -Wall `pkg-config --cflags libusb-1.0`    -c -o stlink.o stlink.c
stlink.c: In function ‘stlink_read_and_cmp’:
stlink.c:62:6: warning: unused variable ‘recv’ [-Wunused-variable]
  int recv = stlink_read(pgm, buf, count);
      ^~~~
stlink.c: In function ‘stlink_swim_write_block’:
stlink.c:484:7: warning: unused variable ‘r’ [-Wunused-variable]
   int r = libusb_bulk_transfer(pgm->dev_handle,
       ^
cc -g -O0 --std=gnu99 --pedantic -Wall `pkg-config --cflags libusb-1.0` 
stlink.o stlinkv2.o espstlink.o main.o byte_utils.o ihex.o srec.o stm8.o 
libespstlink.o `pkg-config --libs libusb-1.0` -o stm8flash
jacques@HP8200:~/github/stm8flash$ ls stm8flash -l
-rwxr-xr-x 1 jacques jacques 104456 oct 19 11:11 stm8flash
Malgré les 2 avertissements à propos de variables non utilisées, la compilation c'est faites normalement. Maintenant il suffit de copier le binaire stm8flash dans votre dossier ~/bin.

 cp stm8flash ~/bin
Cependant si la librairie libusb-1.0-0-dev n'est pas installée sur votre ordinateur il va y avoir une erreur à la compilation. Vous devrez donc l'installer et recompiler stm8flash.

 sudo apt install libusb-1.0-0-dev

Si tout ça a bien fonctionné on est maintenant prêt à ouvrir l'éditeur de texte et à écrire du code avant de compiler et de flasher le binaire dans la carte nucleo.

Le projet

Comme j'aime écrire en assembleur j'ai décidé de présenter un projet en assembleur. J'ai eu de la misère à trouver la documentation de l'assembleur sdas qui est fait parti de SDCC. Il semble que l'intérêt pour cet assembleur soit limité la plupart construisent leur projets en C. Je vais documenté tous les détails du fichier source en particulier les directives. Pour les mnémoniques d'instructions c'est déjà disponible dans le manuel de programmation des STM8. Il s'agit du manuel PM0044.

MONA

Il s'agit d'un MONiteur écrit en Assembleur. Il est utilisé avec un terminal sur le PC qui communique avec la carte via le UART3 du microcontrôleur. Ce moniteur permet de lire ou d'écrire n'importe où dans la mémoire du STM8S208, RAM, FLASH, EEPROM, OPTION, SFR. Il permet d'interagir avec la carte directement et d'observer le comportement résultant.

Comme on le voie chaque commande n'est qu'une seule lettre suivie des arguments. Les arguments peuvent être entrée en décimal ou hexadécimal. Les nombres en hexadécimal sont précédés de 0x ou de $.

Au démarrage le programme affiche son nom ainsi que la version. Le modèle du microcontrôleur et les différentes régions mémoire. MONA protège contre l'écriture la région de mémoire flash qu'il utilise ainsi que la région RAM de 0x0000 - 0x00AE qui contient les variables qu'il utilise.

Voici une capture d'écran qui montre l'exécution de quelque commandes.

  • h $4000 est utilisée pour affichier le contenu des adresses $4000-$4007. Chaque fois qu'on presse la barre d'espacement les 8 adresses suivantes sont affichées. N'importe quel autre touche termine la commande. Cette plage d'adresses est située au début de l'EEPROM.
  • ! $4000 1 2 3 4 5 6 7 8 écris 8 valeurs dans l'EEPROM à partir de l'adresse $4000. Puisque ces valeurs sont inscrites dans l'EEPROM elles vont rester là même après un redémarrage du MCU.
  • h $4000 Nous permet de vérifier que les valeurs ont bien étées inscrites.
  • les commandes t $500a et t $500e n'ont aucun effet car je n'ai pas fournis le bitmask des bits à inverser.
  • t $500a 32 cette commande bascule la valeur du bit 5 à l'adresse $500a qui est le registre PC_ODR. La LED2 de la carte est branchée sur ce bit. Donc en faisant cette commande l'état de la LED2 change.
  • t $500a 32 En enfonçant la combinaison de touche CTRL-R on réaffiche la dernière commande. Dans ce cas çi ça permet d'éteindre et d'allumer la LED2 en alternance en faisant uen série de CTRL-R ENTER.
  • t $500a $20 C'est la même commande sauf que j'ai indiqué la valeur de masque en hexadécimal. Plusieurs bits peuvent être inversés en même temps. Par exemple pour inverser les 8 bits il suffit de faire t addr 255.
Le fichier readme.md qui est dans le dossier mona décrit chacune des commandes en français.

Mes projets pour la carte nucleo-8s208rb sont dans un dépôt github. Pour cloner ce dépôt sur votre ordinateur, dans un répertoire de votre choix, faites la commande:


git clone https://github.com/picatout/stm8_nucleo
Pour mettre à jour le git lorsque j'ai fait des modfications au projet faites simplement:

git pull

Construire et flasher le programme

Chaque programme est dans un dossier séparé. Pour compiler un programme il faut se déplacer dans le dossier. Pour simplifier le tout j'ai créé un fichier Makefile. Voici une capture d'écran qui montre comment compiler et flasher mona sur la carte nucleo 8s208rb.

Donc après s'être déplacé dans le dossier mona j'ai fait la commande make et puisqu'il n'y avait pas d'erreur de compilation j'ai fait la commande make flash pour programmer la carte. Le message indique que le programme occupe 2225 octets dans la mémoire flash du microcontrôleur stm8s208rb

Analyse du code source de MONA

Dans les jours qui suivent je vais décrire le code source de MONA. Ça pourra servir de tutoriel pour l'écriture en assembleur de programme pour les MCU stm8. Je vais faire ce travail dans un fichier markdown MONA.md qu'il sera plus facile de lire sur le site web que dans un éditeur de texte.


NOTES

  1. SDCC signifit Small Device C Compiler.
  2. STM8 Microcontroller Development on Ubuntu. Livre numérique kindle à petit prix. Je recommande ce livre si vous lisez l'anglais. La dépense est minime.
  3. Au moment de l'écriture de cet article la version de SDCC disponible dans le dépôt d'Unbuntu 18.04 est la version 3.8.0 alors que la version sur souceforge.net est la version 3.9.0. Pour installer la version 3.9.0. il faut construire l'application à partir des sources. La procédure est disponible ici (en anglais).

mardi 15 octobre 2019

le retour

Me voilà de retour avec l'automne, contrairement aux outardes qui disparaissent à l'automne pour revenir au printemps. On peut constater que malgré ce que Google nous avait annoncé en début d'année, blogger n'a pas été sacrifié. J'avais fait un transfert vers Wordpress mais je n'aimes pas ce site et puisque blogger est toujours actif cet automne je vais poursuivre ici.

Depuis que j'ai créé ce blogue en 2012, mes méthodes et outils de travail ont évolués. Maintenant je travaille sous Ubuntu et j'utilise Github et je me sert des fichiers markdown de github pour la documentation. Donc sur ce blogue je ne fais qu'une brève présentation et puis sur Github vous trouverez tout le code et la documentation. Pour chaque projet le fichier readme.md donne les détails. Parfois un projet comprends plusieurs dossiers avec un readme.md dans chacun. En plus il y a habituellement un dossier nommé docs qui contient des documents variés. Ainsi si vous clonez un dépôt sur votre ordinateur toute la documentation suit.

Aujourd'hui j'ai commandé une carte NUCLEO-8S208RB. Cette carte est abordable, ne nécessite aucun programmeur/débogueur externe, peut-être utilisée avec l'interface de programmation Arduino ou programmée en C en utilisant le compilateur SDCC. Le coeur est un STM8 descendant du classique CPU 6502. Ce sera donc le sujet de ma prochaine chronique.

lundi 1 avril 2019

poisson d'avril!

Nous sommes le premier avril et d'après l'avis envoyé aux utilisateurs de Google+ c'est à compter d'aujourd'hui que ce blog aurait du cesser d'exister. Mais comme en fait preuve ce bref article il est encore fonctionnel. Cette nouvelle était en fait un poisson d'avril par anticipation. Une innovation en terme de poisson d'avril. Bravo! Sundar Pichai tu nous a bien eu! ;-)

samedi 9 février 2019

Transrfert vers wordpress

Ayant reçu un avis de Google selon lequel blogger sera terminé à partir du 1ier avril et que dans les mois suivants les sites seront supprimés. j'ai pris la décision de transférer ce blogue sur wordpress. Mon nouveau blogue peut-être atteint via l'url. http://www.picatout.ca

J'ai exporté tous les articles sur le nouveau blogue. Malheureusement la mise à forme n'est pas idéale. Curieusement le blog de wordpress ne reconnaît pas la balise <text-area> qui est pourtant une balise standard. Donc tous mes articles qui contiennent cette balise on un rendue non formaté du texte inclus a l'intérieur de cette balise. j'ai commencé à faire les corrections mais il y a plus de 200 articles à réviser...

mardi 29 janvier 2019

Le déclin de l'empire Américain.

A vouloir sauver sur les coûts de production les U.S.A. se sont placés dans une situation de vulnérabilité par rapport à la Chine avec laquelle ils livrent une guerre commerciale en ce moment. En effet en transférant autant de capacité de production en Chine ils ont perdu la leur. Voici un bel exemple de ce que j'avance: A Tiny Screw Shows Why iPhones Won’t Be ‘Assembled in U.S.A.’
C'est ce qu'on appelle se tirer dans le pied.