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

📄 smashtv.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 4 页
字号:
		}
		return value1;
	}
}

static int totcarn_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x7ddf0)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x7dde0)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffc0c970 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1000040, 0xa0, 0x90, INT16, INT16);
		}
		return value1;
	}
}
static int trogp_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0xa1ef0)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0xa1ee0)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe210d0 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1000040, 0xc0, 0xa0, INT32, INT32);
		}
		return value1;
	}
}
static int trog_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0xa20b0)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0xa20a0)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe20630 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1000040, 0xc0, 0xa0, INT32, INT32);
		}
		return value1;
	}
}
static int trog3_speedup_r(int offset)
{
	if (offset)
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0xa2090)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe20660 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1000040, 0xc0, 0xa0, INT32, INT32);
		}
		return value1;
	}
	else
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0xa2080)]);
	}
}
static int mk_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x4f050)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x4f040)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffce1ec0 && !value1)
		{
			DO_SPEEDUP_LOOP_3(0x104b6b0, 0x104b6f0, 0x104b710);
		}
		return value1;
	}
}
static int hiimpact_speedup_r(int offset)
{
	if (!offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x53140)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x53150)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe28bb0 && !value1)
		{
			DO_SPEEDUP_LOOP_3(0x1000080, 0x10000a0, 0x10000c0);
		}
		return value1;
	}
}
static int shimpact_speedup_r(int offset)
{
	if (!offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x52060)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x52070)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe27f00 && !value1)
		{
			DO_SPEEDUP_LOOP_3(0x1000000, 0x1000020, 0x1000040);
		}
		return value1;
	}
}

#define T2_FFC08C40																\
	a5x = (INT32)(DEREF_INT8(a1+0x2d0));			/* MOVB   *A1(2D0h),A5  */  \
	DEREF_INT8(a1+0x2d0) = a2 & 0xff;				/* MOVB   A2,*A1(2D0h)  */  \
	a3x = 0xf0;										/* MOVI   F0h,A3		*/	\
	a5x = (UINT32)a5x * (UINT32)a3x;				/* MPYU   A3,A5			*/	\
	a5x += 0x1008000;								/* ADDI   1008000h,A5	*/  \
	a3x = (UINT32)a2  * (UINT32)a3x;				/* MPYU   A2,A3			*/	\
	a3x += 0x1008000;								/* ADDI   1008000h,A3	*/  \
    a7x = (INT32)(DEREF_INT16(a1+0x190));			/* MOVE   *A1(190h),A7,0*/	\
    a6x = (INT32)(DEREF_INT16(a5x+0x50));			/* MOVE   *A5(50h),A6,0 */	\
	a7x -= a6x;										/* SUB    A6,A7			*/  \
    a6x = (INT32)(DEREF_INT16(a3x+0x50));			/* MOVE   *A3(50h),A6,0 */	\
	a7x += a6x;										/* ADD    A6,A7			*/  \
	DEREF_INT16(a1+0x190) = a7x & 0xffff;			/* MOVE   A7,*A1(190h),0*/	\
	a5x = DEREF_INT32(a5x+0xa0);					/* MOVE   *A5(A0h),A5,1 */	\
	a3x = DEREF_INT32(a3x+0xa0);					/* MOVE   *A3(A0h),A3,1 */	\
	a6x = DEREF_INT32(a1+0x140);					/* MOVE   *A1(140h),A6,1*/	\
	a6xa7x = (INT64)a6x * a3x / a5x;				/* MPYS   A3,A6			*/  \
													/* DIVS   A5,A6			*/  \
	DEREF_INT32(a1+0x140) = a6xa7x & 0xffffffff;	/* MOVE   A6,*A1(140h),1*/

static int term2_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0xaa050)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0xaa040)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffcdc270 && !value1)
		{
			INT32 a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a14,b0,b1,b2;
			INT32 a3x,a5x,a6x,a7x;
			INT64 a6xa7x;

			b1 = 0;			 									
			b2 = (INT32)(DEREF_INT16(0x100F640));				
			if (!b2)											
			{
				cpu_spinuntil_int();
				return value1;
			}
			b2--;												
			b0  = 0x01008000;									
			a4  = 0x7fffffff;									

			while (1)
			{
				
				a10 = b0;										
				a0  = a10;										
				a3  = a4;										
																
				if (b1 < b2)									
				{
					
					a4 = (INT32)(DEREF_INT16(a10+0xc0));		
					a4 <<= 16;									
				}
				else
				{
                    
					a4 = 0x80000000;							
				}												

				
				b0 += 0xf0;									    
				a6 = 0x80000000;                                
				a5 = 0x80000000;                                
				goto t2_FFC07DD0;								

			t2_FFC078C0:
				a8  = DEREF_INT32(a1+0x1c0);					
				a7  = DEREF_INT32(a1+0x1a0);					
				a14 = (INT32)(DEREF_INT16(a1+0x220));			
				if (a14 & 0x6000)								
				{												
					goto t2_FFC07C50;							
				}												

				if (a8 <= a3)									
				{
					goto t2_FFC07AE0;							
				}

				a2 = b1 - 1;									
				T2_FFC08C40										
				a14 = DEREF_INT32(a1);							
				DEREF_INT32(a0) = a14;							
				DEREF_INT32(a14+0x20) = a0;						
				a14 = b0 - 0x1e0;								
				DEREF_INT32(a1+0x20) = a14;						
				a9 = DEREF_INT32(a14);							
				DEREF_INT32(a14) = a1;							
				DEREF_INT32(a9+0x20) = a1;						
				DEREF_INT32(a1) = a9;							
				goto t2_FFC07DD0;								

			t2_FFC07AE0:
				if (a8 >= a4)									
				{
					goto t2_FFC07C50;							
				}

				a2 = b1 + 1;									
				T2_FFC08C40										
				a14 = DEREF_INT32(a1);							
				DEREF_INT32(a0) = a14;							
				DEREF_INT32(a14+0x20) = a0;						
				a14 = b0;										
				a9 = DEREF_INT32(a14+0x20);						
				DEREF_INT32(a1) = a14;							
				DEREF_INT32(a14+0x20) = a1;						
				DEREF_INT32(a9) = a1;							
				DEREF_INT32(a1+0x20) = a9;						
				goto t2_FFC07DD0;

			t2_FFC07C50:
				if (a8 > a6) 									
				{
					a1 = a0; 									
					a6 = a8; 									
					a5 = a7; 									
					goto t2_FFC07DD0;
				}

				if ((a8 == a6) && (a7 >= a5)) 					
				{
					a1 = a0; 									
					a6 = a8; 									
					a5 = a7; 									
					goto t2_FFC07DD0;
				}

				
				a14 = DEREF_INT32(a0+0x20);						
				DEREF_INT32(a14) = a1;							
				DEREF_INT32(a1+0x20) = a14;						
				a14 = DEREF_INT32(a1);							
				DEREF_INT32(a0) = a14;							
				DEREF_INT32(a1) = a0;							
				DEREF_INT32(a0 +0x20) = a1;						
				DEREF_INT32(a14+0x20) = a0;						

			t2_FFC07DD0:
				BURN_TIME(50);
				if (TMS34010_ICount <= 0)
				{
					break;
				}

				a1 = DEREF_INT32(a0);							
				if (a10 != a1)									
				{
					goto t2_FFC078C0;							
				}

				b1++;											
				if (b1 > b2)									
				{
					cpu_spinuntil_int();
					return value1;								
				}
			}
		}

		return value1;
	}
}
int strkforc_speedup_r(int offset)
{
	if (!offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x71dc0)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x71dd0)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xffe0a290 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1000060, 0xc0, 0xa0, INT32, INT32);
		}
		return value1;
	}
}
static int mk2_speedup_r(int offset)
{
	if (!offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x68e60)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x68e70)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xff80db70 && !value1)
		{
			DO_SPEEDUP_LOOP_3(0x105d480, 0x105d4a0, 0x105d4c0);
		}
		return value1;
	}
}
static int nbajam_speedup_r(int offset)
{
	if (offset)
	{
		return READ_WORD(&SCRATCH_RAM[TOBYTE(0x754d0)]);
	}
	else
	{
		UINT32 value1 = READ_WORD(&SCRATCH_RAM[TOBYTE(0x754c0)]);

		/* Suspend cpu if it's waiting for an interrupt */
		if (cpu_getpc() == 0xff833480 && !value1)
		{
			DO_SPEEDUP_LOOP_1(0x1008040, 0xd0, 0xb0, INT16, INT16);
		}
		return value1;
	}
}

static int narc_music_speedup_r (int offset)
{
	unsigned char a, b;
	a = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0228];
	b = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0226];
	if ((a==b)&&(cpu_getpc()==0xc786)) cpu_spinuntil_int();
	return a;
}
static int narc_digitizer_speedup_r (int offset)
{
	unsigned char a, b;
	a = Machine->memory_region[Machine->drv->cpu[2].memory_region][0x0228];
	b = Machine->memory_region[Machine->drv->cpu[2].memory_region][0x0226];
	if ((a==b)&&(cpu_getpc()==0xc786)) cpu_spinuntil_int();
	return a;
}
static int mk_sound_speedup_r (int offset)
{
	unsigned char a, b;
	a = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0218];
	b = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0216];
	if ((a==b)&&(cpu_getpc()==0xf579)) cpu_spinuntil_int(); /* MK */
	if ((a==b)&&(cpu_getpc()==0xf5db)) cpu_spinuntil_int(); /* totcarn */
	if ((a==b)&&(cpu_getpc()==0xf5d2)) cpu_spinuntil_int(); /* term2 */
	return a;
}
static int smashtv_sound_speedup_r (int offset)
{
	unsigned char a, b;
	a = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0218];
	b = Machine->memory_region[Machine->drv->cpu[1].memory_region][0x0216];
	if ((a==b)&&(cpu_getpc()==0x963d)) cpu_spinuntil_int(); /* smashtv */
	if ((a==b)&&(cpu_getpc()==0x97d1)) cpu_spinuntil_int(); /* trog, trogp */
	if ((a==b)&&(cpu_getpc()==0x97be)) cpu_spinuntil_int(); /* hiimpact */
	if ((a==b)&&(cpu_getpc()==0x984c)) cpu_spinuntil_int(); /* shimpact */
	if ((a==b)&&(cpu_getpc()==0x9883)) cpu_spinuntil_int(); /* strkforc */
	return a;
}

static void remove_access_errors(void)
{
	/* get rid of unmapped access errors during tests */
	install_mem_write_handler(0, TOBYTE(0x00200000), TOBYTE(0x0020003f), MWA_NOP);
	install_mem_write_handler(0, TOBYTE(0x01100000), TOBYTE(0x0110003f), MWA_NOP);
	install_mem_read_handler(0, TOBYTE(0x00200000), TOBYTE(0x0020003f), MRA_NOP);
	install_mem_read_handler(0, TOBYTE(0x01100000), TOBYTE(0x0110003f), MRA_NOP);
}


static void load_gfx_roms_4bit(void)
{
	int i;
	unsigned char d1,d2,d3,d4;
	unsigned char *mem_rom;
	memset(GFX_ROM,0,wms_gfx_rom_size);
	mem_rom = Machine->memory_region[2];
	/* load the graphics ROMs -- quadruples 2 bits each */
	for (i=0;i<wms_gfx_rom_size;i+=2)
	{
		d1 = ((mem_rom[                   (i  )/4])>>(2*((i  )%4)))&0x03;
		d2 = ((mem_rom[wms_gfx_rom_size/4+(i  )/4])>>(2*((i  )%4)))&0x03;
		d3 = ((mem_rom[                   (i+1)/4])>>(2*((i+1)%4)))&0x03;
		d4 = ((mem_rom[wms_gfx_rom_size/4+(i+1)/4])>>(2*((i+1)%4)))&0x03;
		WRITE_WORD(&GFX_ROM[i],d1|(d2<<2)|(d1<<4)|(d2<<6)|(d3<<8)|(d4<<10)|(d3<<12)|(d4<<14));
	}
	free(Machine->memory_region[2]);
	Machine->memory_region[2] = 0;
}
static void load_gfx_roms_6bit(void)
{
	int i;
	unsigned char d1,d2,d3,d4,d5,d6;
	unsigned char *mem_rom;
	memset(GFX_ROM,0,wms_gfx_rom_size);
	mem_rom = Machine->memory_region[2];
	/* load the graphics ROMs -- quadruples 2 bits each */
	for (i=0;i<wms_gfx_rom_size;i+=2)
	{
		d1 = ((mem_rom[                     (i  )/4])>>(2*((i  )%4)))&0x03;
		d2 = ((mem_rom[  wms_gfx_rom_size/4+(i  )/4])>>(2*((i  )%4)))&0x03;
		d3 = ((mem_rom[2*wms_gfx_rom_size/4+(i  )/4])>>(2*((i  )%4)))&0x03;
		d4 = ((mem_rom[                     (i+1)/4])>>(2*((i+1)%4)))&0x03;
		d5 = ((mem_rom[  wms_gfx_rom_size/4+(i+1)/4])>>(2*((i+1)%4)))&0x03;
		d6 = ((mem_rom[2*wms_gfx_rom_size/4+(i+1)/4])>>(2*((i+1)%4)))&0x03;
		WRITE_WORD(&GFX_ROM[i],d1|(d2<<2)|(d3<<4)|(d4<<8)|(d5<<10)|(d6<<12));
	}
	free(Machine->memory_region[2]);
	Machine->memory_region[2] = 0;
}
static void load_gfx_roms_8bit(void)
{
	int i;
	unsigned char d1,d2;
	unsigned char *mem_rom;
	memset(GFX_ROM,0,wms_gfx_rom_size);
	mem_rom = Machine->memory_region[2];
	/* load the graphics ROMs -- quadruples */
	for (i=0;i<wms_gfx_rom_size;i+=4)
	{
		d1 = mem_rom[                     i/4];
		d2 = mem_rom[  wms_gfx_rom_size/4+i/4];
		WRITE_WORD(&GFX_ROM[i  ],(unsigned int)((unsigned int)(d1) | ((unsigned int)(d2)<<8)));
		d1 = mem_rom[2*wms_gfx_rom_size/4+i/4];
		d2 = mem_rom[3*wms_gfx_rom_size/4+i/4];

⌨️ 快捷键说明

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