forked from backup/30dayMakeOS
从鼠标接收数据
This commit is contained in:
@@ -3,14 +3,14 @@
|
||||
#include "bootpack.h"
|
||||
#include <stdio.h>
|
||||
|
||||
extern struct FIFO8 keyfifo;
|
||||
extern struct FIFO8 keyfifo, mousefifo;
|
||||
void enable_mouse(void);
|
||||
void init_keyboard(void);
|
||||
|
||||
void HariMain(void)
|
||||
{
|
||||
struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
|
||||
char s[40], mcursor[256], keybuf[32];
|
||||
char s[40], mcursor[256], keybuf[32], mousebuf[128];
|
||||
int mx, my, i;
|
||||
|
||||
init_gdtidt();
|
||||
@@ -18,6 +18,7 @@ void HariMain(void)
|
||||
io_sti(); /* IDT/PICの初期化が終わったのでCPUの割り込み禁止を解除 */
|
||||
|
||||
fifo8_init(&keyfifo, 32, keybuf);
|
||||
fifo8_init(&mousefifo, 128, mousebuf);
|
||||
io_out8(PIC0_IMR, 0xf9); /* PIC1とキーボードを許可(11111001) */
|
||||
io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */
|
||||
|
||||
@@ -36,14 +37,22 @@ void HariMain(void)
|
||||
|
||||
for (;;) {
|
||||
io_cli();
|
||||
if (fifo8_status(&keyfifo) == 0) {
|
||||
if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) {
|
||||
io_stihlt();
|
||||
} else {
|
||||
i = fifo8_get(&keyfifo);
|
||||
io_sti();
|
||||
sprintf(s, "%02X", i);
|
||||
boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31);
|
||||
putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s);
|
||||
if (fifo8_status(&keyfifo) != 0) {
|
||||
i = fifo8_get(&keyfifo);
|
||||
io_sti();
|
||||
sprintf(s, "%02X", i);
|
||||
boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31);
|
||||
putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s);
|
||||
} else if (fifo8_status(&mousefifo) != 0) {
|
||||
i = fifo8_get(&mousefifo);
|
||||
io_sti();
|
||||
sprintf(s, "%02X", i);
|
||||
boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 47, 31);
|
||||
putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
07_day/int.c
14
07_day/int.c
@@ -39,15 +39,17 @@ void inthandler21(int *esp)
|
||||
return;
|
||||
}
|
||||
|
||||
struct FIFO8 mousefifo;
|
||||
|
||||
void inthandler2c(int *esp)
|
||||
/* 来自PS/2鼠标的中断 */
|
||||
{
|
||||
struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
|
||||
boxfill8(binfo->vram, binfo->scrnx, COL8_000000, 0, 0, 32 * 8 - 1, 15);
|
||||
putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, "INT 2C (IRQ-12) : PS/2 mouse");
|
||||
for (;;) {
|
||||
io_hlt();
|
||||
}
|
||||
unsigned char data;
|
||||
io_out8(PIC1_OCW2, 0x64); /* 通知PIC IRQ-12 已经受理完毕 */
|
||||
io_out8(PIC0_OCW2, 0x62); /* 通知PIC IRQ-02 已经受理完毕 */
|
||||
data = io_in8(PORT_KEYDAT);
|
||||
fifo8_put(&mousefifo, data);
|
||||
return;
|
||||
}
|
||||
|
||||
void inthandler27(int *esp)
|
||||
|
||||
Reference in New Issue
Block a user