Comments on Program coding:
In the program coding given earlier, basically we are proceeding to perform the following tasks step by step:
- dinfo points to the diskinfo_t structure that contains the information of parameters required by the operation performed by the _bios_disk function.
- As we are going to write the information on the first sector of the disk therefore the location of the sector will be as follows:
Parameter |
What it means |
dinfo.drive = 0x00 |
It indicates the drive 0 that is floppy disk drive (a:) |
dinfo.head = 0 |
It points to head number 0 |
dinfo.track = 0 |
It points to track 0 |
dinfo.sector = 1 |
First sector of the floppy that is sector 1 |
dinfo.sector = 1 |
Number of sectors to consider for write operation = 1 |
dinfo.buffer = dbuf |
Data buffer for the operation |
- Open the file in which the boot image information of 512 bytes of a fresh floppy was stored by the previous program. The file name and path is stored in the character array fname.
- Initialize the disk system using the interrupt 13H (function 00h) where regs.h.ah = 0x00 points to the function 00 H and regs.h.dl = 0x00 is used for a: floppy. And int86(0x13, ®s, ®s) invokes MS-DOS interrupt service INT 13 H.
- _bios_disk(_DISK_WRITE, &dinfo) writes the boot information from the specified file to the first (specified) sector of the floppy disk.
- The status returned is stored in result that is used to display the message for successful operation or to display an error message on the screen if any error occurs.
Let us do it with single program
I hope, now you have understood the concept behind such type of data recovery from the floppy disk. After this let us imagine a single program which gives the same results that we got with the help of previously discussed two programs.
We were doing the following tasks with the recently discussed programs:
- Store the Boot information from a good floppy disk to a file
- Paste this information to the first sector of the currently unreadable floppy
The file which we were using to store the boot image was working as intermediate bridge to connect the operations of both the program. But if we define this boot information in our program coding itself, we need not to create a file as well as we need not to read the boot information of the floppy from the file.
In our next program we are telling our program about what it has to write in the first sector of the unreadable floppy disk and thus we are able to avoid two different programs to do the same task and we can recover our data in the same way as before from the new single program.
The program thus becomes simple with less coding and we are able to reduce the probability of occurrence of file read, write or creation errors. We are doing the following four important tasks in this program:
Don’t think the program difficult to write and understand by seeing the 512 bytes hexadecimal information of dbuf[512]. Later, We’ll discuss the easy way to write this information for your program coding. |
- Define the DOS boot record information in hexadecimal system to be written in the first sector of currently unreadable floppy.
- Reset the disk system to initialize the floppy disk (INT 13H, Function 00H).
- Write the DOS Boot Record to the first sector of floppy
- Check for the successful completion of operation and error, if occurred.
|