Merge pull request #345 from askotx/master

Take some updates from https://github.com/askotx/vba-wii
This commit is contained in:
askotx 2016-12-11 17:03:40 -07:00 committed by GitHub
commit 6865461f14
15 changed files with 188 additions and 49 deletions

8
.gitignore vendored
View File

@ -1,4 +1,4 @@
/snes9x-gx.pnps
/snes9x-gx.pnproj
/build_wii
/executables
executables
build_wii
build_gc
dist

View File

@ -2,8 +2,8 @@
<app version="1">
<name>Visual Boy Advance GX</name>
<coder>Tantric</coder>
<version>2.3.5</version>
<release_date>20161210</release_date>
<version>2.3.6</version>
<release_date>20161211</release_date>
<short_description>GBA/GBC/GB Emulator</short_description>
<long_description>A port of Visual Boy Advance - M to the Wii.</long_description>
<ahb_access />

View File

@ -38,6 +38,13 @@ https://github.com/dborth/vbagx/releases
|0O×øo· UPDATE HISTORY ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
[2.3.6 - December 11, 2016]
* Restored Wiiflow mode plugin by fix94
* Restored fix filebrowser window overlapping
* Change all files End Of Line to windows mode
* Remove update check for updates
[2.3.5 - December 10, 2016]
* Hide saving dialog that pops up briefly when returning from a game
@ -1159,7 +1166,7 @@ switched items since then.
Additional coding Carl Kenner, dancinninjac
Menu artwork the3seashells
Menu sound Peter de Man
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
VBA GameCube/Wii SoftDev, emukidid

View File

@ -156,7 +156,6 @@ devicecallback (void *arg)
usleep(THREAD_SLEEP);
devsleep -= THREAD_SLEEP;
}
UpdateCheck();
}
return NULL;
}

View File

@ -39,7 +39,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
bgFileSelectionImg = new GuiImage(bgFileSelection);
bgFileSelectionImg->SetParent(this);
bgFileSelectionImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
bgFileSelectionEntry = new GuiImageData(bg_game_selection_entry_png);
iconFolder = new GuiImageData(icon_folder_png);
@ -52,7 +52,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
scrollbarImg = new GuiImage(scrollbar);
scrollbarImg->SetParent(this);
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
scrollbarImg->SetPosition(0, 30);
scrollbarImg->SetPosition(5, 30);
arrowDown = new GuiImageData(scrollbar_arrowdown_png);
arrowDownImg = new GuiImage(arrowDown);
@ -78,6 +78,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
arrowUpBtn->SetTrigger(trigHeldA);
arrowUpBtn->SetSoundOver(btnSoundOver);
arrowUpBtn->SetSoundClick(btnSoundClick);
arrowUpBtn->SetPosition(5, 0);
arrowDownBtn = new GuiButton(arrowDownImg->GetWidth(), arrowDownImg->GetHeight());
arrowDownBtn->SetParent(this);
@ -90,6 +91,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
arrowDownBtn->SetTrigger(trigHeldA);
arrowDownBtn->SetSoundOver(btnSoundOver);
arrowDownBtn->SetSoundClick(btnSoundClick);
arrowDownBtn->SetPosition(5, 0);
scrollbarBoxBtn = new GuiButton(scrollbarBoxImg->GetWidth(), scrollbarBoxImg->GetHeight());
scrollbarBoxBtn->SetParent(this);
@ -102,6 +104,7 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
scrollbarBoxBtn->SetClickable(false);
scrollbarBoxBtn->SetHoldable(true);
scrollbarBoxBtn->SetTrigger(trigHeldA);
scrollbarBoxBtn->SetPosition(5, 30);
for(int i=0; i<FILE_PAGESIZE; ++i)
{
@ -430,7 +433,7 @@ void GuiFileBrowser::Update(GuiTrigger * t)
if(positionWiimote > 0)
{
position = positionWiimote; // follow wiimote cursor
scrollbarBoxBtn->SetPosition(0,position+36);
scrollbarBoxBtn->SetPosition(5,position+36);
}
else if(listChanged || numEntries != browser.numEntries)
{
@ -446,7 +449,7 @@ void GuiFileBrowser::Update(GuiTrigger * t)
{
position = 156 * (browser.pageIndex + FILE_PAGESIZE/2) / (float)browser.numEntries;
}
scrollbarBoxBtn->SetPosition(0,position+36);
scrollbarBoxBtn->SetPosition(5,position+36);
}
listChanged = false;
@ -454,4 +457,4 @@ void GuiFileBrowser::Update(GuiTrigger * t)
if(updateCB)
updateCB(this);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -1212,7 +1212,6 @@ static int MenuGame()
// regardless of the weather, there should be no sun at night time!
time(&long_time); // Get time as long integer.
newtime = localtime(&long_time); // Convert to local time.
if (newtime->tm_hour > 21 || newtime->tm_hour < 5)
{
sprintf(s, "Weather: Night Time");
@ -3213,6 +3212,10 @@ static int MenuSettingsEmulation()
sprintf (options.value[0], "Super Game Boy");
else if (GCSettings.GBHardware == 3)
sprintf (options.value[0], "Game Boy");
else if (GCSettings.GBHardware == 4)
sprintf (options.value[0], "Game Boy Advance");
else if (GCSettings.GBHardware == 5)
sprintf (options.value[0], "Super Game Boy 2");
if (GCSettings.SGBBorder == 0)
sprintf (options.value[1], "Off");

View File

@ -166,12 +166,16 @@ preparePrefsData ()
createXMLSetting("LoadMethod", "Load Method", toStr(GCSettings.LoadMethod));
createXMLSetting("SaveMethod", "Save Method", toStr(GCSettings.SaveMethod));
createXMLSetting("LoadFolder", "Load Folder", GCSettings.LoadFolder);
createXMLSetting("LastFileLoaded", "Last File Loaded", GCSettings.LastFileLoaded);
createXMLSetting("SaveFolder", "Save Folder", GCSettings.SaveFolder);
createXMLSetting("AppendAuto", "Append Auto to .SAV Files", toStr(GCSettings.AppendAuto));
//createXMLSetting("CheatFolder", "Cheats Folder", GCSettings.CheatFolder);
createXMLSetting("ScreenshotsFolder", "Screenshots Folder", GCSettings.ScreenshotsFolder);
createXMLSetting("BorderFolder", "SGB Borders Folder", GCSettings.BorderFolder);
createXMLSetting("CoverFolder", "Covers Folder", GCSettings.CoverFolder);
createXMLSetting("ArtworkFolder", "Artworks Folder", GCSettings.ArtworkFolder);
createXMLSetting("ImageFolder", "Image Folder", GCSettings.ImageFolder);
createXMLSection("Network", "Network Settings");
createXMLSetting("smbip", "Share Computer IP", GCSettings.smbip);
@ -186,11 +190,14 @@ preparePrefsData ()
createXMLSetting("gbaZoomVert", "GBA Vertical Zoom Level", FtoStr(GCSettings.gbaZoomVert));
createXMLSetting("gbZoomHor", "GB Horizontal Zoom Level", FtoStr(GCSettings.gbZoomHor));
createXMLSetting("gbZoomVert", "GB Vertical Zoom Level", FtoStr(GCSettings.gbZoomVert));
createXMLSetting("gbFixed", "GB Fixed Pixel Ratio", toStr(GCSettings.gbFixed));
createXMLSetting("gbaFixed", "GBA Fixed Pixel Ratio", toStr(GCSettings.gbaFixed));
createXMLSetting("render", "Video Filtering", toStr(GCSettings.render));
createXMLSetting("scaling", "Aspect Ratio Correction", toStr(GCSettings.scaling));
createXMLSetting("xshift", "Horizontal Video Shift", toStr(GCSettings.xshift));
createXMLSetting("yshift", "Vertical Video Shift", toStr(GCSettings.yshift));
createXMLSetting("colorize", "Colorize Mono Gameboy", toStr(GCSettings.colorize));
createXMLSetting("gbaFrameskip", "GBA Frameskip", toStr(GCSettings.gbaFrameskip));
createXMLSection("Menu", "Menu Settings");
@ -214,6 +221,12 @@ preparePrefsData ()
createXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap", "Classic Controller");
createXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap", "Nunchuk");
createXMLSection("Emulation", "Emulation Settings");
createXMLSetting("OffsetMinutesUTC", "Offset from UTC (minutes)", toStr(GCSettings.OffsetMinutesUTC));
createXMLSetting("GBHardware", "Hardware (GB/GBC)", toStr(GCSettings.GBHardware));
createXMLSetting("SGBBorder", "Border (GB/GBC)", toStr(GCSettings.SGBBorder));
int datasize = mxmlSaveString(xml, (char *)savebuffer, SAVEBUFFERSIZE, XMLSaveCallback);
mxmlDelete(xml);
@ -456,6 +469,9 @@ decodePrefsData ()
result = false;
else if(verMajor < 2) // less than version 2.0.0
result = false; // reset settings (sorry, should update settings instead)
else if((verMajor*100 + verMinor*10 + verPoint) >
(curMajor*100 + curMinor*10 + curPoint)) // some future version
result = false; // reset settings
else
result = true;
}
@ -470,12 +486,16 @@ decodePrefsData ()
loadXMLSetting(&GCSettings.LoadMethod, "LoadMethod");
loadXMLSetting(&GCSettings.SaveMethod, "SaveMethod");
loadXMLSetting(GCSettings.LoadFolder, "LoadFolder", sizeof(GCSettings.LoadFolder));
loadXMLSetting(GCSettings.LastFileLoaded, "LastFileLoaded", sizeof(GCSettings.LastFileLoaded));
loadXMLSetting(GCSettings.SaveFolder, "SaveFolder", sizeof(GCSettings.SaveFolder));
loadXMLSetting(&GCSettings.AppendAuto, "AppendAuto");
//loadXMLSetting(GCSettings.CheatFolder, "CheatFolder", sizeof(GCSettings.CheatFolder));
loadXMLSetting(GCSettings.ScreenshotsFolder, "ScreenshotsFolder", sizeof(GCSettings.ScreenshotsFolder));
loadXMLSetting(GCSettings.BorderFolder, "BorderFolder", sizeof(GCSettings.BorderFolder));
loadXMLSetting(GCSettings.CoverFolder, "CoverFolder", sizeof(GCSettings.CoverFolder));
loadXMLSetting(GCSettings.ArtworkFolder, "ArtworkFolder", sizeof(GCSettings.ArtworkFolder));
loadXMLSetting(GCSettings.ImageFolder, "ImageFolder", sizeof(GCSettings.ImageFolder));
// Network Settings
loadXMLSetting(GCSettings.smbip, "smbip", sizeof(GCSettings.smbip));
@ -490,11 +510,14 @@ decodePrefsData ()
loadXMLSetting(&GCSettings.gbaZoomVert, "gbaZoomVert");
loadXMLSetting(&GCSettings.gbZoomHor, "gbZoomHor");
loadXMLSetting(&GCSettings.gbZoomVert, "gbZoomVert");
loadXMLSetting(&GCSettings.gbaFixed, "gbaFixed");
loadXMLSetting(&GCSettings.gbFixed, "gbFixed");
loadXMLSetting(&GCSettings.render, "render");
loadXMLSetting(&GCSettings.scaling, "scaling");
loadXMLSetting(&GCSettings.xshift, "xshift");
loadXMLSetting(&GCSettings.yshift, "yshift");
loadXMLSetting(&GCSettings.colorize, "colorize");
loadXMLSetting(&GCSettings.gbaFrameskip, "gbaFrameskip");
// Menu Settings
@ -506,11 +529,6 @@ decodePrefsData ()
loadXMLSetting(&GCSettings.language, "language");
loadXMLSetting(&GCSettings.PreviewImage, "PreviewImage");
// Emulation Settings
loadXMLSetting(&GCSettings.BasicPalette, "BasicPalette");
// Controller Settings
loadXMLSetting(&GCSettings.WiiControls, "WiiControls");
@ -518,6 +536,14 @@ decodePrefsData ()
loadXMLController(btnmap[CTRLR_WIIMOTE], "wmpadmap");
loadXMLController(btnmap[CTRLR_CLASSIC], "ccpadmap");
loadXMLController(btnmap[CTRLR_NUNCHUK], "ncpadmap");
// Emulation Settings
loadXMLSetting(&GCSettings.OffsetMinutesUTC, "OffsetMinutesUTC");
loadXMLSetting(&GCSettings.GBHardware, "GBHardware");
loadXMLSetting(&GCSettings.SGBBorder, "SGBBorder");
loadXMLSetting(&GCSettings.BasicPalette, "BasicPalette");
}
mxmlDelete(xml);
}
@ -592,9 +618,9 @@ void FixInvalidSettings()
GCSettings.SFXVolume = 40;
if(GCSettings.language < 0 || GCSettings.language >= LANG_LENGTH)
GCSettings.language = LANG_ENGLISH;
if(!(GCSettings.render >= 0 && GCSettings.render < 3))
if(!(GCSettings.render >= 0 && GCSettings.render < 5))
GCSettings.render = 1;
if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 5))
if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 7))
GCSettings.videomode = 0;
}
@ -613,13 +639,16 @@ DefaultSettings ()
GCSettings.SaveMethod = DEVICE_AUTO; // Auto, SD, USB, Network (SMB)
sprintf (GCSettings.LoadFolder, "%s/roms", APPFOLDER); // Path to game files
sprintf (GCSettings.SaveFolder, "%s/saves", APPFOLDER); // Path to save files
sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER); // Path to screenshot files
//sprintf (GCSettings.CheatFolder, "%s/cheats", APPFOLDER); // Path to cheat files
sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER);
sprintf (GCSettings.BorderFolder, "%s/borders", APPFOLDER);
sprintf (GCSettings.CoverFolder, "%s/covers", APPFOLDER); // Path to cover files
sprintf (GCSettings.ArtworkFolder, "%s/artworks", APPFOLDER); // Path to artwork files
sprintf (GCSettings.ImageFolder, "%s/screenshots", APPFOLDER);
GCSettings.AutoLoad = 1;
GCSettings.AutoSave = 1;
GCSettings.AppendAuto = 1;
GCSettings.WiimoteOrientation = 0;
@ -627,6 +656,8 @@ DefaultSettings ()
GCSettings.gbaZoomVert = 1.0; // GBA vertical zoom level
GCSettings.gbZoomHor = 1.0; // GBA horizontal zoom level
GCSettings.gbZoomVert = 1.0; // GBA vertical zoom level
GCSettings.gbFixed = 0; // not fixed - use zoom level
GCSettings.gbaFixed = 0; // not fixed - use zoom level
GCSettings.videomode = 0; // automatic video mode detection
GCSettings.render = 1; // Filtered
GCSettings.scaling = 1; // partial stretch
@ -635,6 +666,7 @@ DefaultSettings ()
GCSettings.xshift = 0; // horizontal video shift
GCSettings.yshift = 0; // vertical video shift
GCSettings.colorize = 0; // Colorize mono gameboy games
GCSettings.gbaFrameskip = 1; // Turn auto-frameskip on for GBA games
GCSettings.WiimoteOrientation = 0;
GCSettings.ExitAction = 0;
@ -656,6 +688,9 @@ DefaultSettings ()
#else
GCSettings.language = LANG_ENGLISH;
#endif
GCSettings.OffsetMinutesUTC = 0;
GCSettings.GBHardware = 0;
GCSettings.SGBBorder = 0;
}

View File

@ -244,14 +244,14 @@ ftgxCharData *FreeTypeGX::cacheGlyphData(wchar_t charCode)
textureHeight = adjustTextureHeight(glyphBitmap->rows);
this->fontData[charCode] = (ftgxCharData){
ftSlot->bitmap_left,
ftSlot->advance.x >> 6,
gIndex,
(s16)(ftSlot->bitmap_left),
(u16)(ftSlot->advance.x >> 6),
(u16)(gIndex),
textureWidth,
textureHeight,
ftSlot->bitmap_top,
ftSlot->bitmap_top,
glyphBitmap->rows - ftSlot->bitmap_top,
(s16)(ftSlot->bitmap_top),
(s16)(ftSlot->bitmap_top),
(s16)(glyphBitmap->rows - ftSlot->bitmap_top),
NULL
};
this->loadGlyphData(glyphBitmap, &this->fontData[charCode]);

View File

@ -116,3 +116,4 @@ blargg_err_t Gb_Apu::load_state( gb_apu_state_t const& in )
return 0;
}

View File

@ -17,6 +17,7 @@
#include <wiiuse/wpad.h>
#include <wupc/wupc.h>
#include <sys/iosupport.h>
#include <string>
#ifdef HW_RVL
#include <di/di.h>
@ -77,6 +78,26 @@ static void ExitCleanup()
void (*PSOReload) () = (void (*)()) 0x80001800;
#endif
void ExitToWiiflow()
{
ShutoffRumble();
SavePrefs(SILENT);
if (ROMLoaded && !ConfigRequested && GCSettings.AutoSave == 1)
SaveBatteryOrStateAuto(FILE_SRAM, SILENT);
ExitCleanup();
if( !!*(u32*)0x80001800 )
{
// Were we launched via HBC? (or via wiiflows stub replacement? :P)
exit(1);
}
else
{
// Wii channel support
SYS_ResetSystem( SYS_RETURNTOMENU, 0, 0 );
}
}
void ExitApp()
{
#ifdef HW_RVL
@ -379,6 +400,64 @@ int main(int argc, char *argv[])
gameScreenPng = (u8 *)malloc(512*1024);
InitGUIThreads();
bool autoboot = false;
if(argc > 3 && argv[1] != NULL && argv[2] != NULL && argv[3] != NULL)
{
autoboot = true;
ResetBrowser();
LoadPrefs();
if(strcasestr(argv[1], "sd:/") != NULL)
{
GCSettings.SaveMethod = DEVICE_SD;
GCSettings.LoadMethod = DEVICE_SD;
}
else
{
GCSettings.SaveMethod = DEVICE_USB;
GCSettings.LoadMethod = DEVICE_USB;
}
SavePrefs(SILENT);
selectLoadedFile = 1;
std::string dir(argv[1]);
dir.assign(&dir[dir.find_last_of(":") + 2]);
char arg_filename[1024];
strncpy(arg_filename, argv[2], sizeof(arg_filename));
strncpy(GCSettings.LoadFolder, dir.c_str(), sizeof(GCSettings.LoadFolder));
OpenGameList();
strncpy(GCSettings.Exit_Dol_File, argv[3], sizeof(GCSettings.Exit_Dol_File));
if(argc > 5 && argv[4] != NULL && argv[5] != NULL)
{
sscanf(argv[4], "%08x", &GCSettings.Exit_Channel[0]);
sscanf(argv[5], "%08x", &GCSettings.Exit_Channel[1]);
}
else
{
GCSettings.Exit_Channel[0] = 0x00010008;
GCSettings.Exit_Channel[1] = 0x57494948;
}
if(argc > 6 && argv[6] != NULL)
strncpy(GCSettings.LoaderName, argv[6], sizeof(GCSettings.LoaderName));
else
snprintf(GCSettings.LoaderName, sizeof(GCSettings.LoaderName), "WiiFlow");
for(int i = 0; i < browser.numEntries; i++)
{
// Skip it
if (strcmp(browserList[i].filename, ".") == 0 || strcmp(browserList[i].filename, "..") == 0)
continue;
if(strcasestr(browserList[i].filename, arg_filename) != NULL)
{
browser.selIndex = i;
if(IsSz())
{
BrowserLoadSz();
browser.selIndex = 1;
}
break;
}
}
BrowserLoadFile();
}
while(1) // main loop
{
// go back to checking if devices were inserted/removed
@ -387,13 +466,21 @@ int main(int argc, char *argv[])
SwitchAudioMode(1);
if(!ROMLoaded)
MainMenu(MENU_GAMESELECTION);
else
MainMenu(MENU_GAME);
if(!autoboot)
{
if(!ROMLoaded)
MainMenu(MENU_GAMESELECTION);
else
MainMenu(MENU_GAME);
ConfigRequested = 0;
ScreenshotRequested = 0;
}
else if(ROMLoaded && autoboot)
autoboot = false;
else
ExitApp();
ConfigRequested = 0;
ScreenshotRequested = 0;
SwitchAudioMode(0);
// stop checking if devices were removed/inserted

View File

@ -16,7 +16,7 @@
#include "utils/FreeTypeGX.h"
#define APPNAME "Visual Boy Advance GX"
#define APPVERSION "2.3.5"
#define APPVERSION "2.3.6"
#define APPFOLDER "vbagx"
#define PREF_FILE_NAME "settings.xml"
#define PAL_FILE_NAME "palettes.xml"
@ -68,23 +68,23 @@ enum
struct SGCSettings
{
float gbaZoomHor; // GBA horizontal zoom amount
float gbaZoomVert; // GBA vertical zoom amount
float gbZoomHor; // GB horizontal zoom amount
float gbZoomVert; // GB vertical zoom amount
int gbFixed;
int gbaFixed;
float gbaZoomVert; // GBA vertical zoom amount
float gbZoomHor; // GB horizontal zoom amount
float gbZoomVert; // GB vertical zoom amount
int gbFixed;
int gbaFixed;
int AutoLoad;
int AutoSave;
int LoadMethod; // For ROMS: Auto, SD, DVD, USB, Network (SMB)
int AutoSave;
int LoadMethod; // For ROMS: Auto, SD, DVD, USB, Network (SMB)
int SaveMethod; // For SRAM, Freeze, Prefs: Auto, SD, USB, SMB
int AppendAuto; // 0 - no, 1 - yes
int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz)
int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction
int AppendAuto; // 0 - no, 1 - yes
int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz)
int scaling; // 0 - default, 1 - partial stretch, 2 - stretch to fit, 3 - widescreen correction
int render; // 0 - original, 1 - filtered, 2 - unfiltered
int xshift; // video output shift
int yshift;
int colorize; // colorize Mono Gameboy games
int gbaFrameskip; // turn on auto-frameskip for GBA games
int colorize; // colorize Mono Gameboy games
int gbaFrameskip; // turn on auto-frameskip for GBA games
int WiiControls; // Match Wii Game
int WiimoteOrientation;
int ExitAction;
@ -108,6 +108,10 @@ struct SGCSettings
char ImageFolder[MAXPATHLEN]; //Saved image folder path
char BorderFolder[MAXPATHLEN]; // Path to Super Game Boy border files
char Exit_Dol_File[MAXPATHLEN]; // Exit Path
char LoaderName[20]; // Menu Loader Name
u32 Exit_Channel[2]; // Exit Channel
char smbip[80];
char smbuser[20];
char smbpwd[20];