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