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 |