Subversion Repositories Kolibri OS

Rev

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