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