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

📄 turbo.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
字号:
/*************************************************************************
     Turbo - Sega - 1981

     Machine Hardware

*************************************************************************/

#include "driver.h"
#include "vidhrdw/generic.h"

int turbo_f8pa, turbo_f8pb, turbo_f8pc;
int turbo_f9pa, turbo_f9pb, turbo_f9pc;
int turbo_fbpla, turbo_fbcol;
unsigned char turbo_seg_digit[32];
static unsigned int turbo_seg_add, turbo_seg_auto_inc;

void turbo_unpack_sprites(int region, int size);
extern unsigned int turbo_collision;
extern unsigned char 	*turbo_SpritesCollisionTable;

void turbo_init_machine(void)
{
	turbo_unpack_sprites(3, 0x20000);
}

int turbo_interrupt(void)   
{
	return 1;
}

int turbo_fa00_r(int offset)
{
	switch (offset%4)
	{
		case 0x00:
			return 0xff;
		case 0x01:
			return 0xc0;
		case 0x02:
			return 0xaf;
		case 0x03:
			return 0xef;
		default:
			return 0;
	}
}

int turbo_fb00_r(int offset)
{
	switch (offset%4)
	{
		case 0x00:
			return readinputport(4);  
		case 0x01:
			return readinputport(2);  
		case 0x02:
			return 0x80;
		case 0x03:
			return 0x80;
		default:
			return 0;
	}
}

int turbo_fc00_r(int offset)
{
	switch (offset%2)
	{
		case 0x00:
			return readinputport(1);  
		case 0x01:
			return 0x10;
		default:
			return 0;
	}
}

int turbo_fd00_r(int offset)
{
	return readinputport(0); 
}

int turbo_fe00_r(int offset)
{
	return readinputport(3)|turbo_collision; 
}

void turbo_b800_w(int offset, int data)
{
	turbo_collision=0;
}

void turbo_f800_w(int offset, int data)
{
	switch (offset%4)
	{
		case 0x00:
			turbo_f8pa = data;
			break;
		case 0x01:
			turbo_f8pb = data;
			break;
		case 0x02:
			turbo_f8pc = data;
			break;
		case 0x03:
			break;
	}
}

void turbo_f900_w(int offset, int data)
{
	switch (offset%4)
	{
		case 0x00:
			turbo_f9pa = data;
			break;
		case 0x01:
			turbo_f9pb = data;
			break;
		case 0x02:
			turbo_f9pc = data;
			break;
		case 0x03:
			break;
	}
}

void turbo_fa00_w(int offset, int data)
{
	switch (offset%4)
	{
		case 0x00:
			if ((data&0x02)==0) /* Trig1 */
			{
				sample_start (0,0,0);
			}
			if ((data&0x04)==0) /* Trig2 */
			{
				sample_start (0,1,0);
			}
			if ((data&0x08)==0) /* Trig3 */
			{
				sample_start (0,2,0);
			}
			if ((data&0x10)==0) /* Trig4 */
			{
				sample_start (0,3,0);
			}
			break;
		case 0x01:
			if ((data&0x40)==0) /* Ambu */
			{
				if (!sample_playing(1)) sample_start (1,4,1);
			}
			else
			{
				sample_stop (1);
			}
			break;
		case 0x02:
			break;
		case 0x03:
			break;
	}
}

void turbo_fb00_w(int offset, int data)
{
	switch (offset%4)
	{
		case 0x02:
			turbo_fbpla = data&0x0f;
			if (turbo_fbcol != ((data&0x70)>>4))
			{
				turbo_fbcol = (data&0x70)>>4;
				memset(dirtybuffer,1,videoram_size);
			}
			break;
		case 0x03:
			break;
	}
}

void turbo_fc00_w(int offset, int data) /* 8279 */
{
	switch (offset%2)
	{
		case 0x00:
			turbo_seg_digit[turbo_seg_add*2] = (data&0x0f);
			turbo_seg_digit[turbo_seg_add*2+1] = ((data&0xf0)>>4);
			turbo_seg_add+=turbo_seg_auto_inc;
			if (turbo_seg_add==16) turbo_seg_add=0;
			break;
		case 0x01:
			switch (data&0xe0)
			{
				case 0x80:
					turbo_seg_add = data&0x0f;
					turbo_seg_auto_inc = 0;
					break;
				case 0x90:
					turbo_seg_add = data&0x0f;
					turbo_seg_auto_inc = 1;
					break;
				case 0xc0:
					memset(turbo_seg_digit,0,32);
					break;
			}
			break;
	}
}

⌨️ 快捷键说明

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