/*
----------------------------------------------------------------------------------------
ASSIGNMENT NO : 3
TITLE : WRITE A PROGRAM FOR FLOPPY (BOOT SECTOR)
----------------------------------------------------------------------------------------
*/
#include<stdio.h>
#include<conio.h>
#include<dos.h>
char BUFFER[512]="";
void read_sector()
{
asm MOV AH,02H //READ SECTOR
asm MOV AL,01H //NUMBER OF SECTORS
asm MOV CH,00H //CYLINDER
asm MOV CL,01H //SECTOR
asm MOV DH,00H //HEAD
asm MOV DL,00H //DRIVE
asm MOV BX,SEG BUFFER
asm MOV ES,BX
asm MOV BX,OFFSET BUFFER
asm INT 13H
}
void ascii_display()
{
asm MOV DL,BYTE PTR[SI]
asm MOV AH,02H
asm INT 21H
}
void hex_display()
{
asm MOV DH,BYTE PTR[SI]
asm MOV DL,DH
asm AND DL,0F0H
asm MOV CL,04H
asm ROR DL,CL
asm CMP DL,09H
asm JBE A1
asm ADD DL,07H
A1: asm ADD DL,30H
asm MOV AH,02H
asm INT 21H
asm MOV DL,DH
asm AND DL,0FH
asm CMP DL,09H
asm JBE A2
asm ADD DL,07H
A2: asm ADD DL,30H
asm MOV AH,02H
asm INT 21H
asm MOV DL,20H
asm MOV AH,02H
asm INT 21H
}
void display_boot()
{
int i;
asm MOV SI,OFFSET BUFFER
printf("\\n\\t\\tMap of boot sector of DOS disk\\n");
printf("\\nOFFSET\\t INFORMATION\\t BYTE VALUE\\n");
printf("\\n00H\\tJump to boot strap routine(3byte)\\t");
for(i=0;i<3;i++)
{
hex_display();
asm INC SI
}
printf("\\n03H\\tVendor Identification(8bytes)\\t");
for(i=0;i<8;i++)
{
ascii_display();
asm INC SI
}
printf("\\n0BH\\tByte per sector(2bytes)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n0DH\\tSector per clusters(1byte)\\t");
hex_display();
asm INC SI
printf("\\n0EH\\tNumber of reserved sectors(2bytes)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n10H\\tNumber of FAT copies(1bytes)\\t");
hex_display();
asm INC SI
printf("\\n11H\\tMAXIMUM NUMBER OF root\\n\\tDirectory entries(2bytes)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n13H\\tNUMBER OF DISK SECTORS(2BYTES)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n15H\\tMEDIA DISCRIPTOR BYTE(1BYTES)\\t");
hex_display();
asm INC SI
printf("\\n16H\\tNUMBER OF SECTORS for FAT(2bytes)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n18H\\tSECTORS/TRACK(2 BYTES)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n1AH\\tNUMBER OF R/W HEADS(2 BYTES)\\t");
for(i=0;i<2;i++)
{
hex_display();
asm INC SI
}
printf("\\n1CH\\tNUMBER OF HIDDEN SECTORS(4 BYTES)\\t");
for(i=0;i<4;i++)
{
hex_display();
asm INC SI
}
printf("\\n20H\\tNUMBER OF SECTORS FOR DRIVES LARGER \\n\\tTHAN 32MB(4 BYTES)\\t");
for(i=0;i<4;i++)
{
hex_display();
asm INC SI
}
printf("\\n24H\\tPHYSICAL DRIVE NUMBER(1 BYTE)\\t");
hex_display();
asm INC SI
printf("\\n25H\\tRESERVE(1 BYTE)\\t");
hex_display();
asm INC SI
printf("\\n26H\\tBOOT SECTOR SIGNATURE(1 BYTE)\\t");
hex_display();
asm INC SI
printf("\\n27H\\tVOLUME ID NUMBER(4 BYTES)\\t");
for(i=0;i<4;i++)
{
hex_display();
asm INC SI
}
printf("\\n2BH\\tVOLUME LABEL(11 BYTES)\\t");
for(i=0;i<11;i++)
{
ascii_display();
asm INC SI
}
printf("\\n36H\\tFILE SYSTEM TYPE(8 BYTES)\\t");
for(i=0;i<8;i++)
{
ascii_display();
asm INC SI
}
printf("\\n\\nPress any key to continue...\\n");
getch();
clrscr();
printf("\\n\\t\\tBOOT STRAP LOADER CONTAINS\\n");
for(i=0;i<450;i++)
{
if(i%24==0)
printf("\\n%3xh:",62+i);
hex_display();
asm INC SI
}
}
void main()
{
int choice;
asm MOV AH,00H
asm MOV DL,00H //DRIVE NUMBER
asm INT 13H
clrscr();
read_sector();
asm JC S1
display_boot();
getch();
exit();
S1: printf("\\nERROR");
getch();
}
/*
-----------------------------------------------------------------
END OF THE PROGRAM
-----------------------------------------------------------------
*/