From 91c9ee1378f54da267b0c65bbd0123abfa605182 Mon Sep 17 00:00:00 2001
From: Florent Gluck <florent.gluck@hesge.ch>
Date: Tue, 19 Nov 2024 01:12:41 +0100
Subject: [PATCH] updated 02-KVM.md finished lab-virtual_game_machine.md

---
 course/02-KVM.md                              |  6 ++++
 .../lab-virtual_game_machine.md               | 34 +++++++++++++++++--
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/course/02-KVM.md b/course/02-KVM.md
index 9e1a659..28fdf43 100644
--- a/course/02-KVM.md
+++ b/course/02-KVM.md
@@ -1310,6 +1310,12 @@ static inline void sti() {
 }
 ```
 
+[//]: # ----------------------------------------------------------------
+## VMM: virtual PIC side effect
+
+- After a virtual PIC is created, `KVM_EXIT_HLT` is **not triggered anymore** when guest OS executes the `hlt` instruction!
+- Some deep digging into KVM is required to explain this behavior...
+
 [//]: # ----------------------------------------------------------------
 # Miscellaneous
 
diff --git a/labs/lab-virtual_game_machine/lab-virtual_game_machine.md b/labs/lab-virtual_game_machine/lab-virtual_game_machine.md
index afc3198..374e7da 100644
--- a/labs/lab-virtual_game_machine/lab-virtual_game_machine.md
+++ b/labs/lab-virtual_game_machine/lab-virtual_game_machine.md
@@ -282,11 +282,16 @@ Le périphérique se programme en MMIO.
 
 ### (6) Clavier
 
-Ce périphérique est exposé physiquement et virtuellement. Côté guest OS, lorsque l'interruption matérielle 1 est reçue, cela signifie qu'une touche clavier à été pressée et la valeur de celle-ci peut être récupérée par le guest.
+Ce périphérique est exposé physiquement et virtuellement. Côté guest OS, lorsque l'interruption matérielle 1 est reçue, cela signifie qu'une touche clavier à été pressée et la valeur de celle-ci peut être lue.
 
 **Comportement du VMM**
 
-**TODO**: cette section sera ajoutée bientôt
+Le VMM doit récupérer toute touche pressée grâce à la librairie SDL/gfx (fonction `gfx_keypressed`).
+Si la touche ESC est pressée, l'exécution du VMM doit se terminer. Tout autre touche pressée provoque l'injection de l'interruption matérielle n°1 dans la VM.
+
+Si le VMM émule un clavier natif (physique), alors il injectera le code de la touche pressée sur 32 bits dans le port 0x60 lorsque le guest le lira.
+
+Si le VMM présente un clavier virtuel, alors il écrira le code de la touche pressée dans le buffer d'hypercall.
 
 **Guest: accès paravirtualisé**
 
@@ -298,6 +303,8 @@ Ce périphérique est exposé physiquement et virtuellement. Côté guest OS, lo
   ```
   \normalsize
 
+Le VMM écrit le code de la touche pressée dans `key` et le guest doit récupérer la valeur écrite par le VMM.
+
 **Guest: accès physique**
 
 Le périphérique se programme en PMIO.
@@ -308,6 +315,15 @@ Comment obtenir le code de la touche pressée\ ?
 
 1. Lire 32 bits (le code de la touche) depuis le registre de donnée
 
+**Comportement du guest**
+
+Ajoutez au guest la possibilité de déplacer un sprite avec les touches suivantes du clavier\ :
+
+- "a" déplace le sprite à gauche
+- "d" déplace le sprite à droite
+- "w" déplace le sprite en haut
+- "s" déplace le sprite en bas
+
 ## Cahier des charges
 
 ### Processus de build
@@ -585,4 +601,16 @@ L'affichage devrait ressembler à ceci\ :
 ### `guest_sprites_phys.bin`
 \vspace{-.3cm}
 
-Ce guest réalise exactement les mêmes fonctionnalités que `guest_sprites_pv.bin`, mais en utilisant des drivers natifs (physiques).
\ No newline at end of file
+Ce guest réalise exactement les mêmes fonctionnalités que `guest_sprites_pv.bin`, mais en utilisant des drivers natifs (physiques).
+
+### `guest_sprites_keyb_pv.bin`
+\vspace{-.3cm}
+
+Ce guest réalise les mêmes fonctionnalités que le guest `guest_sprites_pv` mais avec en plus la gestion du clavier à l'aide d'hypercalls, à savoir\ :
+
+- Les touches "a", "d", "w" et "s" permettent de déplacer le sprite "Tux jedi" à gauche, à droite, en haut et en bas.
+
+### `guest_sprites_keyb_phys.bin`
+\vspace{-.3cm}
+
+Ce guest réalise exactement les mêmes fonctionnalités que `guest_sprites_keyb_pv.bin`, mais en utilisant des drivers natifs (physiques).
-- 
GitLab