Eudimorphodon
Veteran Member
I'm not surprised this shook out the way it did under DOS. Why it can't read high density disks in Windows is a little more of a mystery; it may not be "drivers" per se, it could be higher level than that.
Here's a big gross document about how the "generic" USB floppy implementation standard works, IE, API details. The long and short of it is that the API for USB floppy drives doesn't emulate an actual wired-in floppy controller, it presents them primarily as a block device on par with a hard disk or flash memory stick. There's an independent embedded microcontroller in the drive that has to answer these API requests and how it responds to some of them is probably going to vary a little between controller chips; IE, some are probably going to be more flexible about "believing" what they read from the inserted floppy disk verses hard-coded behavior.
Remember, in a modern computer that supplies USB floppy support for real-mode software (IE, DOS) it's all smoke and mirrors; it emulates floppy-related INT13h calls, not a floppy controller; if you run something like ImageDisk or Teledisk the gig is totally up. So when the guy in that YouTube video asks his modern computer to boot from floppy drive there's a higher level conversation going on here; the computer is asking the floppy drive to check if there's floppy in the drive and, if so, what the geometry is, and it's left completely up to the microcontroller to figure that out. What I think is going on here is, like Chuck noted in his reply to the video, is since 5 1/4" and 3.5" high density drives both use the same data rate and track counts (and possibly because there's even a supported-by-the-USB-floppy-standard variant of 3.5" drives that turns at 360RPM, that Japanese 1.25MB format) the drive is able to pick up that, yes, there's a disk inserted, it should be using the 500kbps data rate, and it's successfully able to determine the number of sectors per track and sector size. It's thus reporting that information to the PC's BIOS in reply to the media IDENTIFY command (see the API doc) and at least with this particular combination of controller board and BIOS everything falls into place: the INT13h calls "just work", allowing the drive to be booted and read/wrote successfully.
Here's the big provisos on the DOS side that didn't appear in the video and I would bet a shiny nickel that would trip it up hard:
1: I don't think there's much of a chance if you inserted a blank disk in that thing that a FORMAT command would work. I mean, maybe, it's possible, the USB disk API allows for "custom" disk formats to be optionally specified, and maybe there's a long-shot chance that after booting from a 1.2MB disk the computer's BIOS would use the "Long-hand" format of the command so a subsequently inserted blank media would be formatted the same way as the first thing it detected, but I think it's more likely it would fall back to trying to do one of the "native" 3.5 inch presets documented in the UFI command specification.
2: I'd be *deeply* surprised if a low-density disk actually worked. I don't believe the decision to "double-step" is encoded on the disk in any form, it's implicit when a 25okbps format is seen in a 5.25" drive with the standard PC bios. If you made a custom formatted 720k "Quad-density" disk that probably would, it'd look just like a 720K 3.5" disk.
Anyway, again, that's why I think it works with DOS, because DOS isn't second guessing anything. Windows 10 seems to be second guessing either the "IDENTIFY" API results, assuming something is broken if it's not one of the standard 3.5" formats, or maybe Windows is doing something really heinous and instead of using IDENTIFY it's sending a series of MODE SELECTs to probe on its own if it's one of the few geometries it thinks are valid. If it's the latter that might explain why it *kind* of looks like it works with the low density disk, it's mistaking it for a 720k, but of course it doesn't *actually* work because the block addressing is all fouled up because it doesn't know how to double-step. (IE, my guess is that bit where he creates a tiny file and pokes at it only *looks* like it works because of write caching, it's screwing up when it physically goes to write the data.) Per Chuck's comments on the video it might actually work if he either used a 40 track drive or was trying the experiment with a custom quad-density formatted (720k) floppy. (I vaguely recall that DOS utilities to format such floppies in a 1.2MB drive exist?)
It would be "interesting" to see if a different OS like Linux is willing to let 1.2MB floppy disks work. (Or even if older versions of NT-brand Windows don't second-guess.) But it still remains that I seriously doubt the USB controller itself properly "knows" what kind of drive is attached, it just happens to be willing to deal with what it sees from already formatted disks. An interesting experiment would be to boot DOS from "something else" (a hard disk partition or whatever) and see what Norton SI identifies the *empty* floppy disk as; I'd venture it either wouldn't see it at all, or it would say it's a 1.44MB floppy because that's going to be the default when the IDENTIFY command is run on an empty drive. Only reason it's showing as 1.2MB is the real-mode USB floppy driver is returning the inserted media size as the drive capacity.
Here's a big gross document about how the "generic" USB floppy implementation standard works, IE, API details. The long and short of it is that the API for USB floppy drives doesn't emulate an actual wired-in floppy controller, it presents them primarily as a block device on par with a hard disk or flash memory stick. There's an independent embedded microcontroller in the drive that has to answer these API requests and how it responds to some of them is probably going to vary a little between controller chips; IE, some are probably going to be more flexible about "believing" what they read from the inserted floppy disk verses hard-coded behavior.
Remember, in a modern computer that supplies USB floppy support for real-mode software (IE, DOS) it's all smoke and mirrors; it emulates floppy-related INT13h calls, not a floppy controller; if you run something like ImageDisk or Teledisk the gig is totally up. So when the guy in that YouTube video asks his modern computer to boot from floppy drive there's a higher level conversation going on here; the computer is asking the floppy drive to check if there's floppy in the drive and, if so, what the geometry is, and it's left completely up to the microcontroller to figure that out. What I think is going on here is, like Chuck noted in his reply to the video, is since 5 1/4" and 3.5" high density drives both use the same data rate and track counts (and possibly because there's even a supported-by-the-USB-floppy-standard variant of 3.5" drives that turns at 360RPM, that Japanese 1.25MB format) the drive is able to pick up that, yes, there's a disk inserted, it should be using the 500kbps data rate, and it's successfully able to determine the number of sectors per track and sector size. It's thus reporting that information to the PC's BIOS in reply to the media IDENTIFY command (see the API doc) and at least with this particular combination of controller board and BIOS everything falls into place: the INT13h calls "just work", allowing the drive to be booted and read/wrote successfully.
Here's the big provisos on the DOS side that didn't appear in the video and I would bet a shiny nickel that would trip it up hard:
1: I don't think there's much of a chance if you inserted a blank disk in that thing that a FORMAT command would work. I mean, maybe, it's possible, the USB disk API allows for "custom" disk formats to be optionally specified, and maybe there's a long-shot chance that after booting from a 1.2MB disk the computer's BIOS would use the "Long-hand" format of the command so a subsequently inserted blank media would be formatted the same way as the first thing it detected, but I think it's more likely it would fall back to trying to do one of the "native" 3.5 inch presets documented in the UFI command specification.
2: I'd be *deeply* surprised if a low-density disk actually worked. I don't believe the decision to "double-step" is encoded on the disk in any form, it's implicit when a 25okbps format is seen in a 5.25" drive with the standard PC bios. If you made a custom formatted 720k "Quad-density" disk that probably would, it'd look just like a 720K 3.5" disk.
Anyway, again, that's why I think it works with DOS, because DOS isn't second guessing anything. Windows 10 seems to be second guessing either the "IDENTIFY" API results, assuming something is broken if it's not one of the standard 3.5" formats, or maybe Windows is doing something really heinous and instead of using IDENTIFY it's sending a series of MODE SELECTs to probe on its own if it's one of the few geometries it thinks are valid. If it's the latter that might explain why it *kind* of looks like it works with the low density disk, it's mistaking it for a 720k, but of course it doesn't *actually* work because the block addressing is all fouled up because it doesn't know how to double-step. (IE, my guess is that bit where he creates a tiny file and pokes at it only *looks* like it works because of write caching, it's screwing up when it physically goes to write the data.) Per Chuck's comments on the video it might actually work if he either used a 40 track drive or was trying the experiment with a custom quad-density formatted (720k) floppy. (I vaguely recall that DOS utilities to format such floppies in a 1.2MB drive exist?)
It would be "interesting" to see if a different OS like Linux is willing to let 1.2MB floppy disks work. (Or even if older versions of NT-brand Windows don't second-guess.) But it still remains that I seriously doubt the USB controller itself properly "knows" what kind of drive is attached, it just happens to be willing to deal with what it sees from already formatted disks. An interesting experiment would be to boot DOS from "something else" (a hard disk partition or whatever) and see what Norton SI identifies the *empty* floppy disk as; I'd venture it either wouldn't see it at all, or it would say it's a 1.44MB floppy because that's going to be the default when the IDENTIFY command is run on an empty drive. Only reason it's showing as 1.2MB is the real-mode USB floppy driver is returning the inserted media size as the drive capacity.
Last edited: