Top secrets sources NedoPC pentevo

Rev

Rev 796 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

                Îïèñàíèå ôîðìàòà FDI-ôàéëà
                Âåðñèÿ 1.1 (Óãëåêîâ Ê.)
                Âåðñèÿ 2 (deathsoft)

Ïðèìåð ðåàëèçàöèè ÷òåíèÿ/çàïèñè fdi âåðñèé 1 è 2 ìîæíî ïîñìîòðåòü â
wldr_fdi.cpp ýìóëÿòîðà UnrealSpeccy v0.38.3

Îáùóþ ñòðóêòóðó fdi ôàéëà ìîæíî ïðåäñòàâèòü â ñëåäóþùåì âèäå:

TFdiHdr - ïðèñóòñòâóåò âñåãäà
TFdiAddInfo - ïðèñóòñòâóåò â ôîðìàòå 2 è âûøå (â ôîðìàòå 1 îòñóòñòâóåò)
TTrkHdr[c*h] - ìàññèâ çàãîëîâêîâ äîðîæåê
...
FdiTrkData[] - ìàññèâ ïåðåìåííîé äëèíû ñ äàííûìè äîðîæåê
...
(ôîðìàò 2 òèï 1 (èíôîðìàöèÿ î ñáîéíûõ áàéòàõ))
TFdiTrkAddInfo[] - ìàññèâ ïåðåìåííîé äëèíû ñ äîïîëíèòåëüíîé èíôîðìàöèåé î äîðîæêàõ
...
FdiTrkAddData[] - ìàññèâ ïåðåìåííîé äëèíû ñ äàííûìè ñáîéíûõ áàéòîâ äëÿ òåõ äîðîæåê ãäå îíè åñòü


                        Ôîðìàò çàãîëîâêà ôàéëà
Ñòðóêòóðà TFdiHdr:
------------------------------------------------------------------------------
Ñìåùåíèå Äëèíà ïîëÿ     Îïèñàíèå
------------------------------------------------------------------------------

0       3       Êëþ÷åâàÿ ìåòêà 'FDI'
3       1       Ôëàã çàùèòû çàïèñè      (0 - write enabled, 1 - write disabled)
4       2       ×èñëî öèëèíäðîâ
6       2       ×èñëî ïîâåðõíîñòåé
8       2       Ñìåùåíèå òåêñòà (êîðîòêèé êîììåíòàðèé ê äèñêó)
A       2       Ñìåùåíèå äàííûõ
Ñ       2       Äëèíà äîïîëíèòåëüíîé èíôîðìàöèè â çàãîëîâêå.
                Â âåðñèè 1.0 - 0x0000
                Â âåðñèè 2 - ðàçìåð ñòðóêòóðû TFdiAddInfo (ñì. "Ôîðìàò äîïîëíèòåëüíîé èíôîðìàöèè")

E       "Äëèíà äîïîëíèòåëüíîé èíôîðìàöèè" (åñëè 0, òî äîïîëíèòåëüíîé èíôîðìàöèè íåò)
                ñì. "Ôîðìàò äîïîëíèòåëüíîé èíôîðìàöèè"

E+"äëèíà äîïîëíèòåëüíîé èíôîðìàöèè"
        ???
                Îáëàñòü çàãîëîâêîâ òðåêîâ. Çäåñü ñîáðàíà âñÿ èíôîðìàöèÿ î
                ôîðìàòå äèñêåòû. Ýòà îáëàñòü äîëæíà ñîäåðæàòü íå ìåíüøå
                "×èñëî öèëèíäðîâ"*"×èñëî ïîâåðõíîñòåé" çàãîëîâêîâ. Çàãîëîâêè
                èäóò â ïîðÿäêå Cyl 0 Head 0, Cyl 0 Head 1, Cyl 1 Head 0 è ò.ä.
                Ôîðìàò çàãîëîâêà îïèñàí íèæå.

"Ñìåùåíèå òåêñòà"
        ???
                Êîììåíòàðèé ê äèñêó.Êîíåö êîììåíòàðèÿ - íóëåâîé ñèìâîë.
                MAKEFDI ïðè ñîçäàíèè íîâîãî ôàéëà ïîçâîëÿåò ââîäèòü êîììåíòàðèé
                íå áîëåå 64 ñèìâîëîâ ñ çàâåðøàþùèì íóëåì,íî ïðè ðàáîòå ñ ôàéëîì
                äëèíà ýòîãî ïîëÿ áóäåò îïðåäåëÿòüñÿ ïî ïîëîæåíèþ çàâåðøàþùåãî
                íóëåâîãî ñèìâîëà

"Ñìåùåíèå äàííûõ"
        ???
                Çäåñü ëåæàò ñîáñòâåííî äàííûå èç ñåêòîðîâ. Ñêîëüêî çäåñü áóäåò
                ñåêòîðîâ, èõ äëèíà è ïîðÿäîê ñëåäîâàíèÿ - çàâèñèò îò ôîðìàòà.

-------------------------------------------------------------------------------

Ôîðìàò FDI-ôàéëà äîïóñêàåò ïðîïóñêè ìåæäó îáëàñòÿìè çàãîëîâêîâ òðåêîâ,òåêñòîâûì
êîììåíòàðèåì è îáëàñòüþ äàííûõ.


                        Ôîðìàò çàãîëîâêà òðåêà
Ñòðóêòóðà TTrkHdr:
------------------------------------------------------------------------------
Ñìåùåíèå Äëèíà ïîëÿ     Îïèñàíèå
------------------------------------------------------------------------------

0       4       Ñìåùåíèå òðåêà - íà÷àëî îáëàñòè äàííûõ ýòîãî òðåêà
                        îòíîñèòåëüíî "Ñìåùåíèÿ äàííûõ"
4       2       Âñåãäà ñîäåðæèò 0 (ðåçåðâ äëÿ ìîäåðíèçàöèè)
6       1       ×èñëî ñåêòîðîâ íà òðåêå

7       (×èñëî ñåêòîðîâ)*7
                Èíôîðìàöèÿ î ñåêòîðàõ íà òðåêå. Êàæäûé ñåêòîð îïèñûâàåòñÿ 7
                áàéòàìè. Ïåðâûå 4 áàéòà - ñòàíäàðíûå ïàðàìåòðû C,H,R,N èç
                àäðåñíîãî ìàðêåðà. Ñëåäóþùèé áàéò - ôëàãè:

                 bit 7=0 - ìàðêåð íîðìàëüíûõ äàííûõ, 1 - óäàëåííûõ äàííûõ;
                 bit 0-5: ôëàãè CRC. Åäèíèöà â îäíîì èç ðàçðÿäîâ îçíà÷àåò, ÷òî
                 ïðè ñ÷èòûâàíèè ýòîãî ñåêòîðà íà äëèíó 128,256,1024,2048 èëè
                 4096 áàéò ïîëó÷àåòñÿ ïðàâèëüíàÿ êîíòðîëüíàÿ ñóììà. Åñëè âî âñåõ
                 ðàçðÿäàõ 0 - ñåêòîð çàïèñàí ñ îøèáêîé êîíòðîëüíîé ñóììû.
                 bit 6: Â äàííîé âåðñèè âñåãäà 0. Âîçìîæíî, 1 â äàííîì ðàçðÿäå
                  áóäåò îáîçíà÷àòü àäðåñíûé ìàðêåð áåç îáëàñòè äàííûõ.

                Ïîñëåäíèå 2 áàéòà - ñìåùåíèå äàííûõ ýòîãî ñåêòîðà îòíîñèòåëüíî
                íà÷àëà îáëàñòè äàííûõ òðåêà. ×òîáû ïîëó÷èòü àáñîëþòíûé àäðåñ
                â ôàéëå, ê ýòîìó ÷èñëó íàäî äîáàâèòü "Ñìåùåíèå äàííûõ" è
                "Ñìåùåíèå òðåêà"
------------------------------------------------------------------------------
7*(×èñëî ñåêòîðîâ+1)    äëèíà çàãîëîâêà òðåêà

        Çàìåòèì, ÷òî áàéò ôëàãîâ â îïèñàíèè ñåêòîðà ïîêà íèêàê íå èñïîëüçóåòñÿ
ýìóëÿòîðîì.

                        Ôîðìàò äîïîëíèòåëüíîé èíôîðìàöèè (FDI 2 è âûøå)

Òèïû äàííûõ:
u8  - áåççíàêîâûé 8áèò  (1 áàéò)
u16 - áåççíàêîâûé 16áèò (2 áàéòà)
u32 - áåççíàêîâûé 32áèò (4 áàéòà)

Îïèñàíèå ñòðóêòóðû TFdiAddInfo:
struct TFdiAddInfo
{
    // Çàãîëîâîê, îäèíàêîâûé äëÿ âñåõ ôîðìàòîâ
    u16 Ver; // 2 - FDI 2
    u16 AddInfoType; // Òèï äîïîëíèòåëüíîé èíôîðìàöèè:
                     // 1 - bad bytes info (èíôîðìàöèÿ î ñáîéíûõ áëîêàõ)

    // Äëÿ AddInfoType == 1 (äëÿ äðóãèõ ôîðìàòîâ èíôîðìàöèÿ íèæå áóäåò äðóãîé)
    u32 TrkAddInfoOffset; // Ñìåùåíèå ìàññèâà ñòðóêòóð TFdiTrkAddInfo â áàéòàõ îò íà÷àëà ôàéëà
                          // ÷èñëî ñòðóêòóð ðàâíî "×èñëî öèëèíäðîâ" * "×èñëî ïîâåðõíîñòåé" èç FDI
                          // çàãîëîâêà (Âíèìàíèå! ñòðóêòóðû èìåþò ïåðååííûé ðàçìåð)
    u32 DataOffset; // Ñìåùåíèå äàííûõ ñ äîïîëíèòåëüíîé èíôîðìàöèåé (îò íà÷àëà ôàéëà)
};

Îïèñàíèå ñòðóêòóðû TFdiTrkAddInfo:
struct TFdiTrkAddInfo(int n) // n - ×èñëî ñåêòîðîâ íà äîðîæêå, äîðîæêè èìåþò ñêâîçíóþ íóìåðàöèþ
                             // îò 0 äî "×èñëî öèëèíäðîâ" * "×èñëî ïîâåðõíîñòåé"-1
{
    u32 TrkOffset;  // Ñìåùåíèå â áàéòàõ äîïîëíèòåëüíîé èíôîðìàöèè äëÿ äàííîé äîðîæêè
                    // îòíîñèòåëüíî FdiAddInfo.DataOffset
                    // 0xFFFFFFFF - äîïîëíèòåëüíàÿ èíôîðìàöèÿ äëÿ äàííîé äîðîæêè îòñóòñòâóåò
    if(n && (TrkOffset != 0xFFFFFFFF))
    {
        TFdiSecAddInfo Sec[n]; // Îïèñàòåëè äîïîëíèòåëüíîé èíôîðìàöèè î ñåêòîðàõ (åñëè n==0, òî îòñóòñòâóåò)
    }
};

Îïèñàíèå ñòðóêòóðû TFdiSecAddInfo:
struct TFdiSecAddInfo
{
    u8 Flags; // 1 - Ìàññèâ ñáîéíûõ áàéòîâ ïðèñóòñòâóåò

    // Ñìåùåíèå áèòîâîãî ìàññèâà ñáîéíûõ áàéòîâ âíóòðè äîðîæêè îòíîñèòåëüíî TFdiTrkAddInfo[i].TrkOffset;
    // ×èñëî áèòîâ îïðåäåëÿåòñÿ ðàçìåðîì ñåêòîðà
    // Îäèí áèò ñîîòâåòñòâóåò îäíîìó ñáîéíîìó áàéòó
    // Äëÿ âû÷èñëåíèÿ ñìåùåíèÿ êîíêðåòíîãî áèòà íóæíî ñëîæèòü 
    // u32 offs = FdiAddInfo.DataOffset + FdiAddInfo[i].TrkOffset + (FdiAddInfo[i].Sec[s].Flags & 1) ? (128 << FdiHdr.Trk[i].Sec[s].n) : 0;
    // (ãäå i - òåêóùàÿ äîðîæêà, s - òåêóùèé ñåêòîð, Sec[s].n - êîä ðàçìåðà ñåêòîðà 0-128áàéò, 1-256áàéò,2-512áàéò,3-1024áàéò è ò.ä.)
    // íîìåð áàéòà îïðåäåëÿåòñÿ êàê offs>>3, à íîìåð áèòà â áàéòå êàê offs&7
    u16 DataOffset;
};

Ïðè çàïèñè â áàéòû ïîìå÷åííûå êàê ñáîéíûå ýìóëÿòîð äîëæåí èñêàæàòü çàïèñûâàåìûå äàííûå
(íàïðèåð äåëàòü xor ñ ïñåâäîñëó÷àéíî ïîñëåäîâàòåëüíîñòüþ).
Ïðè ÷òåíèè èç áàéòû ïîìå÷åííûõ êàê ñáîéíûå ýìóëÿòîð äîëæåí èñêàæàòü äàííûå
(íàïðèåð äåëàòü xor ñ ïñåâäîñëó÷àéíî ïîñëåäîâàòåëüíîñòüþ) è âûäàâàòü îøèáêó CRC ñåêòîðà.