Subversion Repositories Kolibri OS

Rev

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: