Rev 996 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 996 | Rev 2971 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 996 $ |
8 | $Revision: 2971 $ |
9 | 9 | ||
10 | 10 | ||
11 | ;********************************************************** |
11 | ;********************************************************** |
12 | ; Íåïîñðåäñòâåííàÿ ðàáîòà ñ óñòðîéñòâîì ÑD (ATAPI) |
12 | ; Íåïîñðåäñòâåííàÿ ðàáîòà ñ óñòðîéñòâîì ÑD (ATAPI) |
Line 13... | Line 13... | ||
13 | ;********************************************************** |
13 | ;********************************************************** |
14 | ; Àâòîð ÷àñòè èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷ |
14 | ; Àâòîð ÷àñòè èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷ |
15 | ; Àäàïòàöèÿ, äîðàáîòêà è ðàçðàáîòêà Mario79 |
15 | ; Àäàïòàöèÿ, äîðàáîòêà è ðàçðàáîòêà Mario79 |
16 | 16 | ||
17 | ; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíè |
17 | ; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ |
18 | MaxRetr equ 10 |
18 | MaxRetr equ 10 |
Line 36... | Line 36... | ||
36 | pusha |
36 | pusha |
37 | ; Çàäàòü ðàçìåð ñåêòîðà |
37 | ; Çàäàòü ðàçìåð ñåêòîðà |
38 | mov [CDBlockSize],2048 ;2352 |
38 | mov [CDBlockSize],2048 ;2352 |
39 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
39 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
40 | call clear_packet_buffer |
40 | call clear_packet_buffer |
41 | ; Ñôîðìèðîâàòü ïàêåòíóþ êîìàíäó äëÿ ñ÷èòûâàíè |
41 | ; Ñôîðìèðîâàòü ïàêåòíóþ êîìàíäó äëÿ ñ÷èòûâàíèÿ |
42 | ; ñåêòîðà äàííûõ |
42 | ; ñåêòîðà äàííûõ |
43 | ; Çàäàòü êîä êîìàíäû Read CD |
43 | ; Çàäàòü êîä êîìàíäû Read CD |
44 | mov [PacketCommand],byte 0x28 ;0xBE |
44 | mov [PacketCommand],byte 0x28 ;0xBE |
45 | ; Çàäàòü àäðåñ ñåêòîðà |
45 | ; Çàäàòü àäðåñ ñåêòîðà |
46 | mov AX,word [CDSectorAddress+2] |
46 | mov AX,word [CDSectorAddress+2] |
Line 166... | Line 166... | ||
166 | MaxCDWaitTime equ 1000 ;200 ;10 ñåêóíä |
166 | MaxCDWaitTime equ 1000 ;200 ;10 ñåêóíä |
Line 167... | Line 167... | ||
167 | 167 | ||
168 | ; Îáëàñòü ïàìÿòè äëÿ ôîðìèðîâàíèÿ ïàêåòíîé êîìàíäû |
168 | ; Îáëàñòü ïàìÿòè äëÿ ôîðìèðîâàíèÿ ïàêåòíîé êîìàíäû |
169 | PacketCommand: rb 12 ;DB 12 DUP (?) |
169 | PacketCommand: rb 12 ;DB 12 DUP (?) |
- | 170 | ; Îáëàñòü ïàìÿòè äëÿ ïðèåìà äàííûõ îò äèñêîâîäà |
|
170 | ; Îáëàñòü ïàìÿòè äëÿ ïðèåìà äàííûõ îò äèñêîâîäà |
171 | ;CDDataBuf DB 4096 DUP (0) |
171 | ; Ðàçìåð ïðèíèìàåìîãî áëîêà äàííûõ â áàéòàõ |
172 | ; Ðàçìåð ïðèíèìàåìîãî áëîêà äàííûõ â áàéòàõ |
172 | CDBlockSize DW ? |
173 | CDBlockSize DW ? |
173 | ; Àäðåñ ñ÷èòûâàåìîãî ñåêòîðà äàííûõ |
174 | ; Àäðåñ ñ÷èòûâàåìîãî ñåêòîðà äàííûõ |
174 | CDSectorAddress: DD ? |
175 | CDSectorAddress: DD ? |
175 | ; Âðåìÿ íà÷àëà î÷åðåäíîé îïåðàöèè ñ äèñêîì |
176 | ; Âðåìÿ íà÷àëà î÷åðåäíîé îïåðàöèè ñ äèñêîì |
176 | TickCounter_1 DD 0 |
177 | TickCounter_1 DD 0 |
177 | ; Âðåìÿ íà÷àëà îæèäàíèÿ ãîòîâíîñòè óñòðîéñòâà |
178 | ; Âðåìÿ íà÷àëà îæèäàíèÿ ãîòîâíîñòè óñòðîéñòâà |
178 | WURStartTime DD 0 |
179 | WURStartTime DD 0 |
179 | ; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíè |
180 | ; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíèÿ |
Line 180... | Line 181... | ||
180 | CDDataBuf_pointer dd 0 |
181 | CDDataBuf_pointer dd 0 |
181 | 182 | ||
182 | ;**************************************************** |
183 | ;**************************************************** |
Line 339... | Line 340... | ||
339 | ; ïàêåòíîé êîìàíäû |
340 | ; ïàêåòíîé êîìàíäû |
340 | mov DX,[ATABasePortAddr] |
341 | mov DX,[ATABasePortAddr] |
341 | add DX,7 ;ïîðò 1õ7h |
342 | add DX,7 ;ïîðò 1õ7h |
342 | @@WaitDevice0_1: |
343 | @@WaitDevice0_1: |
343 | call change_task |
344 | call change_task |
344 | ; Ïðîâåðèòü âðåìÿ îæèäàíè |
345 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
345 | mov EAX,[timer_ticks] |
346 | mov EAX,[timer_ticks] |
346 | sub EAX,[TickCounter_1] |
347 | sub EAX,[TickCounter_1] |
347 | cmp EAX,BSYWaitTime |
348 | cmp EAX,BSYWaitTime |
348 | ja @@Err1_3 ;îøèáêà òàéì-àóòà |
349 | ja @@Err1_3 ;îøèáêà òàéì-àóòà |
349 | ; Ïðîâåðèòü ãîòîâíîñòü |
350 | ; Ïðîâåðèòü ãîòîâíîñòü |
Line 461... | Line 462... | ||
461 | cmp ecx,0 |
462 | cmp ecx,0 |
462 | je @@Err1_4 |
463 | je @@Err1_4 |
463 | jmp .test |
464 | jmp .test |
464 | @@: |
465 | @@: |
465 | call change_task |
466 | call change_task |
466 | ; Ïðîâåðèòü âðåìÿ îæèäàíè |
467 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
467 | mov eax,[timer_ticks] |
468 | mov eax,[timer_ticks] |
468 | sub eax,[TickCounter_1] |
469 | sub eax,[TickCounter_1] |
469 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
470 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
470 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
471 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
471 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíè |
472 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ |
472 | .test: |
473 | .test: |
473 | in AL,DX |
474 | in AL,DX |
474 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
475 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
475 | test AL,80h |
476 | test AL,80h |
476 | jnz @@WaitHDReady_2 |
477 | jnz @@WaitHDReady_2 |
Line 642... | Line 643... | ||
642 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
643 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
643 | call clear_packet_buffer |
644 | call clear_packet_buffer |
644 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
645 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
645 | ; Çàäàòü êîä êîìàíäû |
646 | ; Çàäàòü êîä êîìàíäû |
646 | mov [PacketCommand],word 1Bh |
647 | mov [PacketCommand],word 1Bh |
647 | ; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåë |
648 | ; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåëÿ |
648 | mov [PacketCommand+4],word 00000011b |
649 | mov [PacketCommand+4],word 00000011b |
649 | ; Ïîäàòü êîìàíäó |
650 | ; Ïîäàòü êîìàíäó |
650 | call SendPacketNoDatCommand |
651 | call SendPacketNoDatCommand |
651 | popa |
652 | popa |
652 | ret |
653 | ret |
Line 663... | Line 664... | ||
663 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
664 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
664 | call clear_packet_buffer |
665 | call clear_packet_buffer |
665 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
666 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
666 | ; Çàäàòü êîä êîìàíäû |
667 | ; Çàäàòü êîä êîìàíäû |
667 | mov [PacketCommand],word 1Bh |
668 | mov [PacketCommand],word 1Bh |
668 | ; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåë |
669 | ; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåëÿ |
669 | mov [PacketCommand+4],word 00000010b |
670 | mov [PacketCommand+4],word 00000010b |
670 | ; Ïîäàòü êîìàíäó |
671 | ; Ïîäàòü êîìàíäó |
671 | call SendPacketNoDatCommand |
672 | call SendPacketNoDatCommand |
672 | popa |
673 | popa |
673 | ret |
674 | ret |