Subversion Repositories Kolibri OS

Rev

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