I created a floppy BIOS extension ROM using the code from my BIOS and posted it here (look for floppy_bios-0.7e.bin in the attached files section at the bottom of the page):
http://www.malinov.com/Home/sergeys-projects/isa-fdc-and-uart
I did some minimal testing and I am able to boot from a 1.44 MB drive using a 1.44 MB diskette on an XT clone. I also can read 1.2 MB diskettes on it. I tested it on my Xi 8088 board (
http://n8vem-sbc.pbworks.com/w/page/59325872/Xi 8088) and it works too.
Some notes:
- ROM's drive configuration is: 1st drive: 3.5"/1.44 MB, 2nd drive: 5.25"/1.2 MB. You have two choices if you want a different configuration:
1) Drop me a note, and I'll compile the image according to your configuration
2) Patch the ROM. Floppy drive types are stored in bytes 06h - 09h (06h - first drive, 09h - forth drive). Byte 05h is used to correct the checksum. When changing floppy configuration in ROM make sure to update this byte, so that the checksum (sum of all bytes) of the image is 00h. Either do some hexadecimal math or use your programmer's software checksum output (my programmers software displays 16-bit checksum, in this case only lower 8-bit matter).
Floppy drive types (configuration bytes' values) match INT 13h AH=08h results (drive type - BL) and defined as follows: 00h - no floppy, 01h - 360 KB, 02h - 1.2 MB, 03h - 720 KB, 04h - 1.44 MB, 06h - 2.88 MB
- I started adding some support for 4 floppy drives, but it is not complete yet (2 drives are supported now)
- It looks like DOS (at least MS-DOS 6.22) uses CMOS in addition to INT 13h to determine floppy drive configuration. At least on my Xi 8088 board it behaved funky when CMOS settings didn't match the ROM drive configuration. I need to do some more testing on this...
- BIOS will install itself on INT 13h if INT13h vector is the original BIOS one (the vector's offset is 0EC59h), otherwise it will install itself on INT 40h (this assumes that HDD BIOS extension ROM was installed and redirected original INT 13h to INT 40h). Probably there are some problems with this logic, but it is the simplest approach I could think of. Please let me know if you have any better ideas.
- No warranties. This is a mostly untested code, it might ruin you floppy disks (so don't use any disks with valuable information). It could produce some unexpected results. But most likely it won't damage the hardware