Boot vectors doesn't load properly. V810 is just like I86 based machines, i.e. boot vectors are at the end of the memory space.

And basically 2097152 (0x200000) size ROMs boots, while all of the others don't.

Translated:

Code
	AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_ROM AM_REGION("user1", 0) /* ROM */

This loads plainly to memories 0x07000000 - 0x071fffff, that can be ok for 0x200000 sized roms, but for other games you put the data at 0x07000000 - 0x070fffff and 0x07000000 - 0x0707ffff ... but you must at least put it on the final 0x07180000 - 0x071fffff bank (and I presume the cart area is mirrored for these too)

It's probably easier to do than to explain ...

EDIT: whatever, just use this:

Code
static DEVICE_IMAGE_LOAD( vboy_cart )
{
	UINT32 size;
	UINT8 *ptr = memory_region(image.device().machine, "user1");

	if (image.software_entry() == NULL)
	{
		size = image.length();
		if (image.fread( ptr, size) != size)
			return IMAGE_INIT_FAIL;
	}
	else
	{
		size = image.get_software_region_length("rom");
		if(size == 0x200000)
			memcpy(ptr, image.get_software_region("rom"), size);
		else if(size == 0x100000)
		{
			memcpy(ptr, image.get_software_region("rom"), size);
			memcpy(ptr + 0x100000, image.get_software_region("rom"), size);
		}
		else if(size == 0x080000)
		{
			memcpy(ptr, image.get_software_region("rom"), size);
			memcpy(ptr + 0x080000, image.get_software_region("rom"), size);
			memcpy(ptr + 0x100000, image.get_software_region("rom"), size);
			memcpy(ptr + 0x180000, image.get_software_region("rom"), size);
		}
		else
			return IMAGE_INIT_FAIL;
	}

	return IMAGE_INIT_PASS;
}

Last edited by Kale; 11/16/10 10:17 PM.