Subversion Repositories Kolibri OS

Rev

Rev 3712 | Rev 4700 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2455 mario79 3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
;**************************************************************************
9
;
10
;   [cache_ide[X]_pointer]
11
;   or [cache_ide[X]_data_pointer]  first entry in cache list
12
;
13
;            +0   - lba sector
14
;            +4   - state of cache sector
15
;                   0 = empty
16
;                   1 = used for read  ( same as in hd )
17
;                   2 = used for write ( differs from hd )
18
;
19
;  [cache_ide[X]_system_data]
20
;  or [cache_ide[x]_appl_data] - cache entries
21
;
22
;**************************************************************************
23
 
24
$Revision: 3742 $
25
 
26
align 4
27
find_empty_slot_CD_cache:
28
;-----------------------------------------------------------
29
; find empty or read slot, flush cache if next 10% is used by write
30
; output : edi = cache slot
31
;-----------------------------------------------------------
32
.search_again:
33
        call    cd_calculate_cache_3
34
.search_for_empty:
35
        inc     edi
36
        call    cd_calculate_cache_4
37
        jbe     .inside_cache
38
        mov     edi, 1
39
.inside_cache:
40
        call    cd_calculate_cache_5
41
        ret
42
;--------------------------------------------------------------------
43
clear_CD_cache:
44
        pusha
45
.ide0:
46
        xor     eax, eax
47
        cmp     [cdpos], 1
48
        jne     .ide1
49
        mov     [cache_ide0_search_start], eax
50
        mov     ecx, [cache_ide0_system_sad_size]
51
        mov     edi, [cache_ide0_pointer]
52
        call    .clear
53
        mov     [cache_ide0_appl_search_start], eax
54
        mov     ecx, [cache_ide0_appl_sad_size]
55
        mov     edi, [cache_ide0_data_pointer]
56
        jmp     .continue
57
.ide1:
58
        cmp     [cdpos], 2
59
        jne     .ide2
60
        mov     [cache_ide1_search_start], eax
61
        mov     ecx, [cache_ide1_system_sad_size]
62
        mov     edi, [cache_ide1_pointer]
63
        call    .clear
64
        mov     [cache_ide1_appl_search_start], eax
65
        mov     ecx, [cache_ide1_appl_sad_size]
66
        mov     edi, [cache_ide1_data_pointer]
67
        jmp     .continue
68
.ide2:
69
        cmp     [cdpos], 3
70
        jne     .ide3
71
        mov     [cache_ide2_search_start], eax
72
        mov     ecx, [cache_ide2_system_sad_size]
73
        mov     edi, [cache_ide2_pointer]
74
        call    .clear
75
        mov     [cache_ide2_appl_search_start], eax
76
        mov     ecx, [cache_ide2_appl_sad_size]
77
        mov     edi, [cache_ide2_data_pointer]
78
        jmp     .continue
79
.ide3:
80
        mov     [cache_ide3_search_start], eax
81
        mov     ecx, [cache_ide3_system_sad_size]
82
        mov     edi, [cache_ide3_pointer]
83
        call    .clear
84
        mov     [cache_ide3_appl_search_start], eax
85
        mov     ecx, [cache_ide3_appl_sad_size]
86
        mov     edi, [cache_ide3_data_pointer]
87
.continue:
88
        call    .clear
89
        popa
90
        ret
91
.clear:
92
        shl     ecx, 1
93
        cld
94
        rep stosd
95
        ret
96
;--------------------------------------------------------------------
97
align 4
98
cd_calculate_cache:
99
; 1 - IDE0 ... 4 - IDE3
100
.ide0:
101
        cmp     [cdpos], 1
102
        jne     .ide1
103
        cmp     [cd_appl_data], 0
104
        jne     .ide0_appl_data
105
        mov     ecx, [cache_ide0_system_sad_size]
106
        mov     esi, [cache_ide0_pointer]
107
        ret
108
.ide0_appl_data:
109
        mov     ecx, [cache_ide0_appl_sad_size]
110
        mov     esi, [cache_ide0_data_pointer]
111
        ret
112
.ide1:
113
        cmp     [cdpos], 2
114
        jne     .ide2
115
        cmp     [cd_appl_data], 0
116
        jne     .ide1_appl_data
117
        mov     ecx, [cache_ide1_system_sad_size]
118
        mov     esi, [cache_ide1_pointer]
119
        ret
120
.ide1_appl_data:
121
        mov     ecx, [cache_ide1_appl_sad_size]
122
        mov     esi, [cache_ide1_data_pointer]
123
        ret
124
.ide2:
125
        cmp     [cdpos], 3
126
        jne     .ide3
127
        cmp     [cd_appl_data], 0
128
        jne     .ide2_appl_data
129
        mov     ecx, [cache_ide2_system_sad_size]
130
        mov     esi, [cache_ide2_pointer]
131
        ret
132
.ide2_appl_data:
133
        mov     ecx, [cache_ide2_appl_sad_size]
134
        mov     esi, [cache_ide2_data_pointer]
135
        ret
136
.ide3:
137
        cmp     [cd_appl_data], 0
138
        jne     .ide3_appl_data
139
        mov     ecx, [cache_ide3_system_sad_size]
140
        mov     esi, [cache_ide3_pointer]
141
        ret
142
.ide3_appl_data:
143
        mov     ecx, [cache_ide3_appl_sad_size]
144
        mov     esi, [cache_ide3_data_pointer]
145
        ret
146
;--------------------------------------------------------------------
147
align 4
148
cd_calculate_cache_1:
149
; 1 - IDE0 ... 4 - IDE3
150
.ide0:
151
        cmp     [cdpos], 1
152
        jne     .ide1
153
        cmp     [cd_appl_data], 0
154
        jne     .ide0_appl_data
155
        mov     esi, [cache_ide0_pointer]
156
        ret
157
.ide0_appl_data:
158
        mov     esi, [cache_ide0_data_pointer]
159
        ret
160
.ide1:
161
        cmp     [cdpos], 2
162
        jne     .ide2
163
        cmp     [cd_appl_data], 0
164
        jne     .ide1_appl_data
165
        mov     esi, [cache_ide1_pointer]
166
        ret
167
.ide1_appl_data:
168
        mov     esi, [cache_ide1_data_pointer]
169
        ret
170
.ide2:
171
        cmp     [cdpos], 3
172
        jne     .ide3
173
        cmp     [cd_appl_data], 0
174
        jne     .ide2_appl_data
175
        mov     esi, [cache_ide2_pointer]
176
        ret
177
.ide2_appl_data:
178
        mov     esi, [cache_ide2_data_pointer]
179
        ret
180
.ide3:
181
        cmp     [cd_appl_data], 0
182
        jne     .ide3_appl_data
183
        mov     esi, [cache_ide3_pointer]
184
        ret
185
.ide3_appl_data:
186
        mov     esi, [cache_ide3_data_pointer]
187
        ret
188
;--------------------------------------------------------------------
189
align 4
190
cd_calculate_cache_2:
191
; 1 - IDE0 ... 4 - IDE3
192
.ide0:
193
        cmp     [cdpos], 1
194
        jne     .ide1
195
        cmp     [cd_appl_data], 0
196
        jne     .ide0_appl_data
197
        mov     eax, [cache_ide0_system_data]
198
        ret
199
.ide0_appl_data:
200
        mov     eax, [cache_ide0_appl_data]
201
        ret
202
.ide1:
203
        cmp     [cdpos], 2
204
        jne     .ide2
205
        cmp     [cd_appl_data], 0
206
        jne     .ide1_appl_data
207
        mov     eax, [cache_ide1_system_data]
208
        ret
209
.ide1_appl_data:
210
        mov     eax, [cache_ide1_appl_data]
211
        ret
212
.ide2:
213
        cmp     [cdpos], 3
214
        jne     .ide3
215
        cmp     [cd_appl_data], 0
216
        jne     .ide2_appl_data
217
        mov     eax, [cache_ide2_system_data]
218
        ret
219
.ide2_appl_data:
220
        mov     eax, [cache_ide2_appl_data]
221
        ret
222
.ide3:
223
        cmp     [cd_appl_data], 0
224
        jne     .ide3_appl_data
225
        mov     eax, [cache_ide3_system_data]
226
        ret
227
.ide3_appl_data:
228
        mov     eax, [cache_ide3_appl_data]
229
        ret
230
;--------------------------------------------------------------------
231
align 4
232
cd_calculate_cache_3:
233
;    mov   ecx,cache_max*10/100
234
;    mov   edi,[cache_search_start]
235
 
236
; 1 - IDE0 ... 4 - IDE3
237
.ide0:
238
        cmp     [cdpos], 1
239
        jne     .ide1
240
        cmp     [cd_appl_data], 0
241
        jne     .ide0_appl_data
242
        mov     edi, [cache_ide0_search_start]
243
        ret
244
.ide0_appl_data:
245
        mov     edi, [cache_ide0_appl_search_start]
246
        ret
247
.ide1:
248
        cmp     [cdpos], 2
249
        jne     .ide2
250
        cmp     [cd_appl_data], 0
251
        jne     .ide1_appl_data
252
        mov     edi, [cache_ide1_search_start]
253
        ret
254
.ide1_appl_data:
255
        mov     edi, [cache_ide1_appl_search_start]
256
        ret
257
.ide2:
258
        cmp     [cdpos], 3
259
        jne     .ide3
260
        cmp     [cd_appl_data], 0
261
        jne     .ide2_appl_data
262
        mov     edi, [cache_ide2_search_start]
263
        ret
264
.ide2_appl_data:
265
        mov     edi, [cache_ide2_appl_search_start]
266
        ret
267
.ide3:
268
        cmp     [cd_appl_data], 0
269
        jne     .ide3_appl_data
270
        mov     edi, [cache_ide3_search_start]
271
        ret
272
.ide3_appl_data:
273
        mov     edi, [cache_ide3_appl_search_start]
274
        ret
275
;--------------------------------------------------------------------
276
align 4
277
cd_calculate_cache_4:
278
;    cmp   edi,cache_max
279
; 1 - IDE0 ... 4 - IDE3
280
.ide0:
281
        cmp     [cdpos], 1
282
        jne     .ide1
283
        cmp     [cd_appl_data], 0
284
        jne     .ide0_appl_data
285
        cmp     edi, [cache_ide0_system_sad_size]
286
        ret
287
.ide0_appl_data:
288
        cmp     edi, [cache_ide0_appl_sad_size]
289
        ret
290
.ide1:
291
        cmp     [cdpos], 2
292
        jne     .ide2
293
        cmp     [cd_appl_data], 0
294
        jne     .ide1_appl_data
295
        cmp     edi, [cache_ide1_system_sad_size]
296
        ret
297
.ide1_appl_data:
298
        cmp     edi, [cache_ide1_appl_sad_size]
299
        ret
300
.ide2:
301
        cmp     [cdpos], 3
302
        jne     .ide3
303
        cmp     [cd_appl_data], 0
304
        jne     .ide2_appl_data
305
        cmp     edi, [cache_ide2_system_sad_size]
306
        ret
307
.ide2_appl_data:
308
        cmp     edi, [cache_ide2_appl_sad_size]
309
        ret
310
.ide3:
311
        cmp     [cd_appl_data], 0
312
        jne     .ide3_appl_data
313
        cmp     edi, [cache_ide3_system_sad_size]
314
        ret
315
.ide3_appl_data:
316
        cmp     edi, [cache_ide3_appl_sad_size]
317
        ret
318
;--------------------------------------------------------------------
319
align 4
320
cd_calculate_cache_5:
321
;    mov   [cache_search_start],edi
322
; 1 - IDE0 ... 4 - IDE3
323
.ide0:
324
        cmp     [cdpos], 1
325
        jne     .ide1
326
        cmp     [cd_appl_data], 0
327
        jne     .ide0_appl_data
328
        mov     [cache_ide0_search_start], edi
329
        ret
330
.ide0_appl_data:
331
        mov     [cache_ide0_appl_search_start], edi
332
        ret
333
.ide1:
334
        cmp     [cdpos], 2
335
        jne     .ide2
336
        cmp     [cd_appl_data], 0
337
        jne     .ide1_appl_data
338
        mov     [cache_ide1_search_start], edi
339
        ret
340
.ide1_appl_data:
341
        mov     [cache_ide1_appl_search_start], edi
342
        ret
343
.ide2:
344
        cmp     [cdpos], 3
345
        jne     .ide3
346
        cmp     [cd_appl_data], 0
347
        jne     .ide2_appl_data
348
        mov     [cache_ide2_search_start], edi
349
        ret
350
.ide2_appl_data:
351
        mov     [cache_ide2_appl_search_start], edi
352
        ret
353
.ide3:
354
        cmp     [cd_appl_data], 0
355
        jne     .ide3_appl_data
356
        mov     [cache_ide3_search_start], edi
357
        ret
358
.ide3_appl_data:
359
        mov     [cache_ide3_appl_search_start], edi
360
        ret
361
;--------------------------------------------------------------------
362
;align 4
363
;calculate_linear_to_real:
364
;    shr eax, 12
365
;    mov eax, [page_tabs+eax*4]
366
;    and eax, 0xFFFFF000
367
;    ret