SOMMAIRE

 

1) GENERALITES 
1.1) Principe du projet
1.2) Caractéristiques
1.3) Ma vision du projet

2) HARDWARE
2.1) Carte de développement
2.2) Verilog, schéma global
2.3) Verilog, coeur CPU
2.4) Verilog, Vidéo VGA
2.5) Verilog, périphériques

3) OUTILS DEVELOPPEMENT SOFTWARE
3.1) Généralités
3.2) Langage A2Z Basic
3.3) Compilateur
3.4) Assembleur
3.5) Autres outils
3.6) Emulateur sur PC

4) LES LOGICIELS A2Z
4.1) Le Boot
4.2) Système fichier & OS
4.3) Editeur texte
4.4) Image viewer & map viewer
4.5) Le jeu : Micromachines

Blog (hackaday.io)

3.2) Le langage A2Z Basic

Le langage A2Z_Basic est inventé par mes soins, et volontairement différent de ce qui existe. D’abord pour le fun, mais aussi et surtout pour simplifier la vie au compilateur. La syntaxe ressemble à du C ou du Basic, mais en beaucoup moins riche. 

Attention si vous codez en A2Z_Basic, il existe beaucoup de contraintes qui sont là pour faciliter la vie au compilateur.

Par exemple, chaque instruction doit impérativement être sur une ligne différente, y compris une fermeture d’accolade. Prenez exemple sur les codes fournis.

Pour mettre le résultat d’un calcul dans une variable, il faut impérativement utiliser l’instruction « assign », là où tous les compilateurs modernes devinent ça tout seul.

Enfin, pour les expressions complexes (formules mathématiques, calcul de condition), l’interpréteur d’expression n’est pas très intelligent, et il attend obligatoirement des parenthèses pour regrouper les calculs unitaires.

if ( ((Xm_pos//4) >= 128 ) & ((Ym_pos//4) >= 32 ) ) {

Attention, si vous ne respectez pas ces règles, vous n’aurez pas forcément de message d’erreur, et pourtant l’exécutable en sortie sera buggé.

Le compilateur permet d’intégrer du langage assembleur au milieu du code source Basic. Ca permet d’optimiser les tâches répétitives, et ça permet de coder toutes les fonctions bas niveaux et autres drivers.

La directive #appli_config permet de déclarer la taille maxi du code source et des variables, et la position cible de l’exécutable en RAM.  La partie variables peut être séparée du code exécutable via le paramètre « separation = 2 », pour atteindre les 64ko maxi allouables.


Limitations du langage et du compilateur :

  • Allocation mémoire statique, pas d’allocation dynamique
  • Ne gère pas les fonctions récursives : une fonction ne peut pas s’appeler elle-même, directement ou indirectement, à cause de la limitation précédente
  • Plage totale de variables limitée à 64ko par programme, vu les pointeurs 16bits. Mais accès à toute la plage mémoire via des instructions bas niveau.
  • Tableaux à 2 dimensions maximum
  • 1 seul fichier source par exécutable, pas de gestion des « include », des librairies statique ou dynamique. Toutes les fonctions de bas niveau utilisées doivent être directement intégrées au code source.

F4HDK| Janvier 2017
f4hdk_arob_free.fr