Sector-level disk I/O code for various OSes
This code is public domain (no copyright).
You can do whatever you want with it.
Chris Giese <geezer@execpc.com> http://www.execpc.com/~geezer
================================================================
BUILD
================================================================
After a successful build, the executable is named 'diskio.exe'
DOS - Turbo C++ 1.0 or Turbo C++ 3.0:
make
DOS - Watcom C:
wmake /f watcom16.mak
32-bit DOS - DJGPP:
make -f djgpp.mak
32-bit DOS - Watcom C with CauseWay DOS extender:
wmake /f watcom32.mak
NOTE: 32-bit code built with Watcom C does not yet work.
Windows NT - MinGW or CygWin:
make -f win-nt.mak
NOTE: Windows NT version is not tested.
Linux - GCC:
xxx - to do
If you have Windows9x, build and run this code as a DOS program,
not a Win32 program.
================================================================
API
================================================================
/* disk_t, open_disk(), read_sector(), write_sector() */
#include "diskio.h"
int main(void) {
unsigned long lba_sector_num;
unsigned char buf[512];
unsigned drive;
disk_t disk;
/* drive values for floppies:
0 for A:, 1 for B:, etc.
drive values for hard drives:
0x80 for first hard drive, 0x81 for second hard drive, etc. */
drive = 0;
/* read hard drive partition table or floppy boot sector */
lba_sector_num = 0;
if(open_disk(&disk, drive) == 0)
if(read_sector(&disk, lba_sector_num, buf) == 0)
/* success */;
return 0; }
================================================================
TO DO
================================================================
Test if code writes to disk properly
Test Windows NT version
- See if the following work with Windows NT:
- 1.44 meg FAT12 floppy (my guess: YES)
- 1.68 meg FAT12 floppy (my guess: YES)
- 1.44 meg non-FAT (e.g. ext2) floppy (my guess: YES)
- 1.68 meg non-FAT floppy (my guess: NO)
- Is there a Windows NT ioctl() to get floppy disk geometry?
Does it work for non-FAT floppy disks? (How do I make NT read
a 1.68 meg non-FAT floppy?)
Make it work with Linux
Make it work with 32-bit Watcom C
Maybe add a disk cache
Maybe support disks with sector size other than 512 bytes
(e.g. 2048-byte CD-ROM sectors)?
Any way to access CD-ROM with INT 13h functions?
WITHOUT booting from the CD-ROM?