1 /*
\83}
\83E
\83X
\8aÖ
\8cW */
5 struct FIFO32 *mousefifo;
8 void inthandler2c(int *esp)
9 /* PS/2
\83}
\83E
\83X
\82©
\82ç
\82Ì
\8a\84\82è
\8d\9e\82Ý */
12 io_out8(PIC1_OCW2, 0x64); /* IRQ-12
\8eó
\95t
\8a®
\97¹
\82ðPIC1
\82É
\92Ê
\92m */
13 io_out8(PIC0_OCW2, 0x62); /* IRQ-02
\8eó
\95t
\8a®
\97¹
\82ðPIC0
\82É
\92Ê
\92m */
14 data = io_in8(PORT_KEYDAT);
15 fifo32_put(mousefifo, data + mousedata0);
19 #define KEYCMD_SENDTO_MOUSE 0xd4
20 #define MOUSECMD_ENABLE 0xf4
22 void enable_mouse(struct FIFO32 *fifo, int data0, struct MOUSE_DEC *mdec)
24 /*
\8f\91\82«
\8d\9e\82Ý
\90æ
\82ÌFIFO
\83o
\83b
\83t
\83@
\82ð
\8bL
\89¯ */
27 /*
\83}
\83E
\83X
\97L
\8cø */
29 io_out8(PORT_KEYCMD, KEYCMD_SENDTO_MOUSE);
31 io_out8(PORT_KEYDAT, MOUSECMD_ENABLE);
32 /*
\82¤
\82Ü
\82
\82¢
\82
\82ÆACK(0xfa)
\82ª
\91\97\90M
\82³
\82ê
\82Ä
\82
\82é */
33 mdec->phase = 0; /*
\83}
\83E
\83X
\82Ì0xfa
\82ð
\91Ò
\82Á
\82Ä
\82¢
\82é
\92i
\8aK */
37 int mouse_decode(struct MOUSE_DEC *mdec, unsigned char dat)
39 if (mdec->phase == 0) {
40 /*
\83}
\83E
\83X
\82Ì0xfa
\82ð
\91Ò
\82Á
\82Ä
\82¢
\82é
\92i
\8aK */
46 if (mdec->phase == 1) {
47 /*
\83}
\83E
\83X
\82Ì1
\83o
\83C
\83g
\96Ú
\82ð
\91Ò
\82Á
\82Ä
\82¢
\82é
\92i
\8aK */
48 if ((dat & 0xc8) == 0x08) {
49 /*
\90³
\82µ
\82¢1
\83o
\83C
\83g
\96Ú
\82¾
\82Á
\82½ */
55 if (mdec->phase == 2) {
56 /*
\83}
\83E
\83X
\82Ì2
\83o
\83C
\83g
\96Ú
\82ð
\91Ò
\82Á
\82Ä
\82¢
\82é
\92i
\8aK */
61 if (mdec->phase == 3) {
62 /*
\83}
\83E
\83X
\82Ì3
\83o
\83C
\83g
\96Ú
\82ð
\91Ò
\82Á
\82Ä
\82¢
\82é
\92i
\8aK */
65 mdec->btn = mdec->buf[0] & 0x07;
66 mdec->x = mdec->buf[1];
67 mdec->y = mdec->buf[2];
68 if ((mdec->buf[0] & 0x10) != 0) {
69 mdec->x |= 0xffffff00;
71 if ((mdec->buf[0] & 0x20) != 0) {
72 mdec->y |= 0xffffff00;
74 mdec->y = - mdec->y; /*
\83}
\83E
\83X
\82Å
\82Íy
\95û
\8cü
\82Ì
\95\84\8d\86\82ª
\89æ
\96Ê
\82Æ
\94½
\91Î */
77 return -1; /*
\82±
\82±
\82É
\97\88\82é
\82±
\82Æ
\82Í
\82È
\82¢
\82Í
\82¸ */