diff --git a/tpfs/format_sector.c b/tpfs/format_sector.c index dfdc4e332da1f103e7b1ca2e913bbb7f6b7211d5..e6678cad88767ed0e3227456b8dc2c67a0ffb6af 100644 --- a/tpfs/format_sector.c +++ b/tpfs/format_sector.c @@ -5,21 +5,24 @@ #include "hardware.h" #include "drive.h" +#define FMT_DATA 0xCAFEBABE +#define FMT_SIZE 0x1 + static void empty_it() { return; } -void format_sector(int cylinder, int sector) +void format_sector(unsigned int cylinder, unsigned int sector, unsigned int nsector, unsigned int value) { seek(cylinder, sector); - _out(HDA_DATAREGS, 0x0); - _out(HDA_DATAREGS + 1, 1); - _out(HDA_DATAREGS + 2, 0xFF); - _out(HDA_DATAREGS + 3, 0x00); - _out(HDA_DATAREGS + 4, 0xFF); - _out(HDA_DATAREGS + 5, 0x00); + _out(HDA_DATAREGS, (nsector >> 8) & 255); + _out(HDA_DATAREGS + 1, nsector & 255); + _out(HDA_DATAREGS + 2, (value >> 24) & 255); + _out(HDA_DATAREGS + 3, (value >> 16) & 255); + _out(HDA_DATAREGS + 4, (value >> 8) & 255); + _out(HDA_DATAREGS + 5, value & 255); _out(HDA_CMDREG, CMD_FORMAT); _sleep(HDA_IRQ); } @@ -48,7 +51,7 @@ int main(int argc, char const *argv[]) for (cylinder = 0; cylinder < HDA_MAXCYLINDER; cylinder++) { for (sector = 0; sector < HDA_MAXSECTOR; sector++) - format_sector(cylinder, sector); + format_sector(cylinder, sector, FMT_SIZE, FMT_DATA); } } else if (argc == 2 && (!strcmp(argv[1], "-r"))) @@ -56,12 +59,12 @@ int main(int argc, char const *argv[]) for (cylinder = HDA_MAXCYLINDER - 1; cylinder > -1; cylinder--) { for (sector = HDA_MAXSECTOR - 1; sector > -1; sector--) - format_sector(cylinder, sector); + format_sector(cylinder, sector, FMT_SIZE, FMT_DATA); } } else if (argc == 3) { - format_sector(atoi(argv[1]), atoi(argv[2])); + format_sector(atoi(argv[1]), atoi(argv[2]), FMT_SIZE, FMT_DATA); } else {