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 ñåêòîðà.