Subversion Repositories Kolibri OS

Rev

Rev 418 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 418 Rev 419
Line 338... Line 338...
338
           dec [pg_data.pg_mutex]
338
           dec [pg_data.pg_mutex]
339
           ret
339
           ret
340
 
340
 
Line 341... Line 341...
341
.expand:
341
.expand:
342
           add edi, new_app_base
342
         ;  add edi, new_app_base
343
           add esi, new_app_base
343
         ;  add esi, new_app_base
Line 344... Line 344...
344
 
344
 
345
           push esi
345
           push esi
Line 346... Line 346...
346
           push edi
346
           push edi
Line 455... Line 455...
455
        .err_addr equ ebp-4
455
        .err_addr equ ebp-4
456
 
456
 
Line 457... Line 457...
457
           pushad
457
           pushad
Line 458... Line 458...
458
 
458
 
459
     push eax
459
;     push eax
460
     push edx
460
;     push edx
461
     mov edx, 0x400   ;bocsh
461
;     mov edx, 0x400   ;bocsh
462
     mov al,0xff      ;bocsh
462
;     mov al,0xff      ;bocsh
463
     out dx, al       ;bocsh
463
;     out dx, al       ;bocsh
464
     pop edx
464
;     pop edx
Line 465... Line 465...
465
     pop eax
465
;     pop eax
466
 
466
 
467
           mov ebp, esp
467
           mov ebp, esp
468
           mov eax, cr2
468
           mov eax, cr2
Line 476... Line 476...
476
 
476
 
Line 477... Line 477...
477
           inc [pg_data.pages_faults]
477
           inc [pg_data.pages_faults]
Line 478... Line 478...
478
 
478
 
-
 
479
           mov ebx, [.err_addr]
Line 479... Line 480...
479
           mov ebx, [.err_addr]
480
           mov eax, [.err_code]
480
 
-
 
481
           cmp ebx, 0x80000000
-
 
482
           jae .kernel_space
481
 
483
 
-
 
484
           cmp ebx, page_tabs+0x200000
-
 
485
           jae .tab_space
-
 
486
 
-
 
Line 487... Line 482...
487
           cmp ebx, app_page_tabs
482
           cmp ebx, OS_BASE
488
           jae .alloc
483
           jb .user_space      ;ñòðàíèöà â ïàìÿòè ïðèëîæåíè
Line -... Line 484...
-
 
484
 
-
 
485
           cmp ebx, page_tabs
-
 
486
           jb .kernel_space    ;ñòðàíèöà â ïàìÿòè ÿäðà
-
 
487
 
489
 
488
           cmp ebx, kernel_tabs
-
 
489
           jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíè
-
 
490
                               ;ïðîñòî ñîçäàäèì îäíó
-
 
491
 
-
 
492
           cmp ebx, LFB_BASE
-
 
493
           jb .core_tabs       ;òàáëèöû ñòðàíèö ÿäðà
490
           cmp ebx, 0x7DC00000
494
                               ;Îøèáêà
Line -... Line 495...
-
 
495
.lfb:
491
           jae .lfb_addr
496
                               ;îáëàñòü LFB
-
 
497
                               ;Îøèáêà
-
 
498
           jmp .fail
-
 
499
 
-
 
500
align 4
492
 
501
.user_space:
493
;           cmp ebx, 0x1000000
502
           test eax, PG_MAP
494
;           jb .exit
503
           jnz .err_access     ;Ñòðàíèöà ïðèñóòñòâóåò
495
 
504
                               ;Îøèáêà äîñòóïà ?
496
.user_space:
505
 
497
           shr ebx, 12
506
           shr ebx, 12
-
 
507
           mov ecx, ebx
Line 498... Line 508...
498
           mov ecx, ebx
508
           shr ecx, 10
499
           shr ecx, 10
509
           mov edx, [master_tab+ecx*4]
500
           mov edx, [master_tab+ecx*4]
510
           test edx, PG_MAP
-
 
511
           jz .fail            ;òàáëèöà ñòðàíèö íå ñîçäàíà
501
           test edx, 1
512
                               ;íåâåðíûé àäðåñ â ïðîãðàììå
502
           jz .fail
513
 
503
 
514
           mov eax, [page_tabs+ebx*4]
504
           mov eax, [page_tabs+ebx*4]
515
           test eax, 2
Line 505... Line 516...
505
           test eax, 2
516
           jz .fail            ;àäðåñ íå çàðåçåðâèðîâàí äë
Line 506... Line 517...
506
           jz .fail
517
                               ;èñïîëüçîâàíèÿ. Îøèáêà
507
.alloc:
518
.alloc:
Line 523... Line 534...
523
           mov esp, ebp
534
           mov esp, ebp
524
           popad
535
           popad
525
           add esp, 4
536
           add esp, 4
526
           iretd
537
           iretd
527
.fail:
538
 
-
 
539
.err_access:
-
 
540
;íèêîãäà íå ïðîèñõîäèò
-
 
541
           jmp .fail
-
 
542
 
-
 
543
.kernel_space:
-
 
544
           test eax, PG_MAP
-
 
545
           jz .fail        ;ñòðàíèöà íå ïðèñóòñòâóåò
-
 
546
 
-
 
547
           test eax, 4     ;U/S
-
 
548
           jnz .fail       ;ïðèëîæåíèå îáðàòèëîñü ê ïàìÿòè
-
 
549
                           ;ÿäðà
-
 
550
           test eax, 8
-
 
551
           jnz .fail       ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò
-
 
552
                           ;â òàáëèöàõ ñòðàíèö. äîáàâëåíî â P4/Xeon
-
 
553
 
-
 
554
;ïîïûòêà çàïèñè â çàùèù¸ííóþ ñòðàíèöó ÿäðà
-
 
555
;íå îáðàáàòûâàåì. Îøèáêà
-
 
556
 
-
 
557
.core_tabs:
-
 
558
.fail:
528
           pop es
559
           pop es
529
           pop ds
560
           pop ds
530
           mov esp, ebp
561
           mov esp, ebp
531
           popad
562
           popad
532
           add esp, 4
563
           add esp, 4
Line 537... Line 568...
537
           mov bl, 14
568
           mov bl, 14
538
           jmp exc_c
569
           jmp exc_c
539
           iretd
570
           iretd
Line 540... Line 571...
540
 
571
 
541
.kernel_space:
572
;.kernel_space:
542
;           shr ebx, 12
573
;           shr ebx, 12
543
;           mov eax, [page_tabs+ebx*4]
574
;           mov eax, [page_tabs+ebx*4]
544
;           shr ebx, 10
575
;           shr ebx, 10
545
;           mov eax, [master_tab+ebx*4]
576
;           mov eax, [master_tab+ebx*4]
546
           jmp .exit
577
           jmp .exit
547
.old_addr:
578
;.old_addr:
548
;           shr ebx, 12
579
;           shr ebx, 12
549
;           mov eax, [page_tabs+ebx*4]
580
;           mov eax, [page_tabs+ebx*4]
550
;           shr ebx, 10
581
;           shr ebx, 10
551
;           mov eax, [master_tab+ebx*4]
582
;           mov eax, [master_tab+ebx*4]
552
           jmp .exit
583
           jmp .exit
553
.lfb_addr:
584
;.lfb_addr:
554
;           shr ebx, 22
585
;           shr ebx, 22
555
;           ;mov ecx, [sys_page_dir]
586
;           ;mov ecx, [sys_page_dir]
556
;           mov eax, [master_tab+ebx*4]
587
;           mov eax, [master_tab+ebx*4]
557
           jmp .exit
588
           jmp .exit
558
.tab_space:
589
;.tab_space:
559
;           shr ebx, 12
590
;           shr ebx, 12
560
;           mov eax, [page_tabs+ebx*4]
591
;           mov eax, [page_tabs+ebx*4]
561
;           shr ebx, 10
592
;           shr ebx, 10
562
;           ;mov ecx, [sys_page_dir]
593
;           ;mov ecx, [sys_page_dir]
563
;           mov eax, [master_tab+ebx*4]
594
;           mov eax, [master_tab+ebx*4]
564
           jmp .exit
595
;           jmp .exit
Line 565... Line 596...
565
endp
596
endp
566
 
597
 
567
align 4
598
align 4
Line 704... Line 735...
704
           cli
735
           cli
705
           mov  [eax+0xA0],ebx     ;set fields in extended information area
736
           mov  [eax+0xA0],ebx     ;set fields in extended information area
706
           mov  [eax+0xA4],ecx
737
           mov  [eax+0xA4],ecx
707
 
738
 
Line 708... Line 739...
708
           add ebx,  new_app_base
739
        ;   add ebx,  new_app_base
709
           add ecx, ebx
740
           add ecx, ebx
710
           add ecx, 4095
741
           add ecx, 4095
711
           and ecx, not 4095
742
           and ecx, not 4095
Line 712... Line 743...
712
 
743
 
Line 741... Line 772...
741
           test edi,edi
772
           test edi,edi
742
           jz   .no_ipc_area
773
           jz   .no_ipc_area
743
 
774
 
Line 744... Line 775...
744
           mov ebx, edi
775
           mov ebx, edi
745
           add edi, new_app_base
776
       ;    add edi, new_app_base
746
           and ebx, 0xFFF
777
           and ebx, 0xFFF
747
           mov [dst_offset], ebx
778
           mov [dst_offset], ebx
Line 748... Line 779...
748
 
779
 
749
           mov esi, [eax+SLOT_BASE+0xa4]
780
           mov esi, [eax+SLOT_BASE+0xa4]
Line 775... Line 806...
775
 
806
 
Line 776... Line 807...
776
           mov [edi+4], ecx
807
           mov [edi+4], ecx
777
           add edi, 8
808
           add edi, 8
778
           mov esi, [msg_addr]
809
           mov esi, [msg_addr]
779
           add esi, new_app_base
810
       ;    add esi, new_app_base
780
           cld
811
           cld
781
           rep movsb
812
           rep movsb
Line 782... Line 813...
782
 
813
 
783
           mov ebx, [ipc_tmp]
814
           mov ebx, [ipc_tmp]
Line 833... Line 864...
833
 
864
 
Line 834... Line 865...
834
align 4
865
align 4
835
sysfn_meminfo:
866
sysfn_meminfo:
Line 836... Line 867...
836
 
867
 
837
           add ebx, new_app_base
868
        ;   add ebx, new_app_base
838
           cmp ebx, new_app_base
869
           cmp ebx, OS_BASE
Line 839... Line 870...
839
           jb .fail
870
           jae .fail
840
 
871
 
841
           mov eax, [pg_data.pages_count]
872
           mov eax, [pg_data.pages_count]
842
           mov [ebx], eax
873
           mov [ebx], eax
Line 881... Line 912...
881
           ret
912
           ret
882
@@:
913
@@:
883
           cmp eax, 13
914
           cmp eax, 13
884
           ja @f
915
           ja @f
885
           add ebx, new_app_base
916
       ;    add ebx, new_app_base
886
           stdcall user_free, ebx
917
           stdcall user_free, ebx
887
           mov [esp+36], eax
918
           mov [esp+36], eax
888
           ret
919
           ret
889
@@:
920
@@:
890
           cmp eax, 14
921
           cmp eax, 14
891
           ja @f
922
           ja @f
892
           add ebx, new_app_base
923
      ;     add ebx, new_app_base
893
           cmp ebx, new_app_base
924
           cmp ebx, OS_BASE
894
           jb .fail
925
           jae .fail
895
           stdcall get_event_ex, ebx, ecx
926
           stdcall get_event_ex, ebx, ecx
896
           mov [esp+36], eax
927
           mov [esp+36], eax
897
           ret
928
           ret
898
@@:
929
@@:
899
           cmp eax, 15
930
           cmp eax, 15
900
           ja @f
931
           ja @f
Line 909... Line 940...
909
           ja @f
940
           ja @f
910
 
941
 
Line 911... Line 942...
911
           test ebx, ebx
942
           test ebx, ebx
912
           jz .fail
943
           jz .fail
913
           add ebx, new_app_base
944
     ;      add ebx, new_app_base
914
           cmp ebx, new_app_base
945
           cmp ebx, OS_BASE
915
           jb .fail
946
           jae .fail
916
           stdcall get_service, ebx
947
           stdcall get_service, ebx
917
           mov [esp+36], eax
948
           mov [esp+36], eax
918
           ret
949
           ret
919
@@:
950
@@:
920
           cmp eax, 17
951
           cmp eax, 17
Line 933... Line 964...
933
           ret
964
           ret
934
@@:
965
@@:
935
           cmp eax, 19
966
           cmp eax, 19
936
           ja .fail
967
           ja .fail
937
           add ebx, new_app_base
968
      ;     add ebx, new_app_base
938
           cmp ebx, new_app_base
969
           cmp ebx, OS_BASE
939
           jb .fail
970
           jae .fail
940
           stdcall load_library, ebx
971
           stdcall load_library, ebx
941
           mov [esp+36], eax
972
           mov [esp+36], eax
942
           ret
973
           ret
943
 
974
 
Line 944... Line 975...
944
.fail:
975
.fail: