Subversion Repositories Kolibri OS

Rev

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

Rev 431 Rev 538
Line 1... Line 1...
1
$Revision: 431 $
1
$Revision: 538 $
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 20... Line 20...
20
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ
20
; Ìàêñèìàëüíîå êîëè÷åñòâî ïîâòîðåíèé îïåðàöèè ÷òåíèÿ
21
MaxRetr equ 3
21
MaxRetr equ 3
22
; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû
22
; Ïðåäåëüíîå âðåìÿ îæèäàíèÿ ãîòîâíîñòè ê ïðèåìó êîìàíäû
23
; (â òèêàõ)
23
; (â òèêàõ)
24
BSYWaitTime equ 1000  ;2
24
BSYWaitTime equ 1000  ;2
25
 
-
 
-
 
25
NoTickWaitTime equ 0xfffff
26
;*************************************************
26
;*************************************************
27
;*      ÏÎËÍÎÅ ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ ÊÎÌÏÀÊÒ-ÄÈÑÊÀ      *
27
;*      ÏÎËÍÎÅ ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ ÊÎÌÏÀÊÒ-ÄÈÑÊÀ      *
28
;* Ñ÷èòûâàþòñÿ äàííûå ïîëüçîâàòåëÿ, èíôîðìàöèÿ   *
28
;* Ñ÷èòûâàþòñÿ äàííûå ïîëüçîâàòåëÿ, èíôîðìàöèÿ   *
29
;* ñóáêàíàëà è êîíòðîëüíàÿ èíôîðìàöèÿ            *
29
;* ñóáêàíàëà è êîíòðîëüíàÿ èíôîðìàöèÿ            *
30
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
30
;* Âõîäíûå ïàðàìåòðû ïåðåäàþòñÿ ÷åðåç ãëîáàëüíûå *
Line 66... Line 66...
66
;********************************************
66
;********************************************
67
;*        ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ        *
67
;*        ×ÒÅÍÈÅ ÑÅÊÒÎÐÀ Ñ ÏÎÂÒÎÐÀÌÈ        *
68
;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ *
68
;* Ìíîãîêðàòíîå ïîâòîðåíèå ÷òåíèÿ ïðè ñáîÿõ *
69
;********************************************
69
;********************************************
70
ReadCDWRetr:
70
ReadCDWRetr:
71
        pusha
71
        pushad
72
; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå
72
; Öèêë, ïîêà êîìàíäà íå âûïîëíåíà óñïåøíî èëè íå
73
; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê
73
; èñ÷åðïàíî êîëè÷åñòâî ïîïûòîê
74
        mov     ECX,MaxRetr
74
        mov     ECX,MaxRetr
75
@@NextRetr:
75
@@NextRetr:
76
; Ïîäàòü êîìàíäó
76
; Ïîäàòü êîìàíäó
77
        call    ReadCD
77
        call    ReadCD
78
        cmp     [DevErrorCode],0
78
        cmp     [DevErrorCode],0
79
        je      @@End_4
79
        je      @@End_4
-
 
80
        cmp    [timer_ticks_enable],0
-
 
81
        jne     @f
-
 
82
        mov     eax,NoTickWaitTime
-
 
83
.wait:
-
 
84
        dec     eax
-
 
85
        cmp     eax,0
-
 
86
        je      @@NextRetr
-
 
87
        jmp     .wait
-
 
88
@@:
80
; Çàäåðæêà íà 2,5 ñåêóíäû
89
; Çàäåðæêà íà 2,5 ñåêóíäû
81
        mov     EAX,[timer_ticks]
90
        mov     EAX,[timer_ticks]
82
        add     EAX,250 ;50
91
        add     EAX,250 ;50
83
@@Wait:
92
@@Wait:
84
        call    change_task
93
        call    change_task
85
        cmp     EAX,[timer_ticks]
94
        cmp     EAX,[timer_ticks]
86
        ja      @@Wait
95
        ja      @@Wait
87
        loop    @@NextRetr
96
        loop    @@NextRetr
88
;        call test_mario79
-
 
89
; Ñîîáùåíèå îá îøèáêå
-
 
90
;        mov     SI,offset ErrS
-
 
91
;        call    FatalError
-
 
92
@@End_4:
97
@@End_4:
93
        popa
98
        popad
94
        ret
99
        ret
Line 95... Line 100...
95
 
100
 
96
 
101
 
Line 141... Line 146...
141
        mov     AX,[CDBlockSize]
146
        mov     AX,[CDBlockSize]
142
        mov     [ATACylinder],AX
147
        mov     [ATACylinder],AX
143
        mov     [ATAHead],0
148
        mov     [ATAHead],0
144
        mov     [ATACommand],0A0h
149
        mov     [ATACommand],0A0h
145
        call    SendCommandToHDD_1
150
        call    SendCommandToHDD_1
146
;        call test_mario79
-
 
147
        cmp     [DevErrorCode],0 ;ïðîâåðèòü êîä îøèáêè
151
        cmp     [DevErrorCode],0 ;ïðîâåðèòü êîä îøèáêè
148
        jne     @@End_8    ;çàêîí÷èòü, ñîõðàíèâ êîä îøèáêè
152
        jne     @@End_8    ;çàêîí÷èòü, ñîõðàíèâ êîä îøèáêè
Line 149... Line 153...
149
 
153
 
150
; Îæèäàíèå ãîòîâíîñòè äèñêîâîäà ê ïðèåìó
154
; Îæèäàíèå ãîòîâíîñòè äèñêîâîäà ê ïðèåìó
151
; ïàêåòíîé êîìàíäû
155
; ïàêåòíîé êîìàíäû
152
        mov     DX,[ATABasePortAddr]
156
        mov     DX,[ATABasePortAddr]
-
 
157
        add     DX,7     ;ïîðò 1õ7h
153
        add     DX,7     ;ïîðò 1õ7h
158
        mov     ecx,NoTickWaitTime
-
 
159
@@WaitDevice0:
-
 
160
        cmp     [timer_ticks_enable],0
-
 
161
        jne     @f
-
 
162
        dec     ecx
-
 
163
        cmp     ecx,0
-
 
164
        je      @@Err1_1
-
 
165
        jmp     .test
154
@@WaitDevice0:
166
@@:
155
        call    change_task
167
        call    change_task
156
        ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû
168
        ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû
157
        mov     EAX,[timer_ticks]
169
        mov     EAX,[timer_ticks]
158
        sub     EAX,[TickCounter_1]
170
        sub     EAX,[TickCounter_1]
159
        cmp     EAX,BSYWaitTime
171
        cmp     EAX,BSYWaitTime
160
        ja      @@Err1_1   ;îøèáêà òàéì-àóòà
172
        ja      @@Err1_1   ;îøèáêà òàéì-àóòà
-
 
173
        ; Ïðîâåðèòü ãîòîâíîñòü
161
        ; Ïðîâåðèòü ãîòîâíîñòü
174
.test:
162
        in      AL,DX
175
        in      AL,DX
163
        test    AL,80h   ;ñîñòîÿíèå ñèãíàëà BSY
176
        test    AL,80h   ;ñîñòîÿíèå ñèãíàëà BSY
164
        jnz     @@WaitDevice0
-
 
165
        test    AL,1     ;ñîñòîÿíèå ñèãíàëà ERR
-
 
166
        jnz     @@Err6
177
        jnz     @@WaitDevice0
167
        test    AL,08h   ;ñîñòîÿíèå ñèãíàëà DRQ
178
        test    AL,08h   ;ñîñòîÿíèå ñèãíàëà DRQ
-
 
179
        jz      @@WaitDevice0
-
 
180
        test    AL,1     ;ñîñòîÿíèå ñèãíàëà ERR
168
        jz      @@WaitDevice0
181
        jnz     @@Err6
169
; Ïîñëàòü ïàêåòíóþ êîìàíäó
182
; Ïîñëàòü ïàêåòíóþ êîìàíäó
170
        cli
183
        cli
171
        mov     DX,[ATABasePortAddr]
184
        mov     DX,[ATABasePortAddr]
172
        mov     AX,[PacketCommand]
185
        mov     AX,[PacketCommand]
Line 183... Line 196...
183
        out     DX,AX
196
        out     DX,AX
184
        sti
197
        sti
185
; Îæèäàíèå ãîòîâíîñòè äàííûõ
198
; Îæèäàíèå ãîòîâíîñòè äàííûõ
186
        mov     DX,[ATABasePortAddr]
199
        mov     DX,[ATABasePortAddr]
187
        add     DX,7   ;ïîðò 1õ7h
200
        add     DX,7   ;ïîðò 1õ7h
-
 
201
        mov     ecx,NoTickWaitTime
188
@@WaitDevice1:
202
@@WaitDevice1:
-
 
203
        cmp     [timer_ticks_enable],0
-
 
204
        jne     @f
-
 
205
        dec     ecx
-
 
206
        cmp     ecx,0
-
 
207
        je      @@Err1_1
-
 
208
        jmp     .test_1
-
 
209
@@:
189
        call    change_task
210
        call    change_task
190
        ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû
211
        ; Ïðîâåðèòü âðåìÿ âûïîëíåíèÿ êîìàíäû
191
        mov     EAX,[timer_ticks]
212
        mov     EAX,[timer_ticks]
192
        sub     EAX,[TickCounter_1]
213
        sub     EAX,[TickCounter_1]
193
        cmp     EAX,MaxCDWaitTime
214
        cmp     EAX,MaxCDWaitTime
194
        ja      @@Err1_1   ;îøèáêà òàéì-àóòà
215
        ja      @@Err1_1   ;îøèáêà òàéì-àóòà
195
        ; Ïðîâåðèòü ãîòîâíîñòü
216
        ; Ïðîâåðèòü ãîòîâíîñòü
-
 
217
.test_1:
196
        in      AL,DX
218
        in      AL,DX
197
        test    AL,80h   ;ñîñòîÿíèå ñèãíàëà BSY
219
        test    AL,80h   ;ñîñòîÿíèå ñèãíàëà BSY
198
        jnz     @@WaitDevice1
220
        jnz     @@WaitDevice1
199
        test    AL,1     ;ñîñòîÿíèå ñèãíàëà ERR
-
 
200
        jnz     @@Err6_temp
-
 
201
        test    AL,08h   ;ñîñòîÿíèå ñèãíàëà DRQ
221
        test    AL,08h   ;ñîñòîÿíèå ñèãíàëà DRQ
202
        jz      @@WaitDevice1
222
        jz      @@WaitDevice1
-
 
223
        test    AL,1     ;ñîñòîÿíèå ñèãíàëà ERR
203
        cli
224
        jnz     @@Err6_temp
204
; Ïðèíÿòü áëîê äàííûõ îò êîíòðîëëåðà
225
; Ïðèíÿòü áëîê äàííûõ îò êîíòðîëëåðà
205
        mov     EDI,[CDDataBuf_pointer] ;0x7000  ;CDDataBuf
226
        mov     EDI,[CDDataBuf_pointer] ;0x7000  ;CDDataBuf
206
        ; Çàãðóçèòü àäðåñ ðåãèñòðà äàííûõ êîíòðîëëåðà
227
        ; Çàãðóçèòü àäðåñ ðåãèñòðà äàííûõ êîíòðîëëåðà
207
        mov     DX,[ATABasePortAddr] ;ïîðò 1x0h
228
        mov     DX,[ATABasePortAddr] ;ïîðò 1x0h
208
        ; Çàãðóçèòü â ñ÷åò÷èê ðàçìåð áëîêà â áàéòàõ
229
        ; Çàãðóçèòü â ñ÷åò÷èê ðàçìåð áëîêà â áàéòàõ
-
 
230
        xor     ecx,ecx
209
        mov     CX,[CDBlockSize]
231
        mov     CX,[CDBlockSize]
210
        ; Âû÷èñëèòü ðàçìåð áëîêà â 16-ðàçðÿäíûõ ñëîâàõ
232
        ; Âû÷èñëèòü ðàçìåð áëîêà â 16-ðàçðÿäíûõ ñëîâàõ
211
        shr     CX,1 ;ðàçäåëèòü ðàçìåð áëîêà íà 2
233
        shr     CX,1 ;ðàçäåëèòü ðàçìåð áëîêà íà 2
212
        ; Ïðèíÿòü áëîê äàííûõ
234
        ; Ïðèíÿòü áëîê äàííûõ
-
 
235
        cli
213
        cld
236
        cld
214
        rep     insw
237
        rep     insw
215
        sti
238
        sti
216
        ; Óñïåøíîå çàâåðøåíèå ïðèåìà äàííûõ
239
        ; Óñïåøíîå çàâåðøåíèå ïðèåìà äàííûõ
217
        jmp @@End_8
240
        jmp @@End_8
Line 366... Line 389...
366
        shl     AL,4
389
        shl     AL,4
367
        or      AL,10100000b
390
        or      AL,10100000b
368
        out     DX,AL
391
        out     DX,AL
369
        ; Îæèäàòü, ïîêà äèñê íå áóäåò ãîòîâ
392
        ; Îæèäàòü, ïîêà äèñê íå áóäåò ãîòîâ
370
        inc     DX
393
        inc     DX
371
;        mov  ecx,0xfff
-
 
372
        mov     eax,[timer_ticks]
394
        mov     eax,[timer_ticks]
373
        mov     [TickCounter_1],eax
395
        mov     [TickCounter_1],eax
-
 
396
        mov     ecx,NoTickWaitTime
374
@@WaitHDReady_2:
397
@@WaitHDReady_2:
-
 
398
        cmp    [timer_ticks_enable],0
-
 
399
        jne    @f
-
 
400
        dec    ecx
-
 
401
        cmp    ecx,0
-
 
402
        je     @@Err1_4
-
 
403
        jmp    .test
-
 
404
@@:
375
        call    change_task
405
        call    change_task
376
        ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ
406
        ; Ïðîâåðèòü âðåìÿ îæèäàíèÿ
377
;        dec  ecx
-
 
378
;        cmp  ecx,0
-
 
379
;        je     @@Err1
-
 
380
        mov     eax,[timer_ticks]
407
        mov     eax,[timer_ticks]
381
        sub     eax,[TickCounter_1]
408
        sub     eax,[TickCounter_1]
382
        cmp     eax,BSYWaitTime ;300    ;îæèäàòü 3 ñåê.        
409
        cmp     eax,BSYWaitTime ;300    ;îæèäàòü 3 ñåê.        
383
        ja      @@Err1_4   ;îøèáêà òàéì-àóòà
410
        ja      @@Err1_4   ;îøèáêà òàéì-àóòà
384
        ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ
411
        ; Ïðî÷èòàòü ðåãèñòð ñîñòîÿíèÿ
-
 
412
.test:
385
        in      AL,DX
413
        in      AL,DX
386
        ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY
414
        ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà BSY
387
        test    AL,80h
415
        test    AL,80h
388
        jnz     @@WaitHDReady_2
416
        jnz     @@WaitHDReady_2
389
        ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà DRQ
417
        ; Ïðîâåðèòü ñîñòîÿíèå ñèãíàëà DRQ
390
        test    AL,08h
418
        test    AL,08h
391
        jnz     @@WaitHDReady_2
419
        jnz     @@WaitHDReady_2
-
 
420
 
392
; Çàãðóçèòü êîìàíäó â ðåãèñòðû êîíòðîëëåðà
421
; Çàãðóçèòü êîìàíäó â ðåãèñòðû êîíòðîëëåðà
393
        cli
422
        cli
394
        mov     DX,[ATABasePortAddr]
423
        mov     DX,[ATABasePortAddr]
395
        inc     DX      ;ðåãèñòð "îñîáåííîñòåé"
424
        inc     DX      ;ðåãèñòð "îñîáåííîñòåé"
396
        mov     AL,[ATAFeatures]
425
        mov     AL,[ATAFeatures]
Line 441... Line 470...
441
        jmp @@End_10
470
        jmp @@End_10
442
@@Err5_4:
471
@@Err5_4:
443
        mov     [DevErrorCode],5
472
        mov     [DevErrorCode],5
444
; Çàâåðøåíèå ðàáîòû ïðîãðàììû
473
; Çàâåðøåíèå ðàáîòû ïðîãðàììû
445
@@End_10:
474
@@End_10:
446
        sti
475
;        sti
447
        popad 
476
        popad 
448
        ret
477
        ret
Line 449... Line 478...
449
        
478
        
450
;*************************************************
479
;*************************************************