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

📄 neomagic.c

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

#define NM_UNKNOWN  0x00
#define NM_2070     0x10
#define NM_2090     0x20
#define NM_2093     0x40
#define NM_2160     0x80

unsigned int neo_chip, neo_mem;

char neo_test(void)
{
	unsigned int sub, x;
	char result;

	result = 0;
	x = rdinx(GRA_I, 9);
	wrinx(GRA_I, 9, 0);
	if (! testinx(GRA_I, 0x15))
	{
		wrinx(GRA_I, 9, 0x26);
		if (testinx(GRA_I, 0x15))
		{
			result = 1;
			sub = rdinx(CRT_I, 0x1A) & 0x1F;
			switch(sub)
			{
				case 0:	neo_chip = NM_2070;
					neo_mem = 896;
					break;
				case 1:	neo_chip = NM_2090;
					neo_mem = 1024;
					break;
				case 2:
				case 3:	neo_chip = NM_2093;
					neo_mem = 1024;
					break;
				case 4:	neo_chip = NM_2160;
					neo_mem = 1984;
					break;
				default: neo_chip = NM_UNKNOWN;
			}
		}
	}
	wrinx(GRA_I, 9, x);
	return result;
}

unsigned int neo_chiptype(void)
{
	return neo_chip;
}

unsigned int neo_memory(void)
{
	return neo_mem;
}

char * neo_get_name(void)
{
	switch(neo_chip)
	{
		case NM_2070 : return "NeoMagic NM2070";
		case NM_2090 : return "NeoMagic NM2090 (128V)";
		case NM_2093 : return "NeoMagic NM2093 (128ZV)";
		case NM_2160 : return "NeoMagic NM2160 (128XD)";
	}
	return "NeoMagic Unknown";
}

void neo_setbank(unsigned int bank)
{
        if (current_bank == bank)
                return;
        current_bank = bank;
	if (neo_chip <= NM_2090)
		bank <<= 2;
	wrinx(GRA_I, 0x15, bank << 2);
	wrinx(GRA_I, 0x16, bank << 2);
}

GraphicDriver neomagic_driver =
{
	neo_chiptype,
	neo_get_name,
	neo_memory,
	NULL,
	NULL,
	neo_setbank
};

char Check_NeoMagic(GraphicDriver * driver)
{
	*driver = neomagic_driver;
	return (neo_test());
}

⌨️ 快捷键说明

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