1
Examen de TP d'assembleur 68K Durée : 45 minutes Licence d'informatique 3ème année 2003-2004 Module 6 Un ou deux ? Note : Ne sont autorisés que les polycopiés sur le processeur 68K et sur les entrées/sorties parallèles. Principe du jeu : Au début du jeu, les joueurs disposent d'un tas de graines. Chacun des joueurs prend, à tour de rôle, une ou deux graines dans ce tas . Le joueur qui retire la dernière graine du tas perd la partie. Les graines seront représentées ici par les huit diodes du port de sortie. Chaque fois qu'un joueur récupère une graine, la diode allumée à l'extrémité la plus à gauche est éteinte (une ou deux diodes s'éteignent à chaque tour de jeu). Les joueurs indiquent s'ils souhaitent prendre une ou deux graines au moyen des interrupteurs du port d'entrée (...001 indique que le joueur souhaite prendre une graine et ...010 indique qu'il souhaite en prendre deux). Chaque tour de jeu est validé par l'appui du bouton IB1 (géré par test d'état). On suppose que le joueur n'entrera pas d'autres valeurs que 1 ou 2. Enfin, lorsque la partie se termine, l'appui sur le bouton IA1 (géré par interruption) permet de visualiser en binaire sur les diodes le numéro du joueur gagnant (...001 pour le joueur 1 ou ...010 pour le joueur 2). Questions : 1. Initialiser correctement le port d'entrée/sortie parallèle pour que le bouton IB1 soit géré par test d'état et que IA1 soit géré par interruption. Il est demandé à cette question d'initialiser tous les registres et adresses mémoires nécessaires à la gestion de IA1 par interruption (sr, vra, vbr, table de vecteurs de branchements). L'initialisation devra également allumer toutes les diodes du port de sortie. 2. Ecrire un sous programme qui prend en paramètre d'entrée le nombre de diodes à éteindre dans D0 et qui met à jour le port de sortie en conséquence. 3. Ecrire, à la suite des initialisations, un programme qui récupère la valeur saisie par le joueur courant lorsque le bouton IB1 est appuyé et la range dans D0 puis appelle le sous programme de la question 2 jusqu'à ce que la partie soit finie. Tester ce programme. 4. Ecrire le programme de traitement d'interruption (terminé par l'instruction “rte”) permettant d'afficher le numéro du joueur gagnant sur les diodes du port de sortie en fin de partie. Pour cette question, il est nécessaire d'ajouter du code dans le programme principal pour mémoriser le numéro du joueur courant (on pourra utiliser D1 par exemple) ainsi qu'une boucle infinie en fin de partie permettant d'attendre qu'une interruption survienne.

1 ou 2 ?

Embed Size (px)

Citation preview

Page 1: 1 ou 2 ?

Examen de TP d'assembleur 68K

Durée : 45 minutes

Licence d'informatique 3ème année 2003-2004

Module 6

Un ou deux ?

Note : Ne sont autorisés que les polycopiés sur le processeur 68K et sur lesentrées/sorties parallèles.

Principe du jeu :

Au début du jeu, les joueurs disposent d'un tas de graines. Chacun des joueursprend, à tour de rôle, une ou deux graines dans ce tas . Le joueur qui retire la dernièregraine du tas perd la partie.

Les graines seront représentées ici par les huit diodes du port de sortie. Chaquefois qu'un joueur récupère une graine, la diode allumée à l'extrémité la plus à gaucheest éteinte (une ou deux diodes s'éteignent à chaque tour de jeu). Les joueursindiquent s'ils souhaitent prendre une ou deux graines au moyen des interrupteurs duport d'entrée (...001 indique que le joueur souhaite prendre une graine et ...010indique qu'il souhaite en prendre deux). Chaque tour de jeu est validé par l'appui dubouton IB1 (géré par test d'état). On suppose que le joueur n'entrera pas d'autresvaleurs que 1 ou 2. Enfin, lorsque la partie se termine, l'appui sur le bouton IA1 (gérépar interruption) permet de visualiser en binaire sur les diodes le numéro du joueurgagnant (...001 pour le joueur 1 ou ...010 pour le joueur 2).

Questions :

1. Initialiser correctement le port d'entrée/sortie parallèle pour que le bouton IB1 soitgéré par test d'état et que IA1 soit géré par interruption. Il est demandé à cettequestion d'initialiser tous les registres et adresses mémoires nécessaires à la gestionde IA1 par interruption (sr, vra, vbr, table de vecteurs de branchements).L'initialisation devra également allumer toutes les diodes du port de sortie.

2. Ecrire un sous programme qui prend en paramètre d'entrée le nombre de diodes àéteindre dans D0 et qui met à jour le port de sortie en conséquence.

3. Ecrire, à la suite des initialisations, un programme qui récupère la valeur saisie parle joueur courant lorsque le bouton IB1 est appuyé et la range dans D0 puis appellele sous programme de la question 2 jusqu'à ce que la partie soit finie. Tester ceprogramme.

4. Ecrire le programme de traitement d'interruption (terminé par l'instruction “rte”)permettant d'afficher le numéro du joueur gagnant sur les diodes du port de sortieen fin de partie. Pour cette question, il est nécessaire d'ajouter du code dans leprogramme principal pour mémoriser le numéro du joueur courant (on pourrautiliser D1 par exemple) ainsi qu'une boucle infinie en fin de partie permettantd'attendre qu'une interruption survienne.