📄 con_drv.c
字号:
#include <def.h>
#include <tty.h>
/*********************************************
*write a element into the queue
*you must specify the queue address
*********************************************/
void put_queue(struct _queue *q,char ch)
{
if(FULL(*q)){
return;
}
else{
q->data[q->tail++%MAX_CHAR]= ch;
}
}
/*********************************************
*read a element from the queue
*you must specify the queue address
********************************************/
char get_queue(struct _queue *q)
{
if(EMPTY(*q)){
q->head = 0;
q->tail = 0;
return;
}
else{
return q->data[q->head++%MAX_CHAR];
}
}
void tty_init()
{
tty[0].flags.f_echo = 1;
tty[0].raw.head = 0;
tty[0].raw.tail = 0;
tty[0].final.head = 0;
tty[0].final.tail = 0;
tty[0].write = con_write;
}
/********************************************
*initialize the char device
*
*******************************************/
void char_drv_init()
{
/*initialize console.keyboard and minitor*/
con_init();
tty_init();
set_trap(0x21,kb_interrupt); /*fill interrupt vector*/
outportb(0x21,inportb(0x21)&0xfd); /*open keyboard interrupt*/
}
/********************************************
*
********************************************/
static char key_map[0x7f] = {
0,27,
'`','!','@','#','$','%','&','/','(',')','=','?',
127,9,
'Q','W','E','R','T','Y','U','I','O','P',']','^',
10,0,
'A','S','D','F','G','H','J','K','L','\\','[',
0,0,
'*','Z','X','C','V','B','N','M',';',':','_',
0,'*',0,32, //36h-39h
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //3Ah-49h
'-',0,0,0,'+', //4A-4E
0,0,0,0,0,0,0, //4F-55
'>',
0,0,0,0,0,0,0,0,0,0};
/*
*
*/
void do_kb_interrupt(char scan_code)
{
char ch;
if(!(scan_code&0x80))
{
ch = key_map[scan_code];
put_queue(&tty[0].raw, ch);
put_queue(&tty[0].final, get_queue(&tty[0].raw));
putchark(ch);
//tty[0].write(&tty[0]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -