Nous avons mis un certain temps à atteindre notre objectif, mais nous y sommes. Nous voici fin prêts à programmer en C pour notre Z80 et c'est précisément ce que nous allons faire aujourd'hui. Très peu d'assembleur sera encore nécessaire à présent, et nous disposons désormais d'un crt0 préparant parfaitement le terrain et faisant ce pour quoi il est conçu : jp _main !
Ne vous inquiétez pas, il nous reste du travail à faire. Au stade où nous en sommes, nous disposons d'un runtime C (crt0) permettant de préparer l'exécution du code issu de la compilation de notre (ou nos) future(s) source(s) C. Pour rappel, ce code en assembleur, stocké dans le fichier mycrt0.s est le premier qui sera exécuté après un reset du Z80. Il sera placé à l'adresse 0x0000 et son travail est d'initialiser à zéro toutes les futures variables globales (ou plus exactement « statiques ») et d'initialiser avec leur valeur celles déclarées avec une affectation. Tout cela après avoir initialisé le registre de la pile (SP pour Stack Pointer) avec l'adresse mémoire la plus haute disponible (0xFFFF) et avant de finalement passer la main à la routine identifiée par le label _main, qui est en réalité la fonction main() de notre source C.
Pourquoi donc cette différence de nom, puisque notre fonction s'appelle main() et non _main() ? Ceci est un mécanisme...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première