From 96a714a9be330441b9ca13187941afb3654b25c3 Mon Sep 17 00:00:00 2001 From: Yourtion Date: Wed, 17 Sep 2014 15:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=96=84FIFO=E7=BC=93=E5=86=B2?= =?UTF-8?q?=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 07_day/bootpack.c | 11 ++++++----- 07_day/bootpack.h | 2 +- 07_day/int.c | 10 +++++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/07_day/bootpack.c b/07_day/bootpack.c index af6b399..aaec63f 100644 --- a/07_day/bootpack.c +++ b/07_day/bootpack.c @@ -29,13 +29,14 @@ void HariMain(void) for (;;) { io_cli(); - if (keybuf.next == 0) { + if (keybuf.len == 0) { io_stihlt(); } else { - i = keybuf.data[0]; - keybuf.next--; - for (j = 0; j < keybuf.next; j++) { - keybuf.data[j] = keybuf.data[j + 1]; + i = keybuf.data[keybuf.next_r]; + keybuf.len--; + keybuf.next_r++; + if (keybuf.next_r == 32) { + keybuf.next_r = 0; } io_sti(); sprintf(s, "%02X", i); diff --git a/07_day/bootpack.h b/07_day/bootpack.h index 9ef4c1a..0a9000e 100644 --- a/07_day/bootpack.h +++ b/07_day/bootpack.h @@ -76,7 +76,7 @@ void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar); /* int.c */ struct KEYBUF { unsigned char data[32]; - int next; + int next_r, next_w, len; }; void init_pic(void); void inthandler21(int *esp); diff --git a/07_day/int.c b/07_day/int.c index 2931081..bd4a18c 100644 --- a/07_day/int.c +++ b/07_day/int.c @@ -35,9 +35,13 @@ void inthandler21(int *esp) unsigned char data, s[4]; io_out8(PIC0_OCW2, 0x61); /* 通知PIC IRQ-01 已经受理完毕 */ data = io_in8(PORT_KEYDAT); - if (keybuf.next < 32) { - keybuf.data[keybuf.next] = data; - keybuf.next++; + if (keybuf.len < 32) { + keybuf.data[keybuf.next_w] = data; + keybuf.len++; + keybuf.next_w++; + if (keybuf.next_w == 32) { + keybuf.next_w = 0; + } } return; }