Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
716 | lvd | 1 | ╘юЁьрЄ Їрщыр UDI ( Ultra Disk Image ) |
2 | ┬хЁёш 1.0 (Alex Makeev, ╨хфръЎш 24 ьрЁЄр 2002 у.) |
||
3 | ┬хЁёш 2 (deathsoft, ёюуырёютрэю ё Alex Makeev) |
||
4 | |||
5 | -------------------------------------------------------------------------------- |
||
6 | ╘юЁьрЄ Їрщыр UDI: |
||
7 | |||
8 | Offset Length Comment |
||
9 | ---------- ------ ---------------------------------------------------- |
||
10 | 0x00000000 0x0004 ╚фхэЄшЇшърЄюЁ "UDI!", хёыш шфхэЄшЇшърЄюЁ |
||
11 | чряшёрэ ьрыхэ№ъшьш сєътрьш ("udi!"), Єю |
||
12 | яЁшьхэхэю ёцрЄшх фрээ√ї, рыуюЁшЄь ёцрЄш |
||
13 | яюър эх юяЁхфхыхэ, эю тхЁю Єэю сєфхЄ рэрыюушўхэ |
||
14 | TELEDISK'є |
||
15 | ╙яръют√тр■Єё фрээ√х, эрўшэр ё юсЁрчр яхЁтющ |
||
16 | фюЁюцъш, Є.х. ёЁрчє яюёых юёэютэюую |
||
17 | (ш фюяюыэшЄхы№э√ї) чруюыютър |
||
18 | 0x00000004 0x0004 ╨рчьхЁ Їрщыр яюёых Ёрёяръютъш схч єўхЄр CRC |
||
19 | (хёыш Їрщы эх єяръютрэ, Єю яЁюёЄю ЁрчьхЁ Їрщыр - 4) |
||
20 | 0x00000008 0x0001 ┬хЁёш ЇюЁьрЄр, фы UDI 1.0 ёюфхЁцшЄ #00, |
||
21 | фы UDI 2 ёюфхЁцшЄ #01 |
||
22 | 0x00000009 0x0001 ╠ръёшьры№эю фюёЄєяэ√щ ЎшышэфЁ (0x00...0xFF), |
||
23 | шЄюую ьръё. ўшёыю ЎшышэфЁют = 256 |
||
24 | 0x0000000A 0x0001 ╠ръёшьры№э√щ эюьхЁ яютхЁїэюёЄш фшёър: |
||
25 | 0x01 - DoubleSided, 0x00 - SingleSided |
||
26 | (0x02..0xFF -reserved!) |
||
27 | 0x0000000B 0x0001 ┬ ¤Єющ тхЁёшш эх шёяюы№чєхЄё яю¤Єюьє тёхуфр 0x00 |
||
28 | 0x0000000C 0x0004 EXTHDL - ─ышэр фюяюыэшЄхы№эюую чруюыютър |
||
29 | (тёхуфр 0, т яЁюЄштэюь ёыєўрх ёЄЁєъЄєЁр фрээ√ї |
||
30 | ьюцхЄ с√Є№ фЁєур ...) |
||
31 | |||
32 | |||
33 | ─рыхх ёыхфє■Є юсЁрч√ ърцфющ шч фюЁюцхъ, т яюЁ фъх Ёрчьх∙хэш эр фшёъх |
||
34 | (Trk00, Side00; Trk00, Side01; Trk01, Side00; Trk01, Side01; ...): |
||
35 | |||
36 | 0x00000010 0xXXXX ╬сЁрч фюЁюцъш ёь. эшцх... |
||
37 | 0xXXXXXXXX 0xXXXX ╬сЁрч ёыхфє■∙хщ фюЁюцъш |
||
38 | 0xXXXXXXXX 0xXXXX ╬сЁрч ёыхфє■∙хщ фюЁюцъш |
||
39 | ... |
||
40 | ... |
||
41 | 0xXXXXXXXX 0x0004 CRC Їрщыр (фы тхЁёшш 1.0 CRC_UDI, рыуюЁшЄь ёь. яЁшыюцхэшх 1) |
||
42 | (фы тхЁёшш 2 CRC32 (яЁртшы№э√щ), рыуюЁшЄь ёь. яЁшыюцхэшх 2) |
||
43 | |||
44 | |||
45 | ╬сЁрч фюЁюцъш: |
||
46 | |||
47 | Offset Length Comment |
||
48 | ---------- ------ ---------------------------------------------------- |
||
49 | 0x00000000 0x0001 ╬яЁхфхы хЄ ЇюЁьрЄ фюЁюцъш: |
||
50 | 0x00 - Decoded MFM (эряЁшьхЁ TR-DOS-э√щ ЇюЁьрЄ) |
||
51 | 0x01 - рэрыюушўхэ 0x00 эю ё яюффхЁцъющ юсырёЄхщ чряшё№/ўЄхэшх |
||
52 | т ъюЄюЁ√х фрхЄ ю°шсъш |
||
53 | 0x02 - RAW MFM (сшЄ√ т Єюь тшфх т ъюЄюЁюь юэш ўшЄр■Єё ё фшёъхЄ√ схч |
||
54 | фхъюфшЁютрэш ъюэЄЁюыыхЁюь). ─юЁюцър DD фшёъхЄ√ ёюфхЁцшЄ |
||
55 | ~50000сшЄ |
||
56 | фЁєушх чэрўхэш ЇюЁьрЄют яюър чряЁх∙хэ√! |
||
57 | (Є.ъ. х∙х эх шчтхёЄэю ёъюы№ъю фюя. шэЇ√ |
||
58 | эєцэю їЁрэшЄ№) |
||
59 | |||
60 | |||
61 | ***─ы ЇюЁьрЄр фюЁюцъш 0x00 (Decoded MFM): |
||
62 | |||
63 | |||
64 | 0x00000001 0x0002 tlen - ─ышэр фюЁюцъш т срщЄрї (Єшяшўэр фышэр |
||
65 | фюЁюцъш 6250 срщЄ) |
||
66 | ┬═╚╠└═╚┼! ─ы MFM DoubleDensity (┬├93) ъЁрщэх |
||
67 | эх ЁхъюьхэфєхЄё чрфртрЄ№ фышэє |
||
68 | фюЁюцъш, ёшы№эю юЄышўр■∙є■ё юЄ 6250 срщЄ!!! |
||
69 | 0x00000003 tlen ╧юсрщЄют√щ юсЁрч фюЁюцъш - тъы■ўр яЁюсхы√, |
||
70 | ёшэїЁюяЁюсхы√, ёшэїЁюшьяєы№ё√ (ьрЁъхЁ√ MFM), |
||
71 | рфЁхёэ√х ьрЁъхЁ√, чруюыютъш, ьрёёшт√ фрээ√ї, etc. |
||
72 | ─Ёєушьш ёыютрьш чфхё№ чряшёрэ√ Єх срщЄ√, |
||
73 | ъюЄюЁ√х сєфєЄ т√фрэ√ ┬├93 яю ъюьрэфх "ўЄхэшх фюЁюцъш" |
||
74 | |||
75 | 0x0003+tlen ёtlen ┴шЄют√щ ьрёёшт, юяшё√тр■∙шщ Єшя CLK фы ърцфюую |
||
76 | срщЄр юсЁрчр фюЁюцъш (ёь. яЁшыюцхэшх 1); |
||
77 | ╬фшэ сшЄ ёююЄтхЄёЄтєхЄ юфэюьє срщЄє юсЁрчр фюЁюцъш: |
||
78 | |||
79 | 1 - чряшёрэю ё ьрЁъхЁэ√ь CLK (ьхЄъш #A1 ш #C2) |
||
80 | ═ряЁшьхЁ шьххь яюёыхфютрЄхы№эюёЄ№ срщЄ: |
||
81 | { 0xA1,0xA1,0x00,0xA1,0xFE,0x00,0x00,0x01 } |
||
82 | уфх 0xA1 - MFM ьрЁъхЁ√ |
||
83 | Єюуфр срщЄ сшЄютюую ьрёёштр сєфхЄ Ёртхэ 0x0B. |
||
84 | |||
85 | ─ы Єшяшўэющ фышэ√ фюЁюцъш 6250 срщЄ: |
||
86 | ctlen = tlen/8 + ((tlen-(tlen/8)*8)? 1:0) = 782 срщЄ |
||
87 | ╦ш°эшх сшЄ√ - эхчэрўр∙шх, шї ЁхъюьхэфєхЄё |
||
88 | чряюыэ Є№ эєы ьш. |
||
89 | |||
90 | ╧ЁюуЁрьь√, ёючфр■∙шх/чряшё√тр■∙шх UDI Їрщы√ юс чрэ√ |
||
91 | юсхёяхўштрЄ№ яЁшёєЄёЄтшх Ёхры№э√ї CRC ъюфют фы |
||
92 | ьрёёштют фрээ√ї ш рфЁхёэ√ї ьрёёштют яю рыуюЁшЄьє |
||
93 | CRC ё яюышэюьюь F = X^16 + X^12 + X^5 + 1 |
||
94 | |||
95 | ╤шьєы Ўш■ ю°шсюўэюую CRC ёшэЄхЄшўхёъшь ёяюёюсюь, |
||
96 | яЁш ъюэтхЁЄшЁютрэшш шч Їрщыют FDI, ЁхъюьхэфєхЄё |
||
97 | яЁюшчтюфшЄ№ ё яюью∙№■ т√Ёрцхэш C = RC^0xFFFF, |
||
98 | уфх C - crc ъюЄюЁє■ эєцэю чряшёрЄ№, RC - crc |
||
99 | ёшэЄхЄшўхёър , ъюЁЁхъЄэю т√ўшёыхээр яю |
||
100 | рыуюЁшЄьє CRC... ¤Єю ўЄюс эръырфюъ эх т√їюфшыю, |
||
101 | чряш°х°№ bad CRC Ёртэ√щ эєы■ шыш х∙х ўхьє-эшсєф№, |
||
102 | уы фш°№, р юэ ш тяЁ ь№ юърцхЄё Ёртэ√ь эєы■ - |
||
103 | яюыєўрхЄё Ёхры№эю bad'ют√щ CRC сєфхЄ юяЁхфхы Єё |
||
104 | ъръ схчю°шсюўэ√щ |
||
105 | |||
106 | ***─ы ЇюЁьрЄр фюЁюцъш 0x01 (Decoded MFM ёю ёсющэ√ьш єўрёЄърьш): |
||
107 | (яюър эх Ёхрышчютрэю) |
||
108 | |||
109 | ***─ы ЇюЁьрЄр фюЁюцъш 0x02 (RAW MFM): |
||
110 | (яюър эх Ёхрышчютрэю) |
||
111 | |||
112 | ***─ы фЁєушї ЇюЁьрЄют фюЁюцъш: |
||
113 | |||
114 | #0001+tlen 4 MTIL - ─ышэр сыюър, юяшё√тр■∙хую фюЁюцъє |
||
115 | |||
116 | #0005+tlen MTIL ┴ыюъ юяшё√тр■∙шщ ЇюЁьрЄ фюЁюцъш |
||
117 | |||
118 | -------------------------------------------------------------------------------- |
||
119 | |||
120 | |||
121 | ╧юўхьє Єшяшўэр фышэр фюЁюцъш 6250 срщЄ? |
||
122 | ╚чєўшт яЁюЎхфєЁє ЇюЁьрЄшЁютрэш є TR-DOS ш єЄшышЄ√ FUT т√ ёэшы, ўЄю |
||
123 | Ёхры№эр фышэр (юэр хёЄхёЄтхээю чртшёшЄ юЄ ряярЁрЄєЁ√) фюыцэр ыхцрЄ№ т |
||
124 | фшрярчюэх 6208...6464 срщЄ, фы фЁєушї фышэ яЁюшчющфхЄ ю°шсър. ╬фэръю, |
||
125 | яЁюёўшЄрт timing, єўшЄ√тр ўЄю эр юфшэ сшЄ шэЇюЁьрЎшш єїюфшЄ 4ьъё - яюыєўрхь |
||
126 | тЁхь 32ьъё эр срщЄ; тЁхь юфэюую яюыэюую юсюЁюЄр фшёър шчтхёЄэю - 200000 ьъё; |
||
127 | фрыхх яЁюёЄю ёўшЄрхь фышэє фюЁюцъш: 200000 / 32 = 6250 срщЄ. |
||
128 | |||
129 | |||
130 | ┬эшьрэш■ ЁрчЁрсюЄўшърь ¤ьєы ЄюЁют: сюы№°р яЁюё№ср - ётюшї ъюЁЁхъЄшт т |
||
131 | ЇюЁьрЄ UDI схч ёюуырёютрэш ё ртЄюЁюь эх тэюёшЄ№. |
||
132 | |||
133 | ------------------------------------------------------------------------------- |
||
134 | |||
135 | ╧╨╚╦╬╞┼═╚┼ 1 |
||
136 | |||
137 | └ыуюЁшЄь т√ўшёыхэш CRC_UDI фы Їрщыр UDI(тхЁёшш 1.0) |
||
138 | {deathsoft, Ёхры№эю ¤Єю эх рыуюЁшЄь CRC32, р ю°шсюўэр ЁхрышчрЎш CRC32 фр■∙р ёютхЁ°хээю фЁєушх Ёхчєы№ЄрЄ√ } |
||
139 | |||
140 | |||
141 | ═рўры№эюх чэрўхэшх CRC = 0xFFFFFFFF (-1l). |
||
142 | |||
143 | ╘єэъЎш юсэютыхэш CRC32 фы юфэюую срщЄр Symbol: |
||
144 | |||
145 | long CalcCRC32(long CRC, unsigned char Symbol) |
||
146 | { |
||
147 | long temp; |
||
148 | CRC ^= -1l ^ Symbol; |
||
149 | for(int k = 8; k--;) |
||
150 | { temp = -(CRC & 1), CRC >>= 1, CRC ^= 0xEDB88320ul & temp; } |
||
151 | CRC ^= -1l; |
||
152 | return CRC; |
||
153 | } |
||
154 | |||
155 | ▌Єє ЇєэъЎш■ эєцэю т√чтрЄ№ фы ърцфюую срщЄр шч Їрщыр UDI (шёъы■ўр яюёыхфэшх |
||
156 | 4 срщЄр CRC). |
||
157 | |||
158 | ╧хЁт√щ рЁуєьхэЄ ЇєэъЎшш - Єхъє∙р CRC, тЄюЁющ рЁуєьхэЄ - срщЄ фрээ√ї, |
||
159 | Ёхчєы№ЄрЄ - эютр CRC. |
||
160 | |||
161 | ------------------------------------------------------------------------------- |
||
162 | |||
163 | ╧╨╚╦╬╞┼═╚┼ 2 |
||
164 | |||
165 | └ыуюЁшЄь т√ўшёыхэш CRC32 (UDI 2 ш т√°х) |
||
166 | static uint32_t crc32(const void *data, unsigned len) |
||
167 | { |
||
168 | const uint8_t *d = (const uint8_t *)data; |
||
169 | |||
170 | uint32_t crc = 0xFFFFFFFF; |
||
171 | while(len--) |
||
172 | { |
||
173 | uint32_t byte = *d++; |
||
174 | crc ^= byte; |
||
175 | for(int j = 7; j >= 0; j--) |
||
176 | { |
||
177 | uint32_t mask = -(crc & 1); |
||
178 | crc = (crc >> 1) ^ (0xEDB88320 & mask); |
||
179 | } |
||
180 | } |
||
181 | return ~crc; |
||
182 | } |
||
183 | |||
184 | crc32("The quick brown fox jumps over the lazy dog") == 0x414FA339 |
||
185 | ------------------------------------------------------------------------------- |