806 | | 1. ? |
807 | | {{{#!protected ------------------------------------------------------------------------------------ |
808 | | ''''''''''''''' |
809 | | - |
| 808 | 1. Le code du driver du TTY est dans le fichier `harch.c` et les prototypes sont dans `harch.h`. Si vous ouvrez `harch.h` vous allez voir que seul les prototypes des fonctions `tty_read()` et `tty_write()` sont présents. La structure décrivant la carte des registres du `TTY` est déclaré dans le .c. Pourquoi avoir fait ainsi ? |
| 809 | {{{#!protected ------------------------------------------------------------------------------------ |
| 810 | ''''''''''''''' |
| 811 | - Le noyau n'a pas besoin de savoir comment sont organisés les registres dans le TTY. Il a juste besoin de savoir comment écrire ou lire un messages. Plus c'est cloisonné, moins il y a de risque de problèmes. En outre, cela simplifie un hypothétique portage sur une autre architecture. |
| 812 | ''''''''''''''' |
| 813 | }}} |
| 814 | 1. Le MIPS dispose d'un compteur de cycles internes. Ce compteur est dans un banc de registres accessibles uniquement quand le processeur fonctionne en mode `kernel`. Nous verrons ça |
| 815 | au prochain cours, mais en attendant nous allons quand même exploiter ce compteur. Pourquoi avoir mis la fonction dans `hcpu.S` ? Rappeler, pourquoi avoir mis `.globl clock` |
| 816 | {{{#!protected ------------------------------------------------------------------------------------ |
| 817 | ''''''''''''''' |
| 818 | * La fonction qui lit ce registre est nécessairement en assembleur, elle est donc mise dans hcpu.S. |
| 819 | * `.globl clock` permet de faire en sorte que la fonction soit visible par les autres fichier C. |
816 | | |
817 | | |
818 | | |
819 | | |
820 | | |
821 | | |
| 826 | - Comme d'habitude, exécutez le code et observez. |
| 827 | - Afin de vous détendre un peu, vous allez créer un petit jeu `guess` |
| 828 | - `guess` tire un nombre entre '0' et '9' et vous devez le deviner en faisant des propositions.\\`guess` vous dit si c'est trop grand ou trop petit. |
| 829 | __Étapes__ |
| 830 | - Vous créez deux fichiers `guess.c` et `guess.h`. |
| 831 | - `guess.c` contient le jeu il y au moins une fonction `guess()` |
| 832 | - `guess.h` contient les déclarations externes de `guess.c` |
| 833 | - `kinit()` doit lancer `guess()` |
| 834 | - `guess()` |
| 835 | - vous demande de taper une touche pour démarrer le jeu. |
| 836 | - effectue un tirage d'un nombre en utilisant la fonction `clock()` et ne gardant que le chiffre de poids faible (ce n'est pas aléatoire, mais c'est mieux que rien) |
| 837 | - exécute en boucle jusqu'à réussite |
| 838 | - demande d'un chiffre |
| 839 | - comparaison avec le tirage et affichage des messages `"trop grand"`, `"trop petit"` ou `"bravo"` |
| 840 | - Vous devrez modifier le Makefile puisque vous avez un fichier à compiler en plus. |
| 841 | - Si c'est trop facile, vous pouvez complexifier en utilisant des nombres à 2 chiffres ou plus. |