From 441fcf143a892520ae57c6dc9c0a99daebf68bbf Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Wed, 2 May 2007 12:06:10 +0000 Subject: [PATCH] * Unified COM1/COM2 mice handling. * Corrected COM mouse detection. * Mouse cursor can now be at right and bottom screen sides. * Normal handling of "desktop background redraw" event. (Background redraw is faster now.) * Fixed error in stretch background function for VESA 2.0. git-svn-id: svn://kolibrios.org@473 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/sys32.inc | 10 ++- kernel/trunk/detect/commouse.inc | 66 ++++++--------- kernel/trunk/gui/event.inc | 36 ++++---- kernel/trunk/hid/m_com.inc | 141 +++++++++++++++++++++++++++++++ kernel/trunk/hid/m_com1.inc | 138 ------------------------------ kernel/trunk/hid/m_com2.inc | 138 ------------------------------ kernel/trunk/hid/mousedrv.inc | 5 +- kernel/trunk/kernel.asm | 10 ++- kernel/trunk/video/vesa20.inc | 1 - 9 files changed, 204 insertions(+), 341 deletions(-) create mode 100644 kernel/trunk/hid/m_com.inc delete mode 100644 kernel/trunk/hid/m_com1.inc delete mode 100644 kernel/trunk/hid/m_com2.inc diff --git a/kernel/trunk/core/sys32.inc b/kernel/trunk/core/sys32.inc index 9d365e5e51..5ac9c68053 100644 --- a/kernel/trunk/core/sys32.inc +++ b/kernel/trunk/core/sys32.inc @@ -48,7 +48,7 @@ iglobal times 12 dd unknown_interrupt dd irq0 , irq_serv.irq_1, p_irq2 , p_irq3 ;irq_serv.irq_3 - dd irq_serv.irq_4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7 + dd p_irq4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7 dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10 dd irq_serv.irq_11,p_irq12,irqD ,p_irq14,p_irq15 @@ -245,7 +245,9 @@ p_irq3: mov es, ax cmp [com2_mouse_detected],0 je old_irq3_handler - call check_mouse_data_com2 + mov esi, com2_mouse + mov dx, 2F8h ;[COMPortBaseAddr] + call check_mouse_data_com jmp p_irq3_1 old_irq3_handler: mov edi,3 @@ -261,7 +263,9 @@ p_irq4: mov es, ax cmp [com1_mouse_detected],0 je old_irq4_handler - call check_mouse_data_com1 + mov esi, com1_mouse + mov dx, 3F8h ;[COMPortBaseAddr] + call check_mouse_data_com jmp p_irq4_1 old_irq4_handler: mov edi,4 diff --git a/kernel/trunk/detect/commouse.inc b/kernel/trunk/detect/commouse.inc index 8d8929d2d0..e6b6f4bf28 100644 --- a/kernel/trunk/detect/commouse.inc +++ b/kernel/trunk/detect/commouse.inc @@ -21,20 +21,14 @@ Detect_COM_Mouse: cmp AL,'M' jne @f mov [com1_mouse_detected],1 - pusha - - mov eax,4 - shl eax,2 - mov [irq_owner+eax], 1 - - inc dword [RESERVED_PORTS] - mov edi,[RESERVED_PORTS] - shl edi,4 - mov [RESERVED_PORTS+edi+0],dword 1 - mov [RESERVED_PORTS+edi+4],dword 0x3f0 - mov [RESERVED_PORTS+edi+8],dword 0x3ff - - popa + mov [irq_owner+4*4], 1 ; IRQ4 owner is System + mov eax, [RESERVED_PORTS] + inc eax + mov [RESERVED_PORTS], eax + shl eax, 4 + mov [RESERVED_PORTS+eax+0], dword 1 + mov [RESERVED_PORTS+eax+4], dword 0x3F8 + mov [RESERVED_PORTS+eax+8], dword 0x3FF mov esi,boot_setmouse_type+22 call boot_log @@: @@ -43,20 +37,14 @@ Detect_COM_Mouse: cmp AL,'M' jne @f mov [com2_mouse_detected],1 - pusha - - mov eax,3 - shl eax,2 - mov [irq_owner+eax], 1 - - inc dword [RESERVED_PORTS] - mov edi,[RESERVED_PORTS] - shl edi,4 - mov [RESERVED_PORTS+edi+0],dword 1 - mov [RESERVED_PORTS+edi+4],dword 0x2f0 - mov [RESERVED_PORTS+edi+8],dword 0x2ff - - popa + mov [irq_owner+3*4], 1 ; IRQ3 owner is System + mov eax, [RESERVED_PORTS] + inc eax + mov [RESERVED_PORTS], eax + shl eax, 4 + mov [RESERVED_PORTS+eax+0], dword 1 + mov [RESERVED_PORTS+eax+4], dword 0x2F8 + mov [RESERVED_PORTS+eax+8], dword 0x2FF mov esi,boot_setmouse_type+44 call boot_log @@: @@ -94,22 +82,24 @@ MouseSearch: ; мышью типа MSMouse ; Отключить питание мыши и прерывани mov DX,[COMPortBaseAddr] - add DX,4 ;регистр управления модемом + add EDX,4 ;регистр управления модемом mov AL,0 ;сбросить DTR, RTS и OUT2 out DX,AL ; Ожидать 5 "тиков" (0,2 с) - mov ecx,0xffff -dT_1: - dec ecx - cmp ecx,0 - jne dT_1 - mov ecx,0xffff + mov ecx, 0xFFFF + loop $ ; Включить питание мыши + mov al, 1 + out dx, al + mov ecx, 0xFFFF + loop $ + ; Очистить регистр данных + sub edx, 4 + in AL,DX + add edx, 4 mov AL,11b ;установить DTR и RTS out DX,AL - ; Очистить регистр данных - mov DX,[COMPortBaseAddr] - in AL,DX + mov ecx, 0x1FFFF ; Цикл опроса порта WaitData: ; Ожидать еще 10 "тиков" diff --git a/kernel/trunk/gui/event.inc b/kernel/trunk/gui/event.inc index c08fe8bd87..03f2b91e8e 100644 --- a/kernel/trunk/gui/event.inc +++ b/kernel/trunk/gui/event.inc @@ -575,24 +575,28 @@ get_event_for_app: no_eventoccur3: ;mov edi,[TASK_BASE] ; mouse event + mov eax, [CURRENT_TASK] + shl eax, 8 + add eax, SLOT_BASE test [edi+TASKDATA.event_mask],dword 00100000b jz no_mouse_event - mov eax, [CURRENT_TASK] - shl eax, 8 - test [eax+SLOT_BASE+APPDATA.event_mask],dword 00100000b + test [eax+APPDATA.event_mask],dword 00100000b jz no_mouse_event - and [eax+SLOT_BASE+APPDATA.event_mask],dword (not 00100000b) + and [eax+APPDATA.event_mask],dword (not 00100000b) popad mov eax,6 ret no_mouse_event: ;mov edi,[TASK_BASE] ; DESKTOP BACKGROUND REDRAW - test [edi+TASKDATA.event_mask],dword 16 + test [edi+TASKDATA.event_mask], 16 jz no_eventoccur5 - cmp [REDRAW_BACKGROUND],byte 2 - jnz no_eventoccur5 +; cmp [REDRAW_BACKGROUND],byte 2 +; jnz no_eventoccur5 + test [eax+APPDATA.event_mask], 16 + jz no_eventoccur5 + and [eax+APPDATA.event_mask], not 16 popad mov eax,5 ret @@ -601,11 +605,9 @@ no_eventoccur5: ;mov edi,[TASK_BASE] ; IPC test [edi+TASKDATA.event_mask],dword 01000000b jz no_ipc - mov eax, [CURRENT_TASK] - shl eax, 8 - test [eax+SLOT_BASE+APPDATA.event_mask],dword 01000000b + test [eax+APPDATA.event_mask],dword 01000000b jz no_ipc - and [eax+SLOT_BASE+APPDATA.event_mask],dword 0xffffffff-01000000b + and [eax+APPDATA.event_mask],dword 0xffffffff-01000000b popad mov eax,7 ret @@ -614,11 +616,9 @@ no_ipc: ;mov edi,[TASK_BASE] ; STACK test [edi+TASKDATA.event_mask],dword 10000000b jz no_stack_event - mov eax, [CURRENT_TASK] - shl eax, 8 - test [eax+SLOT_BASE+APPDATA.event_mask],dword 10000000b + test [eax+APPDATA.event_mask],dword 10000000b jz no_stack_event - and [eax+SLOT_BASE+APPDATA.event_mask],dword 0xffffffff-10000000b + and [eax+APPDATA.event_mask],dword 0xffffffff-10000000b popad mov eax,8 ret @@ -626,11 +626,9 @@ no_stack_event: test byte [edi+TASKDATA.event_mask+1], 1 ; DEBUG jz .test_IRQ - mov eax, [CURRENT_TASK] - shl eax, 8 - test byte [eax+SLOT_BASE+APPDATA.event_mask+1], byte 1 + test byte [eax+APPDATA.event_mask+1], byte 1 jz .test_IRQ - and byte [eax+SLOT_BASE+APPDATA.event_mask+1], not 1 + and byte [eax+APPDATA.event_mask+1], not 1 popad mov eax, 9 ret diff --git a/kernel/trunk/hid/m_com.inc b/kernel/trunk/hid/m_com.inc new file mode 100644 index 0000000000..ccfd8913f4 --- /dev/null +++ b/kernel/trunk/hid/m_com.inc @@ -0,0 +1,141 @@ +$Revision$ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +struc COM_MOUSE_DATA { +; Номер принимаемого от мыши байта + .MouseByteNumber db ? +; Трехбайтовая структура данных, передаваемая мышью + .FirstByte db ? + .SecondByte db ? + .ThirdByte db ? + .timer_ticks_com dd ? +} +virtual at 0 + COM_MOUSE_DATA COM_MOUSE_DATA +end virtual + +uglobal +com1_mouse COM_MOUSE_DATA +com2_mouse COM_MOUSE_DATA +endg + +;*************************************** +;* НОВЫЙ ОБРАБОТЧИК ПРЕРЫВАНИЯ ОТ МЫШИ * +;*************************************** +check_mouse_data_com: +; in: esi -> COM_MOUSE_DATA struc, dx = base port (xF8h) + add edx, 5 ; xFDh + in al, dx + test al, 1 ; Данные готовы? + jz .Error +; Ввести данные + sub edx, 5 + in al, dx +; Сбросить старший незначащий бит + and al, 01111111b + +; Определить порядковый номер принимаемого байта + cmp [esi+COM_MOUSE_DATA.MouseByteNumber], 2 + ja .Error + jz .ThirdByte + jp .SecondByte +; Сохранить первый байт данных +.FirstByte: + test al, 1000000b ; Первый байт посылки? + jz .Error + mov [esi+COM_MOUSE_DATA.FirstByte], al + inc [esi+COM_MOUSE_DATA.MouseByteNumber] + jmp .EndMouseInterrupt +; Сохранить второй байт данных +.SecondByte: + test al, 1000000b + jnz .Error + mov [esi+COM_MOUSE_DATA.SecondByte], al + inc [esi+COM_MOUSE_DATA.MouseByteNumber] + jmp .EndMouseInterrupt +; Сохранить третий байт данных +.ThirdByte: + test al, 1000000b + jnz .Error + mov [esi+COM_MOUSE_DATA.ThirdByte], al + mov [esi+COM_MOUSE_DATA.MouseByteNumber], 0 +; (Пакет данных от мыши принят полностью). +; Записать новое значение состояния кнопок мыши + mov al, [esi+COM_MOUSE_DATA.FirstByte] + mov ah, al + shr al, 3 + and al, 2 + shr ah, 5 + and ah, 1 + add al, ah + mov [BTN_DOWN], al + mov [mouse_active], 1 +; Прибавить перемещение по X к координате X + mov al, [esi+COM_MOUSE_DATA.FirstByte] + shl al, 6 + or al, [esi+COM_MOUSE_DATA.SecondByte] + call mouse_acceleration_com +; mouse acceleration + mov ecx, [timer_ticks] + sub ecx, [esi+COM_MOUSE_DATA.timer_ticks_com] + cmp ecx, [mouse_delay] + ja @f + imul ax, [mouse_speed_factor] +@@: + add ax, [MOUSE_X] +; Курсор не должен выходить за левую или правую границу экрана + js .x1 + cmp ax, [ScreenWidth] + jb .x2 +; Установить координату X по правой границе + mov ax, [ScreenWidth] + jmp .x2 +.x1: +; Установить координату X по левой границе + xor eax, eax +.x2: + mov [MOUSE_X], ax +; Прибавить перемещение по Y к координате Y + mov al, [esi+COM_MOUSE_DATA.FirstByte] + and al, 00001100b + shl al, 4 + or al, [esi+COM_MOUSE_DATA.ThirdByte] + call mouse_acceleration_com + add ax, [MOUSE_Y] +; Курсор не должен выходить за верхнюю или нижнюю границу экрана + js .y1 + cmp ax, [ScreenHeight] + jb .y2 +; Установить координату Y по нижней границе + mov ax, [ScreenHeight] + jmp .y2 +.y1: +; Установить координату Y по верхней границе + xor eax, eax +.y2: + mov [MOUSE_Y], ax + mov eax, [timer_ticks] + mov [esi+COM_MOUSE_DATA.timer_ticks_com], eax + jmp .EndMouseInterrupt + +.Error: +; Произошел сбой в порядке передачи информации от +; мыши, обнулить счетчик байтов пакета данных + mov [esi+COM_MOUSE_DATA.MouseByteNumber],0 +.EndMouseInterrupt: + jmp ready_for_next_irq + +mouse_acceleration_com: + cbw + mov ecx, [timer_ticks] + sub ecx, [esi+COM_MOUSE_DATA.timer_ticks_com] + cmp ecx, [mouse_delay] + ja @f + imul ax, [mouse_speed_factor] +@@: + ret diff --git a/kernel/trunk/hid/m_com1.inc b/kernel/trunk/hid/m_com1.inc deleted file mode 100644 index 0a62e47290..0000000000 --- a/kernel/trunk/hid/m_com1.inc +++ /dev/null @@ -1,138 +0,0 @@ -$Revision$ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Номер принимаемого от мыши байта -MouseByteNumber DB 0 -; Трехбайтовая структура данных, передаваемая мышью -FirstByte DB 0 -SecondByte DB 0 -ThirdByte DB 0 -timer_ticks_com dd 0 -;*************************************** -;* НОВЫЙ ОБРАБОТЧИК ПРЕРЫВАНИЯ ОТ МЫШИ * -;*************************************** -check_mouse_data_com1: -; cmp [com1_mouse_detected],0 -; je @@EndMouseInterrupt -; Проверить наличие данных - mov DX,3F8h ;[COMPortBaseAddr] - add DX,5 ;xFDh - in AL,DX - test AL,1 ;Данные готовы? - jz @@Error -; Ввести данные - mov DX,3F8h ;[COMPortBaseAddr] ;xF8h - in AL,DX -; Сбросить старший незначащий бит - and AL,01111111b - -; Определить порядковый номер принимаемого байта - cmp [MouseByteNumber],0 - je @@FirstByte - cmp [MouseByteNumber],1 - je @@SecondByte - cmp [MouseByteNumber],2 - je @@ThirdByte - jmp @@Error - -; Сохранить первый байт данных -@@FirstByte: - test AL,1000000b ;Первый байт посылки? - jz @@Error - mov [FirstByte],AL - inc [MouseByteNumber] ;увеличить счетчик - jmp @@EndMouseInterrupt -; Сохранить второй байт данных -@@SecondByte: - test AL,1000000b - jnz @@Error - mov [SecondByte],AL - inc [MouseByteNumber] ;увеличить счетчик - jmp @@EndMouseInterrupt -; Сохранить третий байт данных -@@ThirdByte: - test AL,1000000b - jnz @@Error - mov [ThirdByte],AL ;увеличить счетчик - mov [MouseByteNumber],0 -; (Пакет данных от мыши принят полностью). -; Записать новое значение состояния кнопок мыши - mov al,[FirstByte] ;[0xfb01] - mov ah,al - shr al,3 - and al,2 - shr ah,5 - and ah,1 - add al,ah - mov [BTN_DOWN],al - mov [mouse_active],1 -; Прибавить перемещение по X к координате X - mov AL,[FirstByte] - shl AL,6 - or AL,[SecondByte] - cbw - call mouse_acceleration_com1 - add AX,[MOUSE_X] ;[XCoordinate] - ; Курсор не должен выходить за левую или - ; правую границу экрана - js @@X1 - cmp AX,[ScreenWidth] ;ScreenLength - jb @@X2 - ; Установить координату X по правой границе - mov AX,[ScreenWidth] ;ScreenLength-1 - dec ax - jmp @@X2 -@@X1: - ; Установить координату X по левой границе - xor AX,AX -@@X2: - mov [MOUSE_X],AX ;[XCoordinate] - ; Прибавить перемещение по Y к координате Y - mov AL,[FirstByte] - and AL,00001100b - shl AL,4 - or AL,[ThirdByte] - cbw - call mouse_acceleration_com1 - add AX,[MOUSE_Y] ;[YCoordinate] - ; Курсор не должен выходить за верхнюю или - ; нижнюю границу экрана - js @@Y1 - cmp AX,[ScreenHeight] ;ScreenHeigth - jb @@Y2 - ; Установить координату X по нижней границе - mov AX,[ScreenHeight] ;ScreenHeigth-1 - dec ax - jmp @@Y2 -@@Y1: - ; Установить координату X по верхней границе - xor AX,AX -@@Y2: - mov [MOUSE_Y],AX ;[YCoordinate] - mov eax,[timer_ticks] - mov [timer_ticks_com],eax - jmp @@EndMouseInterrupt - -@@Error: -; Произошел сбой в порядке передачи информации от -; мыши, обнулить счетчик байтов пакета данных - mov [MouseByteNumber],0 -@@EndMouseInterrupt: - call ready_for_next_irq - ret - -mouse_acceleration_com1: - push eax - mov eax,[timer_ticks] - sub eax,[timer_ticks_com] - cmp eax,[mouse_delay] - pop eax - ja @f - imul ax,[mouse_speed_factor] -@@: - ret diff --git a/kernel/trunk/hid/m_com2.inc b/kernel/trunk/hid/m_com2.inc deleted file mode 100644 index 21cc457bcd..0000000000 --- a/kernel/trunk/hid/m_com2.inc +++ /dev/null @@ -1,138 +0,0 @@ -$Revision$ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Номер принимаемого от мыши байта -MouseByteNumber_1 DB 0 -; Трехбайтовая структура данных, передаваемая мышью -FirstByte_1 DB 0 -SecondByte_1 DB 0 -ThirdByte_1 DB 0 -timer_ticks_com_1 dd 0 -;*************************************** -;* НОВЫЙ ОБРАБОТЧИК ПРЕРЫВАНИЯ ОТ МЫШИ * -;*************************************** -check_mouse_data_com2: -; cmp [com2_mouse_detected],0 -; je @@EndMouseInterrupt_1 -; Проверить наличие данных - mov DX,2F8h ;[COMPortBaseAddr] - add DX,5 ;xFDh - in AL,DX - test AL,1 ;Данные готовы? - jz @@Error_1 -; Ввести данные - mov DX,2F8h ;[COMPortBaseAddr] ;xF8h - in AL,DX -; Сбросить старший незначащий бит - and AL,01111111b - -; Определить порядковый номер принимаемого байта - cmp [MouseByteNumber_1],0 - je @@FirstByte_1 - cmp [MouseByteNumber_1],1 - je @@SecondByte_1 - cmp [MouseByteNumber_1],2 - je @@ThirdByte_1 - jmp @@Error_1 - -; Сохранить первый байт данных -@@FirstByte_1: - test AL,1000000b ;Первый байт посылки? - jz @@Error_1 - mov [FirstByte_1],AL - inc [MouseByteNumber_1] ;увеличить счетчик - jmp @@EndMouseInterrupt_1 -; Сохранить второй байт данных -@@SecondByte_1: - test AL,1000000b - jnz @@Error_1 - mov [SecondByte_1],AL - inc [MouseByteNumber_1] ;увеличить счетчик - jmp @@EndMouseInterrupt_1 -; Сохранить третий байт данных -@@ThirdByte_1: - test AL,1000000b - jnz @@Error_1 - mov [ThirdByte_1],AL ;увеличить счетчик - mov [MouseByteNumber_1],0 -; (Пакет данных от мыши принят полностью). -; Записать новое значение состояния кнопок мыши - mov al,[FirstByte_1] ;[0xfb01] - mov ah,al - shr al,3 - and al,2 - shr ah,5 - and ah,1 - add al,ah - mov [BTN_DOWN],al - mov [mouse_active],1 -; Прибавить перемещение по X к координате X - mov AL,[FirstByte_1] - shl AL,6 - or AL,[SecondByte_1] - cbw - call mouse_acceleration_com2 - add AX,[MOUSE_X] ;[XCoordinate] - ; Курсор не должен выходить за левую или - ; правую границу экрана - js @@X1_1 - cmp AX,[ScreenWidth] ;ScreenLength - jb @@X2_1 - ; Установить координату X по правой границе - mov AX,[ScreenWidth] ;ScreenLength-1 - dec ax - jmp @@X2_1 -@@X1_1: - ; Установить координату X по левой границе - xor AX,AX -@@X2_1: - mov [MOUSE_X],AX ;[XCoordinate] - ; Прибавить перемещение по Y к координате Y - mov AL,[FirstByte_1] - and AL,00001100b - shl AL,4 - or AL,[ThirdByte_1] - cbw - call mouse_acceleration_com2 - add AX,[MOUSE_Y] ;[YCoordinate] - ; Курсор не должен выходить за верхнюю или - ; нижнюю границу экрана - js @@Y1_1 - cmp AX,[ScreenHeight] ;ScreenHeigth - jb @@Y2_1 - ; Установить координату X по нижней границе - mov AX,[ScreenHeight] ;ScreenHeigth-1 - dec ax - jmp @@Y2_1 -@@Y1_1: - ; Установить координату X по верхней границе - xor AX,AX -@@Y2_1: - mov [MOUSE_Y],AX ;[YCoordinate] - mov eax,[timer_ticks] - mov [timer_ticks_com_1],eax - jmp @@EndMouseInterrupt_1 - -@@Error_1: -; Произошел сбой в порядке передачи информации от -; мыши, обнулить счетчик байтов пакета данных - mov [MouseByteNumber_1],0 -@@EndMouseInterrupt_1: - call ready_for_next_irq - ret - -mouse_acceleration_com2: - push eax - mov eax,[timer_ticks] - sub eax,[timer_ticks_com_1] - cmp eax,[mouse_delay] - pop eax - ja @f - imul ax,[mouse_speed_factor] -@@: - ret diff --git a/kernel/trunk/hid/mousedrv.inc b/kernel/trunk/hid/mousedrv.inc index 01736c515f..1ec31c4964 100644 --- a/kernel/trunk/hid/mousedrv.inc +++ b/kernel/trunk/hid/mousedrv.inc @@ -24,12 +24,13 @@ uglobal mousedata dd 0x0 endg +iglobal mouse_delay dd 10 mouse_speed_factor dw 3 +endg include 'm_ps2.inc' -include 'm_com1.inc' -include 'm_com2.inc' +include 'm_com.inc' ;test_mario79: diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 0b61835bcd..597099f92c 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -3395,8 +3395,14 @@ mouse_not_active: jz nobackgr cmp [background_defined], 0 jz nobackgr - mov [REDRAW_BACKGROUND],byte 2 - call change_task +; mov [REDRAW_BACKGROUND],byte 2 +; call change_task + xor edi, edi + mov ecx, [TASK_COUNT] +set_bgr_event: + add edi, 256 + or [edi+SLOT_BASE+APPDATA.event_mask], 16 + loop set_bgr_event mov [draw_data+32 + RECT.left],dword 0 mov [draw_data+32 + RECT.top],dword 0 mov eax,[ScreenWidth] diff --git a/kernel/trunk/video/vesa20.inc b/kernel/trunk/video/vesa20.inc index 88417efd0f..08a9e9c01f 100644 --- a/kernel/trunk/video/vesa20.inc +++ b/kernel/trunk/video/vesa20.inc @@ -890,7 +890,6 @@ vesa20_drawbackground_stretch: push edx mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin) mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin) - dec ebx mov eax,[BytesPerScanLine] mul ebx xchg ebp, eax ; BytesPerScanLine*(Ywin+y)