Rev 837 | Rev 840 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 837 | Rev 839 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 837 $ |
8 | $Revision: 839 $ |
9 | 9 | ||
Line 319... | Line 319... | ||
319 | endl |
319 | endl |
Line 320... | Line 320... | ||
320 | 320 | ||
321 | cmp dword [LFBAddress], -1 |
321 | cmp dword [LFBAddress], -1 |
322 | jne @f |
322 | jne @f |
323 | mov [BOOT_VAR+0x901c],byte 2 |
323 | mov [BOOT_VAR+0x901c],byte 2 |
- | 324 | stdcall alloc_pages, 0x280000 shr 12 |
|
324 | stdcall kernel_alloc, 0x280000 |
325 | add eax, OS_BASE |
325 | mov [LFBAddress], eax |
326 | mov [LFBAddress], eax |
326 | ret |
327 | ret |
327 | @@: |
328 | @@: |
328 | test [SCR_MODE],word 0100000000000000b |
329 | test [SCR_MODE],word 0100000000000000b |
329 | jnz @f |
330 | jnz @f |
330 | mov [BOOT_VAR+0x901c],byte 2 |
331 | mov [BOOT_VAR+0x901c],byte 2 |
331 | ret |
332 | ret |
332 | @@: |
333 | @@: |
Line 333... | Line 334... | ||
333 | call init_mtrr |
334 | call init_mtrr |
334 | - | ||
335 | mov edx, LFB_BASE |
- | |
336 | mov esi, [LFBAddress] |
- | |
Line 337... | Line 335... | ||
337 | mov edi, 0x00800000 |
335 | |
338 | mov dword [exp_lfb+4], edx |
336 | xchg bx, bx |
- | 337 | ||
339 | 338 | mov eax, [LFBAddress] |
|
- | 339 | or eax, PG_LARGE+PG_UW |
|
Line 340... | Line -... | ||
340 | shr edi, 12 |
- | |
341 | mov [pg_count], edi |
- | |
342 | shr edi, 10 |
- | |
343 | 340 | mov [sys_pgdir+(LFB_BASE shr 20)], eax |
|
344 | bt [cpu_caps], CAPS_PSE |
- | |
345 | jnc .map_page_tables |
- | |
346 | or esi, PG_LARGE+PG_UW |
- | |
347 | mov edx, sys_pgdir+(LFB_BASE shr 20) |
- | |
348 | @@: |
- | |
349 | mov [edx], esi |
- | |
Line 350... | Line 341... | ||
350 | add edx, 4 |
341 | add eax, 0x00400000 |
351 | add esi, 0x00400000 |
342 | mov [sys_pgdir+4+(LFB_BASE shr 20)], eax |
352 | dec edi |
343 | |
353 | jnz @B |
344 | mov dword [exp_lfb+4], LFB_BASE |
354 | 345 | ||
355 | bt [cpu_caps], CAPS_PGE |
346 | bt [cpu_caps], CAPS_PGE |
356 | jnc @F |
347 | jnc @F |
357 | or dword [sys_pgdir+(LFB_BASE shr 20)], PG_GLOBAL |
- | |
358 | @@: |
- | |
359 | mov dword [LFBAddress], LFB_BASE |
- | |
360 | mov eax, cr3 ;flush TLB |
- | |
361 | mov cr3, eax |
- | |
362 | ret |
- | |
363 | - | ||
364 | .map_page_tables: |
- | |
365 | - | ||
366 | @@: |
- | |
367 | call alloc_page |
- | |
368 | stdcall map_page_table, edx, eax |
- | |
369 | add edx, 0x00400000 |
- | |
370 | dec edi |
- | |
371 | jnz @B |
- | |
372 | - | ||
373 | mov eax, [LFBAddress] |
- | |
374 | mov edi, page_tabs + (LFB_BASE shr 10) |
- | |
375 | or eax, PG_UW |
- | |
376 | mov ecx, [pg_count] |
- | |
377 | cld |
- | |
378 | @@: |
- | |
379 | stosd |
- | |
380 | add eax, 0x1000 |
- | |
381 | dec ecx |
- | |
Line 382... | Line 348... | ||
382 | jnz @B |
348 | or dword [sys_pgdir+(LFB_BASE shr 20)], PG_GLOBAL |
383 | 349 | @@: |
|
Line 384... | Line 350... | ||
384 | mov dword [LFBAddress], LFB_BASE |
350 | mov dword [LFBAddress], LFB_BASE |
Line 561... | Line 527... | ||
561 | mov ds, ax |
527 | mov ds, ax |
562 | mov es, ax |
528 | mov es, ax |
Line 563... | Line 529... | ||
563 | 529 | ||
Line 564... | Line -... | ||
564 | inc [pg_data.pages_faults] |
- | |
565 | - | ||
566 | ; xchg bx,bx |
- | |
567 | ; jmp .exit |
530 | inc [pg_data.pages_faults] |
568 | 531 | ||
Line -... | Line 532... | ||
- | 532 | mov ebx, [.err_addr] |
|
- | 533 | mov eax, [.err_code] |
|
569 | mov ebx, [.err_addr] |
534 | |
570 | mov eax, [.err_code] |
535 | ; xchg bx, bx |
Line -... | Line 536... | ||
- | 536 | ||
- | 537 | cmp ebx, HEAP_BASE |
|
- | 538 | jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ; |
|
571 | 539 | ||
- | 540 | cmp ebx, LFB_BASE |
|
- | 541 | jb .kernel_heap |
|
- | 542 | ||
572 | cmp ebx, OS_BASE |
543 | cmp ebx, page_tabs |
Line -... | Line 544... | ||
- | 544 | jb .lfb |
|
- | 545 | ||
573 | jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ; |
546 | cmp ebx, OS_BASE |
574 | 547 | jb .core_tabs |
|
575 | cmp ebx, page_tabs |
548 | |
Line 576... | Line -... | ||
576 | jb .kernel_space ;ñòðàíèöà â ïàìÿòè ÿäðà |
- | |
577 | - | ||
578 | cmp ebx, kernel_tabs |
- | |
579 | jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ; |
549 | jmp .core_tabs |
- | 550 | ||
- | 551 | ; cmp ebx, kernel_tabs |
|
- | 552 | ; jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ; |
|
- | 553 | ;ïðîñòî ñîçäàäèì îäíó |
|
- | 554 | ||
- | 555 | .lfb: |
|
- | 556 | shr ebx, 22 |
|
- | 557 | mov edx, [sys_pgdir + ebx*4] |
|
- | 558 | mov [master_tab + ebx*4], edx |
|
- | 559 | jmp .exit |
|
- | 560 | ||
580 | ;ïðîñòî ñîçäàäèì îäíó |
561 | .core_tabs: |
- | 562 | ||
- | 563 | shr ebx, 12 |
|
- | 564 | and ebx, 0x3FF |
|
- | 565 | mov edx, [master_tab + ebx*4] |
|
- | 566 | test edx, PG_MAP |
|
- | 567 | jz .check_ptab ;òàáëèöà ñòðàíèö íå ñîçäàíà |
|
- | 568 | ||
- | 569 | align 4 |
|
- | 570 | .kernel_heap: |
|
- | 571 | ||
581 | 572 | shr ebx, 22 |
|
- | 573 | mov edx, [master_tab + ebx*4] |
|
- | 574 | test edx, PG_MAP |
|
- | 575 | jz .check_ptab ;òàáëèöà ñòðàíèö íå ñîçäàíà |
|
- | 576 | ||
- | 577 | .check_ptab: |
|
582 | cmp ebx, LFB_BASE |
578 | mov edx, [sys_pgdir + ebx*4] |
- | 579 | test edx, PG_MAP |
|
- | 580 | jnz @F |
|
- | 581 | ||
- | 582 | call alloc_page |
|
- | 583 | test eax, eax |
|
- | 584 | jz .fail |
|
- | 585 | ||
- | 586 | lea edx, [eax + PG_UW] |
|
- | 587 | lea edi, [eax + OS_BASE] |
|
- | 588 | mov ecx, 1024 |
|
- | 589 | xor eax, eax |
|
- | 590 | cld |
|
Line 583... | Line 591... | ||
583 | jb .core_tabs ;òàáëèöû ñòðàíèö ÿäðà |
591 | rep stosd |
584 | ;Îøèáêà |
592 | |
585 | .lfb: |
593 | mov [sys_pgdir + ebx*4], edx |
586 | ;îáëàñòü LFB |
594 | @@: |
Line 674... | Line 682... | ||
674 | jmp .exit |
682 | jmp .exit |
Line 675... | Line 683... | ||
675 | 683 | ||
Line 676... | Line -... | ||
676 | - | ||
677 | ;íå îáðàáàòûâàåì. Îøèáêà |
684 | |
678 | 685 | ;íå îáðàáàòûâàåì. Îøèáêà |
|
679 | .core_tabs: |
686 | |
680 | .fail: |
687 | .fail: |