예제 #1
0
ROM_END

#define ROL(x,n) (BITSWAP8((x),(7+8-n)&7,(6+8-n)&7,(5+8-n)&7,(4+8-n)&7,(3+8-n)&7,(2+8-n)&7,(1+8-n)&7,(0+8-n)&7))

#define WRITEDEST( n ) \
		dest[idx]=n;    \
		dest[idx+0x10000]=(n)^0xff; \
		idx++;

DRIVER_INIT_MEMBER(tcl_state,tcl)
{
	/* only the first part is decrypted (and verified)*/

	address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
	UINT8 *dest = machine().root_device().memregion("maincpu")->base();
	int len = machine().root_device().memregion("maincpu")->bytes();
	UINT8 *src = auto_alloc_array(machine(), UINT8, len);

	int i,idx=0;
	memcpy(src, dest, len);
	for(i=0;i<64*1024;i+=4)
	{
		if(i&0x8000)
		{
			WRITEDEST(ROL(src[idx]^0x44,4)); // abcdefgh -> aFghaBcd
			WRITEDEST(ROL(src[idx]^0x44,7)); // abcdefgh -> haBcdeFg
			WRITEDEST(ROL(src[idx]^0x44,2)); // abcdefgh -> cdeFghaB
			WRITEDEST((src[idx]^0x44)^0xf0); // abcdefgh -> AbCEeFgh
		}
		else
		{
			WRITEDEST(ROL(src[idx]^0x11,4)); // abcdefgh -> efgHabcD
			WRITEDEST(ROL(src[idx]^0x11,7)); // abcdefgh -> HabcDefg
			WRITEDEST(ROL(src[idx]^0x11,2)); // abcdefgh -> cDefgHab
			WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
		}
	}
	auto_free(machine(), src);

	space.set_decrypted_region(0x0000, 0x7fff, dest+0x10000);
}
예제 #2
0
파일: tcl.c 프로젝트: Paulodx/sdl-mame-wii
ROM_END

#define ROL(x,n) (BITSWAP8((x),(7+8-n)&7,(6+8-n)&7,(5+8-n)&7,(4+8-n)&7,(3+8-n)&7,(2+8-n)&7,(1+8-n)&7,(0+8-n)&7))

#define WRITEDEST( n ) \
		dest[idx]=n;	\
		dest[idx+0x10000]=(n)^0xff;	\
		idx++;

static DRIVER_INIT(tcl)
{
	/* only the first part is decrypted (and verified)*/

	const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
	UINT8 *dest = memory_region(machine, "maincpu");
	int len = memory_region_length(machine, "maincpu");
	UINT8 *src = alloc_array_or_die(UINT8, len);

	int i,idx=0;
	memcpy(src, dest, len);
	for(i=0;i<64*1024;i+=4)
	{
		if(i&0x8000)
		{
			WRITEDEST(ROL(src[idx]^0x44,4)); // abcdefgh -> aFghaBcd
		 	WRITEDEST(ROL(src[idx]^0x44,7)); // abcdefgh -> haBcdeFg
		 	WRITEDEST(ROL(src[idx]^0x44,2)); // abcdefgh -> cdeFghaB
		 	WRITEDEST((src[idx]^0x44)^0xf0); // abcdefgh -> AbCEeFgh
		}
		else
		{
		 	WRITEDEST(ROL(src[idx]^0x11,4)); // abcdefgh -> efgHabcD
			WRITEDEST(ROL(src[idx]^0x11,7)); // abcdefgh -> HabcDefg
			WRITEDEST(ROL(src[idx]^0x11,2)); // abcdefgh -> cDefgHab
			WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
		}
	}
	free(src);

	memory_set_decrypted_region(space, 0x0000, 0x7fff, dest+0x10000);
}
예제 #3
0
ROM_END

#define ROL(x,n) (BITSWAP8((x),(7+8-n)&7,(6+8-n)&7,(5+8-n)&7,(4+8-n)&7,(3+8-n)&7,(2+8-n)&7,(1+8-n)&7,(0+8-n)&7))

#define WRITEDEST( n ) \
		dest[idx]=n;	\
		dest[idx+0x10000]=(n)^0xff;	\
		idx++;

DRIVER_INIT(tcl)
{
	/* only the first part is decrypted (and verified)*/

	UINT8 *dest = memory_region(REGION_CPU1);
	UINT8 *src = malloc_or_die(memory_region_length(REGION_CPU1));

	int i,idx=0;
	memcpy(src, dest, memory_region_length(REGION_CPU1));
	for(i=0;i<64*1024;i+=4)
	{
		if(i&0x8000)
		{
			WRITEDEST(ROL(src[idx]^0x44,4)); // abcdefgh -> aFghaBcd
		 	WRITEDEST(ROL(src[idx]^0x44,7)); // abcdefgh -> haBcdeFg
		 	WRITEDEST(ROL(src[idx]^0x44,2)); // abcdefgh -> cdeFghaB
		 	WRITEDEST((src[idx]^0x44)^0xf0); // abcdefgh -> AbCEeFgh
		}
		else
		{
		 	WRITEDEST(ROL(src[idx]^0x11,4)); // abcdefgh -> efgHabcD
			WRITEDEST(ROL(src[idx]^0x11,7)); // abcdefgh -> HabcDefg
			WRITEDEST(ROL(src[idx]^0x11,2)); // abcdefgh -> cDefgHab
			WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
		}
	}
	free(src);

	memory_set_decrypted_region(0, 0x0000, 0x7fff, dest+0x10000);
}
예제 #4
0
파일: tcl.cpp 프로젝트: Fulg/mame
ROM_END

#define ROL(x,n) (BITSWAP8((x),(7+8-n)&7,(6+8-n)&7,(5+8-n)&7,(4+8-n)&7,(3+8-n)&7,(2+8-n)&7,(1+8-n)&7,(0+8-n)&7))

#define WRITEDEST( n ) \
		dest[idx]=n;    \
		dest[idx+0x10000]=(n)^0xff; \
		idx++;

DRIVER_INIT_MEMBER(tcl_state,tcl)
{
	/* only the first part is decrypted (and verified)*/

	UINT8 *dest = memregion("maincpu")->base();
	int len = memregion("maincpu")->bytes();
	dynamic_buffer src(len);

	int i,idx=0;
	memcpy(&src[0], dest, len);
	for(i=0;i<64*1024;i+=4)
	{
		if(i&0x8000)
		{
			WRITEDEST(ROL(src[idx]^0x44,4)); // abcdefgh -> aFghaBcd
			WRITEDEST(ROL(src[idx]^0x44,7)); // abcdefgh -> haBcdeFg
			WRITEDEST(ROL(src[idx]^0x44,2)); // abcdefgh -> cdeFghaB
			WRITEDEST((src[idx]^0x44)^0xf0); // abcdefgh -> AbCEeFgh
		}
		else
		{
			WRITEDEST(ROL(src[idx]^0x11,4)); // abcdefgh -> efgHabcD
			WRITEDEST(ROL(src[idx]^0x11,7)); // abcdefgh -> HabcDefg
			WRITEDEST(ROL(src[idx]^0x11,2)); // abcdefgh -> cDefgHab
			WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
		}
	}
}
예제 #5
0
ROM_END

#define ROL(x,n) (BITSWAP8((x),(7+8-n)&7,(6+8-n)&7,(5+8-n)&7,(4+8-n)&7,(3+8-n)&7,(2+8-n)&7,(1+8-n)&7,(0+8-n)&7))

#define WRITEDEST( n ) \
		dest[idx]=n;	\
		dest[idx+0x10000]=(n)^0xff;	\
		idx++;

DRIVER_INIT(tcl)
{
	/* only the first part is decrypted (and verified)*/
	
	unsigned char *dest = memory_region(REGION_CPU1);
	unsigned char *src = memory_region(REGION_USER1);
	
	int i,idx=0;
	for(i=0;i<64*1024;i+=4)
	{
		if(i&0x8000)
		{
			WRITEDEST(ROL(src[idx]^0x44,4)); // abcdefgh -> aFghaBcd
		 	WRITEDEST(ROL(src[idx]^0x44,7)); // abcdefgh -> haBcdeFg 
		 	WRITEDEST(ROL(src[idx]^0x44,2)); // abcdefgh -> cdeFghaB
		 	WRITEDEST((src[idx]^0x44)^0xf0); // abcdefgh -> AbCEeFgh
		}
		else
		{
		 	WRITEDEST(ROL(src[idx]^0x11,4)); // abcdefgh -> efgHabcD 
			WRITEDEST(ROL(src[idx]^0x11,7)); // abcdefgh -> HabcDefg 
			WRITEDEST(ROL(src[idx]^0x11,2)); // abcdefgh -> cDefgHab
			WRITEDEST((src[idx]^0x11)^0xf0); // abcdefgh -> ABCdefgH
		}
	}

	memory_set_opcode_base(0,dest+0x10000);
}