Subversion Repositories Kolibri OS

Rev

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