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

📄 vgax.c

📁 著名操作系统Plan 9的第三版的部分核心源代码。现在很难找到了。Plan 9是bell实验室开发的Unix后继者。
💻 C
字号:
#include "u.h"#include "../port/lib.h"#include "mem.h"#include "dat.h"#include "fns.h"#include "../port/error.h"#define	Image	IMAGE#include <draw.h>#include <memdraw.h>#include <cursor.h>#include "screen.h"static Lock vgaxlock;			/* access to index registers */intvgaxi(long port, uchar index){	uchar data;	ilock(&vgaxlock);	switch(port){	case Seqx:	case Crtx:	case Grx:		outb(port, index);		data = inb(port+1);		break;	case Attrx:		/*		 * Allow processor access to the colour		 * palette registers. Writes to Attrx must		 * be preceded by a read from Status1 to		 * initialise the register to point to the		 * index register and not the data register.		 * Processor access is allowed by turning		 * off bit 0x20.		 */		inb(Status1);		if(index < 0x10){			outb(Attrx, index);			data = inb(Attrx+1);			inb(Status1);			outb(Attrx, 0x20|index);		}		else{			outb(Attrx, 0x20|index);			data = inb(Attrx+1);		}		break;	default:		iunlock(&vgaxlock);		return -1;	}	iunlock(&vgaxlock);	return data & 0xFF;}intvgaxo(long port, uchar index, uchar data){	ilock(&vgaxlock);	switch(port){	case Seqx:	case Crtx:	case Grx:		/*		 * We could use an outport here, but some chips		 * (e.g. 86C928) have trouble with that for some		 * registers.		 */		outb(port, index);		outb(port+1, data);		break;	case Attrx:		inb(Status1);		if(index < 0x10){			outb(Attrx, index);			outb(Attrx, data);			inb(Status1);			outb(Attrx, 0x20|index);		}		else{			outb(Attrx, 0x20|index);			outb(Attrx, data);		}		break;	default:		iunlock(&vgaxlock);		return -1;	}	iunlock(&vgaxlock);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -