Rev 5201 | Rev 5577 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5201 | Rev 5565 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; |
2 | ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. |
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. |
4 | ;; PROGRAMMING: |
4 | ;; PROGRAMMING: |
5 | ;; Ivan Poddubny |
5 | ;; Ivan Poddubny |
6 | ;; Marat Zakiyanov (Mario79) |
6 | ;; Marat Zakiyanov (Mario79) |
7 | ;; VaStaNi |
7 | ;; VaStaNi |
8 | ;; Trans |
8 | ;; Trans |
Line 69... | Line 69... | ||
69 | format binary as "mnt" |
69 | format binary as "mnt" |
Line 70... | Line 70... | ||
70 | 70 | ||
71 | include 'macros.inc' |
71 | include 'macros.inc' |
Line 72... | Line 72... | ||
72 | include 'struct.inc' |
72 | include 'struct.inc' |
Line 73... | Line 73... | ||
73 | 73 | ||
74 | $Revision: 5201 $ |
74 | $Revision: 5565 $ |
Line 349... | Line 349... | ||
349 | mov ds, bx |
349 | mov ds, bx |
350 | mov es, bx |
350 | mov es, bx |
351 | mov fs, cx |
351 | mov fs, cx |
352 | mov gs, bx |
352 | mov gs, bx |
Line -... | Line 353... | ||
- | 353 | ||
- | 354 | xor eax, eax |
|
- | 355 | mov ebx, 0xFFFFF000+PG_SHARED+PG_NOCACHE+PG_UWR |
|
- | 356 | bt [cpu_caps], CAPS_PAT |
|
- | 357 | setc al |
|
- | 358 | shl eax, 7 |
|
- | 359 | or ebx, eax |
|
- | 360 | ||
353 | 361 | mov eax, PG_GLOBAL |
|
354 | bt [cpu_caps], CAPS_PGE |
362 | bt [cpu_caps], CAPS_PGE |
Line 355... | Line 363... | ||
355 | jnc @F |
363 | jnc @F |
- | 364 | ||
Line 356... | Line 365... | ||
356 | 365 | or [sys_proc+PROC.pdt_0+(OS_BASE shr 20)], eax |
|
357 | or dword [sys_proc+PROC.pdt_0+(OS_BASE shr 20)], PG_GLOBAL |
366 | or ebx, eax |
358 | 367 | ||
359 | mov ebx, cr4 |
368 | mov eax, cr4 |
- | 369 | or eax, CR4_PGE |
|
- | 370 | mov cr4, eax |
|
360 | or ebx, CR4_PGE |
371 | @@: |
361 | mov cr4, ebx |
372 | mov [pte_valid_mask], ebx |
362 | @@: |
373 | |
Line 363... | Line 374... | ||
363 | xor eax, eax |
374 | xor eax, eax |
Line 442... | Line 453... | ||
442 | mov [launcher_start], al |
453 | mov [launcher_start], al |
443 | movzx eax, word [BOOT_VARS+BOOT_X_RES]; X max |
454 | movzx eax, word [BOOT_VARS+BOOT_X_RES]; X max |
444 | mov [_display.width], eax |
455 | mov [_display.width], eax |
445 | mov [display_width_standard], eax |
456 | mov [display_width_standard], eax |
446 | dec eax |
457 | dec eax |
447 | mov [Screen_Max_X], eax |
- | |
448 | mov [screen_workarea.right], eax |
458 | mov [screen_workarea.right], eax |
449 | movzx eax, word [BOOT_VARS+BOOT_Y_RES]; Y max |
459 | movzx eax, word [BOOT_VARS+BOOT_Y_RES]; Y max |
450 | mov [_display.height], eax |
460 | mov [_display.height], eax |
451 | mov [display_height_standard], eax |
461 | mov [display_height_standard], eax |
452 | dec eax |
462 | dec eax |
453 | mov [Screen_Max_Y], eax |
- | |
454 | mov [screen_workarea.bottom], eax |
463 | mov [screen_workarea.bottom], eax |
455 | movzx eax, word [BOOT_VARS+BOOT_VESA_MODE] ; screen mode |
464 | movzx eax, word [BOOT_VARS+BOOT_VESA_MODE] ; screen mode |
456 | mov dword [SCR_MODE], eax |
465 | mov dword [SCR_MODE], eax |
457 | ; mov eax, [BOOT_VAR+0x9014] ; Vesa 1.2 bnk sw add |
466 | ; mov eax, [BOOT_VAR+0x9014] ; Vesa 1.2 bnk sw add |
458 | ; mov [BANK_SWITCH], eax |
467 | ; mov [BANK_SWITCH], eax |
Line 461... | Line 470... | ||
461 | je @f |
470 | je @f |
462 | cmp [SCR_MODE], word 0x12 ; VGA 640x480 |
471 | cmp [SCR_MODE], word 0x12 ; VGA 640x480 |
463 | je @f |
472 | je @f |
464 | movzx eax, word[BOOT_VARS+BOOT_PITCH] ; for other modes |
473 | movzx eax, word[BOOT_VARS+BOOT_PITCH] ; for other modes |
465 | @@: |
474 | @@: |
466 | mov [_display.pitch], eax |
475 | mov [_display.lfb_pitch], eax |
467 | mov eax, [_display.width] |
476 | mov eax, [_display.width] |
468 | mul [_display.height] |
477 | mul [_display.height] |
469 | mov [_WinMapSize], eax |
478 | mov [_display.win_map_size], eax |
Line 470... | Line 479... | ||
470 | 479 | ||
471 | call calculate_fast_getting_offset_for_WinMapAddress |
480 | call calculate_fast_getting_offset_for_WinMapAddress |
472 | ; for Qemu or non standart video cards |
481 | ; for Qemu or non standart video cards |
473 | ; Unfortunately [BytesPerScanLine] does not always |
482 | ; Unfortunately [BytesPerScanLine] does not always |
Line 575... | Line 584... | ||
575 | mov ecx, MSR_AMD_STAR |
584 | mov ecx, MSR_AMD_STAR |
576 | wrmsr |
585 | wrmsr |
577 | .noSYSCALL: |
586 | .noSYSCALL: |
578 | ; ----------------------------------------- |
587 | ; ----------------------------------------- |
579 | stdcall alloc_page |
588 | stdcall alloc_page |
580 | stdcall map_page, tss-0xF80, eax, PG_SW |
589 | stdcall map_page, tss-0xF80, eax, PG_SWR |
581 | stdcall alloc_page |
590 | stdcall alloc_page |
582 | stdcall map_page, tss+0x80, eax, PG_SW |
591 | stdcall map_page, tss+0x80, eax, PG_SWR |
583 | stdcall alloc_page |
592 | stdcall alloc_page |
584 | stdcall map_page, tss+0x1080, eax, PG_SW |
593 | stdcall map_page, tss+0x1080, eax, PG_SWR |
Line 585... | Line 594... | ||
585 | 594 | ||
Line 586... | Line 595... | ||
586 | ; LOAD IDT |
595 | ; LOAD IDT |
587 | 596 | ||
Line 659... | Line 668... | ||
659 | mov [graph_data_l+2], ax |
668 | mov [graph_data_l+2], ax |
660 | shr eax, 16 |
669 | shr eax, 16 |
661 | mov [graph_data_l+4], al |
670 | mov [graph_data_l+4], al |
662 | mov [graph_data_l+7], ah |
671 | mov [graph_data_l+7], ah |
Line 663... | Line 672... | ||
663 | 672 | ||
664 | stdcall kernel_alloc, [_WinMapSize] |
673 | stdcall kernel_alloc, [_display.win_map_size] |
Line 665... | Line 674... | ||
665 | mov [_WinMapAddress], eax |
674 | mov [_display.win_map], eax |
666 | 675 | ||
Line 667... | Line 676... | ||
667 | xor eax, eax |
676 | xor eax, eax |
Line 754... | Line 763... | ||
754 | mov [cr4_ap+OS_BASE], eax |
763 | mov [cr4_ap+OS_BASE], eax |
755 | mov esi, OS_BASE + ap_init16 |
764 | mov esi, OS_BASE + ap_init16 |
756 | mov edi, OS_BASE + 8000h |
765 | mov edi, OS_BASE + 8000h |
757 | mov ecx, (ap_init16_size + 3) / 4 |
766 | mov ecx, (ap_init16_size + 3) / 4 |
758 | rep movsd |
767 | rep movsd |
759 | stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE |
768 | stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_GLOBAL+PG_NOCACHE+PG_SWR |
760 | mov [LAPIC_BASE], eax |
769 | mov [LAPIC_BASE], eax |
761 | lea edi, [eax+300h] |
770 | lea edi, [eax+300h] |
762 | mov esi, smpt+4 |
771 | mov esi, smpt+4 |
763 | dec ebx |
772 | dec ebx |
764 | .wake_cpus_loop: |
773 | .wake_cpus_loop: |
Line 1059... | Line 1068... | ||
1059 | call load_default_skin |
1068 | call load_default_skin |
Line 1060... | Line 1069... | ||
1060 | 1069 | ||
Line 1061... | Line 1070... | ||
1061 | ;protect io permission map |
1070 | ;protect io permission map |
1062 | 1071 | ||
1063 | mov esi, [default_io_map] |
1072 | mov esi, [default_io_map] |
1064 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_MAP |
1073 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_READ |
Line 1065... | Line 1074... | ||
1065 | add esi, 0x1000 |
1074 | add esi, 0x1000 |
1066 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_MAP |
1075 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_READ |
1067 | 1076 | ||
1068 | stdcall map_page, tss._io_map_0, \ |
1077 | stdcall map_page, tss._io_map_0, \ |
Line 1069... | Line 1078... | ||
1069 | [SLOT_BASE+256+APPDATA.io_map], PG_MAP |
1078 | [SLOT_BASE+256+APPDATA.io_map], PG_READ |
1070 | stdcall map_page, tss._io_map_1, \ |
1079 | stdcall map_page, tss._io_map_1, \ |
1071 | [SLOT_BASE+256+APPDATA.io_map+4], PG_MAP |
1080 | [SLOT_BASE+256+APPDATA.io_map+4], PG_READ |
1072 | 1081 | ||
Line 2112... | Line 2121... | ||
2112 | 2121 | ||
2113 | movzx eax, word [MOUSE_Y] |
2122 | movzx eax, word [MOUSE_Y] |
2114 | movzx ebx, word [MOUSE_X] |
2123 | movzx ebx, word [MOUSE_X] |
Line 2115... | Line 2124... | ||
2115 | mov eax, [d_width_calc_area + eax*4] |
2124 | mov eax, [d_width_calc_area + eax*4] |
2116 | 2125 | ||
2117 | add eax, [_WinMapAddress] |
2126 | add eax, [_display.win_map] |
2118 | movzx edx, byte [ebx+eax] |
2127 | movzx edx, byte [ebx+eax] |
Line 2119... | Line 2128... | ||
2119 | shl edx, 8 |
2128 | shl edx, 8 |
Line 2404... | Line 2413... | ||
2404 | ; removed here by |
2413 | ; removed here by |
2405 | ; call mouse_centered |
2414 | ; call mouse_centered |
2406 | ;* mouse centered - start code- Mario79 |
2415 | ;* mouse centered - start code- Mario79 |
2407 | ;mouse_centered: |
2416 | ;mouse_centered: |
2408 | ; push eax |
2417 | ; push eax |
2409 | mov eax, [Screen_Max_X] |
2418 | mov eax, [_display.width] |
2410 | shr eax, 1 |
2419 | shr eax, 1 |
2411 | mov [MOUSE_X], ax |
2420 | mov [MOUSE_X], ax |
2412 | mov eax, [Screen_Max_Y] |
2421 | mov eax, [_display.height] |
2413 | shr eax, 1 |
2422 | shr eax, 1 |
2414 | mov [MOUSE_Y], ax |
2423 | mov [MOUSE_Y], ax |
2415 | call wakeup_osloop |
2424 | call wakeup_osloop |
2416 | ; ret |
2425 | ; ret |
2417 | ;* mouse centered - end code- Mario79 |
2426 | ;* mouse centered - end code- Mario79 |
Line 2449... | Line 2458... | ||
2449 | ret |
2458 | ret |
2450 | .set_pointer_position: |
2459 | .set_pointer_position: |
2451 | ; cmp ecx,4 ; set mouse pointer position |
2460 | ; cmp ecx,4 ; set mouse pointer position |
2452 | dec ecx |
2461 | dec ecx |
2453 | jnz .set_mouse_button |
2462 | jnz .set_mouse_button |
2454 | cmp dx, word[Screen_Max_Y] |
2463 | cmp dx, word[_display.height] |
2455 | ja .end |
2464 | jae .end |
2456 | rol edx, 16 |
2465 | rol edx, 16 |
2457 | cmp dx, word[Screen_Max_X] |
2466 | cmp dx, word[_display.width] |
2458 | ja .end |
2467 | jae .end |
2459 | mov [MOUSE_X], edx |
2468 | mov [MOUSE_X], edx |
2460 | mov [mouse_active], 1 |
2469 | mov [mouse_active], 1 |
2461 | call wakeup_osloop |
2470 | call wakeup_osloop |
2462 | ret |
2471 | ret |
2463 | .set_mouse_button: |
2472 | .set_mouse_button: |
Line 2539... | Line 2548... | ||
2539 | ja .exit |
2548 | ja .exit |
Line 2540... | Line 2549... | ||
2540 | 2549 | ||
2541 | pushfd |
2550 | pushfd |
2542 | cli |
2551 | cli |
2543 | mov eax, ecx |
2552 | mov eax, ecx |
2544 | mov ecx, [_display.pitch] |
2553 | mov ecx, [_display.lfb_pitch] |
2545 | mov [_display.width], eax |
2554 | mov [_display.width], eax |
2546 | dec eax |
2555 | dec eax |
2547 | mov [_display.height], edx |
2556 | mov [_display.height], edx |
2548 | dec edx |
2557 | dec edx |
Line 2802... | Line 2811... | ||
2802 | call free_page |
2811 | call free_page |
2803 | ;-------------------------------------- |
2812 | ;-------------------------------------- |
2804 | align 4 |
2813 | align 4 |
2805 | @@: |
2814 | @@: |
2806 | mov eax, [page_tabs+esi*4] |
2815 | mov eax, [page_tabs+esi*4] |
2807 | or al, PG_UW |
2816 | or al, PG_UWR |
2808 | mov [page_tabs+ebx*4], eax |
2817 | mov [page_tabs+ebx*4], eax |
2809 | mov eax, ebx |
2818 | mov eax, ebx |
2810 | shl eax, 12 |
2819 | shl eax, 12 |
2811 | invlpg [eax] |
2820 | invlpg [eax] |
2812 | inc ebx |
2821 | inc ebx |
Line 2880... | Line 2889... | ||
2880 | nosb8: |
2889 | nosb8: |
2881 | cmp ebx, 9 |
2890 | cmp ebx, 9 |
2882 | jnz nosb9 |
2891 | jnz nosb9 |
2883 | ; ecx = [left]*65536 + [right] |
2892 | ; ecx = [left]*65536 + [right] |
2884 | ; edx = [top]*65536 + [bottom] |
2893 | ; edx = [top]*65536 + [bottom] |
2885 | mov eax, [Screen_Max_X] |
2894 | mov eax, [_display.width] |
2886 | mov ebx, [Screen_Max_Y] |
2895 | mov ebx, [_display.height] |
- | 2896 | dec eax |
|
- | 2897 | dec ebx |
|
2887 | ; check [right] |
2898 | ; check [right] |
2888 | cmp cx, ax |
2899 | cmp cx, ax |
2889 | ja .exit |
2900 | ja .exit |
2890 | ; check [left] |
2901 | ; check [left] |
2891 | ror ecx, 16 |
2902 | ror ecx, 16 |
Line 2933... | Line 2944... | ||
2933 | align 4 |
2944 | align 4 |
2934 | force_redraw_background: |
2945 | force_redraw_background: |
2935 | and [draw_data+32 + RECT.left], 0 |
2946 | and [draw_data+32 + RECT.left], 0 |
2936 | and [draw_data+32 + RECT.top], 0 |
2947 | and [draw_data+32 + RECT.top], 0 |
2937 | push eax ebx |
2948 | push eax ebx |
2938 | mov eax, [Screen_Max_X] |
2949 | mov eax, [_display.width] |
2939 | mov ebx, [Screen_Max_Y] |
2950 | mov ebx, [_display.height] |
- | 2951 | dec eax |
|
- | 2952 | dec ebx |
|
2940 | mov [draw_data+32 + RECT.right], eax |
2953 | mov [draw_data+32 + RECT.right], eax |
2941 | mov [draw_data+32 + RECT.bottom], ebx |
2954 | mov [draw_data+32 + RECT.bottom], ebx |
2942 | pop ebx eax |
2955 | pop ebx eax |
2943 | inc byte[REDRAW_BACKGROUND] |
2956 | inc byte[REDRAW_BACKGROUND] |
2944 | call wakeup_osloop |
2957 | call wakeup_osloop |
Line 3296... | Line 3309... | ||
3296 | 3309 | ||
3297 | mov edx, [TASK_BASE] ; return whole screen draw area for this app |
3310 | mov edx, [TASK_BASE] ; return whole screen draw area for this app |
3298 | add edx, draw_data - CURRENT_TASK |
3311 | add edx, draw_data - CURRENT_TASK |
3299 | mov [edx + RECT.left], 0 |
3312 | mov [edx + RECT.left], 0 |
3300 | mov [edx + RECT.top], 0 |
3313 | mov [edx + RECT.top], 0 |
- | 3314 | mov eax, [_display.width] |
|
3301 | mov eax, [Screen_Max_X] |
3315 | dec eax |
3302 | mov [edx + RECT.right], eax |
3316 | mov [edx + RECT.right], eax |
- | 3317 | mov eax, [_display.height] |
|
3303 | mov eax, [Screen_Max_Y] |
3318 | dec eax |
Line 3304... | Line 3319... | ||
3304 | mov [edx + RECT.bottom], eax |
3319 | mov [edx + RECT.bottom], eax |
3305 | 3320 | ||
Line 3817... | Line 3832... | ||
3817 | ;-------------------------------------- |
3832 | ;-------------------------------------- |
3818 | align 4 |
3833 | align 4 |
3819 | .start_x: |
3834 | .start_x: |
3820 | add eax, ecx |
3835 | add eax, ecx |
3821 | mov ebp, [d_width_calc_area + ebx*4] |
3836 | mov ebp, [d_width_calc_area + ebx*4] |
3822 | add ebp, [_WinMapAddress] |
3837 | add ebp, [_display.win_map] |
3823 | movzx ebp, byte[eax+ebp] ; get value for current point |
3838 | movzx ebp, byte[eax+ebp] ; get value for current point |
3824 | cmp ebp, edi |
3839 | cmp ebp, edi |
3825 | jne @f |
3840 | jne @f |
Line 3826... | Line 3841... | ||
3826 | 3841 | ||
Line 3862... | Line 3877... | ||
3862 | popad |
3877 | popad |
3863 | ret |
3878 | ret |
3864 | ;----------------------------------------------------------------------------- |
3879 | ;----------------------------------------------------------------------------- |
3865 | align 4 |
3880 | align 4 |
3866 | calculatebackground: ; background |
3881 | calculatebackground: ; background |
3867 | mov edi, [_WinMapAddress] ; set os to use all pixels |
3882 | mov edi, [_display.win_map] ; set os to use all pixels |
3868 | mov eax, 0x01010101 |
3883 | mov eax, 0x01010101 |
3869 | mov ecx, [_WinMapSize] |
3884 | mov ecx, [_display.win_map_size] |
3870 | shr ecx, 2 |
3885 | shr ecx, 2 |
3871 | rep stosd |
3886 | rep stosd |
Line 3872... | Line 3887... | ||
3872 | 3887 | ||
3873 | mov byte[REDRAW_BACKGROUND], 0 ; do not draw background! |
3888 | mov byte[REDRAW_BACKGROUND], 0 ; do not draw background! |
Line 4791... | Line 4806... | ||
4791 | add word [msg_board_pos+2], 6 |
4806 | add word [msg_board_pos+2], 6 |
4792 | cmp bl, 10 |
4807 | cmp bl, 10 |
4793 | jnz @f |
4808 | jnz @f |
4794 | mov word [msg_board_pos+2], (42*6) |
4809 | mov word [msg_board_pos+2], (42*6) |
4795 | add word [msg_board_pos], 10 |
4810 | add word [msg_board_pos], 10 |
4796 | mov ax, word [Screen_Max_Y] |
4811 | mov ax, word [_display.width] |
4797 | cmp word [msg_board_pos], ax |
4812 | cmp word [msg_board_pos], ax |
4798 | jbe @f |
4813 | jb @f |
4799 | mov word [msg_board_pos], 10 |
4814 | mov word [msg_board_pos], 10 |
4800 | @@: |
4815 | @@: |
4801 | ; // end if |
4816 | ; // end if |
Line 4802... | Line 4817... | ||
4802 | 4817 | ||
Line 5010... | Line 5025... | ||
5010 | or [esp+32], dword -1 |
5025 | or [esp+32], dword -1 |
5011 | ret |
5026 | ret |
Line 5012... | Line 5027... | ||
5012 | 5027 | ||
5013 | 5028 | ||
5014 | .1: ; resolution |
5029 | .1: ; resolution |
5015 | mov eax, [Screen_Max_X] |
5030 | mov eax, [_display.width] |
5016 | shl eax, 16 |
- | |
5017 | mov ax, word [Screen_Max_Y] |
5031 | shl eax, 16 |
5018 | add eax, 0x00010001 |
5032 | mov ax, word [_display.height] |
5019 | mov [esp+32], eax |
5033 | mov [esp+32], eax |
5020 | ret |
5034 | ret |
5021 | .2: ; bits per pixel |
5035 | .2: ; bits per pixel |
5022 | mov eax, [_display.bits_per_pixel] |
5036 | mov eax, [_display.bits_per_pixel] |
5023 | mov [esp+32], eax |
5037 | mov [esp+32], eax |
5024 | ret |
5038 | ret |
5025 | .3: ; bytes per scanline |
5039 | .3: ; bytes per scanline |
5026 | mov eax, [_display.pitch] |
5040 | mov eax, [_display.lfb_pitch] |
Line 5027... | Line 5041... | ||
5027 | mov [esp+32], eax |
5041 | mov [esp+32], eax |
Line 5098... | Line 5112... | ||
5098 | .drectr: |
5112 | .drectr: |
5099 | ret |
5113 | ret |
Line 5100... | Line 5114... | ||
5100 | 5114 | ||
5101 | align 4 |
5115 | align 4 |
5102 | syscall_getscreensize: ; GetScreenSize |
5116 | syscall_getscreensize: ; GetScreenSize |
- | 5117 | mov ax, word [_display.width] |
|
5103 | mov ax, word [Screen_Max_X] |
5118 | dec ax |
5104 | shl eax, 16 |
5119 | shl eax, 16 |
- | 5120 | mov ax, word [_display.height] |
|
5105 | mov ax, word [Screen_Max_Y] |
5121 | dec ax |
5106 | mov [esp + 32], eax |
5122 | mov [esp + 32], eax |
5107 | ret |
5123 | ret |
5108 | ;----------------------------------------------------------------------------- |
5124 | ;----------------------------------------------------------------------------- |
5109 | align 4 |
5125 | align 4 |
Line 5176... | Line 5192... | ||
5176 | and [cd_status], 0 |
5192 | and [cd_status], 0 |
5177 | ret |
5193 | ret |
5178 | ;----------------------------------------------------------------------------- |
5194 | ;----------------------------------------------------------------------------- |
5179 | align 4 |
5195 | align 4 |
5180 | syscall_getpixel_WinMap: ; GetPixel WinMap |
5196 | syscall_getpixel_WinMap: ; GetPixel WinMap |
5181 | cmp ebx, [Screen_Max_X] |
5197 | cmp ebx, [_display.width] |
5182 | jbe @f |
5198 | jb @f |
5183 | cmp ecx, [Screen_Max_Y] |
5199 | cmp ecx, [_display.height] |
5184 | jbe @f |
5200 | jb @f |
5185 | xor eax, eax |
5201 | xor eax, eax |
5186 | jmp .store |
5202 | jmp .store |
5187 | ;-------------------------------------- |
5203 | ;-------------------------------------- |
5188 | align 4 |
5204 | align 4 |
5189 | @@: |
5205 | @@: |
5190 | mov eax, [d_width_calc_area + ecx*4] |
5206 | mov eax, [d_width_calc_area + ecx*4] |
5191 | add eax, [_WinMapAddress] |
5207 | add eax, [_display.win_map] |
5192 | movzx eax, byte[eax+ebx] ; get value for current point |
5208 | movzx eax, byte[eax+ebx] ; get value for current point |
5193 | ;-------------------------------------- |
5209 | ;-------------------------------------- |
5194 | align 4 |
5210 | align 4 |
5195 | .store: |
5211 | .store: |
5196 | mov [esp + 32], eax |
5212 | mov [esp + 32], eax |
5197 | ret |
5213 | ret |
5198 | ;----------------------------------------------------------------------------- |
5214 | ;----------------------------------------------------------------------------- |
5199 | align 4 |
5215 | align 4 |
5200 | syscall_getpixel: ; GetPixel |
5216 | syscall_getpixel: ; GetPixel |
5201 | mov ecx, [Screen_Max_X] |
5217 | mov ecx, [_display.width] |
5202 | inc ecx |
- | |
5203 | xor edx, edx |
5218 | xor edx, edx |
5204 | mov eax, ebx |
5219 | mov eax, ebx |
5205 | div ecx |
5220 | div ecx |
5206 | mov ebx, edx |
5221 | mov ebx, edx |
5207 | xchg eax, ebx |
5222 | xchg eax, ebx |
Line 5326... | Line 5341... | ||
5326 | xor cl, cl |
5341 | xor cl, cl |
5327 | ror ecx, 8 |
5342 | ror ecx, 8 |
Line 5328... | Line 5343... | ||
5328 | 5343 | ||
5329 | pushad |
5344 | pushad |
5330 | mov edx, [d_width_calc_area + ebx*4] |
5345 | mov edx, [d_width_calc_area + ebx*4] |
5331 | add edx, [_WinMapAddress] |
5346 | add edx, [_display.win_map] |
5332 | movzx edx, byte [eax+edx] |
5347 | movzx edx, byte [eax+edx] |
5333 | cmp dl, byte 1 |
5348 | cmp dl, byte 1 |
Line 5334... | Line 5349... | ||
5334 | jne @f |
5349 | jne @f |
Line 5427... | Line 5442... | ||
5427 | mov ecx, [_display.height] |
5442 | mov ecx, [_display.height] |
5428 | mov edi, BPSLine_calc_area |
5443 | mov edi, BPSLine_calc_area |
5429 | cld |
5444 | cld |
5430 | @@: |
5445 | @@: |
5431 | stosd |
5446 | stosd |
5432 | add eax, [_display.pitch] |
5447 | add eax, [_display.lfb_pitch] |
5433 | dec ecx |
5448 | dec ecx |
5434 | jnz @r |
5449 | jnz @r |
5435 | ret |
5450 | ret |
5436 | ;------------------------------------------------------------------------------ |
5451 | ;------------------------------------------------------------------------------ |
5437 | align 4 |
5452 | align 4 |
Line 5442... | Line 5457... | ||
5442 | ; edx - new Screen_Max_Y |
5457 | ; edx - new Screen_Max_Y |
Line 5443... | Line 5458... | ||
5443 | 5458 | ||
5444 | pushfd |
5459 | pushfd |
Line 5445... | Line -... | ||
5445 | cli |
- | |
5446 | - | ||
5447 | mov [Screen_Max_X], eax |
5460 | cli |
Line 5448... | Line 5461... | ||
5448 | mov [Screen_Max_Y], edx |
5461 | |
5449 | mov [_display.pitch], ecx |
5462 | mov [_display.lfb_pitch], ecx |
Line 5450... | Line 5463... | ||
5450 | 5463 | ||
Line 5458... | Line 5471... | ||
5458 | pushad |
5471 | pushad |
Line 5459... | Line 5472... | ||
5459 | 5472 | ||
5460 | cmp [do_not_touch_winmap], 1 |
5473 | cmp [do_not_touch_winmap], 1 |
Line 5461... | Line 5474... | ||
5461 | je @f |
5474 | je @f |
Line 5462... | Line 5475... | ||
5462 | 5475 | ||
5463 | stdcall kernel_free, [_WinMapAddress] |
5476 | stdcall kernel_free, [_display.win_map] |
5464 | 5477 | ||
Line 5465... | Line 5478... | ||
5465 | mov eax, [_display.width] |
5478 | mov eax, [_display.width] |
5466 | mul [_display.height] |
5479 | mul [_display.height] |
5467 | mov [_WinMapSize], eax |
5480 | mov [_display.win_map_size], eax |
5468 | 5481 | ||
5469 | stdcall kernel_alloc, eax |
5482 | stdcall kernel_alloc, eax |
5470 | mov [_WinMapAddress], eax |
5483 | mov [_display.win_map], eax |
5471 | test eax, eax |
5484 | test eax, eax |
Line 5485... | Line 5498... | ||
5485 | popad |
5498 | popad |
Line 5486... | Line 5499... | ||
5486 | 5499 | ||
5487 | call repos_windows |
5500 | call repos_windows |
5488 | xor eax, eax |
5501 | xor eax, eax |
5489 | xor ebx, ebx |
5502 | xor ebx, ebx |
5490 | mov ecx, [Screen_Max_X] |
5503 | mov ecx, [_display.width] |
- | 5504 | mov edx, [_display.height] |
|
- | 5505 | dec ecx |
|
5491 | mov edx, [Screen_Max_Y] |
5506 | dec edx |
5492 | call calculatescreen |
5507 | call calculatescreen |
5493 | pop edi |
5508 | pop edi |
5494 | pop esi |
5509 | pop esi |
Line 5648... | Line 5663... | ||
5648 | call scan_rsdp |
5663 | call scan_rsdp |
5649 | jc no_acpi_power_off |
5664 | jc no_acpi_power_off |
5650 | .rsdp_found: |
5665 | .rsdp_found: |
5651 | mov esi, [eax+16] ; esi contains physical address of the RSDT |
5666 | mov esi, [eax+16] ; esi contains physical address of the RSDT |
5652 | mov ebp, [ipc_tmp] |
5667 | mov ebp, [ipc_tmp] |
5653 | stdcall map_page, ebp, esi, PG_MAP |
5668 | stdcall map_page, ebp, esi, PG_READ |
5654 | lea eax, [esi+1000h] |
5669 | lea eax, [esi+1000h] |
5655 | lea edx, [ebp+1000h] |
5670 | lea edx, [ebp+1000h] |
5656 | stdcall map_page, edx, eax, PG_MAP |
5671 | stdcall map_page, edx, eax, PG_READ |
5657 | and esi, 0xFFF |
5672 | and esi, 0xFFF |
5658 | add esi, ebp |
5673 | add esi, ebp |
5659 | cmp dword [esi], 'RSDT' |
5674 | cmp dword [esi], 'RSDT' |
5660 | jnz no_acpi_power_off |
5675 | jnz no_acpi_power_off |
5661 | mov ecx, [esi+4] |
5676 | mov ecx, [esi+4] |
Line 5665... | Line 5680... | ||
5665 | add esi, 24h |
5680 | add esi, 24h |
5666 | .scan_fadt: |
5681 | .scan_fadt: |
5667 | lodsd |
5682 | lodsd |
5668 | mov ebx, eax |
5683 | mov ebx, eax |
5669 | lea eax, [ebp+2000h] |
5684 | lea eax, [ebp+2000h] |
5670 | stdcall map_page, eax, ebx, PG_MAP |
5685 | stdcall map_page, eax, ebx, PG_READ |
5671 | lea eax, [ebp+3000h] |
5686 | lea eax, [ebp+3000h] |
5672 | add ebx, 0x1000 |
5687 | add ebx, 0x1000 |
5673 | stdcall map_page, eax, ebx, PG_MAP |
5688 | stdcall map_page, eax, ebx, PG_READ |
5674 | and ebx, 0xFFF |
5689 | and ebx, 0xFFF |
5675 | lea ebx, [ebx+ebp+2000h] |
5690 | lea ebx, [ebx+ebp+2000h] |
5676 | cmp dword [ebx], 'FACP' |
5691 | cmp dword [ebx], 'FACP' |
5677 | jz .fadt_found |
5692 | jz .fadt_found |
5678 | loop .scan_fadt |
5693 | loop .scan_fadt |
5679 | jmp no_acpi_power_off |
5694 | jmp no_acpi_power_off |
5680 | .fadt_found: |
5695 | .fadt_found: |
5681 | ; ebx is linear address of FADT |
5696 | ; ebx is linear address of FADT |
5682 | mov edi, [ebx+40] ; physical address of the DSDT |
5697 | mov edi, [ebx+40] ; physical address of the DSDT |
5683 | lea eax, [ebp+4000h] |
5698 | lea eax, [ebp+4000h] |
5684 | stdcall map_page, eax, edi, PG_MAP |
5699 | stdcall map_page, eax, edi, PG_READ |
5685 | lea eax, [ebp+5000h] |
5700 | lea eax, [ebp+5000h] |
5686 | lea esi, [edi+0x1000] |
5701 | lea esi, [edi+0x1000] |
5687 | stdcall map_page, eax, esi, PG_MAP |
5702 | stdcall map_page, eax, esi, PG_READ |
5688 | and esi, 0xFFF |
5703 | and esi, 0xFFF |
5689 | sub edi, esi |
5704 | sub edi, esi |
5690 | cmp dword [esi+ebp+4000h], 'DSDT' |
5705 | cmp dword [esi+ebp+4000h], 'DSDT' |
5691 | jnz no_acpi_power_off |
5706 | jnz no_acpi_power_off |
5692 | mov eax, [esi+ebp+4004h] ; DSDT length |
5707 | mov eax, [esi+ebp+4004h] ; DSDT length |
Line 5730... | Line 5745... | ||
5730 | jb @f |
5745 | jb @f |
5731 | sub esi, 0x1000 |
5746 | sub esi, 0x1000 |
5732 | add edi, 0x1000 |
5747 | add edi, 0x1000 |
5733 | push eax |
5748 | push eax |
5734 | lea eax, [ebp+4000h] |
5749 | lea eax, [ebp+4000h] |
5735 | stdcall map_page, eax, edi, PG_MAP |
5750 | stdcall map_page, eax, edi, PG_READ |
5736 | push PG_MAP |
5751 | push PG_READ |
5737 | lea eax, [edi+1000h] |
5752 | lea eax, [edi+1000h] |
5738 | push eax |
5753 | push eax |
5739 | lea eax, [ebp+5000h] |
5754 | lea eax, [ebp+5000h] |
5740 | push eax |
5755 | push eax |
5741 | stdcall map_page |
5756 | stdcall map_page |