Rev 593 | Rev 750 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 593 | Rev 709 | ||
---|---|---|---|
1 | ;************************************************************************** |
1 | ;************************************************************************** |
2 | ; |
2 | ; |
3 | ; [cache_ide[X]_pointer] |
3 | ; [cache_ide[X]_pointer] |
4 | ; or [cache_ide[X]_data_pointer] first entry in cache list |
4 | ; or [cache_ide[X]_data_pointer] first entry in cache list |
5 | ; |
5 | ; |
6 | ; +0 - lba sector |
6 | ; +0 - lba sector |
7 | ; +4 - state of cache sector |
7 | ; +4 - state of cache sector |
8 | ; 0 = empty |
8 | ; 0 = empty |
9 | ; 1 = used for read ( same as in hd ) |
9 | ; 1 = used for read ( same as in hd ) |
10 | ; 2 = used for write ( differs from hd ) |
10 | ; 2 = used for write ( differs from hd ) |
11 | ; |
11 | ; |
12 | ; [cache_ide[X]_system_data] |
12 | ; [cache_ide[X]_system_data] |
13 | ; or [cache_ide[x]_appl_data] - cache entries |
13 | ; or [cache_ide[x]_appl_data] - cache entries |
14 | ; |
14 | ; |
15 | ;************************************************************************** |
15 | ;************************************************************************** |
16 | 16 | ||
17 | $Revision: 0 $ |
17 | $Revision: 0 $ |
18 | 18 | ||
19 | 19 | ||
20 | align 4 |
20 | align 4 |
21 | write_cache: |
21 | write_cache: |
22 | ;----------------------------------------------------------- |
22 | ;----------------------------------------------------------- |
23 | ; write all changed sectors to disk |
23 | ; write all changed sectors to disk |
24 | ;----------------------------------------------------------- |
24 | ;----------------------------------------------------------- |
25 | push eax ecx edx esi edi |
25 | push eax ecx edx esi edi |
26 | 26 | ||
27 | ; write difference ( 2 ) from cache to hd |
27 | ; write difference ( 2 ) from cache to hd |
28 | call calculate_cache |
28 | call calculate_cache |
29 | add esi,8 |
29 | add esi,8 |
30 | mov edi,1 |
30 | mov edi,1 |
31 | write_cache_more: |
31 | write_cache_more: |
32 | cmp dword [esi+4],2 ; if cache slot is not different |
32 | cmp dword [esi+4],2 ; if cache slot is not different |
33 | jne .write_chain |
33 | jne .write_chain |
34 | mov dword [esi+4],1 ; same as in hd |
34 | mov dword [esi+4],1 ; same as in hd |
35 | mov eax,[esi] ; eax = sector to write |
35 | mov eax,[esi] ; eax = sector to write |
36 | cmp eax,[PARTITION_START] |
36 | cmp eax,[PARTITION_START] |
37 | jb danger |
37 | jb danger |
38 | cmp eax,[PARTITION_END] |
38 | cmp eax,[PARTITION_END] |
39 | ja danger |
39 | ja danger |
- | 40 | cmp [hdpos], 0x80 |
|
- | 41 | jae @f |
|
40 | ; DMA write is permitted only if [allow_dma_access]=1 |
42 | ; DMA write is permitted only if [allow_dma_access]=1 |
41 | cmp [allow_dma_access], 2 |
43 | cmp [allow_dma_access], 2 |
42 | jae .nodma |
44 | jae .nodma |
43 | cmp [dma_hdd], 1 |
45 | cmp [dma_hdd], 1 |
44 | jnz .nodma |
46 | jnz .nodma |
- | 47 | @@: |
|
45 | ; ¡ê¥¤¨ï¥¬ § ¯¨áì 楯®çª¨ ¯®á«¥¤®¢ ⥫ìëå ᥪâ®à®¢ ¢ ®¤® ®¡à 饨¥ ª ¤¨áªã |
48 | ; ¡ê¥¤¨ï¥¬ § ¯¨áì 楯®çª¨ ¯®á«¥¤®¢ ⥫ìëå ᥪâ®à®¢ ¢ ®¤® ®¡à 饨¥ ª ¤¨áªã |
46 | cmp ecx, 1 |
49 | cmp ecx, 1 |
47 | jz .nonext |
50 | jz .nonext |
48 | cmp dword [esi+8+4], 2 |
51 | cmp dword [esi+8+4], 2 |
49 | jnz .nonext |
52 | jnz .nonext |
50 | push eax |
53 | push eax |
51 | inc eax |
54 | inc eax |
52 | cmp eax, [esi+8] |
55 | cmp eax, [esi+8] |
53 | pop eax |
56 | pop eax |
54 | jnz .nonext |
57 | jnz .nonext |
55 | cmp [cache_chain_started], 1 |
58 | cmp [cache_chain_started], 1 |
56 | jz @f |
59 | jz @f |
57 | mov [cache_chain_started], 1 |
60 | mov [cache_chain_started], 1 |
58 | mov [cache_chain_size], 0 |
61 | mov [cache_chain_size], 0 |
59 | mov [cache_chain_pos], edi |
62 | mov [cache_chain_pos], edi |
60 | mov [cache_chain_ptr], esi |
63 | mov [cache_chain_ptr], esi |
61 | @@: |
64 | @@: |
62 | inc [cache_chain_size] |
65 | inc [cache_chain_size] |
63 | cmp [cache_chain_size], 64 |
66 | cmp [cache_chain_size], 16 |
64 | jnz .continue |
67 | jnz .continue |
65 | jmp .write_chain |
68 | jmp .write_chain |
66 | .nonext: |
69 | .nonext: |
67 | call flush_cache_chain |
70 | call flush_cache_chain |
68 | mov [cache_chain_size], 1 |
71 | mov [cache_chain_size], 1 |
69 | mov [cache_chain_ptr], esi |
72 | mov [cache_chain_ptr], esi |
70 | call write_cache_sector |
73 | call write_cache_sector |
71 | jmp .continue |
74 | jmp .continue |
72 | .nodma: |
75 | .nodma: |
73 | call cache_write_pio |
76 | call cache_write_pio |
74 | .write_chain: |
77 | .write_chain: |
75 | call flush_cache_chain |
78 | call flush_cache_chain |
76 | .continue: |
79 | .continue: |
77 | danger: |
80 | danger: |
78 | add esi,8 |
81 | add esi,8 |
79 | inc edi |
82 | inc edi |
80 | dec ecx |
83 | dec ecx |
81 | jnz write_cache_more |
84 | jnz write_cache_more |
82 | call flush_cache_chain |
85 | call flush_cache_chain |
83 | return_02: |
86 | return_02: |
84 | pop edi esi edx ecx eax |
87 | pop edi esi edx ecx eax |
85 | ret |
88 | ret |
86 | 89 | ||
87 | flush_cache_chain: |
90 | flush_cache_chain: |
88 | cmp [cache_chain_started], 0 |
91 | cmp [cache_chain_started], 0 |
89 | jz @f |
92 | jz @f |
90 | call write_cache_chain |
93 | call write_cache_chain |
91 | mov [cache_chain_started], 0 |
94 | mov [cache_chain_started], 0 |
92 | @@: |
95 | @@: |
93 | ret |
96 | ret |
94 | ;-------------------------------------------------------------------- |
97 | ;-------------------------------------------------------------------- |
95 | align 4 |
98 | align 4 |
96 | find_empty_slot: |
99 | find_empty_slot: |
97 | ;----------------------------------------------------------- |
100 | ;----------------------------------------------------------- |
98 | ; find empty or read slot, flush cache if next 10% is used by write |
101 | ; find empty or read slot, flush cache if next 10% is used by write |
99 | ; output : edi = cache slot |
102 | ; output : edi = cache slot |
100 | ;----------------------------------------------------------- |
103 | ;----------------------------------------------------------- |
101 | ; push ecx esi |
104 | ; push ecx esi |
102 | 105 | ||
103 | search_again: |
106 | search_again: |
104 | call calculate_cache_3 |
107 | call calculate_cache_3 |
105 | shr ecx,3 |
108 | shr ecx,3 |
106 | search_for_empty: |
109 | search_for_empty: |
107 | inc edi |
110 | inc edi |
108 | call calculate_cache_4 |
111 | call calculate_cache_4 |
109 | jbe inside_cache |
112 | jbe inside_cache |
110 | mov edi,1 |
113 | mov edi,1 |
111 | inside_cache: |
114 | inside_cache: |
112 | push esi |
115 | push esi |
113 | call calculate_cache_1 |
116 | call calculate_cache_1 |
114 | cmp dword [edi*8+esi+4],2 |
117 | cmp dword [edi*8+esi+4],2 |
115 | pop esi |
118 | pop esi |
116 | jb found_slot ; it's empty or read |
119 | jb found_slot ; it's empty or read |
117 | dec ecx |
120 | dec ecx |
118 | jnz search_for_empty |
121 | jnz search_for_empty |
119 | call write_cache ; no empty slots found, write all |
122 | call write_cache ; no empty slots found, write all |
120 | cmp [hd_error],0 |
123 | cmp [hd_error],0 |
121 | jne found_slot_access_denied |
124 | jne found_slot_access_denied |
122 | jmp search_again ; and start again |
125 | jmp search_again ; and start again |
123 | found_slot: |
126 | found_slot: |
124 | call calculate_cache_5 |
127 | call calculate_cache_5 |
125 | found_slot_access_denied: |
128 | found_slot_access_denied: |
126 | ret |
129 | ret |
127 | ;-------------------------------------------------------------------- |
130 | ;-------------------------------------------------------------------- |
128 | align 4 |
131 | align 4 |
129 | clear_hd_cache: |
132 | clear_hd_cache: |
130 | mov [fat_in_cache],-1 |
133 | mov [fat_in_cache],-1 |
131 | mov [fat_change],0 |
134 | mov [fat_change],0 |
132 | ret |
135 | ret |
133 | ;-------------------------------------------------------------------- |
136 | ;-------------------------------------------------------------------- |
134 | align 4 |
137 | align 4 |
135 | calculate_cache: |
138 | calculate_cache: |
136 | ; mov ecx,cache_max ; entries in cache |
139 | ; mov ecx,cache_max ; entries in cache |
137 | ; mov esi,HD_CACHE+8 |
140 | ; mov esi,HD_CACHE+8 |
138 | 141 | ||
139 | ; 1 - IDE0 ... 4 - IDE3 |
142 | ; 1 - IDE0 ... 4 - IDE3 |
140 | .ide0: |
143 | .ide0: |
141 | cmp [hdpos],1 |
144 | cmp [hdpos],1 |
142 | jne .ide1 |
145 | jne .ide1 |
143 | cmp [hdd_appl_data],0 |
146 | cmp [hdd_appl_data],0 |
144 | jne .ide0_appl_data |
147 | jne .ide0_appl_data |
145 | mov ecx,[cache_ide0_system_sad_size] |
148 | mov ecx,[cache_ide0_system_sad_size] |
146 | mov esi,[cache_ide0_pointer] |
149 | mov esi,[cache_ide0_pointer] |
147 | ret |
150 | ret |
148 | .ide0_appl_data: |
151 | .ide0_appl_data: |
149 | mov ecx,[cache_ide0_appl_sad_size] |
152 | mov ecx,[cache_ide0_appl_sad_size] |
150 | mov esi,[cache_ide0_data_pointer] |
153 | mov esi,[cache_ide0_data_pointer] |
151 | ret |
154 | ret |
152 | .ide1: |
155 | .ide1: |
153 | cmp [hdpos],2 |
156 | cmp [hdpos],2 |
154 | jne .ide2 |
157 | jne .ide2 |
155 | cmp [hdd_appl_data],0 |
158 | cmp [hdd_appl_data],0 |
156 | jne .ide1_appl_data |
159 | jne .ide1_appl_data |
157 | mov ecx,[cache_ide1_system_sad_size] |
160 | mov ecx,[cache_ide1_system_sad_size] |
158 | mov esi,[cache_ide1_pointer] |
161 | mov esi,[cache_ide1_pointer] |
159 | ret |
162 | ret |
160 | .ide1_appl_data: |
163 | .ide1_appl_data: |
161 | mov ecx,[cache_ide1_appl_sad_size] |
164 | mov ecx,[cache_ide1_appl_sad_size] |
162 | mov esi,[cache_ide1_data_pointer] |
165 | mov esi,[cache_ide1_data_pointer] |
163 | ret |
166 | ret |
164 | .ide2: |
167 | .ide2: |
165 | cmp [hdpos],3 |
168 | cmp [hdpos],3 |
166 | jne .ide3 |
169 | jne .ide3 |
167 | cmp [hdd_appl_data],0 |
170 | cmp [hdd_appl_data],0 |
168 | jne .ide2_appl_data |
171 | jne .ide2_appl_data |
169 | mov ecx,[cache_ide2_system_sad_size] |
172 | mov ecx,[cache_ide2_system_sad_size] |
170 | mov esi,[cache_ide2_pointer] |
173 | mov esi,[cache_ide2_pointer] |
171 | ret |
174 | ret |
172 | .ide2_appl_data: |
175 | .ide2_appl_data: |
173 | mov ecx,[cache_ide2_appl_sad_size] |
176 | mov ecx,[cache_ide2_appl_sad_size] |
174 | mov esi,[cache_ide2_data_pointer] |
177 | mov esi,[cache_ide2_data_pointer] |
175 | ret |
178 | ret |
176 | .ide3: |
179 | .ide3: |
- | 180 | cmp [hdpos],4 |
|
- | 181 | jne .noide |
|
177 | cmp [hdd_appl_data],0 |
182 | cmp [hdd_appl_data],0 |
178 | jne .ide3_appl_data |
183 | jne .ide3_appl_data |
179 | mov ecx,[cache_ide3_system_sad_size] |
184 | mov ecx,[cache_ide3_system_sad_size] |
180 | mov esi,[cache_ide3_pointer] |
185 | mov esi,[cache_ide3_pointer] |
181 | ret |
186 | ret |
182 | .ide3_appl_data: |
187 | .ide3_appl_data: |
183 | mov ecx,[cache_ide3_appl_sad_size] |
188 | mov ecx,[cache_ide3_appl_sad_size] |
184 | mov esi,[cache_ide3_data_pointer] |
189 | mov esi,[cache_ide3_data_pointer] |
185 | ret |
190 | ret |
- | 191 | .noide: |
|
- | 192 | push eax |
|
- | 193 | mov eax,[hdpos] |
|
- | 194 | sub eax,80h |
|
- | 195 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 196 | jz @f |
|
- | 197 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 198 | imul eax,cache_ide1-cache_ide0 |
|
- | 199 | add eax,cache_ide0 |
|
- | 200 | jmp .get |
|
- | 201 | @@: |
|
- | 202 | imul eax,cache_ide1-cache_ide0 |
|
- | 203 | add eax,BiosDiskCaches |
|
- | 204 | .get: |
|
- | 205 | cmp [hdd_appl_data],0 |
|
- | 206 | jne .bd_appl_data |
|
- | 207 | mov ecx,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 208 | mov esi,[cache_ide0_pointer-cache_ide0+eax] |
|
- | 209 | pop eax |
|
- | 210 | ret |
|
- | 211 | .bd_appl_data: |
|
- | 212 | mov ecx,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 213 | mov esi,[cache_ide0_data_pointer-cache_ide0+eax] |
|
- | 214 | pop eax |
|
- | 215 | ret |
|
186 | ;-------------------------------------------------------------------- |
216 | ;-------------------------------------------------------------------- |
187 | align 4 |
217 | align 4 |
188 | calculate_cache_1: |
218 | calculate_cache_1: |
189 | ; lea esi,[edi*8+HD_CACHE] |
219 | ; lea esi,[edi*8+HD_CACHE] |
190 | ; 1 - IDE0 ... 4 - IDE3 |
220 | ; 1 - IDE0 ... 4 - IDE3 |
191 | .ide0: |
221 | .ide0: |
192 | cmp [hdpos],1 |
222 | cmp [hdpos],1 |
193 | jne .ide1 |
223 | jne .ide1 |
194 | cmp [hdd_appl_data],0 |
224 | cmp [hdd_appl_data],0 |
195 | jne .ide0_appl_data |
225 | jne .ide0_appl_data |
196 | mov esi,[cache_ide0_pointer] |
226 | mov esi,[cache_ide0_pointer] |
197 | ret |
227 | ret |
198 | .ide0_appl_data: |
228 | .ide0_appl_data: |
199 | mov esi,[cache_ide0_data_pointer] |
229 | mov esi,[cache_ide0_data_pointer] |
200 | ret |
230 | ret |
201 | .ide1: |
231 | .ide1: |
202 | cmp [hdpos],2 |
232 | cmp [hdpos],2 |
203 | jne .ide2 |
233 | jne .ide2 |
204 | cmp [hdd_appl_data],0 |
234 | cmp [hdd_appl_data],0 |
205 | jne .ide1_appl_data |
235 | jne .ide1_appl_data |
206 | mov esi,[cache_ide1_pointer] |
236 | mov esi,[cache_ide1_pointer] |
207 | ret |
237 | ret |
208 | .ide1_appl_data: |
238 | .ide1_appl_data: |
209 | mov esi,[cache_ide1_data_pointer] |
239 | mov esi,[cache_ide1_data_pointer] |
210 | ret |
240 | ret |
211 | .ide2: |
241 | .ide2: |
212 | cmp [hdpos],3 |
242 | cmp [hdpos],3 |
213 | jne .ide3 |
243 | jne .ide3 |
214 | cmp [hdd_appl_data],0 |
244 | cmp [hdd_appl_data],0 |
215 | jne .ide2_appl_data |
245 | jne .ide2_appl_data |
216 | mov esi,[cache_ide2_pointer] |
246 | mov esi,[cache_ide2_pointer] |
217 | ret |
247 | ret |
218 | .ide2_appl_data: |
248 | .ide2_appl_data: |
219 | mov esi,[cache_ide2_data_pointer] |
249 | mov esi,[cache_ide2_data_pointer] |
220 | ret |
250 | ret |
221 | .ide3: |
251 | .ide3: |
- | 252 | cmp [hdpos],4 |
|
- | 253 | jne .noide |
|
222 | cmp [hdd_appl_data],0 |
254 | cmp [hdd_appl_data],0 |
223 | jne .ide3_appl_data |
255 | jne .ide3_appl_data |
224 | mov esi,[cache_ide3_pointer] |
256 | mov esi,[cache_ide3_pointer] |
225 | ret |
257 | ret |
226 | .ide3_appl_data: |
258 | .ide3_appl_data: |
227 | mov esi,[cache_ide3_data_pointer] |
259 | mov esi,[cache_ide3_data_pointer] |
228 | ret |
260 | ret |
- | 261 | .noide: |
|
- | 262 | push eax |
|
- | 263 | mov eax,[hdpos] |
|
- | 264 | sub eax,80h |
|
- | 265 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 266 | jz @f |
|
- | 267 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 268 | imul eax,cache_ide1-cache_ide0 |
|
- | 269 | add eax,cache_ide0 |
|
- | 270 | jmp .get |
|
- | 271 | @@: |
|
- | 272 | imul eax,cache_ide1-cache_ide0 |
|
- | 273 | add eax,BiosDiskCaches |
|
- | 274 | .get: |
|
- | 275 | cmp [hdd_appl_data],0 |
|
- | 276 | jne .bd_appl_data |
|
- | 277 | mov esi,[cache_ide0_pointer-cache_ide0+eax] |
|
- | 278 | pop eax |
|
- | 279 | ret |
|
- | 280 | .bd_appl_data: |
|
- | 281 | mov esi,[cache_ide0_data_pointer-cache_ide0+eax] |
|
- | 282 | pop eax |
|
- | 283 | ret |
|
- | 284 | ||
229 | ;-------------------------------------------------------------------- |
285 | ;-------------------------------------------------------------------- |
230 | align 4 |
286 | align 4 |
231 | calculate_cache_2: |
287 | calculate_cache_2: |
232 | ; add esi,HD_CACHE+65536 |
288 | ; add esi,HD_CACHE+65536 |
233 | ; 1 - IDE0 ... 4 - IDE3 |
289 | ; 1 - IDE0 ... 4 - IDE3 |
234 | .ide0: |
290 | .ide0: |
235 | cmp [hdpos],1 |
291 | cmp [hdpos],1 |
236 | jne .ide1 |
292 | jne .ide1 |
237 | cmp [hdd_appl_data],0 |
293 | cmp [hdd_appl_data],0 |
238 | jne .ide0_appl_data |
294 | jne .ide0_appl_data |
239 | mov eax,[cache_ide0_system_data] |
295 | mov eax,[cache_ide0_system_data] |
240 | ret |
296 | ret |
241 | .ide0_appl_data: |
297 | .ide0_appl_data: |
242 | mov eax,[cache_ide0_appl_data] |
298 | mov eax,[cache_ide0_appl_data] |
243 | ret |
299 | ret |
244 | .ide1: |
300 | .ide1: |
245 | cmp [hdpos],2 |
301 | cmp [hdpos],2 |
246 | jne .ide2 |
302 | jne .ide2 |
247 | cmp [hdd_appl_data],0 |
303 | cmp [hdd_appl_data],0 |
248 | jne .ide1_appl_data |
304 | jne .ide1_appl_data |
249 | mov eax,[cache_ide1_system_data] |
305 | mov eax,[cache_ide1_system_data] |
250 | ret |
306 | ret |
251 | .ide1_appl_data: |
307 | .ide1_appl_data: |
252 | mov eax,[cache_ide1_appl_data] |
308 | mov eax,[cache_ide1_appl_data] |
253 | ret |
309 | ret |
254 | .ide2: |
310 | .ide2: |
255 | cmp [hdpos],3 |
311 | cmp [hdpos],3 |
256 | jne .ide3 |
312 | jne .ide3 |
257 | cmp [hdd_appl_data],0 |
313 | cmp [hdd_appl_data],0 |
258 | jne .ide2_appl_data |
314 | jne .ide2_appl_data |
259 | mov eax,[cache_ide2_system_data] |
315 | mov eax,[cache_ide2_system_data] |
260 | ret |
316 | ret |
261 | .ide2_appl_data: |
317 | .ide2_appl_data: |
262 | mov eax,[cache_ide2_appl_data] |
318 | mov eax,[cache_ide2_appl_data] |
263 | ret |
319 | ret |
264 | .ide3: |
320 | .ide3: |
- | 321 | cmp [hdpos],4 |
|
- | 322 | jne .noide |
|
265 | cmp [hdd_appl_data],0 |
323 | cmp [hdd_appl_data],0 |
266 | jne .ide3_appl_data |
324 | jne .ide3_appl_data |
267 | mov eax,[cache_ide3_system_data] |
325 | mov eax,[cache_ide3_system_data] |
268 | ret |
326 | ret |
269 | .ide3_appl_data: |
327 | .ide3_appl_data: |
270 | mov eax,[cache_ide3_appl_data] |
328 | mov eax,[cache_ide3_appl_data] |
271 | ret |
329 | ret |
- | 330 | .noide: |
|
- | 331 | mov eax,[hdpos] |
|
- | 332 | sub eax,80h |
|
- | 333 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 334 | jz @f |
|
- | 335 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 336 | imul eax,cache_ide1-cache_ide0 |
|
- | 337 | add eax,cache_ide0 |
|
- | 338 | jmp .get |
|
- | 339 | @@: |
|
- | 340 | imul eax,cache_ide1-cache_ide0 |
|
- | 341 | add eax,BiosDiskCaches |
|
- | 342 | .get: |
|
- | 343 | cmp [hdd_appl_data],0 |
|
- | 344 | jne .bd_appl_data |
|
- | 345 | mov eax,[cache_ide0_system_data-cache_ide0+eax] |
|
- | 346 | ret |
|
- | 347 | .bd_appl_data: |
|
- | 348 | mov eax,[cache_ide0_appl_data-cache_ide0+eax] |
|
- | 349 | ret |
|
272 | ;-------------------------------------------------------------------- |
350 | ;-------------------------------------------------------------------- |
273 | align 4 |
351 | align 4 |
274 | calculate_cache_3: |
352 | calculate_cache_3: |
275 | ; mov ecx,cache_max*10/100 |
353 | ; mov ecx,cache_max*10/100 |
276 | ; mov edi,[cache_search_start] |
354 | ; mov edi,[cache_search_start] |
277 | 355 | ||
278 | ; 1 - IDE0 ... 4 - IDE3 |
356 | ; 1 - IDE0 ... 4 - IDE3 |
279 | .ide0: |
357 | .ide0: |
280 | cmp [hdpos],1 |
358 | cmp [hdpos],1 |
281 | jne .ide1 |
359 | jne .ide1 |
282 | cmp [hdd_appl_data],0 |
360 | cmp [hdd_appl_data],0 |
283 | jne .ide0_appl_data |
361 | jne .ide0_appl_data |
284 | mov ecx,[cache_ide0_system_sad_size] |
362 | mov ecx,[cache_ide0_system_sad_size] |
285 | mov edi,[cache_ide0_search_start] |
363 | mov edi,[cache_ide0_search_start] |
286 | ret |
364 | ret |
287 | .ide0_appl_data: |
365 | .ide0_appl_data: |
288 | mov ecx,[cache_ide0_appl_sad_size] |
366 | mov ecx,[cache_ide0_appl_sad_size] |
289 | mov edi,[cache_ide0_appl_search_start] |
367 | mov edi,[cache_ide0_appl_search_start] |
290 | ret |
368 | ret |
291 | .ide1: |
369 | .ide1: |
292 | cmp [hdpos],2 |
370 | cmp [hdpos],2 |
293 | jne .ide2 |
371 | jne .ide2 |
294 | cmp [hdd_appl_data],0 |
372 | cmp [hdd_appl_data],0 |
295 | jne .ide1_appl_data |
373 | jne .ide1_appl_data |
296 | mov ecx,[cache_ide1_system_sad_size] |
374 | mov ecx,[cache_ide1_system_sad_size] |
297 | mov edi,[cache_ide1_search_start] |
375 | mov edi,[cache_ide1_search_start] |
298 | ret |
376 | ret |
299 | .ide1_appl_data: |
377 | .ide1_appl_data: |
300 | mov ecx,[cache_ide1_appl_sad_size] |
378 | mov ecx,[cache_ide1_appl_sad_size] |
301 | mov edi,[cache_ide1_appl_search_start] |
379 | mov edi,[cache_ide1_appl_search_start] |
302 | ret |
380 | ret |
303 | .ide2: |
381 | .ide2: |
304 | cmp [hdpos],3 |
382 | cmp [hdpos],3 |
305 | jne .ide3 |
383 | jne .ide3 |
306 | cmp [hdd_appl_data],0 |
384 | cmp [hdd_appl_data],0 |
307 | jne .ide2_appl_data |
385 | jne .ide2_appl_data |
308 | mov ecx,[cache_ide2_system_sad_size] |
386 | mov ecx,[cache_ide2_system_sad_size] |
309 | mov edi,[cache_ide2_search_start] |
387 | mov edi,[cache_ide2_search_start] |
310 | ret |
388 | ret |
311 | .ide2_appl_data: |
389 | .ide2_appl_data: |
312 | mov ecx,[cache_ide2_appl_sad_size] |
390 | mov ecx,[cache_ide2_appl_sad_size] |
313 | mov edi,[cache_ide2_appl_search_start] |
391 | mov edi,[cache_ide2_appl_search_start] |
314 | ret |
392 | ret |
315 | .ide3: |
393 | .ide3: |
- | 394 | cmp [hdpos],4 |
|
- | 395 | jne .noide |
|
316 | cmp [hdd_appl_data],0 |
396 | cmp [hdd_appl_data],0 |
317 | jne .ide3_appl_data |
397 | jne .ide3_appl_data |
318 | mov ecx,[cache_ide3_system_sad_size] |
398 | mov ecx,[cache_ide3_system_sad_size] |
319 | mov edi,[cache_ide3_search_start] |
399 | mov edi,[cache_ide3_search_start] |
320 | ret |
400 | ret |
321 | .ide3_appl_data: |
401 | .ide3_appl_data: |
322 | mov ecx,[cache_ide3_appl_sad_size] |
402 | mov ecx,[cache_ide3_appl_sad_size] |
323 | mov edi,[cache_ide3_appl_search_start] |
403 | mov edi,[cache_ide3_appl_search_start] |
324 | ret |
404 | ret |
- | 405 | .noide: |
|
- | 406 | push eax |
|
- | 407 | mov eax,[hdpos] |
|
- | 408 | sub eax,80h |
|
- | 409 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 410 | jz @f |
|
- | 411 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 412 | imul eax,cache_ide1-cache_ide0 |
|
- | 413 | add eax,cache_ide0 |
|
- | 414 | jmp .get |
|
- | 415 | @@: |
|
- | 416 | imul eax,cache_ide1-cache_ide0 |
|
- | 417 | add eax,BiosDiskCaches |
|
- | 418 | .get: |
|
- | 419 | cmp [hdd_appl_data],0 |
|
- | 420 | jne .bd_appl_data |
|
- | 421 | mov ecx,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 422 | mov edi,[cache_ide0_search_start-cache_ide0+eax] |
|
- | 423 | pop eax |
|
- | 424 | ret |
|
- | 425 | .bd_appl_data: |
|
- | 426 | mov ecx,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 427 | mov edi,[cache_ide0_appl_search_start-cache_ide0+eax] |
|
- | 428 | pop eax |
|
- | 429 | ret |
|
325 | ;-------------------------------------------------------------------- |
430 | ;-------------------------------------------------------------------- |
326 | align 4 |
431 | align 4 |
327 | calculate_cache_4: |
432 | calculate_cache_4: |
328 | ; cmp edi,cache_max |
433 | ; cmp edi,cache_max |
329 | ; 1 - IDE0 ... 4 - IDE3 |
434 | ; 1 - IDE0 ... 4 - IDE3 |
330 | .ide0: |
435 | .ide0: |
331 | cmp [hdpos],1 |
436 | cmp [hdpos],1 |
332 | jne .ide1 |
437 | jne .ide1 |
333 | cmp [hdd_appl_data],0 |
438 | cmp [hdd_appl_data],0 |
334 | jne .ide0_appl_data |
439 | jne .ide0_appl_data |
335 | cmp edi,[cache_ide0_system_sad_size] |
440 | cmp edi,[cache_ide0_system_sad_size] |
336 | ret |
441 | ret |
337 | .ide0_appl_data: |
442 | .ide0_appl_data: |
338 | cmp edi,[cache_ide0_appl_sad_size] |
443 | cmp edi,[cache_ide0_appl_sad_size] |
339 | ret |
444 | ret |
340 | .ide1: |
445 | .ide1: |
341 | cmp [hdpos],2 |
446 | cmp [hdpos],2 |
342 | jne .ide2 |
447 | jne .ide2 |
343 | cmp [hdd_appl_data],0 |
448 | cmp [hdd_appl_data],0 |
344 | jne .ide1_appl_data |
449 | jne .ide1_appl_data |
345 | cmp edi,[cache_ide1_system_sad_size] |
450 | cmp edi,[cache_ide1_system_sad_size] |
346 | ret |
451 | ret |
347 | .ide1_appl_data: |
452 | .ide1_appl_data: |
348 | cmp edi,[cache_ide1_appl_sad_size] |
453 | cmp edi,[cache_ide1_appl_sad_size] |
349 | ret |
454 | ret |
350 | .ide2: |
455 | .ide2: |
351 | cmp [hdpos],3 |
456 | cmp [hdpos],3 |
352 | jne .ide3 |
457 | jne .ide3 |
353 | cmp [hdd_appl_data],0 |
458 | cmp [hdd_appl_data],0 |
354 | jne .ide2_appl_data |
459 | jne .ide2_appl_data |
355 | cmp edi,[cache_ide2_system_sad_size] |
460 | cmp edi,[cache_ide2_system_sad_size] |
356 | ret |
461 | ret |
357 | .ide2_appl_data: |
462 | .ide2_appl_data: |
358 | cmp edi,[cache_ide2_appl_sad_size] |
463 | cmp edi,[cache_ide2_appl_sad_size] |
359 | ret |
464 | ret |
360 | .ide3: |
465 | .ide3: |
- | 466 | cmp [hdpos],4 |
|
- | 467 | jne .noide |
|
361 | cmp [hdd_appl_data],0 |
468 | cmp [hdd_appl_data],0 |
362 | jne .ide3_appl_data |
469 | jne .ide3_appl_data |
363 | cmp edi,[cache_ide3_system_sad_size] |
470 | cmp edi,[cache_ide3_system_sad_size] |
364 | ret |
471 | ret |
365 | .ide3_appl_data: |
472 | .ide3_appl_data: |
366 | cmp edi,[cache_ide3_appl_sad_size] |
473 | cmp edi,[cache_ide3_appl_sad_size] |
367 | ret |
474 | ret |
- | 475 | .noide: |
|
- | 476 | push eax |
|
- | 477 | mov eax,[hdpos] |
|
- | 478 | sub eax,80h |
|
- | 479 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 480 | jz @f |
|
- | 481 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 482 | imul eax,cache_ide1-cache_ide0 |
|
- | 483 | add eax,cache_ide0 |
|
- | 484 | jmp .get |
|
- | 485 | @@: |
|
- | 486 | imul eax,cache_ide1-cache_ide0 |
|
- | 487 | add eax,BiosDiskCaches |
|
- | 488 | .get: |
|
- | 489 | cmp [hdd_appl_data],0 |
|
- | 490 | jne .bd_appl_data |
|
- | 491 | cmp edi,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 492 | pop eax |
|
- | 493 | ret |
|
- | 494 | .bd_appl_data: |
|
- | 495 | cmp edi,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 496 | pop eax |
|
- | 497 | ret |
|
- | 498 | ||
368 | ;-------------------------------------------------------------------- |
499 | ;-------------------------------------------------------------------- |
369 | align 4 |
500 | align 4 |
370 | calculate_cache_5: |
501 | calculate_cache_5: |
371 | ; mov [cache_search_start],edi |
502 | ; mov [cache_search_start],edi |
372 | ; 1 - IDE0 ... 4 - IDE3 |
503 | ; 1 - IDE0 ... 4 - IDE3 |
373 | .ide0: |
504 | .ide0: |
374 | cmp [hdpos],1 |
505 | cmp [hdpos],1 |
375 | jne .ide1 |
506 | jne .ide1 |
376 | cmp [hdd_appl_data],0 |
507 | cmp [hdd_appl_data],0 |
377 | jne .ide0_appl_data |
508 | jne .ide0_appl_data |
378 | mov [cache_ide0_search_start],edi |
509 | mov [cache_ide0_search_start],edi |
379 | ret |
510 | ret |
380 | .ide0_appl_data: |
511 | .ide0_appl_data: |
381 | mov [cache_ide0_appl_search_start],edi |
512 | mov [cache_ide0_appl_search_start],edi |
382 | ret |
513 | ret |
383 | .ide1: |
514 | .ide1: |
384 | cmp [hdpos],2 |
515 | cmp [hdpos],2 |
385 | jne .ide2 |
516 | jne .ide2 |
386 | cmp [hdd_appl_data],0 |
517 | cmp [hdd_appl_data],0 |
387 | jne .ide1_appl_data |
518 | jne .ide1_appl_data |
388 | mov [cache_ide1_search_start],edi |
519 | mov [cache_ide1_search_start],edi |
389 | ret |
520 | ret |
390 | .ide1_appl_data: |
521 | .ide1_appl_data: |
391 | mov [cache_ide1_appl_search_start],edi |
522 | mov [cache_ide1_appl_search_start],edi |
392 | ret |
523 | ret |
393 | .ide2: |
524 | .ide2: |
394 | cmp [hdpos],3 |
525 | cmp [hdpos],3 |
395 | jne .ide3 |
526 | jne .ide3 |
396 | cmp [hdd_appl_data],0 |
527 | cmp [hdd_appl_data],0 |
397 | jne .ide2_appl_data |
528 | jne .ide2_appl_data |
398 | mov [cache_ide2_search_start],edi |
529 | mov [cache_ide2_search_start],edi |
399 | ret |
530 | ret |
400 | .ide2_appl_data: |
531 | .ide2_appl_data: |
401 | mov [cache_ide2_appl_search_start],edi |
532 | mov [cache_ide2_appl_search_start],edi |
402 | ret |
533 | ret |
403 | .ide3: |
534 | .ide3: |
- | 535 | cmp [hdpos],4 |
|
- | 536 | jne .noide |
|
404 | cmp [hdd_appl_data],0 |
537 | cmp [hdd_appl_data],0 |
405 | jne .ide3_appl_data |
538 | jne .ide3_appl_data |
406 | mov [cache_ide3_search_start],edi |
539 | mov [cache_ide3_search_start],edi |
407 | ret |
540 | ret |
408 | .ide3_appl_data: |
541 | .ide3_appl_data: |
409 | mov [cache_ide3_appl_search_start],edi |
542 | mov [cache_ide3_appl_search_start],edi |
410 | ret |
543 | ret |
- | 544 | .noide: |
|
- | 545 | push eax |
|
- | 546 | mov eax,[hdpos] |
|
- | 547 | sub eax,80h |
|
- | 548 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 549 | jz @f |
|
- | 550 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 551 | imul eax,cache_ide1-cache_ide0 |
|
- | 552 | add eax,cache_ide0 |
|
- | 553 | jmp .get |
|
- | 554 | @@: |
|
- | 555 | imul eax,cache_ide1-cache_ide0 |
|
- | 556 | add eax,BiosDiskCaches |
|
- | 557 | .get: |
|
- | 558 | cmp [hdd_appl_data],0 |
|
- | 559 | jne .bd_appl_data |
|
- | 560 | mov [cache_ide0_search_start-cache_ide0+eax],edi |
|
- | 561 | pop eax |
|
- | 562 | ret |
|
- | 563 | .bd_appl_data: |
|
- | 564 | mov [cache_ide0_appl_search_start-cache_ide0+eax],edi |
|
- | 565 | pop eax |
|
- | 566 | ret |
|
411 | 567 | ||
412 | ;-------------------------------------------------------------------- |
568 | ;-------------------------------------------------------------------- |
413 | align 4 |
569 | align 4 |
414 | find_empty_slot_CD_cache: |
570 | find_empty_slot_CD_cache: |
415 | ;----------------------------------------------------------- |
571 | ;----------------------------------------------------------- |
416 | ; find empty or read slot, flush cache if next 10% is used by write |
572 | ; find empty or read slot, flush cache if next 10% is used by write |
417 | ; output : edi = cache slot |
573 | ; output : edi = cache slot |
418 | ;----------------------------------------------------------- |
574 | ;----------------------------------------------------------- |
419 | .search_again: |
575 | .search_again: |
420 | call cd_calculate_cache_3 |
576 | call cd_calculate_cache_3 |
421 | .search_for_empty: |
577 | .search_for_empty: |
422 | inc edi |
578 | inc edi |
423 | call cd_calculate_cache_4 |
579 | call cd_calculate_cache_4 |
424 | jbe .inside_cache |
580 | jbe .inside_cache |
425 | mov edi,1 |
581 | mov edi,1 |
426 | .inside_cache: |
582 | .inside_cache: |
427 | call cd_calculate_cache_5 |
583 | call cd_calculate_cache_5 |
428 | ret |
584 | ret |
429 | ;-------------------------------------------------------------------- |
585 | ;-------------------------------------------------------------------- |
430 | clear_CD_cache: |
586 | clear_CD_cache: |
431 | pusha |
587 | pusha |
432 | .ide0: |
588 | .ide0: |
433 | xor eax,eax |
589 | xor eax,eax |
434 | cmp [cdpos],1 |
590 | cmp [cdpos],1 |
435 | jne .ide1 |
591 | jne .ide1 |
436 | mov [cache_ide0_search_start],eax |
592 | mov [cache_ide0_search_start],eax |
437 | mov ecx,[cache_ide0_system_sad_size] |
593 | mov ecx,[cache_ide0_system_sad_size] |
438 | mov edi,[cache_ide0_pointer] |
594 | mov edi,[cache_ide0_pointer] |
439 | call .clear |
595 | call .clear |
440 | mov [cache_ide0_appl_search_start],eax |
596 | mov [cache_ide0_appl_search_start],eax |
441 | mov ecx,[cache_ide0_appl_sad_size] |
597 | mov ecx,[cache_ide0_appl_sad_size] |
442 | mov edi,[cache_ide0_data_pointer] |
598 | mov edi,[cache_ide0_data_pointer] |
443 | jmp .continue |
599 | jmp .continue |
444 | .ide1: |
600 | .ide1: |
445 | cmp [cdpos],2 |
601 | cmp [cdpos],2 |
446 | jne .ide2 |
602 | jne .ide2 |
447 | mov [cache_ide1_search_start],eax |
603 | mov [cache_ide1_search_start],eax |
448 | mov ecx,[cache_ide1_system_sad_size] |
604 | mov ecx,[cache_ide1_system_sad_size] |
449 | mov edi,[cache_ide1_pointer] |
605 | mov edi,[cache_ide1_pointer] |
450 | call .clear |
606 | call .clear |
451 | mov [cache_ide1_appl_search_start],eax |
607 | mov [cache_ide1_appl_search_start],eax |
452 | mov ecx,[cache_ide1_appl_sad_size] |
608 | mov ecx,[cache_ide1_appl_sad_size] |
453 | mov edi,[cache_ide1_data_pointer] |
609 | mov edi,[cache_ide1_data_pointer] |
454 | jmp .continue |
610 | jmp .continue |
455 | .ide2: |
611 | .ide2: |
456 | cmp [cdpos],3 |
612 | cmp [cdpos],3 |
457 | jne .ide3 |
613 | jne .ide3 |
458 | mov [cache_ide2_search_start],eax |
614 | mov [cache_ide2_search_start],eax |
459 | mov ecx,[cache_ide2_system_sad_size] |
615 | mov ecx,[cache_ide2_system_sad_size] |
460 | mov edi,[cache_ide2_pointer] |
616 | mov edi,[cache_ide2_pointer] |
461 | call .clear |
617 | call .clear |
462 | mov [cache_ide2_appl_search_start],eax |
618 | mov [cache_ide2_appl_search_start],eax |
463 | mov ecx,[cache_ide2_appl_sad_size] |
619 | mov ecx,[cache_ide2_appl_sad_size] |
464 | mov edi,[cache_ide2_data_pointer] |
620 | mov edi,[cache_ide2_data_pointer] |
465 | jmp .continue |
621 | jmp .continue |
466 | .ide3: |
622 | .ide3: |
467 | mov [cache_ide3_search_start],eax |
623 | mov [cache_ide3_search_start],eax |
468 | mov ecx,[cache_ide3_system_sad_size] |
624 | mov ecx,[cache_ide3_system_sad_size] |
469 | mov edi,[cache_ide3_pointer] |
625 | mov edi,[cache_ide3_pointer] |
470 | call .clear |
626 | call .clear |
471 | mov [cache_ide3_appl_search_start],eax |
627 | mov [cache_ide3_appl_search_start],eax |
472 | mov ecx,[cache_ide3_appl_sad_size] |
628 | mov ecx,[cache_ide3_appl_sad_size] |
473 | mov edi,[cache_ide3_data_pointer] |
629 | mov edi,[cache_ide3_data_pointer] |
474 | .continue: |
630 | .continue: |
475 | call .clear |
631 | call .clear |
476 | popa |
632 | popa |
477 | ret |
633 | ret |
478 | .clear: |
634 | .clear: |
479 | shl ecx,1 |
635 | shl ecx,1 |
480 | cld |
636 | cld |
481 | rep stosd |
637 | rep stosd |
482 | ret |
638 | ret |
483 | ;-------------------------------------------------------------------- |
639 | ;-------------------------------------------------------------------- |
484 | align 4 |
640 | align 4 |
485 | cd_calculate_cache: |
641 | cd_calculate_cache: |
486 | ; mov ecx,cache_max ; entries in cache |
642 | ; mov ecx,cache_max ; entries in cache |
487 | ; mov esi,HD_CACHE+8 |
643 | ; mov esi,HD_CACHE+8 |
488 | 644 | ||
489 | ; 1 - IDE0 ... 4 - IDE3 |
645 | ; 1 - IDE0 ... 4 - IDE3 |
490 | .ide0: |
646 | .ide0: |
491 | cmp [cdpos],1 |
647 | cmp [cdpos],1 |
492 | jne .ide1 |
648 | jne .ide1 |
493 | cmp [cd_appl_data],0 |
649 | cmp [cd_appl_data],0 |
494 | jne .ide0_appl_data |
650 | jne .ide0_appl_data |
495 | mov ecx,[cache_ide0_system_sad_size] |
651 | mov ecx,[cache_ide0_system_sad_size] |
496 | mov esi,[cache_ide0_pointer] |
652 | mov esi,[cache_ide0_pointer] |
497 | ret |
653 | ret |
498 | .ide0_appl_data: |
654 | .ide0_appl_data: |
499 | mov ecx,[cache_ide0_appl_sad_size] |
655 | mov ecx,[cache_ide0_appl_sad_size] |
500 | mov esi,[cache_ide0_data_pointer] |
656 | mov esi,[cache_ide0_data_pointer] |
501 | ret |
657 | ret |
502 | .ide1: |
658 | .ide1: |
503 | cmp [cdpos],2 |
659 | cmp [cdpos],2 |
504 | jne .ide2 |
660 | jne .ide2 |
505 | cmp [cd_appl_data],0 |
661 | cmp [cd_appl_data],0 |
506 | jne .ide1_appl_data |
662 | jne .ide1_appl_data |
507 | mov ecx,[cache_ide1_system_sad_size] |
663 | mov ecx,[cache_ide1_system_sad_size] |
508 | mov esi,[cache_ide1_pointer] |
664 | mov esi,[cache_ide1_pointer] |
509 | ret |
665 | ret |
510 | .ide1_appl_data: |
666 | .ide1_appl_data: |
511 | mov ecx,[cache_ide1_appl_sad_size] |
667 | mov ecx,[cache_ide1_appl_sad_size] |
512 | mov esi,[cache_ide1_data_pointer] |
668 | mov esi,[cache_ide1_data_pointer] |
513 | ret |
669 | ret |
514 | .ide2: |
670 | .ide2: |
515 | cmp [cdpos],3 |
671 | cmp [cdpos],3 |
516 | jne .ide3 |
672 | jne .ide3 |
517 | cmp [cd_appl_data],0 |
673 | cmp [cd_appl_data],0 |
518 | jne .ide2_appl_data |
674 | jne .ide2_appl_data |
519 | mov ecx,[cache_ide2_system_sad_size] |
675 | mov ecx,[cache_ide2_system_sad_size] |
520 | mov esi,[cache_ide2_pointer] |
676 | mov esi,[cache_ide2_pointer] |
521 | ret |
677 | ret |
522 | .ide2_appl_data: |
678 | .ide2_appl_data: |
523 | mov ecx,[cache_ide2_appl_sad_size] |
679 | mov ecx,[cache_ide2_appl_sad_size] |
524 | mov esi,[cache_ide2_data_pointer] |
680 | mov esi,[cache_ide2_data_pointer] |
525 | ret |
681 | ret |
526 | .ide3: |
682 | .ide3: |
527 | cmp [cd_appl_data],0 |
683 | cmp [cd_appl_data],0 |
528 | jne .ide3_appl_data |
684 | jne .ide3_appl_data |
529 | mov ecx,[cache_ide3_system_sad_size] |
685 | mov ecx,[cache_ide3_system_sad_size] |
530 | mov esi,[cache_ide3_pointer] |
686 | mov esi,[cache_ide3_pointer] |
531 | ret |
687 | ret |
532 | .ide3_appl_data: |
688 | .ide3_appl_data: |
533 | mov ecx,[cache_ide3_appl_sad_size] |
689 | mov ecx,[cache_ide3_appl_sad_size] |
534 | mov esi,[cache_ide3_data_pointer] |
690 | mov esi,[cache_ide3_data_pointer] |
535 | ret |
691 | ret |
536 | ;-------------------------------------------------------------------- |
692 | ;-------------------------------------------------------------------- |
537 | align 4 |
693 | align 4 |
538 | cd_calculate_cache_1: |
694 | cd_calculate_cache_1: |
539 | ; lea esi,[edi*8+HD_CACHE] |
695 | ; lea esi,[edi*8+HD_CACHE] |
540 | ; 1 - IDE0 ... 4 - IDE3 |
696 | ; 1 - IDE0 ... 4 - IDE3 |
541 | .ide0: |
697 | .ide0: |
542 | cmp [cdpos],1 |
698 | cmp [cdpos],1 |
543 | jne .ide1 |
699 | jne .ide1 |
544 | cmp [cd_appl_data],0 |
700 | cmp [cd_appl_data],0 |
545 | jne .ide0_appl_data |
701 | jne .ide0_appl_data |
546 | mov esi,[cache_ide0_pointer] |
702 | mov esi,[cache_ide0_pointer] |
547 | ret |
703 | ret |
548 | .ide0_appl_data: |
704 | .ide0_appl_data: |
549 | mov esi,[cache_ide0_data_pointer] |
705 | mov esi,[cache_ide0_data_pointer] |
550 | ret |
706 | ret |
551 | .ide1: |
707 | .ide1: |
552 | cmp [cdpos],2 |
708 | cmp [cdpos],2 |
553 | jne .ide2 |
709 | jne .ide2 |
554 | cmp [cd_appl_data],0 |
710 | cmp [cd_appl_data],0 |
555 | jne .ide1_appl_data |
711 | jne .ide1_appl_data |
556 | mov esi,[cache_ide1_pointer] |
712 | mov esi,[cache_ide1_pointer] |
557 | ret |
713 | ret |
558 | .ide1_appl_data: |
714 | .ide1_appl_data: |
559 | mov esi,[cache_ide1_data_pointer] |
715 | mov esi,[cache_ide1_data_pointer] |
560 | ret |
716 | ret |
561 | .ide2: |
717 | .ide2: |
562 | cmp [cdpos],3 |
718 | cmp [cdpos],3 |
563 | jne .ide3 |
719 | jne .ide3 |
564 | cmp [cd_appl_data],0 |
720 | cmp [cd_appl_data],0 |
565 | jne .ide2_appl_data |
721 | jne .ide2_appl_data |
566 | mov esi,[cache_ide2_pointer] |
722 | mov esi,[cache_ide2_pointer] |
567 | ret |
723 | ret |
568 | .ide2_appl_data: |
724 | .ide2_appl_data: |
569 | mov esi,[cache_ide2_data_pointer] |
725 | mov esi,[cache_ide2_data_pointer] |
570 | ret |
726 | ret |
571 | .ide3: |
727 | .ide3: |
572 | cmp [cd_appl_data],0 |
728 | cmp [cd_appl_data],0 |
573 | jne .ide3_appl_data |
729 | jne .ide3_appl_data |
574 | mov esi,[cache_ide3_pointer] |
730 | mov esi,[cache_ide3_pointer] |
575 | ret |
731 | ret |
576 | .ide3_appl_data: |
732 | .ide3_appl_data: |
577 | mov esi,[cache_ide3_data_pointer] |
733 | mov esi,[cache_ide3_data_pointer] |
578 | ret |
734 | ret |
579 | ;-------------------------------------------------------------------- |
735 | ;-------------------------------------------------------------------- |
580 | align 4 |
736 | align 4 |
581 | cd_calculate_cache_2: |
737 | cd_calculate_cache_2: |
582 | ; add esi,HD_CACHE+65536 |
738 | ; add esi,HD_CACHE+65536 |
583 | ; 1 - IDE0 ... 4 - IDE3 |
739 | ; 1 - IDE0 ... 4 - IDE3 |
584 | .ide0: |
740 | .ide0: |
585 | cmp [cdpos],1 |
741 | cmp [cdpos],1 |
586 | jne .ide1 |
742 | jne .ide1 |
587 | cmp [cd_appl_data],0 |
743 | cmp [cd_appl_data],0 |
588 | jne .ide0_appl_data |
744 | jne .ide0_appl_data |
589 | mov eax,[cache_ide0_system_data] |
745 | mov eax,[cache_ide0_system_data] |
590 | ret |
746 | ret |
591 | .ide0_appl_data: |
747 | .ide0_appl_data: |
592 | mov eax,[cache_ide0_appl_data] |
748 | mov eax,[cache_ide0_appl_data] |
593 | ret |
749 | ret |
594 | .ide1: |
750 | .ide1: |
595 | cmp [cdpos],2 |
751 | cmp [cdpos],2 |
596 | jne .ide2 |
752 | jne .ide2 |
597 | cmp [cd_appl_data],0 |
753 | cmp [cd_appl_data],0 |
598 | jne .ide1_appl_data |
754 | jne .ide1_appl_data |
599 | mov eax,[cache_ide1_system_data] |
755 | mov eax,[cache_ide1_system_data] |
600 | ret |
756 | ret |
601 | .ide1_appl_data: |
757 | .ide1_appl_data: |
602 | mov eax,[cache_ide1_appl_data] |
758 | mov eax,[cache_ide1_appl_data] |
603 | ret |
759 | ret |
604 | .ide2: |
760 | .ide2: |
605 | cmp [cdpos],3 |
761 | cmp [cdpos],3 |
606 | jne .ide3 |
762 | jne .ide3 |
607 | cmp [cd_appl_data],0 |
763 | cmp [cd_appl_data],0 |
608 | jne .ide2_appl_data |
764 | jne .ide2_appl_data |
609 | mov eax,[cache_ide2_system_data] |
765 | mov eax,[cache_ide2_system_data] |
610 | ret |
766 | ret |
611 | .ide2_appl_data: |
767 | .ide2_appl_data: |
612 | mov eax,[cache_ide2_appl_data] |
768 | mov eax,[cache_ide2_appl_data] |
613 | ret |
769 | ret |
614 | .ide3: |
770 | .ide3: |
615 | cmp [cd_appl_data],0 |
771 | cmp [cd_appl_data],0 |
616 | jne .ide3_appl_data |
772 | jne .ide3_appl_data |
617 | mov eax,[cache_ide3_system_data] |
773 | mov eax,[cache_ide3_system_data] |
618 | ret |
774 | ret |
619 | .ide3_appl_data: |
775 | .ide3_appl_data: |
620 | mov eax,[cache_ide3_appl_data] |
776 | mov eax,[cache_ide3_appl_data] |
621 | ret |
777 | ret |
622 | ;-------------------------------------------------------------------- |
778 | ;-------------------------------------------------------------------- |
623 | align 4 |
779 | align 4 |
624 | cd_calculate_cache_3: |
780 | cd_calculate_cache_3: |
625 | ; mov ecx,cache_max*10/100 |
781 | ; mov ecx,cache_max*10/100 |
626 | ; mov edi,[cache_search_start] |
782 | ; mov edi,[cache_search_start] |
627 | 783 | ||
628 | ; 1 - IDE0 ... 4 - IDE3 |
784 | ; 1 - IDE0 ... 4 - IDE3 |
629 | .ide0: |
785 | .ide0: |
630 | cmp [cdpos],1 |
786 | cmp [cdpos],1 |
631 | jne .ide1 |
787 | jne .ide1 |
632 | cmp [cd_appl_data],0 |
788 | cmp [cd_appl_data],0 |
633 | jne .ide0_appl_data |
789 | jne .ide0_appl_data |
634 | mov edi,[cache_ide0_search_start] |
790 | mov edi,[cache_ide0_search_start] |
635 | ret |
791 | ret |
636 | .ide0_appl_data: |
792 | .ide0_appl_data: |
637 | mov edi,[cache_ide0_appl_search_start] |
793 | mov edi,[cache_ide0_appl_search_start] |
638 | ret |
794 | ret |
639 | .ide1: |
795 | .ide1: |
640 | cmp [cdpos],2 |
796 | cmp [cdpos],2 |
641 | jne .ide2 |
797 | jne .ide2 |
642 | cmp [cd_appl_data],0 |
798 | cmp [cd_appl_data],0 |
643 | jne .ide1_appl_data |
799 | jne .ide1_appl_data |
644 | mov edi,[cache_ide1_search_start] |
800 | mov edi,[cache_ide1_search_start] |
645 | ret |
801 | ret |
646 | .ide1_appl_data: |
802 | .ide1_appl_data: |
647 | mov edi,[cache_ide1_appl_search_start] |
803 | mov edi,[cache_ide1_appl_search_start] |
648 | ret |
804 | ret |
649 | .ide2: |
805 | .ide2: |
650 | cmp [cdpos],3 |
806 | cmp [cdpos],3 |
651 | jne .ide3 |
807 | jne .ide3 |
652 | cmp [cd_appl_data],0 |
808 | cmp [cd_appl_data],0 |
653 | jne .ide2_appl_data |
809 | jne .ide2_appl_data |
654 | mov edi,[cache_ide2_search_start] |
810 | mov edi,[cache_ide2_search_start] |
655 | ret |
811 | ret |
656 | .ide2_appl_data: |
812 | .ide2_appl_data: |
657 | mov edi,[cache_ide2_appl_search_start] |
813 | mov edi,[cache_ide2_appl_search_start] |
658 | ret |
814 | ret |
659 | .ide3: |
815 | .ide3: |
660 | cmp [cd_appl_data],0 |
816 | cmp [cd_appl_data],0 |
661 | jne .ide3_appl_data |
817 | jne .ide3_appl_data |
662 | mov edi,[cache_ide3_search_start] |
818 | mov edi,[cache_ide3_search_start] |
663 | ret |
819 | ret |
664 | .ide3_appl_data: |
820 | .ide3_appl_data: |
665 | mov edi,[cache_ide3_appl_search_start] |
821 | mov edi,[cache_ide3_appl_search_start] |
666 | ret |
822 | ret |
667 | ;-------------------------------------------------------------------- |
823 | ;-------------------------------------------------------------------- |
668 | align 4 |
824 | align 4 |
669 | cd_calculate_cache_4: |
825 | cd_calculate_cache_4: |
670 | ; cmp edi,cache_max |
826 | ; cmp edi,cache_max |
671 | ; 1 - IDE0 ... 4 - IDE3 |
827 | ; 1 - IDE0 ... 4 - IDE3 |
672 | .ide0: |
828 | .ide0: |
673 | cmp [cdpos],1 |
829 | cmp [cdpos],1 |
674 | jne .ide1 |
830 | jne .ide1 |
675 | cmp [cd_appl_data],0 |
831 | cmp [cd_appl_data],0 |
676 | jne .ide0_appl_data |
832 | jne .ide0_appl_data |
677 | cmp edi,[cache_ide0_system_sad_size] |
833 | cmp edi,[cache_ide0_system_sad_size] |
678 | ret |
834 | ret |
679 | .ide0_appl_data: |
835 | .ide0_appl_data: |
680 | cmp edi,[cache_ide0_appl_sad_size] |
836 | cmp edi,[cache_ide0_appl_sad_size] |
681 | ret |
837 | ret |
682 | .ide1: |
838 | .ide1: |
683 | cmp [cdpos],2 |
839 | cmp [cdpos],2 |
684 | jne .ide2 |
840 | jne .ide2 |
685 | cmp [cd_appl_data],0 |
841 | cmp [cd_appl_data],0 |
686 | jne .ide1_appl_data |
842 | jne .ide1_appl_data |
687 | cmp edi,[cache_ide1_system_sad_size] |
843 | cmp edi,[cache_ide1_system_sad_size] |
688 | ret |
844 | ret |
689 | .ide1_appl_data: |
845 | .ide1_appl_data: |
690 | cmp edi,[cache_ide1_appl_sad_size] |
846 | cmp edi,[cache_ide1_appl_sad_size] |
691 | ret |
847 | ret |
692 | .ide2: |
848 | .ide2: |
693 | cmp [cdpos],3 |
849 | cmp [cdpos],3 |
694 | jne .ide3 |
850 | jne .ide3 |
695 | cmp [cd_appl_data],0 |
851 | cmp [cd_appl_data],0 |
696 | jne .ide2_appl_data |
852 | jne .ide2_appl_data |
697 | cmp edi,[cache_ide2_system_sad_size] |
853 | cmp edi,[cache_ide2_system_sad_size] |
698 | ret |
854 | ret |
699 | .ide2_appl_data: |
855 | .ide2_appl_data: |
700 | cmp edi,[cache_ide2_appl_sad_size] |
856 | cmp edi,[cache_ide2_appl_sad_size] |
701 | ret |
857 | ret |
702 | .ide3: |
858 | .ide3: |
703 | cmp [cd_appl_data],0 |
859 | cmp [cd_appl_data],0 |
704 | jne .ide3_appl_data |
860 | jne .ide3_appl_data |
705 | cmp edi,[cache_ide3_system_sad_size] |
861 | cmp edi,[cache_ide3_system_sad_size] |
706 | ret |
862 | ret |
707 | .ide3_appl_data: |
863 | .ide3_appl_data: |
708 | cmp edi,[cache_ide3_appl_sad_size] |
864 | cmp edi,[cache_ide3_appl_sad_size] |
709 | ret |
865 | ret |
710 | ;-------------------------------------------------------------------- |
866 | ;-------------------------------------------------------------------- |
711 | align 4 |
867 | align 4 |
712 | cd_calculate_cache_5: |
868 | cd_calculate_cache_5: |
713 | ; mov [cache_search_start],edi |
869 | ; mov [cache_search_start],edi |
714 | ; 1 - IDE0 ... 4 - IDE3 |
870 | ; 1 - IDE0 ... 4 - IDE3 |
715 | .ide0: |
871 | .ide0: |
716 | cmp [cdpos],1 |
872 | cmp [cdpos],1 |
717 | jne .ide1 |
873 | jne .ide1 |
718 | cmp [cd_appl_data],0 |
874 | cmp [cd_appl_data],0 |
719 | jne .ide0_appl_data |
875 | jne .ide0_appl_data |
720 | mov [cache_ide0_search_start],edi |
876 | mov [cache_ide0_search_start],edi |
721 | ret |
877 | ret |
722 | .ide0_appl_data: |
878 | .ide0_appl_data: |
723 | mov [cache_ide0_appl_search_start],edi |
879 | mov [cache_ide0_appl_search_start],edi |
724 | ret |
880 | ret |
725 | .ide1: |
881 | .ide1: |
726 | cmp [cdpos],2 |
882 | cmp [cdpos],2 |
727 | jne .ide2 |
883 | jne .ide2 |
728 | cmp [cd_appl_data],0 |
884 | cmp [cd_appl_data],0 |
729 | jne .ide1_appl_data |
885 | jne .ide1_appl_data |
730 | mov [cache_ide1_search_start],edi |
886 | mov [cache_ide1_search_start],edi |
731 | ret |
887 | ret |
732 | .ide1_appl_data: |
888 | .ide1_appl_data: |
733 | mov [cache_ide1_appl_search_start],edi |
889 | mov [cache_ide1_appl_search_start],edi |
734 | ret |
890 | ret |
735 | .ide2: |
891 | .ide2: |
736 | cmp [cdpos],3 |
892 | cmp [cdpos],3 |
737 | jne .ide3 |
893 | jne .ide3 |
738 | cmp [cd_appl_data],0 |
894 | cmp [cd_appl_data],0 |
739 | jne .ide2_appl_data |
895 | jne .ide2_appl_data |
740 | mov [cache_ide2_search_start],edi |
896 | mov [cache_ide2_search_start],edi |
741 | ret |
897 | ret |
742 | .ide2_appl_data: |
898 | .ide2_appl_data: |
743 | mov [cache_ide2_appl_search_start],edi |
899 | mov [cache_ide2_appl_search_start],edi |
744 | ret |
900 | ret |
745 | .ide3: |
901 | .ide3: |
746 | cmp [cd_appl_data],0 |
902 | cmp [cd_appl_data],0 |
747 | jne .ide3_appl_data |
903 | jne .ide3_appl_data |
748 | mov [cache_ide3_search_start],edi |
904 | mov [cache_ide3_search_start],edi |
749 | ret |
905 | ret |
750 | .ide3_appl_data: |
906 | .ide3_appl_data: |
751 | mov [cache_ide3_appl_search_start],edi |
907 | mov [cache_ide3_appl_search_start],edi |
752 | ret |
908 | ret |
753 | ;-------------------------------------------------------------------- |
909 | ;-------------------------------------------------------------------- |
754 | ;align 4 |
910 | ;align 4 |
755 | ;calculate_linear_to_real: |
911 | ;calculate_linear_to_real: |
756 | ; shr eax, 12 |
912 | ; shr eax, 12 |
757 | ; mov eax, [page_tabs+eax*4] |
913 | ; mov eax, [page_tabs+eax*4] |
758 | ; and eax, 0xFFFFF000 |
914 | ; and eax, 0xFFFFF000 |
759 | ; ret |
915 | ; ret |