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