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

📄 ahead.c

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

#define AHEAD_A 0x10
#define AHEAD_B 0x20

static unsigned int ahead_chip, ahead_mem;

static char ahead_test(void)
{
	unsigned int old;
	char result;

	result = 0;
	old = rdinx(GRA_I, 0xF);
	wrinx(GRA_I, 0xF, 0);
	if (! testinx2(GRA_I, 0xC, 0xFB))
	{
		wrinx(GRA_I, 0xF, 0x20);
		if (testinx2(GRA_I, 0xC, 0xFB))
		{
			result = 1;
			switch(rdinx(GRA_I, 0xF) & 15)
			{
				case 0: ahead_chip = AHEAD_A; break;
				case 1: ahead_chip = AHEAD_B; break;
			}
			switch(rdinx(GRA_I, 0x1F) & 3)
			{
				case 0: ahead_mem = 256; break;
				case 1: ahead_mem = 512; break;
				case 3: ahead_mem = 1024; break;
			}
		}
	}
	wrinx(GRA_I, 0xF, old);
	return result;
}

static unsigned int ahead_chiptype(void)
{
	return ahead_chip;
}

static char * ahead_get_name(void)
{
	switch(ahead_chip)
	{
		case AHEAD_A: return "Ahead V5000A";
		case AHEAD_B: return "Ahead V5000B";
	}
	return "Acer Unknown";
}

static unsigned int ahead_memory(void)
{
	return ahead_mem;
}

static void ahead_setbank(unsigned int bank)
{
	unsigned char x;
	if (current_bank == bank)
 		return;
	current_bank = bank;
	if (ahead_chip == AHEAD_B)
		wrinx(GRA_I, 13, bank*17);
	else
	{
		wrinx(GRA_I, 13, bank >> 1);
		x = inportb(0x3cc) & 0xdf;
		if (bank % 2)
			x += 32;
		outportb(0x3c2, x);
	}
}

GraphicDriver ahead_driver =
{
	ahead_chiptype,
	ahead_get_name,
	ahead_memory,
	NULL,
	NULL,
	ahead_setbank
};

char Check_Ahead(GraphicDriver * driver)
{
	*driver = ahead_driver;
	return (ahead_test());
}

⌨️ 快捷键说明

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