From 06131deba6c35a249132a39c96fb2dc1cc889dc7 Mon Sep 17 00:00:00 2001
From: Bah Thierno-Souleymane <thiernosouleymane.bah.etu@univ-lille.fr>
Date: Thu, 18 Mar 2021 11:08:35 +0100
Subject: [PATCH] feat(load_mdr function implemented)

---
 tpfs/vol.c | 32 ++++++++++++++++++++++++++++++++
 tpfs/vol.h |  2 ++
 2 files changed, 34 insertions(+)
 create mode 100644 tpfs/vol.c

diff --git a/tpfs/vol.c b/tpfs/vol.c
new file mode 100644
index 0000000..9bd36c2
--- /dev/null
+++ b/tpfs/vol.c
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "hardware.h"
+#include "drive.h"
+#include "vol.h"
+
+void load_mbr()
+{
+    int i;
+    unsigned char buffer[sizeof(mbr_t)];
+
+    read_sector(buffer, 0, 0);
+    mbr.magic = buffer[0] + (buffer[1] << 8);
+
+    if (mbr.magic == MBR_MAGIC)
+    {
+        mbr.nb_vols = buffer[2];
+        for (i = 0; i < mbr.nb_vols; i++)
+        {
+            mbr.vols[i].sector = buffer[3 + (i * 4)];
+            mbr.vols[i].cylinder = buffer[4 + (i * 4)];
+            mbr.vols[i].nb_sectors = buffer[5 + (i * 4)];
+            mbr.vols[i].type = buffer[6 + (i * 4)];
+        }
+        return;
+    }
+
+    mbr.magic = MBR_MAGIC;
+    mbr.nb_vols = 0;
+}
\ No newline at end of file
diff --git a/tpfs/vol.h b/tpfs/vol.h
index dcd1d52..af09f09 100644
--- a/tpfs/vol.h
+++ b/tpfs/vol.h
@@ -2,6 +2,7 @@
 #define VOL_H
 
 #define NB_VOLS_MAX 8
+#define MBR_MAGIC 0xCAFE // Savoir si le mbr a déjà été initialisé ou non
 
 static mbr_t mbr;
 
@@ -22,6 +23,7 @@ typedef struct vol_s
 
 typedef struct mbr_s
 {
+    unsigned int magic;
     unsigned int nb_vols; // nombre de volumes actuels
     vol_t vols[NB_VOLS_MAX];
 } mbr_t;
-- 
GitLab