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 | }}} |
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 |
| 790 | void 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 | }}} |