Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
164 serge 1
 
2
3
 
4
proc mem_test
5
           mov eax, cr0
6
           or eax, 0x60000000   ;disable caching
7
           mov cr0, eax
8
           wbinvd               ;invalidate cache
9
10
 
11
           mov ebx, 'TEST'
12
@@:
13
           add edi, 0x400000
14
           xchg ebx, dword [edi]
15
           cmp dword [edi], 'TEST'
16
           xchg ebx, dword [edi]
17
           je @b
18
19
 
20
           mov cr0, eax
21
           mov eax, edi
22
           ret
23
endp
24
25
 
26
proc init_memEx
27
           xor eax, eax
28
           mov edi, sys_pgdir
29
           mov ecx, 2048
30
           rep stosd
31
32
 
33
           jnc .no_PSE
34
35
 
36
           or ebx, CR4_PSE
37
           mov eax, PG_LARGE+PG_SW
38
           bt [cpu_caps], CAPS_PGE
39
           jnc @F
40
           or eax, PG_GLOBAL
41
           or ebx, CR4_PGE
42
@@:
43
           mov dword [sys_pgdir], eax
44
           add eax, 0x00400000
45
           mov dword [sys_pgdir+4], eax
46
           add eax, 0x00400000
47
           mov dword [sys_pgdir+8], eax
48
           add eax, 0x00400000
49
           mov dword [sys_pgdir+12], eax
50
51
 
52
           mov dword [sys_master_tab+0x600], sys_master_tab+PG_SW
53
54
 
55
56
 
57
           sub ecx, 4
58
           mov eax, tmp_page_tab+PG_SW
59
           mov edi, sys_pgdir+16
60
           mov esi, sys_master_tab+16
61
62
 
63
.no_PSE:
64
           mov eax, PG_SW
65
           mov esi, tmp_page_tab
66
           mov ecx, 4096/4      ;0x0 - 0x00FFFFFF
67
.map_low:
68
           mov [esi], eax
69
           add eax, 0x1000
70
           mov [esi+4], eax
71
           add eax, 0x1000
72
           mov [esi+8], eax
73
           add eax, 0x1000
74
           mov [esi+12], eax
75
           add eax, 0x1000
76
           add esi, 16
77
           dec ecx
78
           jnz .map_low            ;ядро
79
80
 
81
           mov eax, tmp_page_tab+PG_SW
82
           mov edi, sys_pgdir
83
           mov esi, sys_master_tab
84
85
 
86
87
 
88
           mov [esi], eax
89
           add eax, 0x1000
90
           add edi, 4
91
           add esi, 4
92
           dec ecx
93
           jnz .map_kernel_tabs
94
95
 
96
           bt [cpu_caps], CAPS_PSE
97
           jc @F
98
           add edi, 4096*4      ;skip low kernel memory
99
@@:
100
           mov ecx, [pg_data.kernel_tables]
101
           sub ecx, 4
102
           shl ecx, 10
103
           xor eax, eax
104
           cld
105
           rep stosd
106
107
 
108
           mov dword [sys_master_tab+0x600], sys_master_tab+PG_SW
109
           ret
110
endp
111
112
 
113
;proc init_mem
114
;
115
;           xor eax, eax
116
;           mov edi, sys_pgdir
117
;           mov ecx, 2048
118
;           rep stosd
119
;
120
;           bt [cpu_caps], CAPS_PSE
121
;           jc .use_PSE
122
;
123
;           mov eax, PG_SW
124
;           mov esi, tmp_page_tab
125
;           mov ecx, 4096/4      ;0x0 - 0x00FFFFFF
126
;
127
;.map_low:
128
;           mov [esi], eax
129
;           add eax, 0x1000
130
;           mov [esi+4], eax
131
;           add eax, 0x1000
132
;           mov [esi+8], eax
133
;           add eax, 0x1000
134
;           mov [esi+12], eax
135
;           add eax, 0x1000
136
;           add esi, 16
137
;           dec ecx
138
;           jnz .map_low            ;ядро
139
140
 
141
;           mov ecx, 4
142
;           xor ebx, ebx
143
144
 
145
;           mov [sys_pgdir+ebx], eax
146
;           mov [sys_master_tab+ebx], eax
147
;           add eax, 0x1000
148
;           add ebx, 4
149
;           dec ecx
150
;           jnz .map_page_tables
151
152
 
153
;           mov dword [sys_master_tab+0x600], sys_master_tab+PG_SW
154
155
 
156
157
 
158
;           mov ebx, cr4
159
;           or ebx, CR4_PSE
160
;           mov eax, PG_LARGE+PG_SW
161
;           bt [cpu_caps], CAPS_PGE
162
;           jnc @F
163
;           or eax, PG_GLOBAL
164
;           or ebx, CR4_PGE
165
;@@:
166
;           mov dword [sys_pgdir], eax
167
;           add eax, 0x00400000
168
;           mov dword [sys_pgdir+4], eax
169
;           add eax, 0x00400000
170
;           mov dword [sys_pgdir+8], eax
171
;           add eax, 0x00400000
172
;           mov dword [sys_pgdir+12], eax
173
;
174
;           mov dword [sys_pgdir+0x600], sys_master_tab+PG_SW
175
;           mov dword [sys_master_tab+0x600], sys_master_tab+PG_SW
176
177
 
178
;           ret
179
;endp
180
181
 
182
proc init_page_map
183
           mov edi, sys_pgmap
184
           mov ecx, 512/4
185
           xor eax,eax
186
           cld
187
           rep stosd
188
189
 
190
           mov ecx, [pg_data.pagemap_size]
191
           sub ecx, 512
192
           shr ecx, 2
193
           rep stosd
194
195
 
196
           mov edx, [pg_data.pages_count]
197
           mov ecx, [pg_data.kernel_tables]
198
           bt [cpu_caps], CAPS_PSE
199
           jnc @f
200
           sub ecx, 4
201
@@:
202
           sub edx, 4096
203
           sub edx, ecx
204
           mov [pg_data.pages_free], edx
205
206
 
207
           mov ebx, ecx
208
           shr ecx, 5
209
           rep stosd
210
211
 
212
           mov ecx, ebx
213
           and ecx, 31
214
           shl eax, cl
215
           stosd
216
217
 
218
           mov ebx, sys_pgmap
219
           add ebx, [pg_data.pagemap_size]
220
           mov [page_end], ebx
221
222
 
223
224
 
225
endp
226
227
 
228
;proc init_pg_mem
229
;
230
;           mov edi, sys_pgmap
231
;           mov ecx, 512/4
232
;           xor eax,eax
233
;           cld
234
;           rep stosd
235
;
236
;           not eax
237
;           mov ecx, [pg_data.pagemap_size]
238
;           sub ecx, 512
239
;           shr ecx, 2
240
;           rep stosd
241
;
242
;           shl eax, PAGES_USED
243
;           mov [sys_pgmap+512], eax
244
;
245
;           mov [page_start], sys_pgmap+512
246
;           mov ebx, sys_pgmap
247
;           add ebx, [pg_data.pagemap_size]
248
;           mov [page_end], ebx
249
;           mov eax, [pg_data.pages_count]
250
;           sub eax, 4096+PAGES_USED
251
;           mov [pg_data.pages_free], eax
252
;
253
;           mov [pg_data.pages_faults], 0
254
;
255
;           mov edi, OS_BASE+0x01000000
256
;           mov esi, [pg_data.kernel_tables]
257
;           sub esi, 4
258
;           ja @f
259
;           mov esi, 1
260
;@@:
261
;           call alloc_page
262
;           stdcall map_page_table, sys_pgdir, edi, eax
263
;           add edi, 0x00400000
264
;           dec esi
265
;           jnz @B
266
;
267
;           mov ecx, [pg_data.kernel_tables]
268
;           sub ecx, 4
269
;           shl ecx, 10
270
;           mov edi, OS_BASE+0x01000000
271
;           shr edi, 10
272
;           add edi, pages_tab
273
;           xor eax, eax
274
;           cld
275
;           rep stosd
276
;
277
;           mov eax, cr3
278
;           mov cr3, eax
279
;
280