From 5e533d7d1bd8300bbcd51575276cc426e80faa32 Mon Sep 17 00:00:00 2001
From: Bah Thierno-Souleymane <thiernosouleymane.bah.etu@univ-lille.fr>
Date: Mon, 8 Mar 2021 17:55:50 +0100
Subject: [PATCH] feat(write sector prog implemented)

---
 tpfs/Makefile         |  3 ++-
 tpfs/display_sector.c |  3 ---
 tpfs/write_sector.c   | 54 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 4 deletions(-)
 create mode 100644 tpfs/write_sector.c

diff --git a/tpfs/Makefile b/tpfs/Makefile
index 7cab517..9d177ab 100644
--- a/tpfs/Makefile
+++ b/tpfs/Makefile
@@ -13,7 +13,7 @@ LIBS    = -L$(LIBDIR) -lhardware
 ###------------------------------
 ### Main targets 
 ###------------------------------------------------------------
-BINARIES= mkhd display_sector format_sector
+BINARIES= mkhd display_sector format_sector write_sector
 
 all: $(BINARIES) $(OBJECTS)
 
@@ -30,6 +30,7 @@ all: $(BINARIES) $(OBJECTS)
 mkhd: mkhd.o
 display_sector: display_sector.o drive.o
 format_sector: format_sector.o drive.o
+write_sector: write_sector.o drive.o
 
 ###------------------------------
 ### Misc.
diff --git a/tpfs/display_sector.c b/tpfs/display_sector.c
index 526476c..6483fbb 100644
--- a/tpfs/display_sector.c
+++ b/tpfs/display_sector.c
@@ -4,9 +4,6 @@
 #include "hardware.h"
 #include "drive.h"
 
-/* Paramètres de la simulation */
-#define HDA_FILENAME "vdiskA.bin" /* nom du fichier de stockage du disque simulé */
-
 static void
 empty_it()
 {
diff --git a/tpfs/write_sector.c b/tpfs/write_sector.c
new file mode 100644
index 0000000..ca0c3c8
--- /dev/null
+++ b/tpfs/write_sector.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "hardware.h"
+#include "drive.h"
+
+static void
+empty_it()
+{
+    return;
+}
+
+void write_sector(int cylinder, int sector, unsigned char *buf)
+{
+    int i;
+    seek(cylinder, sector);
+    for (i = 0; i < HDA_SECTORSIZE; i++)
+        MASTERBUFFER[i] = buf[i];
+
+    _out(HDA_DATAREGS, 0);
+    _out(HDA_DATAREGS + 1, 1);
+    _out(HDA_CMDREG, CMD_WRITE);
+    _sleep(HDA_IRQ);
+}
+
+int main(int argc, char const *argv[])
+{
+    unsigned int i;
+
+    if (argc != 4)
+    {
+        fprintf(stderr, "Usage: %s <cylinder> <sector> <data>\n", argv[0]);
+        exit(EXIT_FAILURE);
+    }
+
+    /* init hardware */
+    if (init_hardware("hwconfig.ini") == 0)
+    {
+        fprintf(stderr, "Error in hardware initialization\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /* Interreupt handlers */
+    for (i = 0; i < 16; i++)
+        IRQVECTOR[i] = empty_it;
+
+    /* Allows all IT */
+    _mask(1);
+
+    write_sector(atoi(argv[1]), atoi(argv[2]), (unsigned char *)argv[3]);
+
+    /* and exit! */
+    exit(EXIT_SUCCESS);
+}
-- 
GitLab