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
     {