Глава – 16
Разработка дополнительных утилит для дисков
Введение
В этой главе мы обсудим, как использовать информацию MBR, DBR, FAT и корневых каталогов для разработки служебных программ, которые могут помочь нам в управлении данными, в оптимизации хранилища или в задачах устранения неполадок с диском.
Обычно эти программы являются решением какой-то конкретной проблемы. В этой главе обсуждались некоторые служебные программы и их программирование.
Скрытие разделов
Как правило, утилита скрытия разделов используется теми пользователями, которые работают на такой компьютерной системе, которую используют пользователи. Если на одном и том же компьютере работает много пользователей, велика вероятность того, что данные другого пользователя могут быть прочитаны, украдены или удалены.
В таком случае, когда у пользователя есть некоторые важные данные или некоторая конфиденциальная информация на том же компьютере, он может захотеть скрыть раздел, в котором у него есть свои данные, таким образом, чтобы к этому разделу не было доступа операционной системы. системе, чтобы другие пользователи не могли получить к ней доступ.
Когда пользователь хочет работать с системой, он может снова получить доступ к разделу, просто отобразив раздел. Как правило, такие мероприятия проводятся в профессиональных учебных заведениях, где компьютерами пользуются многие студенты, но старшеклассники всегда беспокоятся о своих важных данных или проектной работе. Как и в случае нехватки знаний, новый студент может повредить или даже удалить свои данные.
Как раздел становится скрытым
В следующей таблице представлен формат раздела в таблице разделов MBR:
Offset |
Meaning |
Size |
Description |
00H |
Boot Type Indicator Byte |
1 Byte |
If Byte is 00H, the Partition is Inactive and if Byte is 80H, The Partition is Active (or Bootable) |
01H |
Head Number of Beginning of the Partition |
1 Byte |
Starting Head number of the Partition in Hexadecimal System |
02H |
Sector and Cylinder Number of Beginning of the Partition |
2 Bytes |
6 Bits of First Byte make Starting Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Starting Cylinder Number of the Partition |
04H |
File System indicator Byte |
1 Byte |
File System Indicator Byte in Hexadecimal system (for complete list of partition indicator bytes, refer the chapter “Logical Approach to Disks and OS” discussed earlier in this book) |
05H |
Head Number of End of the Partition |
1 Byte |
Ending Head Number of the Partition in Hexadecimal System |
06H |
Sector and Cylinder Number of End of the Partition |
2 Bytes |
6 Bits of First Byte make Ending Sector Number and Combination of remaining 2 Bits (as Two Most Significant Bits) plus 8 Bits of another Byte (Rest 8 least Significant Bits of the 10-Bit Number ) make the Ending Cylinder Number of the Partition |
08H |
Absolute Sector number of Beginning of the Partition |
4 Bytes |
Number of Sectors Between the MBR and the First Sector in the Partition |
0CH |
Absolute Sector number of End of the Partition |
4 Bytes |
Number of Sectors in the Partition |
|
|
Total = 16 Bytes |
|
По смещению 04H в каждой записи раздела находится байт индикатора файловой системы. Этот байт-индикатор представляет тип файловой системы этого раздела. Если значение этого байта изменяется, идентификатор раздела изменяется.
Например, значение байта индикатора раздела для «DOS 12-Bit FAT» равно 0x01. Если это значение изменить на 0x11, идентификатор файловой системы в записи таблицы разделов изменится на «Скрытый 12-битный FAT DOS» (полный список байтов индикатора раздела см. в обсуждаемой главе «Логический подход к дискам и ОС»). ранее в этой книге).
В приведенной ниже таблице показаны еще несколько примеров байтов индикатора файловой системы для некоторых типов разделов:
Partition type indicator Byte |
Description of File System of Partition |
0x01 |
DOS 12–bit FAT |
0x11 |
Hidden DOS 12–bit FAT |
0x04 |
DOS 16–bit FAT (<=32MB) |
0x14 |
Hidden DOS 16–bit FAT (<=32MB) |
0x05 |
DOS Extended |
0x15 |
Hidden DOS Extended |
0x06 |
DOS 16–bit big (> 32MB) |
0x16 |
Hidden DOS 16–bit big (> 32MB) |
0x07 |
NTFS |
0x17 |
Hidden NTFS |
0x0B |
Windows FAT32 |
0x1B |
Hidden Windows FAT32 |
0x0C |
Windows FAT32 (LBA) |
0x1C |
Hidden Windows FAT32 (LBA) |
0x0E |
Windows FAT16 (LBA) |
0x1E |
Hidden Windows FAT16 (LBA) |
0x0F |
Windows Extended |
0x1F |
Hidden Windows Extended |
Здесь мы видим, что соответствующий скрытый раздел для любой файловой системы находится путем добавления значения 0x10 к его байту системного индикатора.
Хотя это и не жесткое правило для сокрытия раздела, оно работает даже для большей части файловой системы. Причина этого в том, что когда мы меняем значение байта индикатора раздела, изменяется идентификатор файловой системы в записи таблицы разделов. И очень редко новая файловая система поддерживается той же операционной системой.
Написание программы для скрытия раздела
Приведенная далее программа используется для скрытия раздела, используя запись раздела этого раздела из таблицы разделов MBR. Если вы хотите скрыть другие логические разделы в расширенном томе, вы должны получить доступ к расширенным MBR.
Кодировка программы была дана далее:
/* Программировать, чтобы скрыть раздел, используя запись таблицы разделов этого раздела из MBR */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data Buffer to read-Write the
Sector information */
clrscr();
dinfo.drive = 0x80; /* drive number for First
Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
/* Чтение первого сектора диска */
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition Entries are,
0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);cprintf("Partition Entry in MBR is as
follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* получить пользовательский ввод для скрытия раздела */
gotoxy(1,15);
printf("Enter The partition no. you want to hide,
Or Press any other key to Exit... ");
tohide=getche();
switch(tohide)
{
case '1': /* Hide First Partition in partition Table */
dbuf[450] = dbuf[450] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '2': /* Hide second Partition in partition Table */
dbuf[466] = dbuf[466]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '3': /* Hide third Partition in partition Table */
dbuf[482] = dbuf[482] +16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
case '4': /* Hide Fourth Partition in partition Table */
dbuf[498] = dbuf[498]+16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Комментарии по кодированию:
Программа считывает байты индикатора файловой системы всех четырех записей раздела в таблице разделов MBR. Функция showtype() используется для отображения имени файловой системы для соответствующего значения байта индикатора файловой системы.
Пользователь выбирает раздел, который нужно скрыть, из меню, отображаемого на экране, а затем к значению байта индикатора файловой системы этого раздела добавляется 16 (0x10), чтобы скрыть его.
Код функции showtype() выглядит следующим образом:
/* Функция для отображения имени файловой системы, соответствующей значению байта индикатора файловой системы */
showtype(i)
{
switch (i)
{
case 0x00 :cprintf("Empty"); break;
case 0x01 :cprintf("DOS 12-bit FAT"); break;
case 0x02 :cprintf("XENIX root"); break;
case 0x03 :cprintf("XENIX usr"); break;
case 0x04 :cprintf("DOS 16-bit <32M"); break;
case 0x05 :cprintf("Extended"); break;
case 0x06 :cprintf("DOS 16-bit >=32M"); break;
case 0x07 :cprintf("OS/2 HPFS"); break;
case 0x08 :cprintf("AIX"); break;
case 0x09 :cprintf("AIX bootable"); break;
case 0xa :cprintf("OS/2 Boot Manag"); break;
case 0xb :cprintf("Win95/98/ME FAT32"); break;
case 0xc :cprintf("Win95/98/ME FAT32 (LBA)"); break;
case 0xd :cprintf("Win95 FAT16"); break;
case 0xe :cprintf("Win95 FAT16 (LBA)"); break;
case 0xf :cprintf("Win95 Extended"); break;
case 0x11 :cprintf("Hidden FAT-12");break;
case 0x12 :cprintf("Compaq Diagnostics");break;
case 0x14 :cprintf("Hidden FAT-16 (<32)");break;
case 0x15 :cprintf("Hidden Extended");break;
case 0x16 :cprintf("Hidden FAT-16");break;
case 0x17 :cprintf("NTFS"); break;
case 0x40 :cprintf("Venix 80286"); break;
case 0x51 :cprintf("Novell?"); break;
case 0x52 :cprintf("Microport"); break;
case 0x63 :cprintf("GNU HURD"); break;
case 0x64 :
case 0x65 :cprintf("Novell Netware"); break;
case 0x75 :cprintf("PC/IX"); break;
case 0x80 :cprintf("Old MINIX"); break;
case 0x81 :cprintf("Linux/MINIX"); break;
case 0x82 :cprintf("Linux swap"); break;
case 0x83 :cprintf("Linux native"); break;
case 0x85 :cprintf("Linux Extended"); break;
case 0x93 :cprintf("Amoeba"); break;
case 0x94 :cprintf("Amoeba BBT"); break;
case 0xa5 :cprintf("BSD/386"); break;
case 0xa6 :cprintf("OpenBSD"); break;
case 0xa7 :cprintf("NEXTSTEP"); break;
case 0xb7 :cprintf("BSDI fs"); break;
case 0xb8 :cprintf("BSDI swap"); break;
case 0xc7 :cprintf("Syrinx"); break;
case 0xdb :cprintf("CP/M"); break;
case 0xe1 :cprintf("DOS access"); break;
case 0xe3 :cprintf("DOS R/O"); break;
case 0xf2 :cprintf("DOS secondary"); break;
case 0xff :cprintf("BBT"); break;
default :cprintf("UNKOWN");
}
return 0;
}
Написание программы для отображения раздела
Программа для отображения скрытого раздела работает прямо противоположно программе, скрывающей программу. В этой программе мы вычитаем 16 (0x10) из значения байта индикатора файловой системы скрытого раздела.
Код программы выглядит следующим образом:
/* Программа для отображения раздела, скрытого предыдущей программой */
#include <bios.h>
#include <stdio.h>
int main(void)
{
struct diskinfo_t dinfo;
int result, tohide;
int i;
static char dbuf[512];/* Data buffer */
clrscr();
dinfo.drive = 0x80; /* drive number for
First Hard Disk */
dinfo.head = 0; /* disk head number */
dinfo.track = 0; /* track number */
dinfo.sector = 1; /* sector number */
dinfo.nsectors = 1; /* sector count */
dinfo.buffer = dbuf; /* data buffer */
result = _bios_disk(_DISK_READ, &dinfo);
if ((result & 0xff00) == 0)
{
printf("The Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
textcolor(15);
gotoxy(5,5);
cprintf("Partition Entry in MBR is as follows:");
gotoxy(10,7);cprintf("1. "); showtype(dbuf[450] & 0xff);
gotoxy(10,8);cprintf("2. "); showtype(dbuf[466] & 0xff);
gotoxy(10,9);cprintf("3. "); showtype(dbuf[482] & 0xff);
gotoxy(10,10);cprintf("4. "); showtype(dbuf[498] & 0xff);
/* Получите ввод «Использовать», чтобы отобразить раздел */
gotoxy(1,15);printf("Enter The partition no., Which to
unhide, Or Press any other key to
Exit... ");
tohide=getche();
switch(tohide)
{
/* Показать первый раздел таблицы разделов */
case '1':
dbuf[450] = dbuf[450] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide second partition of partition table */
case '2':
dbuf[466] = dbuf[466]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide third partition of partition table */
case '3':
dbuf[482] = dbuf[482] -16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
/* Unhide fourth partition of partition table */
case '4':
dbuf[498] = dbuf[498]-16;
result = _bios_disk(_DISK_WRITE, &dinfo);
break;
default:
exit(0);
}
if ((result & 0xff00) == 0)
{
printf("\n\nThe New Partition Codes of Four Partition
Entries are, 0x%02x, 0x%02x, 0x%02x And 0x%02x.\n",
dbuf[450] & 0xff, dbuf[466] & 0xff,
dbuf[482] & 0xff, dbuf[498] & 0xff);
getch();
}
else
{
printf("Cannot Change the Byte, status = 0x%02x\n",
result);
getch();
}
}
return 0;
}
Комментарии к программе
Будьте осторожны, указывая номер раздела, который нужно показать. Если номер раздела введен по ошибке, информация о файловой системе этого раздела будет изменена, и раздел может стать недоступным. Однако ранее рассмотренная программа для скрытия разделов может помочь вам вылечить байт индикатора файловой системы этого раздела.
Написание программы для удаления раздела
Программа для удаления раздела используется для устранения неполадок. Например, предположим, что на вашем диске есть разделы с файловой системой FAT32. Теперь вы решили одновременно установить операционную систему LINUX на свой диск.
Во всяком случае, установка операционной системы прерывается между ними, на этапе, когда вносятся изменения в таблицу разделов MBR. В таких случаях велика вероятность того, что раздел, в который вы собирались установить другую операционную систему, станет недоступным.
В этом случае дисковое пространство потерянного раздела становится бесполезным из-за недоступности. Однако, если мы каким-либо образом удалим информацию о разделе этого раздела из таблицы разделов, мы снова сможем сделать это пространство пригодным для использования с помощью команды FDISK в DOS.
Дана следующая программа для удаления записи раздела из таблицы разделов MBR:
/* Программа для удаления второй записи раздела из таблицы разделов MBR */
# include <bios.h>
/* structure to read the partition entry from partition table */
struct partition
{
/* Active Partition Byte */
unsigned char bootable ;
/* Starting Head */
unsigned char start_side ;
/* combination of Starting sector and cylinder number */
unsigned int start_sec_cyl ;
/* File system Indicator Byte */
unsigned char parttype ;
/* Ending Head */
unsigned char end_side ;
/* combination of Starting sector and cylinder number */
unsigned int end_sec_cyl ;
/* Relative Sector Number */
unsigned long part_beg ;
/* Partition length in sectors */
unsigned long plen ;
} ;
/* Structure to read-write MBR */
struct part
{
/* IPL (Initial Program Loader) */
unsigned char master_boot[446] ;
/* Partition table */
struct partition pt[4] ;
/* Magic Number */
int lasttwo ;
} ;
struct part p ;
void main()
{
unsigned int t1,t2;
clrscr();
biosdisk ( 2, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* display the information of
Partition table */
getch();
p.pt[1].bootable = 0;
p.pt[1].start_side = 0 ;
p.pt[1].start_sec_cyl = 0 ;
p.pt[1].parttype = 0;
p.pt[1].end_side = 0;
p.pt[1].end_sec_cyl = 0;
p.pt[1].part_beg = 0;
p.pt[1].plen = 0;
printf("\n\n\n After Deleting the Second Partition
Entry From MBR Partition Table,");
printf("\n The Partition Table will Be Changed as
Follows: ");
/* To Delete Second Partition Information from partition
table of MBR Remove the forward slashes from the
biosdisk( ) function. Do not use Carelessly, Partition
information of Second Partition of Partition Table will
be Erased Completely. */
////// biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ) ;
display(); /* Display the information of partition
table after modification */
getch();
}
Комментарии к программе:
Раскомментируйте функцию biosdisk ( 3, 0x80, 0, 0, 1, 1, &p ), чтобы удалить второй раздел из таблицы разделов MBR.
Чтобы удалить раздел, все его параметры устанавливаются равными 0 в записи таблицы разделов в MBR. Всегда помните, что если вы удалите расширенный раздел, все логические разделы этого расширенного раздела также станут недоступны.
Функция display() используется для отображения таблицы разделов MBR. Код функции следующий:
/* Функция для отображения таблицы разделов MBR */
display()
{
unsigned int s_sec, s_trk, e_sec, e_trk, i, t1, t2 ;
char type[20], boot[5] ;
printf("\n\nPart. Boot Starting location Ending Location
Relative Number of");
printf("\nType Side Cylinder Sector Side Cylinder
Sector Sectors Sectors\n");
for ( i = 0 ; i <= 3 ; i++ )
{
if ( p.pt[i].bootable == 0x80 )
strcpy ( boot, "Yes" ) ;
else
strcpy ( boot, "No" ) ;
switch ( p.pt[i].parttype )
{
case 0x00 :
strcpy ( type, "Unused" ) ; break ;
case 0x1 :
strcpy ( type, "FAT12" ) ; break ;
case 0x2 :
strcpy ( type, "Xenix" ) ; break ;
case 0x3 :
strcpy ( type, "Xenix:usr" ) ; break ;
case 0x4 :
strcpy ( type, "FAT16<32M" ) ; break ;
case 0x5 :
strcpy ( type, "DOS-Ext." ) ; break ;
case 0x6 :
strcpy ( type, "FAT16>32M" ) ; break ;
case 0x7 :
strcpy ( type, "NTFS" ) ; break ;
case 0x0b :
strcpy ( type, "FAT32" ) ; break ;
case 0x0c :
strcpy ( type, "FAT32-LBA" ) ; break ;
case 0x0d :
strcpy ( type, "VFAT16" ) ; break ;
case 0x0e :
strcpy ( type, "VFAT16-LBA" ) ; break ;
case 0x0f :
strcpy ( type, "FAT EXT" ) ; break ;
case 0x17 :
strcpy ( type, "HPFS" ) ; break ;
case 0x81 :
strcpy ( type, "Old LINUX" ) ; break ;
case 0x82 :
strcpy ( type, "LinuxSwap" ) ; break ;
case 0x83 :
strcpy ( type, "LinuxNative" ) ; break ;
case 0x85 :
strcpy ( type, "Linux Ext." ) ; break ;
default :
strcpy ( type, "Unknown" ) ; break ;
}
s_sec = ( p.pt[i].start_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].start_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].start_sec_cyl & 0x00c0 ) << 2 ;
s_trk = t1 | t2 ;
e_sec = ( p.pt[i].end_sec_cyl & 0x3f ) ;
t1 = ( p.pt[i].end_sec_cyl & 0xff00 ) >> 8 ;
t2 = ( p.pt[i].end_sec_cyl & 0x00c0 ) << 2 ;
e_trk = t1 | t2 ;
printf ( "\n%6s %3s", type, boot ) ;
printf ( "%4d %6d %8d", p.pt[i].start_side,
s_trk,s_sec ) ;
printf ( "%7d %6u %8u", p.pt[i].end_side, e_trk,
e_sec ) ;
printf ( " %10lu %10lu", p.pt[i].part_beg,
p.pt[i].plen ) ;
}
return 0;
}
Форматирование дискеты «Track 0 Bad»
Эта программа используется для форматирования тех дискет, у которых на дорожке 0 есть поврежденные сектора, а при форматировании в DOS или Windows выводятся сообщения об ошибках, такие как «Track 0 BAD». Однако вы также можете использовать его для форматирования обычных дискет.
Код программы приведен на прилагаемом к этой книге диске под названием «TTFORMAT.C». Логика работы программы такая же, как у программы, опубликованной в компьютерном журнале PCQUEST в выпуске за февраль 2003 г.
В этой программе мы пытаемся сделать этот тип дискет пригодным для повторного использования, форматируя их. Программа говорит, что вы можете работать с гибким диском даже с несколькими битыми секторами на нем. Однако, если первый сектор диска поврежден, дискету нельзя отформатировать.
Программа перезаписывает всю информацию DBR, FAT и корневого каталога. Если на поверхности диска есть плохие сектора, они помечаются как плохие в FAT.
В коде программы структура BPB используется для записи блока параметров BIOS DBR. Структура boot_sector используется для записи DBR диска. Структура address_field используется для взаимодействия с количеством цилиндров, головок и секторов на дорожку, а также с размером сектора.
Различные функции, используемые при кодировании программы, и их описание приведены в следующей таблице.
Серийный номер тома дискеты вычисляется DOS в соответствии с текущей датой и временем системных часов.
Первая часть серийного номера рассчитывается как сумма времени (секунды и сотые доли секунды) и даты (месяц и день). Вторая часть серийного номера равна сумме времени (часы и минуты) и даты (год).
Все вычисления выполняются в шестнадцатеричной системе счисления. Например, предположим, что вы отформатировали дискету в среде DOS в 11:16:28:65 23.10.2003. Теперь посчитаем серийный номер диска.
The time in (seconds and Hundredths of seconds) format is
= (28 and 65)
= (1CH and 41H)
Write it as 1C41
Similarly, date in (month and day) format is
= (10 and 23)
= (0AH and 17H)
Write it as 0A17
Similarly, time in (hours and minutes) format is,
= (11 and 16)
= (0BH and 10H)
Write it as 0B10
And the year will be
= 2003
= 07D3
Теперь давайте рассчитаем серийный номер дискеты в соответствии с приведенным выше описанием. Первая часть серийного номера будет (1C41 + 0A17) = 2658, а вторая часть серийного номера будет (0B10 + 07D3) = 12E3.
Написание инструмента редактирования диска
Код программы для редактирования дисков указан на диске, прилагаемом к этой книге, с именем файла «TTEDITOR.C». Вы можете использовать эту программу для анализа поверхности жестких дисков или дискет. Даже большую часть исследования во время написания этой книги я использовал TTEDITOR для анализа поверхности диска или выполнения модификаций диска.
Некоторые из важных задач, которые может выполнять эта программа редактирования, следующие:
- Чтение посекционной информации о поверхности жестких дисков и гибких дисков.
- Записать резервную копию любого сектора в файл.
- Восстановить данные сектора из файла.
- Изменить один байт.
- Калькулятор преобразования шестнадцатеричного в десятичный и двоичный код.
Программа использует функции biosdisk() и _bios_disk() для доступа к дискам. Если вы хотите проанализировать диск за пределами 8,4 ГБ, модифицируйте программу с использованием Extensions of INT 13H. Описание функций, используемых в программе, приведено в следующей таблице:
Function |
Description |
bkground( ) |
creates the back ground and frame of first screen |
clsline( ) |
Used to clear the complete row from the screen specified by row number. |
refresh( ) |
Function to recall all the display functions on the screen |
writetofile( ) |
Function to write the data of a sector to user defined file. |
writetosector( ) |
Function to restore the sector from specified file. |
msgdisp( ) |
Function to display messages on the screen. |
modify( ) |
Function to modify a single byte of any sector, specified by user. |
frame( ) |
Function to draw the frame structure of sector display |
dispmax( ) |
Display maximum CHS number of the disk (Valid Up to 8.4 GB Disk) |
display( ) |
Display the sector and information on the screen. |
hextodec( ) |
Function to Calculate hexadecimal number to corresponding decimal and binary numbers. |
Страница изменена: 16/03/2022