void GC_SetVideoMode(u8 videomode) { syssram *sram = __SYS_LockSram(); GXRModeObj *vmode = VIDEO_GetPreferredMode(0); int vmode_reg = 0; if(VIDEO_HaveComponentCable() && (CONF_GetProgressiveScan() > 0)) sram->flags |= 0x80; //set progressive flag else sram->flags &= 0x7F; //clear progressive flag if(videomode == 1) //pal { vmode_reg = 1; sram->flags |= 0x01; // Set bit 0 to set the video mode to PAL sram->ntd |= 0x40; //set pal60 flag } else //ntsc { sram->flags &= 0xFE; // Clear bit 0 to set the video mode to NTSC sram->ntd &= 0xBF; //clear pal60 flag } if(videomode == 1) vmode = &TVPal528IntDf; else vmode = &TVNtsc480IntDf; __SYS_UnlockSram(1); // 1 -> write changes while(!__SYS_SyncSram()); sram = NULL; /* Set video mode register */ *Video_Mode = vmode_reg; DCFlushRange((void*)Video_Mode, 4); /* Set video mode */ if(vmode != 0) VIDEO_Configure(vmode); /* Setup video */ VIDEO_SetBlack(FALSE); VIDEO_Flush(); VIDEO_WaitVSync(); if(vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); else while(VIDEO_GetNextField()) VIDEO_WaitVSync(); /* Set black and flush */ VIDEO_SetBlack(TRUE); VIDEO_Flush(); VIDEO_WaitVSync(); if(vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); else while(VIDEO_GetNextField()) VIDEO_WaitVSync(); }
void GC_SetVideoMode(u8 videomode, DML_CFG *BooterCFG, u8 DM_Patch) { syssram *sram; sram = __SYS_LockSram(); static GXRModeObj *rmode; int memflag = 0; if((VIDEO_HaveComponentCable() && (CONF_GetProgressiveScan() > 0)) || videomode > 3) sram->flags |= 0x80; //set progressive flag else sram->flags &= 0x7F; //clear progressive flag if(videomode == 1 || videomode == 3 || videomode == 5) { memflag = 1; sram->flags |= 0x01; // Set bit 0 to set the video mode to PAL sram->ntd |= 0x40; //set pal60 flag } else { sram->flags &= 0xFE; // Clear bit 0 to set the video mode to NTSC sram->ntd &= 0xBF; //clear pal60 flag } if(videomode == 1) { if(DM_Patch == VIDEO_PATCH_FORCE) BooterCFG->VideoMode |= DML_VID_FORCE_PAL50; rmode = &TVPal528IntDf; } else if(videomode == 2) { if(DM_Patch == VIDEO_PATCH_FORCE) BooterCFG->VideoMode |= DML_VID_FORCE_NTSC; rmode = &TVNtsc480IntDf; } else if(videomode == 3) { if(DM_Patch == VIDEO_PATCH_FORCE) BooterCFG->VideoMode |= DML_VID_FORCE_PAL60; rmode = &TVEurgb60Hz480IntDf; memflag = 5; } else if(videomode == 4 ||videomode == 6) { if(DM_Patch == VIDEO_PATCH_FORCE) BooterCFG->VideoMode |= DML_VID_FORCE_PROG; rmode = &TVNtsc480Prog; } else if(videomode == 5 || videomode == 7) { if(DM_Patch == VIDEO_PATCH_FORCE) BooterCFG->VideoMode |= DML_VID_FORCE_PROG; rmode = &TVEurgb60Hz480Prog; memflag = 5; } __SYS_UnlockSram(1); // 1 -> write changes while(!__SYS_SyncSram()); /* Set video mode register */ *(vu32 *)0x800000CC = memflag; DCFlushRange((void *)(0x800000CC), 4); /* Set video mode */ if (rmode != 0) VIDEO_Configure(rmode); /* Setup video */ VIDEO_SetBlack(TRUE); VIDEO_Flush(); VIDEO_WaitVSync(); if(rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); }
GXRModeObj * __Disc_SelectVMode(u8 videoselected, u64 chantitle) { vmode = VIDEO_GetPreferredMode(0); /* Get video mode configuration */ bool progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); /* Select video mode register */ switch (CONF_GetVideo()) { case CONF_VIDEO_PAL: if (CONF_GetEuRGB60() > 0) { vmode_reg = VI_EURGB60; vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } else vmode_reg = VI_PAL; break; case CONF_VIDEO_MPAL: vmode_reg = VI_MPAL; break; case CONF_VIDEO_NTSC: vmode_reg = VI_NTSC; break; } char Region; if(chantitle != 0) Region = ((u32)(chantitle) & 0xFFFFFFFF) % 256; else Region = diskid[3]; switch (videoselected) { case 0: // DEFAULT (DISC/GAME) /* Select video mode */ switch (Region) { case 'W': break; // Don't overwrite wiiware video modes. // PAL case 'D': case 'F': case 'P': case 'X': case 'Y': if (CONF_GetVideo() != CONF_VIDEO_PAL) { vmode_reg = VI_PAL; vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf; } break; // NTSC case 'E': case 'J': default: if (CONF_GetVideo() != CONF_VIDEO_NTSC) { vmode_reg = VI_NTSC; vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } break; } break; case 1: // PAL50 vmode = &TVPal528IntDf; vmode_reg = vmode->viTVMode >> 2; break; case 2: // PAL60 vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; vmode_reg = progressive ? TVEurgb60Hz480Prog.viTVMode >> 2 : vmode->viTVMode >> 2; break; case 3: // NTSC vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf; vmode_reg = vmode->viTVMode >> 2; break; case 4: // AUTO PATCH TO SYSTEM case 5: // SYSTEM break; case 6: // PROGRESSIVE 480P(NTSC + PATCH ALL) vmode = &TVNtsc480Prog; vmode_reg = vmode->viTVMode >> 2; break; default: break; } disc_vmode = vmode; return vmode; }
void __Disc_SetVMode(void) { GXRModeObj *vmode = NULL; u32 progressive, tvmode, vmode_reg = 0; /* Get video mode configuration */ progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); tvmode = CONF_GetVideo(); /* Select video mode register */ switch (tvmode) { case CONF_VIDEO_PAL: if (CONF_GetEuRGB60() > 0) { vmode_reg = 5; vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } else vmode_reg = 1; break; case CONF_VIDEO_MPAL: vmode_reg = 4; break; case CONF_VIDEO_NTSC: vmode_reg = 0; break; } /* Select video mode */ switch(diskid[3]) { /* PAL */ case 'D': case 'F': case 'P': case 'X': case 'Y': if (tvmode != CONF_VIDEO_PAL) { vmode_reg = 1; vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf; } break; /* NTSC or unknown */ case 'E': case 'J': if (tvmode != CONF_VIDEO_NTSC) { vmode_reg = 0; vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } break; } /* Set video mode register */ *(vu32 *)0x800000CC = vmode_reg; /* Set video mode */ if (vmode) Video_Configure(vmode); /* Clear screen */ Video_Clear(COLOR_BLACK); }
//--------------------------------------------------------------------------------- int main(int argc, char **argv) { //--------------------------------------------------------------------------------- s32 ret; u8 gamestatus = 0x03; u8 versionnumber = 0x80; u32 geckoidcheck; u8 oldconfigbytes[2]; ret = sd_init(); if(!ret){ sd_found = 0; } else { sd_found = 1; } if (*((u32 *) 0x80001804) == 0x53545542 && *((u32 *) 0x80001808) == 0x48415858) loaderhbc = 1; *(u32*)0xCD00643C = 0x00000000; // 32Mhz on Bus gecko_attached = usb_isgeckoalive(EXI_CHANNEL_1); if(gecko_attached){ gecko_channel = 1; if (EXI_GetID(gecko_channel, 0x80, &geckoidcheck) == 1) { if (geckoidcheck != 0) { gecko_attached = FALSE; goto slota; } } else { gecko_attached = FALSE; goto slota; } usb_flushnew(gecko_channel); goto slotb; } slota: gecko_attached = usb_isgeckoalive(EXI_CHANNEL_0); if(gecko_attached){ gecko_channel = 0; if (EXI_GetID(gecko_channel, 0x80, &geckoidcheck) == 1) { if (geckoidcheck != 0) { gecko_attached = FALSE; goto slotb; } } else { gecko_attached = FALSE; goto slotb; } usb_flushnew(gecko_channel); } slotb: sd_load_config(); tempgameconf = (char *) sdbuffer; autobootcheck = 1; memset(gameidbuffer, 0, 8); app_loadgameconfig(gameidbuffer); autobootcheck = 0; loadStartupIOS(); iosversion = IOS_GetVersion(); if(config_not_loaded == 0){ menu_load_config(); config_not_loaded = 1; } if (autoboothbc || !loaderhbc) { if (autoboot == 1) { rebooter_thread(); menu_number = 12; rebooter_thread_state = 0; } } else autoboot = 0; WPAD_Init(); PAD_Init(); VIDEO_Init(); AUDIO_Init (NULL); SYS_SetPowerCallback (power_cb); SYS_SetResetCallback (reset_cb); if (CONF_GetProgressiveScan() > 0 && VIDEO_HaveComponentCable()) { progmode = 1; } if (CONF_GetAspectRatio()) { widescreen = 1; } gfx_init(); gfx_load_gfx(); gfx_load_gfx1(); if (autoboot == 0 || autobootwait > 1) gfx_fade_logo(); VIDEO_WaitVSync(); if(!gecko_attached){ gecko_channel = 2; } gfx_int_stars(); while(1) { if(gecko_attached){ usb_recvbuffer(gecko_channel,&gecko_command,1); switch(gecko_command) { //case 0x04: // gecko_readmem(); //break; case 0x14: // Load DOL load_geckoexe(0); break; case 0x24: // Load DOL load_geckoexe(1); break; case 0x42: // Debugger on, pause start off config_bytes[7] = 0x01; config_bytes[5] = 0x00; usb_recvbuffer_safe(gecko_channel,&oldconfigbytes,2); // Get config config_bytes[0] = oldconfigbytes[0]; switch (oldconfigbytes[1]) { case 0x00: config_bytes[1] = 0x00; break; case 0x01: config_bytes[1] = 0x01; break; case 0x02: config_bytes[1] = 0x00; break; case 0x03: config_bytes[1] = 0x01; break; case 0x04: config_bytes[1] = 0x03; break; case 0x05: config_bytes[1] = 0x03; break; case 0x06: config_bytes[1] = 0x02; break; case 0x07: config_bytes[1] = 0x02; break; } menu_number = 8; apploader_thread(); gecko_command = 0; break; case 0x43: // Debugger on, pause start on config_bytes[7] = 0x01; config_bytes[5] = 0x01; usb_recvbuffer_safe(gecko_channel,&oldconfigbytes,2); // Get config config_bytes[0] = oldconfigbytes[0]; switch (oldconfigbytes[1]) { case 0x00: config_bytes[1] = 0x00; break; case 0x01: config_bytes[1] = 0x01; break; case 0x02: config_bytes[1] = 0x00; break; case 0x03: config_bytes[1] = 0x01; break; case 0x04: config_bytes[1] = 0x03; break; case 0x05: config_bytes[1] = 0x03; break; case 0x06: config_bytes[1] = 0x02; break; case 0x07: config_bytes[1] = 0x02; break; } menu_number = 8; apploader_thread(); gecko_command = 0; break; case 0x50: usb_sendbuffer_safe(gecko_channel,&gamestatus,1); break; case 0x99: usb_sendbuffer_safe(gecko_channel,&versionnumber,1); break; } } if(error_sd || confirm_sd || error_video){ sleep(1); error_sd = 0; confirm_sd = 0; error_video = 0; } if(loadedpng && !alphapng){ // if custom backdrop draw bubbles after image gfx_draw_image(0, 0, 640, 480, tex_logo1, 0, 1, 1,0xff); gfx_draw_stars(); } else{ gfx_draw_stars(); // else if own back drop do in this order due to border clip gfx_draw_image(0, 0, 640, 480, tex_logo1, 0, 1, 1,0xff); }; menu_draw(); gfx_render_direct(); } return 0; }
void __Disc_SetVMode(u8 videoselected) { GXRModeObj *vmode = NULL; u32 progressive, tvmode, vmode_reg = 0; /* Get video mode configuration */ progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); tvmode = CONF_GetVideo(); /* Select video mode register */ switch (tvmode) { case CONF_VIDEO_PAL: vmode_reg = (CONF_GetEuRGB60() > 0) ? 5 : 1; break; case CONF_VIDEO_MPAL: vmode_reg = 4; break; case CONF_VIDEO_NTSC: vmode_reg = 0; break; } switch (videoselected) { case 0: /* Select video mode */ switch (diskid[3]) { /* PAL */ case 'P': case 'D': case 'F': case 'I': case 'S': case 'H': case 'X': case 'Y': case 'Z': if (tvmode != CONF_VIDEO_PAL) { vmode_reg = 5; vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } break; /* NTSC or unknown */ case 'E': case 'J': case 'K': case 'W': if (tvmode != CONF_VIDEO_NTSC) { vmode_reg = 0; vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf; } break; } break; case 1: vmode = &TVPal528IntDf; vmode_reg = (vmode->viTVMode) >> 2; break; case 2: progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; vmode_reg = (vmode->viTVMode) >> 2; break; case 3: progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf; vmode_reg = (vmode->viTVMode) >> 2; break; case 4: // vmode = VIDEO_GetPreferredMode(NULL); break; } /* Set video mode register */ *Video_Mode = vmode_reg; /* Set video mode */ if (vmode) { VIDEO_Configure(vmode); /* Setup video */ VIDEO_SetBlack(FALSE); VIDEO_Flush(); VIDEO_WaitVSync(); if (vmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync(); } gprintf("\nVideo mode - %s",((progressive)?"progressive":"interlaced")); }
void __Disc_SelectVMode(u8 videoselected) { vmode = VIDEO_GetPreferredMode(0); /* Get video mode configuration */ bool progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable(); /* Select video mode register */ switch (CONF_GetVideo()) { case CONF_VIDEO_PAL: if (CONF_GetEuRGB60() > 0) { vmode_reg = VI_EURGB60; vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } else vmode_reg = VI_PAL; break; case CONF_VIDEO_MPAL: vmode_reg = VI_MPAL; break; case CONF_VIDEO_NTSC: vmode_reg = VI_NTSC; break; } switch (videoselected) { case 0: // DEFAULT (DISC/GAME) /* Select video mode */ switch (diskid[3]) { // PAL case 'D': case 'F': case 'P': case 'X': case 'Y': if (CONF_GetVideo() != CONF_VIDEO_PAL) { vmode_reg = VI_PAL; vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf; } break; // NTSC case 'E': case 'J': default: if (CONF_GetVideo() != CONF_VIDEO_NTSC) { vmode_reg = VI_NTSC; vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; } break; } break; case 1: // PAL50 vmode = &TVPal528IntDf; vmode_reg = vmode->viTVMode >> 2; break; case 2: // PAL60 vmode = progressive ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf; vmode_reg = progressive ? TVEurgb60Hz480Prog.viTVMode >> 2 : vmode->viTVMode >> 2; break; case 3: // NTSC vmode = progressive ? &TVNtsc480Prog : &TVNtsc480IntDf; vmode_reg = vmode->viTVMode >> 2; break; case 4: // AUTO PATCH TO SYSTEM case 5: // SYSTEM break; case 6: // PROGRESSIVE 480P(NTSC + PATCH ALL) vmode = &TVNtsc480Prog; vmode_reg = vmode->viTVMode >> 2; break; default: break; } }