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