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

📄 compaq.c

📁 nucleus_arm.rar
💻 C
字号:
#include <video/graphic.h>
#include <video/graph.h>
#include <support.h>

#define CPQ_UNKNOWN  0x000
#define CPQ_AVPORT   0x010
#define CPQ_IVGS     0x020
#define CPQ_AVGA     0x040
#define CPQ_QV       0x080	// The original QVision
#define CPQ_QV1024   0x100
#define CPQ_QV1280   0x200

static unsigned int compaq_chip, compaq_mem;

static char compaq_test(void)
{
	unsigned int old, sub;
	char result;

	result = 0;
	old = rdinx(GRA_I, 0xF);
	wrinx(GRA_I, 0xF, 0);
	if (! testinx(GRA_I, 0x45))
	{
		wrinx(GRA_I, 0xF, 5);
		if (testinx(GRA_I, 0x45))
		{
			result = 1;
			sub  = rdinx(GRA_I, 0xC) >> 3;
			switch(sub)
			{
				case 3: compaq_chip = CPQ_IVGS; break;
				case 5: compaq_chip = CPQ_AVGA; break;
				case 6: compaq_chip = CPQ_QV; break;
				case 0xE:
					compaq_chip = (rdinx(GRA_I, 0x56) & 4) ? CPQ_QV1280 : CPQ_QV1024;
					break;
				case 0x10: compaq_chip = CPQ_AVPORT; break;	// What is this ?
				default: compaq_chip = CPQ_UNKNOWN;
			}
			if ((rdinx(GRA_I, 0xC) & 0xB8) == 0x30)	// QVision
			{
				wrinx(GRA_I, 0xF, 5);
				switch(rdinx(GRA_I, 0x54))
				{
					case 0: compaq_mem = 1024; break;	// old QV1024 fix
					case 2: compaq_mem = 512; break;
					case 4: compaq_mem = 1024; break;
					case 8: compaq_mem = 2048; break;
				}
			}
                	else
				compaq_mem = 512;
		}
	}
	wrinx(GRA_I, 0xF, old);
	return result;
}

static unsigned int compaq_chiptype(void)
{
	return compaq_chip;
}

static unsigned int compaq_memory(void)
{
	return compaq_mem;
}

static char * compaq_get_name(void)
{
	switch(compaq_chip)
	{
		case CPQ_AVPORT: return "Compaq Adv VGA Port";
		case CPQ_IVGS  : return "Compaq IVGS";
		case CPQ_AVGA  : return "Compaq AVGA";
		case CPQ_QV    : return "Compaq QVision";
		case CPQ_QV1024: return "Compaq QVision 1024";
		case CPQ_QV1280: return "Compaq QVision 1280";
	}
	return "Compaq Unknown";
}

static void compaq_setbank(unsigned int bank)
{
	unsigned int x;
	if (current_bank == bank)
 		return;
	current_bank = bank;
	wrinx(GRA_I, 0xF, 5);
	bank <<= 1;
	if ((compaq_chip >= CPQ_QV1024) &&
		(inportb(0x23C7) & 0x10))
		x = 1;
	else
		x = 3;
	if ((compaq_chip == CPQ_AVGA) && (mem_mode == _pl4))
		x = 5;
	wrinx(GRA_I, 0x45, bank << x);
	if (rdinx(GRA_I, 0x40) & 1)
		bank++;
	wrinx(GRA_I, 0x46, bank << x);
}

GraphicDriver compaq_driver =
{
	compaq_chiptype,
	compaq_get_name,
	compaq_memory,
	NULL,
	NULL,
	compaq_setbank
};

char Check_Compaq(GraphicDriver * driver)
{
	*driver = compaq_driver;
	return (compaq_test());
}

⌨️ 快捷键说明

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