Rev 431 | Rev 543 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 431 | Rev 538 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | $Revision: 431 $ |
1 | $Revision: 538 $ |
2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
3 | ;; ;; |
3 | ;; ;; |
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
6 | ;; ;; |
6 | ;; ;; |
Line 20... | Line 20... | ||
20 | ; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ |
20 | ; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ |
21 | MaxRetr equ 3 |
21 | MaxRetr equ 3 |
22 | ; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû |
22 | ; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû |
23 | ; (â òèêàõ) |
23 | ; (â òèêàõ) |
24 | BSYWaitTime equ 1000 ;2 |
24 | BSYWaitTime equ 1000 ;2 |
25 | - | ||
- | 25 | NoTickWaitTime equ 0xfffff |
|
26 | ;************************************************* |
26 | ;************************************************* |
27 | ;* ÏÎËÍÎÅ ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ ÊÎÌÏÀÊÒ-ÄÈÑÊÀ * |
27 | ;* ÏÎËÍÎÅ ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ ÊÎÌÏÀÊÒ-ÄÈÑÊÀ * |
28 | ;* Ñ÷èòûâàþòñÿ äàííûå ïîëüçîâàòåëÿ, èíôîðìàöèÿ * |
28 | ;* Ñ÷èòûâàþòñÿ äàííûå ïîëüçîâàòåëÿ, èíôîðìàöèÿ * |
29 | ;* ñóáêàíàëà è êîíòðîëüíàÿ èíôîðìàöèÿ * |
29 | ;* ñóáêàíàëà è êîíòðîëüíàÿ èíôîðìàöèÿ * |
30 | ;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå * |
30 | ;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå * |
Line 66... | Line 66... | ||
66 | ;******************************************** |
66 | ;******************************************** |
67 | ;* ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ * |
67 | ;* ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ * |
68 | ;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ * |
68 | ;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ * |
69 | ;******************************************** |
69 | ;******************************************** |
70 | ReadCDWRetr: |
70 | ReadCDWRetr: |
71 | pusha |
71 | pushad |
72 | ; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå |
72 | ; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå |
73 | ; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê |
73 | ; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê |
74 | mov ECX,MaxRetr |
74 | mov ECX,MaxRetr |
75 | @@NextRetr: |
75 | @@NextRetr: |
76 | ; Ïîäàòü êîìàíäó |
76 | ; Ïîäàòü êîìàíäó |
77 | call ReadCD |
77 | call ReadCD |
78 | cmp [DevErrorCode],0 |
78 | cmp [DevErrorCode],0 |
79 | je @@End_4 |
79 | je @@End_4 |
- | 80 | cmp [timer_ticks_enable],0 |
|
- | 81 | jne @f |
|
- | 82 | mov eax,NoTickWaitTime |
|
- | 83 | .wait: |
|
- | 84 | dec eax |
|
- | 85 | cmp eax,0 |
|
- | 86 | je @@NextRetr |
|
- | 87 | jmp .wait |
|
- | 88 | @@: |
|
80 | ; Çàäåðæêà íà 2,5 ñåêóíäû |
89 | ; Çàäåðæêà íà 2,5 ñåêóíäû |
81 | mov EAX,[timer_ticks] |
90 | mov EAX,[timer_ticks] |
82 | add EAX,250 ;50 |
91 | add EAX,250 ;50 |
83 | @@Wait: |
92 | @@Wait: |
84 | call change_task |
93 | call change_task |
85 | cmp EAX,[timer_ticks] |
94 | cmp EAX,[timer_ticks] |
86 | ja @@Wait |
95 | ja @@Wait |
87 | loop @@NextRetr |
96 | loop @@NextRetr |
88 | ; call test_mario79 |
- | |
89 | ; Ñîîáùåíèå îá îøèáêå |
- | |
90 | ; mov SI,offset ErrS |
- | |
91 | ; call FatalError |
- | |
92 | @@End_4: |
97 | @@End_4: |
93 | popa |
98 | popad |
94 | ret |
99 | ret |
Line 95... | Line 100... | ||
95 | 100 | ||
96 | 101 | ||
Line 141... | Line 146... | ||
141 | mov AX,[CDBlockSize] |
146 | mov AX,[CDBlockSize] |
142 | mov [ATACylinder],AX |
147 | mov [ATACylinder],AX |
143 | mov [ATAHead],0 |
148 | mov [ATAHead],0 |
144 | mov [ATACommand],0A0h |
149 | mov [ATACommand],0A0h |
145 | call SendCommandToHDD_1 |
150 | call SendCommandToHDD_1 |
146 | ; call test_mario79 |
- | |
147 | cmp [DevErrorCode],0 ;ïðîâåðèòü êîä îøèáêè |
151 | cmp [DevErrorCode],0 ;ïðîâåðèòü êîä îøèáêè |
148 | jne @@End_8 ;çàêîí÷èòü, ñîõðàíèâ êîä îøèáêè |
152 | jne @@End_8 ;çàêîí÷èòü, ñîõðàíèâ êîä îøèáêè |
Line 149... | Line 153... | ||
149 | 153 | ||
150 | ; Îæèäàíèå ãîòîâíîñòè äèñêîâîäà ê ïðèåìó |
154 | ; Îæèäàíèå ãîòîâíîñòè äèñêîâîäà ê ïðèåìó |
151 | ; ïàêåòíîé êîìàíäû |
155 | ; ïàêåòíîé êîìàíäû |
152 | mov DX,[ATABasePortAddr] |
156 | mov DX,[ATABasePortAddr] |
- | 157 | add DX,7 ;ïîðò 1õ7h |
|
153 | add DX,7 ;ïîðò 1õ7h |
158 | mov ecx,NoTickWaitTime |
- | 159 | @@WaitDevice0: |
|
- | 160 | cmp [timer_ticks_enable],0 |
|
- | 161 | jne @f |
|
- | 162 | dec ecx |
|
- | 163 | cmp ecx,0 |
|
- | 164 | je @@Err1_1 |
|
- | 165 | jmp .test |
|
154 | @@WaitDevice0: |
166 | @@: |
155 | call change_task |
167 | call change_task |
156 | ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû |
168 | ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû |
157 | mov EAX,[timer_ticks] |
169 | mov EAX,[timer_ticks] |
158 | sub EAX,[TickCounter_1] |
170 | sub EAX,[TickCounter_1] |
159 | cmp EAX,BSYWaitTime |
171 | cmp EAX,BSYWaitTime |
160 | ja @@Err1_1 ;îøèáêà òàéì-àóòà |
172 | ja @@Err1_1 ;îøèáêà òàéì-àóòà |
- | 173 | ; Ïðîâåðèòü ãîòîâíîñòü |
|
161 | ; Ïðîâåðèòü ãîòîâíîñòü |
174 | .test: |
162 | in AL,DX |
175 | in AL,DX |
163 | test AL,80h ;ñîñòîÿíèå ñèãíàëà BSY |
176 | test AL,80h ;ñîñòîÿíèå ñèãíàëà BSY |
164 | jnz @@WaitDevice0 |
- | |
165 | test AL,1 ;ñîñòîÿíèå ñèãíàëà ERR |
- | |
166 | jnz @@Err6 |
177 | jnz @@WaitDevice0 |
167 | test AL,08h ;ñîñòîÿíèå ñèãíàëà DRQ |
178 | test AL,08h ;ñîñòîÿíèå ñèãíàëà DRQ |
- | 179 | jz @@WaitDevice0 |
|
- | 180 | test AL,1 ;ñîñòîÿíèå ñèãíàëà ERR |
|
168 | jz @@WaitDevice0 |
181 | jnz @@Err6 |
169 | ; Ïîñëàòü ïàêåòíóþ êîìàíäó |
182 | ; Ïîñëàòü ïàêåòíóþ êîìàíäó |
170 | cli |
183 | cli |
171 | mov DX,[ATABasePortAddr] |
184 | mov DX,[ATABasePortAddr] |
172 | mov AX,[PacketCommand] |
185 | mov AX,[PacketCommand] |
Line 183... | Line 196... | ||
183 | out DX,AX |
196 | out DX,AX |
184 | sti |
197 | sti |
185 | ; Îæèäàíèå ãîòîâíîñòè äàííûõ |
198 | ; Îæèäàíèå ãîòîâíîñòè äàííûõ |
186 | mov DX,[ATABasePortAddr] |
199 | mov DX,[ATABasePortAddr] |
187 | add DX,7 ;ïîðò 1õ7h |
200 | add DX,7 ;ïîðò 1õ7h |
- | 201 | mov ecx,NoTickWaitTime |
|
188 | @@WaitDevice1: |
202 | @@WaitDevice1: |
- | 203 | cmp [timer_ticks_enable],0 |
|
- | 204 | jne @f |
|
- | 205 | dec ecx |
|
- | 206 | cmp ecx,0 |
|
- | 207 | je @@Err1_1 |
|
- | 208 | jmp .test_1 |
|
- | 209 | @@: |
|
189 | call change_task |
210 | call change_task |
190 | ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû |
211 | ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû |
191 | mov EAX,[timer_ticks] |
212 | mov EAX,[timer_ticks] |
192 | sub EAX,[TickCounter_1] |
213 | sub EAX,[TickCounter_1] |
193 | cmp EAX,MaxCDWaitTime |
214 | cmp EAX,MaxCDWaitTime |
194 | ja @@Err1_1 ;îøèáêà òàéì-àóòà |
215 | ja @@Err1_1 ;îøèáêà òàéì-àóòà |
195 | ; Ïðîâåðèòü ãîòîâíîñòü |
216 | ; Ïðîâåðèòü ãîòîâíîñòü |
- | 217 | .test_1: |
|
196 | in AL,DX |
218 | in AL,DX |
197 | test AL,80h ;ñîñòîÿíèå ñèãíàëà BSY |
219 | test AL,80h ;ñîñòîÿíèå ñèãíàëà BSY |
198 | jnz @@WaitDevice1 |
220 | jnz @@WaitDevice1 |
199 | test AL,1 ;ñîñòîÿíèå ñèãíàëà ERR |
- | |
200 | jnz @@Err6_temp |
- | |
201 | test AL,08h ;ñîñòîÿíèå ñèãíàëà DRQ |
221 | test AL,08h ;ñîñòîÿíèå ñèãíàëà DRQ |
202 | jz @@WaitDevice1 |
222 | jz @@WaitDevice1 |
- | 223 | test AL,1 ;ñîñòîÿíèå ñèãíàëà ERR |
|
203 | cli |
224 | jnz @@Err6_temp |
204 | ; Ïðèíÿòü áëîê äàííûõ îò êîíòðîëëåðà |
225 | ; Ïðèíÿòü áëîê äàííûõ îò êîíòðîëëåðà |
205 | mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf |
226 | mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf |
206 | ; Çàãðóçèòü àäðåñ ðåãèñòðà äàííûõ êîíòðîëëåðà |
227 | ; Çàãðóçèòü àäðåñ ðåãèñòðà äàííûõ êîíòðîëëåðà |
207 | mov DX,[ATABasePortAddr] ;ïîðò 1x0h |
228 | mov DX,[ATABasePortAddr] ;ïîðò 1x0h |
208 | ; Çàãðóçèòü â ñ÷åò÷èê ðàçìåð áëîêà â áàéòàõ |
229 | ; Çàãðóçèòü â ñ÷åò÷èê ðàçìåð áëîêà â áàéòàõ |
- | 230 | xor ecx,ecx |
|
209 | mov CX,[CDBlockSize] |
231 | mov CX,[CDBlockSize] |
210 | ; Âû÷èñëèòü ðàçìåð áëîêà â 16-ðàçðÿäíûõ ñëîâàõ |
232 | ; Âû÷èñëèòü ðàçìåð áëîêà â 16-ðàçðÿäíûõ ñëîâàõ |
211 | shr CX,1 ;ðàçäåëèòü ðàçìåð áëîêà íà 2 |
233 | shr CX,1 ;ðàçäåëèòü ðàçìåð áëîêà íà 2 |
212 | ; Ïðèíÿòü áëîê äàííûõ |
234 | ; Ïðèíÿòü áëîê äàííûõ |
- | 235 | cli |
|
213 | cld |
236 | cld |
214 | rep insw |
237 | rep insw |
215 | sti |
238 | sti |
216 | ; Óñïåøíîå çàâåðøåíèå ïðèåìà äàííûõ |
239 | ; Óñïåøíîå çàâåðøåíèå ïðèåìà äàííûõ |
217 | jmp @@End_8 |
240 | jmp @@End_8 |
Line 366... | Line 389... | ||
366 | shl AL,4 |
389 | shl AL,4 |
367 | or AL,10100000b |
390 | or AL,10100000b |
368 | out DX,AL |
391 | out DX,AL |
369 | ; Îæèäàòü, ïîêà äèñê íå áóäåò ãîòîâ |
392 | ; Îæèäàòü, ïîêà äèñê íå áóäåò ãîòîâ |
370 | inc DX |
393 | inc DX |
371 | ; mov ecx,0xfff |
- | |
372 | mov eax,[timer_ticks] |
394 | mov eax,[timer_ticks] |
373 | mov [TickCounter_1],eax |
395 | mov [TickCounter_1],eax |
- | 396 | mov ecx,NoTickWaitTime |
|
374 | @@WaitHDReady_2: |
397 | @@WaitHDReady_2: |
- | 398 | cmp [timer_ticks_enable],0 |
|
- | 399 | jne @f |
|
- | 400 | dec ecx |
|
- | 401 | cmp ecx,0 |
|
- | 402 | je @@Err1_4 |
|
- | 403 | jmp .test |
|
- | 404 | @@: |
|
375 | call change_task |
405 | call change_task |
376 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
406 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
377 | ; dec ecx |
- | |
378 | ; cmp ecx,0 |
- | |
379 | ; je @@Err1 |
- | |
380 | mov eax,[timer_ticks] |
407 | mov eax,[timer_ticks] |
381 | sub eax,[TickCounter_1] |
408 | sub eax,[TickCounter_1] |
382 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
409 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
383 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
410 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
384 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ |
411 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ |
- | 412 | .test: |
|
385 | in AL,DX |
413 | in AL,DX |
386 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
414 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
387 | test AL,80h |
415 | test AL,80h |
388 | jnz @@WaitHDReady_2 |
416 | jnz @@WaitHDReady_2 |
389 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà DRQ |
417 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà DRQ |
390 | test AL,08h |
418 | test AL,08h |
391 | jnz @@WaitHDReady_2 |
419 | jnz @@WaitHDReady_2 |
- | 420 | ||
392 | ; Çàãðóçèòü êîìàíäó â ðåãèñòðû êîíòðîëëåðà |
421 | ; Çàãðóçèòü êîìàíäó â ðåãèñòðû êîíòðîëëåðà |
393 | cli |
422 | cli |
394 | mov DX,[ATABasePortAddr] |
423 | mov DX,[ATABasePortAddr] |
395 | inc DX ;ðåãèñòð "îñîáåííîñòåé" |
424 | inc DX ;ðåãèñòð "îñîáåííîñòåé" |
396 | mov AL,[ATAFeatures] |
425 | mov AL,[ATAFeatures] |
Line 441... | Line 470... | ||
441 | jmp @@End_10 |
470 | jmp @@End_10 |
442 | @@Err5_4: |
471 | @@Err5_4: |
443 | mov [DevErrorCode],5 |
472 | mov [DevErrorCode],5 |
444 | ; Çàâåðøåíèå ðàáîòû ïðîãðàììû |
473 | ; Çàâåðøåíèå ðàáîòû ïðîãðàììû |
445 | @@End_10: |
474 | @@End_10: |
446 | sti |
475 | ; sti |
447 | popad |
476 | popad |
448 | ret |
477 | ret |
Line 449... | Line 478... | ||
449 | 478 | ||
450 | ;************************************************* |
479 | ;************************************************* |