This is a question about code going into a boot sector.
BIOS Enhanced Disk Drive Specification 3.0
I was able to successfully call [8.17 Check Extensions Present (FN 41h)] without any problem; I observed the signature in BX, my version number in AH is 0x30 and the interface support bitmap in CX is 5.
However, when I call [8.24 Check Extensions Present (FN 48h)] with DS hard coded to 0x07C0 and SI hard coded to 0x0200, at the 512 byte position after the boot sector signature, and the original drive number in DL. The original drive number is 0x80 anyhow and when I hard code for that value I still get the carry flag set and AH is returned as 0x01.
Again I'm putting this code onto the boot sector of an 8GB USB flash drive. I suspect that due to the smallness of the drive I cannot use the LBA routines. So I cannot figure this one on my own and I haven't found in the specification whether or not the 8GB threshold is absolute or not.
SOLVED: The size of the extended disk parameter buffer must be coded into the word memory location referenced by DS:SI. When he (Ralf Brown Interrupt List) says "(call)" that means the memory location needs to be set on the function call.
POSTSCRIPT: This function call really has no place in a boot sector, though -- especially a FAT32 compatible boot sector. My impression is that it's only important for formatting a volume, or storing certain parameters before loading a protected mode disk driver, so that the disk isn't lost by the software. I had to eliminate the function call (1) to save space and (2) because all of the necessary information should already be in the BIOS parameter block (FAT type file systems); the concept of having to explicitly set the size of the parameter buffer still applies to INT 0x13, AH=0x42 however, where the size of the disk access packet has to be stored in the first word of the parameter buffer at [DS:SI] or the function will fail similarly.