Changes between Version 87 and Version 88 of Archi-1-TP9


Ignore:
Timestamp:
Dec 6, 2020, 11:22:37 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v87 v88  
    765765**Exercices**
    766766
    767 - Exécutez le programme sur le simulateur. Qu'observez-vous ?
     767- Exécutez le programme sur le simulateur.
     768  - Qu'observez-vous ?
     769{{{#!protected ------------------------------------------------------------------------------------
     770'''''''''''''''
     771- Deux fenêtres sont apparues avec un message uniquement dans la fenêtre `proc0_term0`.
     772'''''''''''''''
     773}}}
     774  - Est-ce que les deux fenêtres ont le même comportement vis-à-vis du clavier ?
     775{{{#!protected ------------------------------------------------------------------------------------
     776'''''''''''''''
     777- Non. Quand on tape dans la fenêtre `proc0_term0`, les touches tapées s'affichent alors que rien ne se passe dans la fenêtre `proc0_term1`.
     778'''''''''''''''
     779}}}
    768780- Modifiez le code pour afficher un message sur le second terminal, il y a toujours une attente sur le premier terminal.
    769 - Modifiez le code pour que le programme attende sur les deux terminaux. L'idée est de ne plus faire d'attente bloquante sur le registre `TTY_STATUS` de chaque terminal.
     781{{{#!protected ------------------------------------------------------------------------------------
     782'''''''''''''''
     783- C'est juste deux copier-coller (message et boucle d'affichage).
     784'''''''''''''''
     785}}}
     786- Modifiez le code pour que le programme affiche les touches tapés au clavier sur les deux terminaux. C'est-à-dire, ce que vous tapez sur le terminal `proc0_term0` s'affiche sur ce même terminal, et pareil pour `proc0_term1`. L'idée est de ne plus faire d'attente bloquante sur le registre `TTY_STATUS` de chaque terminal. Pour que cela soit plus amusant, changez la casse sur le terminal `proc1_term1` (si vous tapez `bonjour 123`, il affiche `BONJOUR 123` et inversement.
     787{{{#!protected ------------------------------------------------------------------------------------
     788'''''''''''''''
     789{{{#!c
     790void kinit (void)
     791{
     792    char *s;
     793    char c;
     794
     795    for (s = hello_0; *s; s++) {                // for all char in hello string
     796        __tty_regs_map[ 0%NTTYS ].write = *s;   // write it to the tty output register
     797    }
     798
     799    for (s = hello_1; *s; s++) {                // for all char in hello string
     800        __tty_regs_map[ 1%NTTYS ].write = *s;   // write it to the tty output register
     801    }
     802
     803    while (1) {
     804
     805        if (__tty_regs_map[0].status != 0) {    // wait for a char typed on keyboard 0
     806            c = __tty_regs_map[0].read;         // read the char
     807            __tty_regs_map[0].write = c;        // and print it (that is a software loopback)
     808        }
     809        if (__tty_regs_map[1].status != 0) {    // wait for a char typed on keyboard 1
     810            c = __tty_regs_map[1].read;         // read the char
     811            if ((c >= 'a') && (c <= 'z'))
     812                c += 'A' - 'a';
     813            else if ((c >= 'A') && (c <= 'Z'))
     814                c += 'a' - 'A';
     815            __tty_regs_map[1].write = c;        // and print it (that is a software loopback)
     816        }
     817
     818    }
     819
     820    while (1);
     821}}}
     822'''''''''''''''
     823}}}
    770824
    771825