qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] ps/2 mouse handler interrupt


From: Andry
Subject: [Qemu-devel] ps/2 mouse handler interrupt
Date: Sat, 06 Nov 2004 22:21:30 -0800

Hello all,



I'm trying to write a basic mouse interrupt handler for a simple kernel, but
got stuck somewhere... Please, if anyone can tell me where I went wrong? 



This code is intended to run at the start of a kernel when we're still in
real mode. The mouse type i'm trying to handle is the ps/2 mouse.



Here's what I understand so far:





1) mouse events are reported to interrupt_vector_table entry number 0x000C
(COM1).



2) data bytes from mouse can be read at io port 0x03f8



3) each mouse event generates 3 interrupts, so giving us 3 bytes with the
following structure:



Data packet format

        D7      D6      D5      D4      D3      D2      D1      D0

1.      XV      XV      YS      XS      1       0       R       L

2.      X7      X6      X5      X4      X3      X2      X1      X0

3.      Y7      Y6      Y5      Y4      Y3      Y2      Y1      Y0



L       Left button state (1 = pressed down)

R       Right button state (1 = pressed down)

X0-X7   Movement in X direction

Y0-Y7   Movement in Y direction

XS,YS   Movement data sign bits (1 = negative)

XV,YV   Movement data overflow bits (1 = overflow has occured)

(from http://www.hut.fi/~then/mytexts/mouse.html)





The code I've written looks like this:



...

;init mouse

mov ax, 0

int 0x33



;replace mouse interrupt handler

push word 0

pop ds

cli

mov [4 * MOUSE_INTERRUPT], word mouseHandler

mov [4 * MOUSE_INTERRUPT + 2], cs

sti



jmp $

...



mouseHandler:

call printSomething

...

mov dx, 0x03f8

in al, dx         ;get one mouse data byte

...





The problem is that printSomething doesn't get called. So, am I using the
wrong interrupt_vector_table entry?



Also pls let me know if anything else is wrong with above code... i'm
relatively new to x86 assembly language.



Thanks,

Andre








reply via email to

[Prev in Thread] Current Thread [Next in Thread]