> You are, IMHO, missing the point. Under linux,
you have an ioctl()
> call that lets you send any ocmmand bytes you like to the FDC. You can
> therefore get that chip to do anything that it's capable of. And that
> call takes care of setting up the DMA controller if you need it,
> making sure the DMA buffer doesn't cross a page boundary, and all the
> other nasty little details.
FWIW, I've tried out Eric's dumpids program, and it behaves as I
suspected. Using a disk I know the format of (OK, a plain MS-DOS 1.44M
disk), it does, indeed, miss some sectors on my machine. It is
particularly noticeable that a given sector number is not always followed
by the same sector number.
Why can't you just write a kernel module that does its ReadID with
Becuase 'just writing a kernel module' is not something I do for fun :-).
Tracking down a fautly component in some bit of hardware, now that is fun....
[In other words, we can't all be good at everything, OK]
interrupts turned off... there's ways to keep the
OS from task
switching during the critical section of your code that does the sector
layout determination - writing a kernel module or using realtime
priority (nice -20 might work on Linux) of the OS if it's got it.
Assuming you're using a machine with a real PIC interrupt controller, not
Which of course I am. In fact it is a real 8259, it's not even hidden
inside some part of a chipset.
new enough to have an APIC of some sort, under
Linux/x86 you can always
do an iopl(3), and turn off the interrupt controller by hand, from
userland, if you're running as root. Just Be Careful when you try that.
and don't leave it off for too long... :)
That sounds like a very good way to stop all sorts of things from
working. In fact I susepct the floppy driver depends on interrupts to
work (even for the FDRAWCMD ioctl()). Yes, I could disable all others, I
guess and hope...
-tony