Как узнать параметры корневого каталога(головка, цилиндр, сектор)

Всем привет, столкнулся с проблемой при чтении корневого каталога. У меня есть его адрес, BOOT-sector но нету понимания как вычислить параметры каталога(цилиндр, головку, сектор).

Код который мне дали для вычисления (цилиндра, головки, сектора). Но он не помог

int cyl = rootKatalog/(trk_sec*head_cnt);
int head = (rootKatalog%(trk_sec*head_cnt))/trk_sec;
int sec = (rootKatalog%(trk_sec*head_cnt))%trk_sec+1;

Главная цель программы прочитать информацию о файлах в этом каталоге и вывести на экран. Читаю этот каталог при помощи функции 2 и 13 прерывания. Работаю на win98 в BorlandC++.

Код самой программы

#include <dos.h>
#include <stdio.h>
#include <conio.h>

 struct sec_cat{ 
 unsigned char name[8];
 unsigned char name_e[3];
 unsigned char atr; 
 unsigned char rez[10]; 
 unsigned short time; 
 unsigned short date; 
 unsigned short n_clast; 
 unsigned long size ; 
 }*sec;

unsigned char buf[512];

const unsigned int rootKatalog = 0xF002;

int read_sector(int cyl, int head, int sec) {
    union REGS in, out;
    struct SREGS sr;

    sr.es = FP_SEG(buf);
    in.x.bx = FP_OFF(buf);

    in.h.ah = 0x02;
    in.h.al = 1;
    in.h.dl = 0x80;
    in.h.dh = head;
    in.h.cl = sec;
    in.h.ch = cyl;

    int86x(0x13, &in, &out, &sr);

    if (out.x.cflag || out.h.ah)
       return 1;

    return 0;
}

void print_files_info(){
    int i = 0;
    int j = 0;

    printf("Name: ");
    for(;j < 16; j++)
        printf("%c", sec->name[j]);

    printf("\nType: ");
    for(j = 0; j < 12; j++)
        printf("%c", sec->name_e[j]);/*

    printf("\nAtributs: %c", sec->atr);
    printf("\nTime create: %d\.%d\.%d", (sec->time & 0x1F), ((sec->time >> 5) & 0x3F), ((sec->time >> 11) & 0x1F));
    printf("\nDate create: %d\.%d\.%d", (sec->date & 0x1F), ((sec->date >> 5) & 0xF), ((sec->date >> 9) & 0x13F));
    printf("\nClaster: %d", sec->n_clast);
    printf("\nSize: %d\n\n\n", sec->size); */
}

int main() {

    int i = 0;
    int j = 0;
    int trk_sec = 255;
    int head_cnt = 63;
    int cyl = rootKatalog/(trk_sec*head_cnt);
    int head = (rootKatalog%(trk_sec*head_cnt))/trk_sec;
    int sect = (rootKatalog%(trk_sec*head_cnt))%trk_sec+1;

    clrscr();

   if (read_sector(cyl,head,sect))
    printf("Error reading sector\n");
    else
    printf("Sector read successfully\n");

    //printf("Name file   Type file   Atributs   Time create   Date create   Claster   Size\n");

    for(;i < 1; i++){
    sec = (struct set_cat*)&buf[i * 32];
    print_files_info();
    }

    getch();
   
    return 0;
}

Ответы (0 шт):