Rev 849 | Rev 854 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 849 | Rev 851 | ||
---|---|---|---|
Line 56... | Line 56... | ||
56 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
56 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
57 | 57 | ||
Line 58... | Line 58... | ||
58 | include 'macros.inc' |
58 | include 'macros.inc' |
Line 59... | Line 59... | ||
59 | 59 | ||
Line 60... | Line 60... | ||
60 | $Revision: 849 $ |
60 | $Revision: 851 $ |
Line 61... | Line 61... | ||
61 | 61 | ||
Line 72... | Line 72... | ||
72 | max_processes equ 255 |
72 | max_processes equ 255 |
73 | tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4 |
73 | tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4 |
74 | 74 | ||
Line 75... | Line 75... | ||
75 | 75 | ||
76 | os_stack equ (os_data_l-gdts) ; GDTs |
76 | os_stack equ (os_data_l-_gdts) ; GDTs |
77 | os_code equ (os_code_l-gdts) |
77 | os_code equ (os_code_l-_gdts) |
78 | graph_data equ (3+graph_data_l-gdts) |
78 | graph_data equ (3+graph_data_l-_gdts) |
79 | tss0 equ (tss0_l-gdts) |
79 | tss0 equ (tss0_l-_gdts) |
80 | app_code equ (3+app_code_l-gdts) |
80 | app_code equ (3+app_code_l-_gdts) |
81 | app_data equ (3+app_data_l-gdts) |
81 | app_data equ (3+app_data_l-_gdts) |
82 | pci_code_sel equ (pci_code_32-gdts) |
82 | pci_code_sel equ (pci_code_32-_gdts) |
Line 83... | Line 83... | ||
83 | pci_data_sel equ (pci_data_32-gdts) |
83 | pci_data_sel equ (pci_data_32-_gdts) |
84 | 84 | ||
85 | 85 | ||
Line 105... | Line 105... | ||
105 | ;; - Pci32.inc PCI functions |
105 | ;; - Pci32.inc PCI functions |
106 | ;; |
106 | ;; |
107 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
107 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
108 | 108 | ||
Line 109... | Line -... | ||
109 | section '.flat' code readable align 16 |
- | |
110 | - | ||
111 | public __start |
- | |
112 | - | ||
113 | extrn __edata |
- | |
114 | - | ||
115 | use32 |
- | |
116 | org 0x001001E0 |
- | |
117 | - | ||
118 | align 4 |
- | |
119 | - | ||
120 | mboot: |
- | |
121 | dd 0x1BADB002 |
- | |
122 | dd 0x00010003 |
- | |
123 | dd -(0x1BADB002 + 0x00010003) |
- | |
124 | dd mboot |
- | |
125 | dd 0x100000 |
- | |
126 | dd __edata; ;__edata - OS_BASE |
- | |
127 | dd LAST_PAGE |
- | |
128 | dd __start |
- | |
129 | - | ||
130 | align 16 |
- | |
131 | __start: |
- | |
132 | cld |
- | |
133 | - | ||
134 | mov esp, __os_stack-OS_BASE |
- | |
135 | push 0 |
- | |
136 | popf |
- | |
137 | - | ||
138 | cmp eax, 0x2BADB002 |
- | |
139 | mov ecx, sz_invboot |
- | |
140 | jne .fault |
- | |
141 | - | ||
142 | bt dword [ebx], 3 |
- | |
143 | mov ecx, sz_nomods |
- | |
144 | jnc .fault |
- | |
145 | - | ||
146 | bt dword [ebx], 6 |
- | |
147 | mov ecx, sz_nommap |
- | |
148 | jnc .fault |
- | |
149 | - | ||
150 | mov [_boot_mbi-OS_BASE], ebx |
- | |
151 | - | ||
152 | xor eax, eax |
- | |
153 | cpuid |
- | |
154 | cmp eax, 0 |
- | |
155 | mov ecx, sz_nopse |
- | |
156 | jbe .fault |
- | |
157 | - | ||
158 | mov eax, 1 |
- | |
159 | cpuid |
- | |
160 | bt edx, 3 |
- | |
161 | mov ecx, sz_nopse |
- | |
162 | jnc .fault |
- | |
163 | - | ||
164 | ; ENABLE PAGING |
- | |
165 | - | ||
166 | mov ecx, 32 |
- | |
167 | mov edi, _sys_pdbr+(OS_BASE shr 20)-OS_BASE |
- | |
168 | mov eax, PG_LARGE+PG_SW |
- | |
169 | @@: |
- | |
170 | stosd |
- | |
171 | add eax, 4*1024*1024 |
- | |
172 | loop @B |
- | |
173 | - | ||
174 | mov dword [_sys_pdbr-OS_BASE], PG_LARGE+PG_SW |
- | |
175 | mov dword [_sys_pdbr-OS_BASE+4], PG_LARGE+PG_SW+4*1024*1024 |
- | |
176 | mov dword [_sys_pdbr-OS_BASE+(page_tabs shr 20)], _sys_pdbr+PG_SW-OS_BASE |
- | |
177 | - | ||
178 | mov ebx, cr4 |
- | |
179 | or ebx, CR4_PSE |
- | |
180 | and ebx, not CR4_PAE |
- | |
181 | mov cr4, ebx |
- | |
182 | - | ||
183 | mov eax, _sys_pdbr-OS_BASE |
- | |
184 | mov ebx, cr0 |
- | |
185 | or ebx,CR0_PG+CR0_WP |
- | |
186 | - | ||
187 | mov cr3, eax |
- | |
188 | mov cr0, ebx |
- | |
189 | - | ||
190 | mov ebx, [_boot_mbi] |
- | |
191 | - | ||
192 | mov edx, [ebx+20] |
- | |
193 | mov esi, [ebx+24] |
- | |
194 | mov ecx, LAST_PAGE |
- | |
195 | test edx, edx |
- | |
196 | jz .no_mods |
- | |
197 | .scan_mod: |
- | |
198 | mov ecx, [esi+4] |
- | |
199 | add esi, 16 |
- | |
200 | dec edx |
- | |
201 | jnz .scan_mod |
- | |
202 | - | ||
203 | .no_mods: |
- | |
204 | add ecx, 4095 |
- | |
205 | and ecx, not 4095 |
- | |
206 | - | ||
207 | lgdt [gdts] |
- | |
208 | jmp pword os_code:high_code |
- | |
209 | - | ||
Line 210... | Line -... | ||
210 | - | ||
211 | .fault: |
109 | |
212 | ; push ecx |
- | |
213 | ; call _lcls |
- | |
214 | ; call __bprintf |
- | |
215 | _hlt: |
110 | public __os_stack |
216 | hlt |
111 | public _boot_mbi |
217 | jmp _hlt |
- | |
218 | - | ||
219 | sz_invboot db 'Invalid multiboot loader magic value',0x0A |
- | |
220 | db 'Halted',0 |
- | |
221 | - | ||
222 | sz_nomods db 'No modules loaded',0x0A |
- | |
223 | db 'Halted',0 |
- | |
224 | - | ||
225 | sz_nommap db 'No memory table', 0x0A |
- | |
226 | db 'Halted',0 |
- | |
227 | - | ||
228 | sz_nopse db 'Page size extensions not supported',0x0A |
- | |
229 | db 'Halted',0 |
- | |
230 | - | ||
231 | org $-0x100000 |
- | |
232 | 112 | public _sys_pdbr |
|
233 | align 4 |
- | |
234 | 113 | public _gdts |
|
235 | _enter_bootscreen: |
- | |
236 | - | ||
237 | use16 |
- | |
238 | mov eax, cr0 |
- | |
239 | and eax, not 0x80000001 |
- | |
240 | mov cr0, eax |
- | |
241 | jmp far 0x1000:start_of_code |
- | |
242 | - | ||
Line 243... | Line -... | ||
243 | version db 'Kolibri OS version 0.7.1.0 ',13,10,13,10,0 |
- | |
244 | 114 | public _high_code |
|
Line 245... | Line -... | ||
245 | include "boot/bootstr.inc" ; language-independent boot messages |
- | |
246 | include "boot/preboot.inc" |
- | |
247 | 115 | ||
248 | if lang eq en |
- | |
249 | include "boot/booteng.inc" ; english system boot messages |
- | |
250 | else if lang eq ru |
116 | public __setvars |
251 | include "boot/bootru.inc" ; russian system boot messages |
- | |
252 | include "boot/ru.inc" ; Russian font |
- | |
253 | else if lang eq et |
- | |
254 | include "boot/bootet.inc" ; estonian system boot messages |
- | |
255 | include "boot/et.inc" ; Estonian font |
- | |
Line 256... | Line 117... | ||
256 | else |
117 | |
Line 257... | Line -... | ||
257 | include "boot/bootge.inc" ; german system boot messages |
- | |
258 | end if |
- | |
259 | 118 | extrn _enter_bootscreen |
|
260 | include "data16.inc" |
- | |
261 | - | ||
262 | include "boot/bootcode.inc" ; 16 bit system boot code |
- | |
263 | include "bus/pci/pci16.inc" |
- | |
Line 264... | Line -... | ||
264 | include "detect/biosdisk.inc" |
- | |
265 | - | ||
266 | ;include "boot/shutdown.inc" ; shutdown or restart |
119 | extrn _leave_bootscreen |
Line 267... | Line 120... | ||
267 | 120 | ||
Line 268... | Line -... | ||
268 | cli |
- | |
Line 269... | Line 121... | ||
269 | 121 | extrn _bx_from_load |
|
270 | mov eax, cr0 |
- | |
Line 271... | Line 122... | ||
271 | or eax, 0x80000001 |
122 | |
Line 272... | Line 123... | ||
272 | mov cr0, eax |
123 | section '.flat' code readable align 16 |
Line 339... | Line 190... | ||
339 | __DEBUG__ fix 1 |
190 | __DEBUG__ fix 1 |
340 | __DEBUG_LEVEL__ fix 1 |
191 | __DEBUG_LEVEL__ fix 1 |
Line 341... | Line -... | ||
341 | - | ||
342 | - | ||
343 | org OS_BASE+$ |
192 | |
344 | 193 | ||
345 | MEM_WB equ 6 ;write-back memory |
194 | MEM_WB equ 6 ;write-back memory |
Line 451... | Line 300... | ||
451 | ret |
300 | ret |
452 | endp |
301 | endp |
453 | 302 | ||
Line 454... | Line 303... | ||
454 | align 4 |
303 | align 4 |
455 | high_code: |
304 | _high_code: |
456 | mov ax,os_stack |
305 | mov ax,os_stack |
457 | mov dx,app_data |
306 | mov dx,app_data |
458 | mov ss,ax |
307 | mov ss,ax |
459 | mov esp, __os_stack |
308 | mov esp, __os_stack |
Line 460... | Line 309... | ||
460 | 309 | ||
461 | mov ds, dx |
310 | mov ds, dx |
462 | mov es, dx |
311 | mov es, dx |
463 | mov fs, dx |
312 | mov fs, dx |
Line 464... | Line 313... | ||
464 | mov gs, dx |
313 | mov gs, dx |
465 | 314 | ||
Line 466... | Line -... | ||
466 | push ecx |
- | |
Line 467... | Line 315... | ||
467 | push ebx |
315 | ; push ecx |
468 | 316 | ; push ebx |
|
Line 469... | Line 317... | ||
469 | ; mov dword [sys_pgdir-OS_BASE+(page_tabs shr 20)], sys_pgdir+PG_SW-OS_BASE |
317 | |
Line 470... | Line 318... | ||
470 | 318 | ||
471 | ; bt [cpu_caps], CAPS_PGE |
319 | ; bt [cpu_caps], CAPS_PGE |
472 | ; jnc @F |
320 | ; jnc @F |
473 | 321 | ||
474 | ; or dword [sys_pgdir-OS_BASE+(OS_BASE shr 20)], PG_GLOBAL |
- | |
475 | - | ||
476 | ; mov ebx, cr4 |
- | |
477 | ; or ebx, CR4_PGE |
- | |
478 | ; mov cr4, ebx |
322 | ; or dword [sys_pgdir-OS_BASE+(OS_BASE shr 20)], PG_GLOBAL |
479 | @@: |
323 | |
Line 480... | Line 324... | ||
480 | ; xor eax, eax |
324 | ; mov ebx, cr4 |
481 | ; mov dword [sys_pgdir], eax |
325 | ; or ebx, CR4_PGE |
Line 526... | Line 370... | ||
526 | 370 | ||
Line 527... | Line 371... | ||
527 | call _init_mm |
371 | call _init_mm |
528 | mov [pg_data.pg_mutex], 0 |
372 | mov [pg_data.pg_mutex], 0 |
Line 529... | Line 373... | ||
529 | 373 | ||
530 | mov esi, 0x100000 |
374 | mov esi, _enter_bootscreen |
- | 375 | mov ecx, _leave_bootscreen |
|
531 | mov ecx, (_leave_bootscreen-0x100000)/4 |
376 | shr ecx, 2 |
532 | mov edi, 0x10000 |
377 | mov edi, BOOT_BASE |
533 | cld |
378 | cld |
Line 534... | Line 379... | ||
534 | rep movsd |
379 | rep movsd |
Line 535... | Line 380... | ||
535 | 380 | ||
536 | jmp far 0x60:_enter_bootscreen; |
381 | jmp far 0x60:0x00000; |
537 | 382 | ||
538 | align 4 |
383 | align 4 |
Line 587... | Line 432... | ||
587 | shr edx, 16 |
432 | shr edx, 16 |
588 | mov [dword apm_data_16 + 4], dl |
433 | mov [dword apm_data_16 + 4], dl |
589 | 434 | ||
Line 590... | Line 435... | ||
590 | mov dword[apm_entry], ebx |
435 | mov dword[apm_entry], ebx |
591 | mov word [apm_entry + 4], apm_code_32 - gdts |
436 | mov word [apm_entry + 4], apm_code_32 - _gdts |
Line 592... | Line 437... | ||
592 | 437 | ||
593 | mov eax, [BOOT_VAR + 0x9044] ; version & flags |
438 | mov eax, [BOOT_VAR + 0x9044] ; version & flags |
594 | mov [apm_vf], eax |
439 | mov [apm_vf], eax |
595 | ; ----------------------------------------- |
440 | ; ----------------------------------------- |
Line 802... | Line 647... | ||
802 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
647 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
803 | include 'detect/disks.inc' |
648 | include 'detect/disks.inc' |
804 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
649 | ;!!!!!!!!!!!!!!!!!!!!!!!!!! |
Line -... | Line 650... | ||
- | 650 | ||
- | 651 | xchg bx, bx |
|
805 | 652 | ||
Line 806... | Line 653... | ||
806 | call Parser_params |
653 | call Parser_params |
Line 807... | Line 654... | ||
807 | 654 |