/kernel/trunk/core/sys32.inc |
---|
48,7 → 48,7 |
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 |
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 |
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 |
/kernel/trunk/detect/commouse.inc |
---|
21,20 → 21,14 |
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 |
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 |
; ìûøüþ òèïà 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 "òèêîâ" |
/kernel/trunk/gui/event.inc |
---|
575,14 → 575,15 |
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 |
589,10 → 590,13 |
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 |
;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 |
;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 |
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 |
/kernel/trunk/hid/m_com1.inc |
---|
File deleted |
Property changes: |
Deleted: svn:keywords |
-Rev |
\ No newline at end of property |
/kernel/trunk/hid/m_com2.inc |
---|
File deleted |
Property changes: |
Deleted: svn:keywords |
-Rev |
\ No newline at end of property |
/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 |
Property changes: |
Added: svn:keywords |
+Rev |
\ No newline at end of property |
/kernel/trunk/hid/mousedrv.inc |
---|
24,12 → 24,13 |
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: |
/kernel/trunk/kernel.asm |
---|
3395,8 → 3395,14 |
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] |
/kernel/trunk/video/vesa20.inc |
---|
890,7 → 890,6 |
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) |