Subversion Repositories Kolibri OS

Rev

Rev 543 | Rev 593 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 543 Rev 585
Line 1... Line 1...
1
$Revision: 543 $
1
$Revision: 585 $
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 14... Line 14...
14
 
14
 
15
;        Ïðîöåäóðà äëÿ ïîëíîãî ñ÷èòûâàíèÿ âñåõ
15
;        Ïðîöåäóðà äëÿ ïîëíîãî ñ÷èòûâàíèÿ âñåõ
16
;           äàííûõ èç ñåêòîðà êîìïàêò-äèñêà
16
;           äàííûõ èç ñåêòîðà êîìïàêò-äèñêà
Line 17... Line -...
17
; Àâòîð òåêñòà ïðîãðàììû Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
-
 
18
 
17
; Àâòîð òåêñòà ïðîãðàììû Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
19
 
18
 
20
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ
19
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ
21
MaxRetr equ 10
20
MaxRetr equ 10
22
; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû
21
; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû
Line 66... Line 65...
66
;********************************************
65
;********************************************
67
;*        ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ        *
66
;*        ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ        *
68
;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ *
67
;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ *
69
;********************************************
68
;********************************************
70
ReadCDWRetr:
69
ReadCDWRetr:
-
 
70
;-----------------------------------------------------------
-
 
71
; input  : eax = block to read
-
 
72
;          ebx = destination
-
 
73
;-----------------------------------------------------------
-
 
74
    pushad
-
 
75
    mov   eax,[CDSectorAddress]
-
 
76
    mov   ebx,[CDDataBuf_pointer]
-
 
77
    call  cd_calculate_cache
-
 
78
    add   esi,8
-
 
79
    mov   edi,1
-
 
80
.hdreadcache:
-
 
81
;    push  esi
-
 
82
;    mov   esi,[esi]
-
 
83
;    call  test_mario79
-
 
84
;    mov   esi,eax
-
 
85
;    call  test_mario79
-
 
86
;    pop   esi
-
 
87
 
-
 
88
;    cmp   dword [esi+4],0       ; empty
-
 
89
;    je    .nohdcache
-
 
90
    cmp   [esi],eax		; correct sector
-
 
91
    je	  .yeshdcache
-
 
92
.nohdcache:
-
 
93
    add   esi,8
-
 
94
    inc   edi
-
 
95
    dec   ecx
-
 
96
    jnz   .hdreadcache
-
 
97
    call  find_empty_slot_CD_cache	 ; ret in edi
-
 
98
 
-
 
99
    push  edi
-
 
100
    push  eax
-
 
101
    call  cd_calculate_cache_2
-
 
102
    shl   edi,11
-
 
103
    add   edi,eax
-
 
104
    mov   [CDDataBuf_pointer],edi
-
 
105
    pop   eax
-
 
106
    pop   edi
-
 
107
 
-
 
108
    call  ReadCDWRetr_1
-
 
109
    mov   [CDDataBuf_pointer],ebx
-
 
110
    call  cd_calculate_cache_1
-
 
111
    lea   esi,[edi*8+esi]
-
 
112
;    push  esi
-
 
113
;    call  test_mario79
-
 
114
;    mov   esi,eax
-
 
115
;    call  test_mario79
-
 
116
;    pop   esi
-
 
117
    mov   [esi],eax		; sector number
-
 
118
;    mov   dword [esi+4],1       ; hd read - mark as same as in hd
-
 
119
.yeshdcache:
-
 
120
    mov   esi,edi
-
 
121
    shl   esi,11    ;9
-
 
122
    push  eax
-
 
123
    call  cd_calculate_cache_2
-
 
124
    add   esi,eax
-
 
125
    pop   eax
-
 
126
    mov   edi,ebx   ;[CDDataBuf_pointer]
-
 
127
    mov   ecx,512   ;/4
-
 
128
    cld
-
 
129
    rep   movsd 		; move data
-
 
130
    popad
-
 
131
    ret
-
 
132
 
-
 
133
ReadCDWRetr_1:
71
        pushad
134
	pushad
Line 72... Line 135...
72
                
135
 
73
; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå
136
; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå
74
; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê
137
; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê
Line 515... Line 578...
515
        mov     [DevErrorCode],1
578
	mov	[DevErrorCode],1
516
@@End_11:
579
@@End_11:
517
        popa
580
	popa
518
        ret
581
	ret
Line -... Line 582...
-
 
582
 
-
 
583
;*************************************************
-
 
584
;*            ÇÀÏÐÅÒÈÒÜ ÑÌÅÍÓ ÄÈÑÊÀ              *
-
 
585
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
-
 
586
;* ïåðìåííûå:                                    *
-
 
587
;* ChannelNumber - íîìåð êàíàëà;                 *
-
 
588
;* DiskNumber - íîìåð äèñêà íà êàíàëå.           *
-
 
589
;*************************************************
-
 
590
prevent_medium_removal:
-
 
591
	pusha
-
 
592
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû
-
 
593
	call  clear_packet_buffer
-
 
594
; Çàäàòü êîä êîìàíäû
-
 
595
	mov  [PacketCommand],byte 0x1E
-
 
596
; Çàäàòü êîä çàïðåòà
-
 
597
    mov  [PacketCommand+4],byte 11b
-
 
598
; Ïîäàòü êîìàíäó
-
 
599
	call SendPacketNoDatCommand
-
 
600
	popa
-
 
601
	ret
-
 
602
 
-
 
603
;*************************************************
-
 
604
;*            ÐÀÇÐÅØÈÒÜ ÑÌÅÍÓ ÄÈÑÊÀ              *
-
 
605
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
-
 
606
;* ïåðìåííûå:                                    *
-
 
607
;* ChannelNumber - íîìåð êàíàëà;                 *
-
 
608
;* DiskNumber - íîìåð äèñêà íà êàíàëå.           *
-
 
609
;*************************************************	
-
 
610
allow_medium_removal:
-
 
611
	pusha
-
 
612
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû
-
 
613
	call  clear_packet_buffer
-
 
614
; Çàäàòü êîä êîìàíäû
-
 
615
	mov  [PacketCommand],byte 0x1E
-
 
616
; Çàäàòü êîä çàïðåòà
-
 
617
    mov  [PacketCommand+4],byte 00b
-
 
618
; Ïîäàòü êîìàíäó
-
 
619
	call SendPacketNoDatCommand
-
 
620
	popa
Line 519... Line 621...
519
 
621
	ret
520
        
622
 
521
;*************************************************
623
;*************************************************
522
;*         ÇÀÃÐÓÇÈÒÜ ÍÎÑÈÒÅËÜ Â ÄÈÑÊÎÂÎÄ         *
624
;*         ÇÀÃÐÓÇÈÒÜ ÍÎÑÈÒÅËÜ Â ÄÈÑÊÎÂÎÄ         *
Line 544... Line 646...
544
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
646
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
545
;* ïåðìåííûå:                                    *
647
;* ïåðìåííûå:                                    *
546
;* ChannelNumber - íîìåð êàíàëà;                 *
648
;* ChannelNumber - íîìåð êàíàëà;                 *
547
;* DiskNumber - íîìåð äèñêà íà êàíàëå.           *
649
;* DiskNumber - íîìåð äèñêà íà êàíàëå.           *
548
;*************************************************
650
;*************************************************
549
UnloadMedium:
651
EjectMedium:
550
        pusha
652
	pusha
551
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû
653
; Î÷èñòèòü áóôåð ïàêåòíîé êîìàíäû
552
        call  clear_packet_buffer
654
	call  clear_packet_buffer
553
; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT
655
; Ñôîðìèðîâàòü êîìàíäó START/STOP UNIT
554
        ; Çàäàòü êîä êîìàíäû
656
	; Çàäàòü êîä êîìàíäû