Rev 783 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
╘юЁьрЄ Їрщыр UDI ( Ultra Disk Image )┬хЁёш 1.0 (Alex Makeev, ╨хфръЎш 24 ьрЁЄр 2002 у.)┬хЁёш 2 (deathsoft, ёюуырёютрэю ё Alex Makeev)--------------------------------------------------------------------------------╘юЁьрЄ Їрщыр UDI:Offset Length Comment---------- ------ ----------------------------------------------------0x00000000 0x0004 ╚фхэЄшЇшърЄюЁ "UDI!", хёыш шфхэЄшЇшърЄюЁчряшёрэ ьрыхэ№ъшьш сєътрьш ("udi!"), ЄюяЁшьхэхэю ёцрЄшх фрээ√ї, рыуюЁшЄь ёцрЄшяюър эх юяЁхфхыхэ, эю тхЁю Єэю сєфхЄ рэрыюушўхэTELEDISK'є╙яръют√тр■Єё фрээ√х, эрўшэр ё юсЁрчр яхЁтющфюЁюцъш, Є.х. ёЁрчє яюёых юёэютэюую(ш фюяюыэшЄхы№э√ї) чруюыютър0x00000004 0x0004 ╨рчьхЁ Їрщыр яюёых Ёрёяръютъш схч єўхЄр CRC(хёыш Їрщы эх єяръютрэ, Єю яЁюёЄю ЁрчьхЁ Їрщыр - 4)0x00000008 0x0001 ┬хЁёш ЇюЁьрЄр, фы UDI 1.0 ёюфхЁцшЄ #00,фы UDI 2 ёюфхЁцшЄ #010x00000009 0x0001 ╠ръёшьры№эю фюёЄєяэ√щ ЎшышэфЁ (0x00...0xFF),шЄюую ьръё. ўшёыю ЎшышэфЁют = 2560x0000000A 0x0001 ╠ръёшьры№э√щ эюьхЁ яютхЁїэюёЄш фшёър:0x01 - DoubleSided, 0x00 - SingleSided(0x02..0xFF -reserved!)0x0000000B 0x0001 ┬ ¤Єющ тхЁёшш эх шёяюы№чєхЄё яю¤Єюьє тёхуфр 0x000x0000000C 0x0004 EXTHDL - ─ышэр фюяюыэшЄхы№эюую чруюыютър(тёхуфр 0, т яЁюЄштэюь ёыєўрх ёЄЁєъЄєЁр фрээ√їьюцхЄ с√Є№ фЁєур ...)─рыхх ёыхфє■Є юсЁрч√ ърцфющ шч фюЁюцхъ, т яюЁ фъх Ёрчьх∙хэш эр фшёъх(Trk00, Side00; Trk00, Side01; Trk01, Side00; Trk01, Side01; ...):0x00000010 0xXXXX ╬сЁрч фюЁюцъш ёь. эшцх...0xXXXXXXXX 0xXXXX ╬сЁрч ёыхфє■∙хщ фюЁюцъш0xXXXXXXXX 0xXXXX ╬сЁрч ёыхфє■∙хщ фюЁюцъш......0xXXXXXXXX 0x0004 CRC Їрщыр (фы тхЁёшш 1.0 CRC_UDI, рыуюЁшЄь ёь. яЁшыюцхэшх 1)(фы тхЁёшш 2 CRC32 (яЁртшы№э√щ), рыуюЁшЄь ёь. яЁшыюцхэшх 2)╬сЁрч фюЁюцъш:Offset Length Comment---------- ------ ----------------------------------------------------0x00000000 0x0001 ╬яЁхфхы хЄ ЇюЁьрЄ фюЁюцъш:0x00 - Decoded MFM (эряЁшьхЁ TR-DOS-э√щ ЇюЁьрЄ)0x01 - рэрыюушўхэ 0x00 эю ё яюффхЁцъющ юсырёЄхщ чряшё№/ўЄхэшхт ъюЄюЁ√х фрхЄ ю°шсъш0x02 - RAW MFM (сшЄ√ т Єюь тшфх т ъюЄюЁюь юэш ўшЄр■Єё ё фшёъхЄ√ схчфхъюфшЁютрэш ъюэЄЁюыыхЁюь). ─юЁюцър DD фшёъхЄ√ ёюфхЁцшЄ~50000сшЄфЁєушх чэрўхэш ЇюЁьрЄют яюър чряЁх∙хэ√!(Є.ъ. х∙х эх шчтхёЄэю ёъюы№ъю фюя. шэЇ√эєцэю їЁрэшЄ№)***─ы ЇюЁьрЄр фюЁюцъш 0x00 (Decoded MFM):0x00000001 0x0002 tlen - ─ышэр фюЁюцъш т срщЄрї (Єшяшўэр фышэрфюЁюцъш 6250 срщЄ)┬═╚╠└═╚┼! ─ы MFM DoubleDensity (┬├93) ъЁрщэхэх ЁхъюьхэфєхЄё чрфртрЄ№ фышэєфюЁюцъш, ёшы№эю юЄышўр■∙є■ё юЄ 6250 срщЄ!!!0x00000003 tlen ╧юсрщЄют√щ юсЁрч фюЁюцъш - тъы■ўр яЁюсхы√,ёшэїЁюяЁюсхы√, ёшэїЁюшьяєы№ё√ (ьрЁъхЁ√ MFM),рфЁхёэ√х ьрЁъхЁ√, чруюыютъш, ьрёёшт√ фрээ√ї, etc.─Ёєушьш ёыютрьш чфхё№ чряшёрэ√ Єх срщЄ√,ъюЄюЁ√х сєфєЄ т√фрэ√ ┬├93 яю ъюьрэфх "ўЄхэшх фюЁюцъш"0x0003+tlen ёtlen ┴шЄют√щ ьрёёшт, юяшё√тр■∙шщ Єшя CLK фы ърцфюуюсрщЄр юсЁрчр фюЁюцъш (ёь. яЁшыюцхэшх 1);╬фшэ сшЄ ёююЄтхЄёЄтєхЄ юфэюьє срщЄє юсЁрчр фюЁюцъш:0 - чряшёрэю ё юс√ўэ√ь CLK (юс√ўэ√х фрээ√х)1 - чряшёрэю ё ьрЁъхЁэ√ь CLK (ьхЄъш #A1 ш #C2)═ряЁшьхЁ шьххь яюёыхфютрЄхы№эюёЄ№ срщЄ:{ 0xA1,0xA1,0x00,0xA1,0xFE,0x00,0x00,0x01 }уфх 0xA1 - MFM ьрЁъхЁ√Єюуфр срщЄ сшЄютюую ьрёёштр сєфхЄ Ёртхэ 0x0B.─ы Єшяшўэющ фышэ√ фюЁюцъш 6250 срщЄ:ctlen = tlen/8 + ((tlen-(tlen/8)*8)? 1:0) = 782 срщЄ╦ш°эшх сшЄ√ - эхчэрўр∙шх, шї ЁхъюьхэфєхЄёчряюыэ Є№ эєы ьш.╧ЁюуЁрьь√, ёючфр■∙шх/чряшё√тр■∙шх UDI Їрщы√ юс чрэ√юсхёяхўштрЄ№ яЁшёєЄёЄтшх Ёхры№э√ї CRC ъюфют фыьрёёштют фрээ√ї ш рфЁхёэ√ї ьрёёштют яю рыуюЁшЄьєCRC ё яюышэюьюь F = X^16 + X^12 + X^5 + 1╤шьєы Ўш■ ю°шсюўэюую CRC ёшэЄхЄшўхёъшь ёяюёюсюь,яЁш ъюэтхЁЄшЁютрэшш шч Їрщыют FDI, ЁхъюьхэфєхЄёяЁюшчтюфшЄ№ ё яюью∙№■ т√Ёрцхэш C = RC^0xFFFF,уфх C - crc ъюЄюЁє■ эєцэю чряшёрЄ№, RC - crcёшэЄхЄшўхёър , ъюЁЁхъЄэю т√ўшёыхээр яюрыуюЁшЄьє CRC... ¤Єю ўЄюс эръырфюъ эх т√їюфшыю,чряш°х°№ bad CRC Ёртэ√щ эєы■ шыш х∙х ўхьє-эшсєф№,уы фш°№, р юэ ш тяЁ ь№ юърцхЄё Ёртэ√ь эєы■ -яюыєўрхЄё Ёхры№эю bad'ют√щ CRC сєфхЄ юяЁхфхы Єёъръ схчю°шсюўэ√щ***─ы ЇюЁьрЄр фюЁюцъш 0x01 (Decoded MFM ёю ёсющэ√ьш єўрёЄърьш):(яюър эх Ёхрышчютрэю)***─ы ЇюЁьрЄр фюЁюцъш 0x02 (RAW MFM):(яюър эх Ёхрышчютрэю)***─ы фЁєушї ЇюЁьрЄют фюЁюцъш:#0001+tlen 4 MTIL - ─ышэр сыюър, юяшё√тр■∙хую фюЁюцъє#0005+tlen MTIL ┴ыюъ юяшё√тр■∙шщ ЇюЁьрЄ фюЁюцъш--------------------------------------------------------------------------------╧юўхьє Єшяшўэр фышэр фюЁюцъш 6250 срщЄ?╚чєўшт яЁюЎхфєЁє ЇюЁьрЄшЁютрэш є TR-DOS ш єЄшышЄ√ FUT т√ ёэшы, ўЄюЁхры№эр фышэр (юэр хёЄхёЄтхээю чртшёшЄ юЄ ряярЁрЄєЁ√) фюыцэр ыхцрЄ№ тфшрярчюэх 6208...6464 срщЄ, фы фЁєушї фышэ яЁюшчющфхЄ ю°шсър. ╬фэръю,яЁюёўшЄрт timing, єўшЄ√тр ўЄю эр юфшэ сшЄ шэЇюЁьрЎшш єїюфшЄ 4ьъё - яюыєўрхьтЁхь 32ьъё эр срщЄ; тЁхь юфэюую яюыэюую юсюЁюЄр фшёър шчтхёЄэю - 200000 ьъё;фрыхх яЁюёЄю ёўшЄрхь фышэє фюЁюцъш: 200000 / 32 = 6250 срщЄ.┬эшьрэш■ ЁрчЁрсюЄўшърь ¤ьєы ЄюЁют: сюы№°р яЁюё№ср - ётюшї ъюЁЁхъЄшт тЇюЁьрЄ UDI схч ёюуырёютрэш ё ртЄюЁюь эх тэюёшЄ№.-------------------------------------------------------------------------------╧╨╚╦╬╞┼═╚┼ 1└ыуюЁшЄь т√ўшёыхэш CRC_UDI фы Їрщыр UDI(тхЁёшш 1.0){deathsoft, Ёхры№эю ¤Єю эх рыуюЁшЄь CRC32, р ю°шсюўэр ЁхрышчрЎш CRC32 фр■∙р ёютхЁ°хээю фЁєушх Ёхчєы№ЄрЄ√ }═рўры№эюх чэрўхэшх CRC = 0xFFFFFFFF (-1l).╘єэъЎш юсэютыхэш CRC32 фы юфэюую срщЄр Symbol:long CalcCRC32(long CRC, unsigned char Symbol){long temp;CRC ^= -1l ^ Symbol;for(int k = 8; k--;){ temp = -(CRC & 1), CRC >>= 1, CRC ^= 0xEDB88320ul & temp; }CRC ^= -1l;return CRC;}▌Єє ЇєэъЎш■ эєцэю т√чтрЄ№ фы ърцфюую срщЄр шч Їрщыр UDI (шёъы■ўр яюёыхфэшх4 срщЄр CRC).╧хЁт√щ рЁуєьхэЄ ЇєэъЎшш - Єхъє∙р CRC, тЄюЁющ рЁуєьхэЄ - срщЄ фрээ√ї,Ёхчєы№ЄрЄ - эютр CRC.-------------------------------------------------------------------------------╧╨╚╦╬╞┼═╚┼ 2└ыуюЁшЄь т√ўшёыхэш CRC32 (UDI 2 ш т√°х)static uint32_t crc32(const void *data, unsigned len){const uint8_t *d = (const uint8_t *)data;uint32_t crc = 0xFFFFFFFF;while(len--){uint32_t byte = *d++;crc ^= byte;for(int j = 7; j >= 0; j--){uint32_t mask = -(crc & 1);crc = (crc >> 1) ^ (0xEDB88320 & mask);}}return ~crc;}crc32("The quick brown fox jumps over the lazy dog") == 0x414FA339-------------------------------------------------------------------------------