Subversion Repositories Kolibri OS

Rev

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

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