Esempio n. 1
0
bool Search_and_patch_Video_Modes(void *Address, u32 Size, GXRModeObj* Table[])
{
	u8 *Addr = (u8 *)Address;
	bool found = 0;
	u32 i;

	while(Size >= sizeof(GXRModeObj))
	{
		for(i = 0; Table[i]; i+=2)
		{
			if(compare_videomodes(Table[i], (GXRModeObj*)Addr))
			{
				found = 1;
				patch_videomode((GXRModeObj*)Addr, Table[i+1]);
				Addr += (sizeof(GXRModeObj)-4);
				Size -= (sizeof(GXRModeObj)-4);
				break;
			}
		}

		Addr += 4;
		Size -= 4;
	}

	return found;
}
Esempio n. 2
0
static bool Search_and_patch_Video_Modes(u8 * Address, u32 Size, GXRModeObj* Table[])
{
	u8 *Addr = (u8 *) Address;
	bool found = 0;
	u32 i, j;

	while (Size >= sizeof(GXRModeObj))
	{
		for (i = 0; Table[i]; i += 2)
		{
			if (compare_videomodes(Table[i], (GXRModeObj*) Addr))
			{
				u8 current_vmode = 0;
				u8 target_vmode = 0;
				for(j = 0; j < sizeof(vmodes)/sizeof(vmodes[0]); j++)
				{
					if(compare_videomodes(Table[i], vmodes[j]))
					{
						current_vmode = j;
						break;
					}
				}
				for(j = 0; j < sizeof(vmodes)/sizeof(vmodes[0]); j++)
				{
					if(compare_videomodes(Table[i+1], vmodes[j]))
					{
						target_vmode = j;
						break;
					}
				}

				debughelper_printf("Video mode found in dol: %s, replaced by: %s \n", vmodes_name[current_vmode], vmodes_name[target_vmode]);
				found = 1;
				patch_videomode((GXRModeObj*) Addr, Table[i + 1]);
				Addr += (sizeof(GXRModeObj) - 4);
				Size -= (sizeof(GXRModeObj) - 4);
				break;
			}
		}

		Addr += 4;
		Size -= 4;
	}

	return found;
}
Esempio n. 3
0
static bool Search_and_patch_Video_To(void *Address, u32 Size, GXRModeObj* Table[], GXRModeObj* rmode, bool patchAll)
{
	u8 *Addr = (u8 *)Address;
	bool found = 0;
	u32 i;
	
	u8 target_vmode = 0;
	for(i = 0; i < sizeof(vmodes)/sizeof(vmodes[0]); i++)
	{
		if(compare_videomodes(Table[i], rmode))
		{
			target_vmode = i;
			break;
		}
	}

	while(Size >= sizeof(GXRModeObj))
	{
		// Video mode pattern found
		if( (((GXRModeObj*)Addr)->fbWidth == 0x0280 && ((GXRModeObj*)Addr)->viWidth == 0x02c4) || // TVEurgb60Hz480Prog
		    (((GXRModeObj*)Addr)->fbWidth == 0x0280 && ((GXRModeObj*)Addr)->viWidth == 0x0280) )  // All other video modes
		{
			// display found video mode patterns
			GXRModeObj* vidmode = (GXRModeObj*)Addr;
			debughelper_printf("Video pattern found \t%08x %04x %04x %04x %04x %04x %04x %04x %08x %04x %04x ",
			vidmode->viTVMode, vidmode->fbWidth, vidmode->efbHeight, vidmode->xfbHeight, vidmode->viXOrigin, vidmode->viYOrigin, 
			vidmode->viWidth, vidmode->viHeight, vidmode->xfbMode, vidmode->field_rendering, vidmode->aa);
			debughelper_printf("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x ",
			vidmode->sample_pattern[0][0],  vidmode->sample_pattern[1][0],  vidmode->sample_pattern[2][0],  vidmode->sample_pattern[3][0], vidmode->sample_pattern[4][0],
			vidmode->sample_pattern[5][0],  vidmode->sample_pattern[6][0],  vidmode->sample_pattern[7][0],  vidmode->sample_pattern[8][0], vidmode->sample_pattern[9][0],
			vidmode->sample_pattern[10][0], vidmode->sample_pattern[11][0], vidmode->sample_pattern[0][1],  vidmode->sample_pattern[1][1], vidmode->sample_pattern[2][1],
			vidmode->sample_pattern[3][1],  vidmode->sample_pattern[4][1],  vidmode->sample_pattern[5][1],  vidmode->sample_pattern[6][1], vidmode->sample_pattern[7][1],
			vidmode->sample_pattern[8][1],  vidmode->sample_pattern[9][1],  vidmode->sample_pattern[10][1], vidmode->sample_pattern[11][1]);
			debughelper_printf("%02x%02x%02x%02x%02x%02x%02x \n",
			vidmode->vfilter[0], vidmode->vfilter[1] , vidmode->vfilter[2], vidmode->vfilter[3] , vidmode->vfilter[4],vidmode->vfilter[5], vidmode->vfilter[6]);

			found = 0;
			for(i = 0; i < sizeof(vmodes)/sizeof(vmodes[0]); i++)
			{
				if(compare_videomodes(Table[i], (GXRModeObj*)Addr))
				{
					found = 1;
					debughelper_printf("Video mode found in dol: %s, replaced by: %s \n", vmodes_name[i], vmodes_name[target_vmode]);
					patch_videomode((GXRModeObj*)Addr, rmode);
					Addr += (sizeof(GXRModeObj)-4);
					Size -= (sizeof(GXRModeObj)-4);
					break;
				}
				
			}
			if(patchAll && !found)
			{
				debughelper_printf("Video mode found in dol: Unknown, replaced by: %s \n", vmodes_name[target_vmode]);
				patch_videomode((GXRModeObj*)Addr, rmode);
				Addr += (sizeof(GXRModeObj)-4);
				Size -= (sizeof(GXRModeObj)-4);
			}
		}
		Addr += 4;
		Size -= 4;
	}

	return found;
}