Adapted from a thread started by Lorne on January 14th, 2010:
Unlike modern IDE hard drives where a low level format is discouraged or maybe not even possible, MFM hard drives often need to be low level formatted. Here is the brief how-to.
Controller Support

Many MFM controllers have a user accessible routine to low level format a hard drive. The routine is part of the ROM BIOS extension provided by the controller, and it can be started by using the DOS debug command.
To get to the routine you need to know where in memory the ROM BIOS extension is, and the offset to the routine. The location of the ROM BIOS is not always in the same place - it depends on the individual controller, and the person who installed it might have set the base address to something non-standard. A common segment address to check is C800:0000.
Assuming that your controller does have its ROM BIOS located at C800:0000 and it does have a built in route at offset 5, the following debug command will invoke it:
Here are some entry points for well known cards:
Adaptec ACB-2072 (ST412 RLL): G=C800:ccc
:WD WD1002A-WX1 (ST412 MFM): G=C800:5
Juko D16-X (IDE-XT, IDE-AT): G=C800:5
IBM Advanced Diagnostics

If you have a genuine IBM machine or a close compatible, then you can use the IBM Advanced Diagnostics disk to low level format your hard drive.
From the main menu, here's how you navigate to the low level format functionality:
  • Option: RUN DIAGNOSTOC ROUTINES (Note that after some initial floppy activity, there is no screen/floppy activity for a while - be patient.)
  • Answer Yes to "Is there a monitor .." question
  • Answer Yes to "Is the list correct" question

Assembler code in Debug

All of the XT class controllers have BIOS support for formatting their hard drive, even if there is not a user accessible program for running it. The routine is part of the INT 13 support for hard drives.
From a usenet posting by Wally Bass years ago:
The original IBM (Xebec) controller BIOS has no lowlevel formatting
routine, and cannot be induced to low level format a disk with any
debug command of the form G =C800:xx. On the other hand, the
controller has a 'format drive' command, and this is supported via
BIOS call INT 13h AH=7. For that call, you pass the desired interleave
in AL, and you pass the starting track in CX and DH, and the drive
number in DL, as for other INT 13h calls. Formatting the drive, then,
can be done with something like
  a 100
  mov ax,707   <--format, interleave 7, which I think was the IBM/Xebec value
  mov cx,1     <--start at cyl 0, sector 1
  mov dx,80    <--head 0, drive 80 (if that's the drive you're formatting)
  int 13       <--invoke the BIOS routine
  int 3        <--return to debug (breakpoint interrupt
  <CR to get debug out of assemble mode>
  g            <--execute the routine that you just keyed in
This will format the drive as a 10MB drive (4 heads, about 306
sectors), with the original IBM controller. If you want some other
format, you have a lot more work to do, and would probably be better
off getting a new controller.
Wally Bass
Third Party Utilities

Programs like the Mace Utilities, SpeedStor, and others can low level format these drives.
[wiki]Category:How To[/wiki]

Useful article