Dans ce projet, nous allons préparer l’affichage des
registres et de la mémoire grâce à la mini uart dont nous avons testé le
fonctionnement au chapitre précèdent. En fait il nous suffit de récupérer les
procèdures vues dans les premiers chapitres de ce blog et de remplacer les
appels système d’affichage par des appels à la procedure d’envoi des chaines par
la mini uart.
Nous stockons ces procédures dans le module util2.s et nous
en profitons aussi pour écrire une fonction de lecture de chaine de caractère
en utilisant la fonction de lecture d’un caractère de la miniuart. Cette
fonction restera assez simple et ne prendra pas en compte l’affichage d’un
curseur, le déplacement arrière de celui-ci dans la chaine pour insérer un
corriger un caractère. Elle ne prend en compte que le retour arrière pour
supprimer le dernier caractère saisie. Nous ajoutons aussi une procédure de
comparaison de chaine que nous stockons dans le module utilchaine.s
Dans le module kernel.s, nous ajoutons le test des affichages
des registres et de la mémoire puis nous créons une boucle de saisie des
commandes. Pour cela nous affichons un message d’invite puis appelons la procédure
de saisie d’une chaine puis la procèdure de comparaison pour déterminer quelle
commande a été saisie. Ici il n’ a que la commande fin de possible.
Nous effectuons aussi une autre modification du fichier
linker.ld pour modifier l’adresse de début d’exécution pour la mettre à la
valeur 0X8000 , valeur indiquée dans de nombreux exemples sur Internet. Mais
attention il faut indiquer au GPU cette nouvelle adresse. Il faut donc dans le
fichier config.txt remplacer l’instruction kernel_old=1 par l’instruction
kernel_address=0x8000.
Maintenant il ne reste plus qu’à relancer la chaine de
compilation par make, corriger les erreurs éventuelles, copier le fichier kernel.img
sur la carte SD (attention pas celle de votre linux habituel mais celle
préparée au chapitre précèdent), placer cette dernière dans le Raspberry,
brancher le câble TTL USB au micro ordinateur, lancer putty connexion série et
allumer le Raspberry.
Vous devez avoir ce résultat :
Vous pouvez taper quelques commandes !! pour voir l’affichage
mémoire du buffer puis la commande fin pour avoir les messages finaux. Bien sûr
vous pouvez les adapter à votre gout.
A l’adresse 80D8, j’ai le vidage du registre d’état avec les
5 premiers bits qui indique le mode actuel du processeur soit la valeur 10011
correspondant au mode superviseur : intéressant non ? Pour les autres
affichages on voit que l’adresse de la data et de bss correspondent bien au
plan de chargement. Cela va nous faciliter la vie !!
Tout le projet est à récupérer ici.
Aucun commentaire:
Enregistrer un commentaire