Subversion Repositories Kolibri OS

Rev

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