Rev 837 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 837 | Rev 996 | ||
---|---|---|---|
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: 758 $ |
8 | $Revision: 996 $ |
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 | ; Îáëàñòü ïàìÿòè äëÿ ïðèåìà äàííûõ îò äèñêîâîäà |
- | |
171 | ;CDDataBuf DB 4096 DUP (0) |
170 | ; Îáëàñòü ïàìÿòè äëÿ ïðèåìà äàííûõ îò äèñêîâîäà |
172 | ; Ðàçìåð ïðèíèìàåìîãî áëîêà äàííûõ â áàéòàõ |
171 | ; Ðàçìåð ïðèíèìàåìîãî áëîêà äàííûõ â áàéòàõ |
173 | CDBlockSize DW ? |
172 | CDBlockSize DW ? |
174 | ; Àäðåñ ñ÷èòûâàåìîãî ñåêòîðà äàííûõ |
173 | ; Àäðåñ ñ÷èòûâàåìîãî ñåêòîðà äàííûõ |
175 | CDSectorAddress: DD ? |
174 | CDSectorAddress: DD ? |
176 | ; Âðåìÿ íà÷àëà î÷åðåäíîé îïåðàöèè ñ äèñêîì |
175 | ; Âðåìÿ íà÷àëà î÷åðåäíîé îïåðàöèè ñ äèñêîì |
177 | TickCounter_1 DD 0 |
176 | TickCounter_1 DD 0 |
178 | ; Âðåìÿ íà÷àëà îæèäàíèÿ ãîòîâíîñòè óñòðîéñòâà |
177 | ; Âðåìÿ íà÷àëà îæèäàíèÿ ãîòîâíîñòè óñòðîéñòâà |
179 | WURStartTime DD 0 |
178 | WURStartTime DD 0 |
180 | ; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíèÿ |
179 | ; óêàçàòåëü áóôåðà äëÿ ñ÷èòûâàíè |
Line 181... | Line 180... | ||
181 | CDDataBuf_pointer dd 0 |
180 | CDDataBuf_pointer dd 0 |
182 | 181 | ||
183 | ;**************************************************** |
182 | ;**************************************************** |
Line 340... | Line 339... | ||
340 | ; ïàêåòíîé êîìàíäû |
339 | ; ïàêåòíîé êîìàíäû |
341 | mov DX,[ATABasePortAddr] |
340 | mov DX,[ATABasePortAddr] |
342 | add DX,7 ;ïîðò 1õ7h |
341 | add DX,7 ;ïîðò 1õ7h |
343 | @@WaitDevice0_1: |
342 | @@WaitDevice0_1: |
344 | call change_task |
343 | call change_task |
345 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
344 | ; Ïðîâåðèòü âðåìÿ îæèäàíè |
346 | mov EAX,[timer_ticks] |
345 | mov EAX,[timer_ticks] |
347 | sub EAX,[TickCounter_1] |
346 | sub EAX,[TickCounter_1] |
348 | cmp EAX,BSYWaitTime |
347 | cmp EAX,BSYWaitTime |
349 | ja @@Err1_3 ;îøèáêà òàéì-àóòà |
348 | ja @@Err1_3 ;îøèáêà òàéì-àóòà |
350 | ; Ïðîâåðèòü ãîòîâíîñòü |
349 | ; Ïðîâåðèòü ãîòîâíîñòü |
Line 462... | Line 461... | ||
462 | cmp ecx,0 |
461 | cmp ecx,0 |
463 | je @@Err1_4 |
462 | je @@Err1_4 |
464 | jmp .test |
463 | jmp .test |
465 | @@: |
464 | @@: |
466 | call change_task |
465 | call change_task |
467 | ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ |
466 | ; Ïðîâåðèòü âðåìÿ îæèäàíè |
468 | mov eax,[timer_ticks] |
467 | mov eax,[timer_ticks] |
469 | sub eax,[TickCounter_1] |
468 | sub eax,[TickCounter_1] |
470 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
469 | cmp eax,BSYWaitTime ;300 ;îæèäàòü 3 ñåê. |
471 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
470 | ja @@Err1_4 ;îøèáêà òàéì-àóòà |
472 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ |
471 | ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíè |
473 | .test: |
472 | .test: |
474 | in AL,DX |
473 | in AL,DX |
475 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
474 | ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY |
476 | test AL,80h |
475 | test AL,80h |
477 | jnz @@WaitHDReady_2 |
476 | jnz @@WaitHDReady_2 |
Line 643... | Line 642... | ||
643 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
642 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
644 | call clear_packet_buffer |
643 | call clear_packet_buffer |
645 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
644 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
646 | ; Çàäàòü êîä êîìàíäû |
645 | ; Çàäàòü êîä êîìàíäû |
647 | mov [PacketCommand],word 1Bh |
646 | mov [PacketCommand],word 1Bh |
648 | ; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåëÿ |
647 | ; Çàäàòü îïåðàöèþ çàãðóçêè íîñèòåë |
649 | mov [PacketCommand+4],word 00000011b |
648 | mov [PacketCommand+4],word 00000011b |
650 | ; Ïîäàòü êîìàíäó |
649 | ; Ïîäàòü êîìàíäó |
651 | call SendPacketNoDatCommand |
650 | call SendPacketNoDatCommand |
652 | popa |
651 | popa |
653 | ret |
652 | ret |
Line 664... | Line 663... | ||
664 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
663 | ; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû |
665 | call clear_packet_buffer |
664 | call clear_packet_buffer |
666 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
665 | ; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT |
667 | ; Çàäàòü êîä êîìàíäû |
666 | ; Çàäàòü êîä êîìàíäû |
668 | mov [PacketCommand],word 1Bh |
667 | mov [PacketCommand],word 1Bh |
669 | ; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåëÿ |
668 | ; Çàäàòü îïåðàöèþ èçâëå÷åíèÿ íîñèòåë |
670 | mov [PacketCommand+4],word 00000010b |
669 | mov [PacketCommand+4],word 00000010b |
671 | ; Ïîäàòü êîìàíäó |
670 | ; Ïîäàòü êîìàíäó |
672 | call SendPacketNoDatCommand |
671 | call SendPacketNoDatCommand |
673 | popa |
672 | popa |
674 | ret |
673 | ret |