⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 con_drv.c

📁 别人的根据linux0.11改的一个小的操作系统
💻 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 + -