Blame | 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 ёхъЄюЁр.