From e630c10654d198c8cf57613676bf83113aac8da9 Mon Sep 17 00:00:00 2001
From: Florent Gluck <florent.gluck@hesge.ch>
Date: Tue, 1 Oct 2024 00:08:38 +0200
Subject: [PATCH] Added new validation guests updated
 lab-virtual_game_machine.md accordingly

---
 .../lab-virtual_game_machine.md               |  38 ++++++++++++++++--
 .../{guest_pv_1.bin => guest_console_pv.bin}  | Bin
 .../validation/guests/guest_timer_phys.bin    | Bin 0 -> 8196 bytes
 .../validation/guests/guest_timer_pv.bin      | Bin 0 -> 8196 bytes
 4 files changed, 35 insertions(+), 3 deletions(-)
 rename labs/lab-virtual_game_machine/validation/guests/{guest_pv_1.bin => guest_console_pv.bin} (100%)
 create mode 100755 labs/lab-virtual_game_machine/validation/guests/guest_timer_phys.bin
 create mode 100755 labs/lab-virtual_game_machine/validation/guests/guest_timer_pv.bin

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 34af85f..1883c1a 100644
--- a/labs/lab-virtual_game_machine/lab-virtual_game_machine.md
+++ b/labs/lab-virtual_game_machine/lab-virtual_game_machine.md
@@ -357,13 +357,16 @@ Pour vous aider à tester votre VMM et vous assurer que son comportement est cor
 
 Le binaire de l'hyperviseur complet à réaliser vous sera également fourni afin que vous puissiez vérifier que le code de votre guest est également correct.
 
-## Guests à disposition
+## Guests de validation
 
 Plusieurs guest OSes sont mis à votre disposition afin que vous puissiez valider que le comportement de votre VMM est correct. Ces guests se trouvent dans le répertoire `validation/guests`. Voici la liste avec une brève description de ce qu'ils réalisent et le comportement attendu par le VMM\ : 
 
-### guest_pv_1.bin
+### `guest_console_pv.bin`
+\vspace{-.3cm}
 
-Ce guest réalise 11 hypercalls afin d'afficher du texte sur la console virtuelle. Le texte affiché par le VMM est donné ci-dessous\ :
+Ce guest réalise 11 hypercalls n°1 afin d'afficher du texte sur la console virtuelle.
+
+Le texte affiché par le VMM est illustré ci-dessous\ :
 
 \footnotesize
 ```
@@ -380,3 +383,32 @@ Hello from Guest OS (8/9)
 Hello from Guest OS (9/9)
 ```
 \normalsize
+
+### `guest_timer_pv.bin`
+\vspace{-.3cm}
+
+Ce guest réalise une boucle infinie dans laquelle un "." est affiché chaque 200000 micro-secondes.
+Chaque texte affiché utilise l'hypercall n°1. La temporisation est réalisée via l'hypercall n°2.
+
+Le texte affiché par le VMM est illustré ci-dessous\ :
+
+\footnotesize
+```
+Delay: 200000 us (pv)
+...............................
+```
+\normalsize
+
+### `guest_timer_phys.bin`
+\vspace{-.3cm}
+
+Ce guest est identique au guest précédent, au détail près qu'il programme le timer réel (physique) plutôt que virtuel.
+
+Le texte affiché par le VMM est illustré ci-dessous\ :
+
+\footnotesize
+```
+Delay: 200000 us (phys)
+...............................
+```
+\normalsize
diff --git a/labs/lab-virtual_game_machine/validation/guests/guest_pv_1.bin b/labs/lab-virtual_game_machine/validation/guests/guest_console_pv.bin
similarity index 100%
rename from labs/lab-virtual_game_machine/validation/guests/guest_pv_1.bin
rename to labs/lab-virtual_game_machine/validation/guests/guest_console_pv.bin
diff --git a/labs/lab-virtual_game_machine/validation/guests/guest_timer_phys.bin b/labs/lab-virtual_game_machine/validation/guests/guest_timer_phys.bin
new file mode 100755
index 0000000000000000000000000000000000000000..ae79734fb3c2763dad3e3e96354c7c3e946c5780
GIT binary patch
literal 8196
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
C5WJ)S

literal 0
HcmV?d00001

diff --git a/labs/lab-virtual_game_machine/validation/guests/guest_timer_pv.bin b/labs/lab-virtual_game_machine/validation/guests/guest_timer_pv.bin
new file mode 100755
index 0000000000000000000000000000000000000000..9c3699346b3a38c747610801d4382365983a4c6f
GIT binary patch
literal 8196
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

literal 0
HcmV?d00001

-- 
GitLab