Fixed an error in Ultimate (Again)

Sorry, the error I thought I fixed in Ultimate mentioned below was not fixed. Hopefully it is now.

Fixed an error in Ultimate

I have been working with my Ultimate utility and found that the DELETE in the FAT file system just didn't work right. Come to find out, I was giving it the parent's cluster number instead of the actual file's cluster number. The DELETE and INSERT of files should now work as expected. Granted, it still needs some more work and testing. Thanks to all of you whom have sent in comments, it is much appreciated.

Loading sectors via FDC/DMA (Part 3)

Code has been uploaded to my github. It needs a little work, but it does actually work in Bochs and QEMU. It has very little assumptions, other than the controller (first or second) and the drive (first or second). It simply loads the second sector of the disk and jumps to it, printing a string saying it was successful. It was a decent little experiment that works.

Loading sectors via FDC/DMA (Part 2)

Just a quick update. I was able to read in a second sector and jump to it all using the FDC and no BIOS disk services. It still has a few assumptions, and needs a little more work, but it all fits within the first sector of the disk. It has error checking with printed error messages as well. I will do a little more work and then post the code for all to see.

Loading sectors via FDC/DMA (Part 1)

Over at Stackoverflow, someone asked about reading from the floppy disk within the boot sector without calling the BIOS. Yes, this sounds quite counter-productive since this is why the BIOS was originally designed.

However, it got me thinking. Can it be done, reliably, in the 512 bytes of code the BIOS has already loaded for you? i.e.: You would need to write code for the FDC as well as the DMA all in this first sector. You could not place any code within another sector, load it, then call it, for all code to load a sector must already have been loaded by the BIOS.

This might be a fun experiment. I mean, I am quite sure 512 bytes is plenty, but I mean, do it reliably. i.e.: Don't assume anything about the state of the machine, the FDC, the FDD, or the DMA.

All must be programmed as if none of the state of the devices were known. i.e.: You must reset the FDC, set the configuration, (specify command, etc.), set up the DMA, as well as read from the disk using only the hardware. No BIOS. The only thing you can assume is that the floppy is still inserted.

Which brings up another question. How do you know which drive, 0 or 1, the floppy is in, the one that was just booted? Assume DL=00h is drive 0, DL=01h is drive 1? Now we are assuming again.

This might be an interesting experiment. If I get the time, I might just have to try it. If you do it, please let me know. I would like to see it, as well as possibly posting it for others to see.