mirror of
https://github.com/yourtion/30dayMakeOS.git
synced 2026-05-03 03:40:30 +08:00
Add 11 day code
This commit is contained in:
39
11_day/keyboard.c
Normal file
39
11_day/keyboard.c
Normal file
@@ -0,0 +1,39 @@
|
||||
/* 键盘控制代码 */
|
||||
|
||||
#include "bootpack.h"
|
||||
|
||||
struct FIFO8 keyfifo;
|
||||
|
||||
void inthandler21(int *esp) {
|
||||
/* 来自PS/2键盘的中断 */
|
||||
struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
|
||||
unsigned char data, s[4];
|
||||
io_out8(PIC0_OCW2, 0x61); /* 通知PIC IRQ-01 已经受理完毕 */
|
||||
data = io_in8(PORT_KEYDAT);
|
||||
fifo8_put(&keyfifo, data);
|
||||
return;
|
||||
}
|
||||
|
||||
#define PORT_KEYSTA 0x0064
|
||||
#define KEYSTA_SEND_NOTREADY 0x02
|
||||
#define KEYCMD_WRITE_MODE 0x60
|
||||
#define KBC_MODE 0x47
|
||||
|
||||
void wait_KBC_sendready(void) {
|
||||
/* 等待键盘控制电路准备完毕 */
|
||||
for (;;) {
|
||||
if ((io_in8(PORT_KEYSTA) & KEYSTA_SEND_NOTREADY) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void init_keyboard(void) {
|
||||
/* 初始化键盘控制电路 */
|
||||
wait_KBC_sendready();
|
||||
io_out8(PORT_KEYCMD, KEYCMD_WRITE_MODE);
|
||||
wait_KBC_sendready();
|
||||
io_out8(PORT_KEYDAT, KBC_MODE);
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user