From ab7d0506edc08ba048b6778f256504b0fc069ee5 Mon Sep 17 00:00:00 2001 From: Yourtion Date: Wed, 17 Sep 2014 16:47:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=8E=E9=BC=A0=E6=A0=87=E6=8E=A5=E6=94=B6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 07_day/bootpack.c | 25 +++++++++++++++++-------- 07_day/int.c | 14 ++++++++------ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/07_day/bootpack.c b/07_day/bootpack.c index 64dde54..8d2618d 100644 --- a/07_day/bootpack.c +++ b/07_day/bootpack.c @@ -3,14 +3,14 @@ #include "bootpack.h" #include -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); + } } } } diff --git a/07_day/int.c b/07_day/int.c index c8595e5..729510c 100644 --- a/07_day/int.c +++ b/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)