mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	added a module for loading bootable binaries
This commit is contained in:
		
							parent
							
								
									bf3938d56e
								
							
						
					
					
						commit
						8990b51ac8
					
				
					 6 changed files with 207 additions and 4 deletions
				
			
		|  | @ -47,8 +47,8 @@ enum LOG_TYPE { | |||
| 	STREAMINGINTERFACE, | ||||
| 	VIDEO, | ||||
| 	VIDEOINTERFACE, | ||||
| 	WII_IOB, | ||||
| 	WII_IPC, | ||||
| 	LOADER, | ||||
| 	FILESYS, | ||||
| 	WII_IPC_DVD, | ||||
| 	WII_IPC_ES, | ||||
| 	WII_IPC_FILEIO, | ||||
|  |  | |||
|  | @ -60,8 +60,8 @@ LogManager::LogManager() | |||
| 	m_Log[LogTypes::CONSOLE]			= new LogContainer("CONSOLE",		"Dolphin Console"); | ||||
| 	m_Log[LogTypes::OSREPORT]			= new LogContainer("OSREPORT",		"OSReport"); | ||||
| 	m_Log[LogTypes::WIIMOTE]			= new LogContainer("Wiimote",		"Wiimote"); | ||||
| 	m_Log[LogTypes::WII_IOB]			= new LogContainer("WII_IOB",		"WII IO Bridge"); | ||||
| 	m_Log[LogTypes::WII_IPC]			= new LogContainer("WII_IPC",		"WII IPC"); | ||||
| 	m_Log[LogTypes::LOADER]				= new LogContainer("Loader",		"Loader"); | ||||
| 	m_Log[LogTypes::FILESYS]			= new LogContainer("FileSys",		"File System"); | ||||
| 	m_Log[LogTypes::WII_IPC_HID]		= new LogContainer("WII_IPC_HID",	"WII IPC HID"); | ||||
| 	m_Log[LogTypes::WII_IPC_HLE]		= new LogContainer("WII_IPC_HLE",	"WII IPC HLE"); | ||||
| 	m_Log[LogTypes::WII_IPC_DVD]		= new LogContainer("WII_IPC_DVD",	"WII IPC DVD"); | ||||
|  |  | |||
|  | @ -137,6 +137,7 @@ | |||
|     <ClCompile Include="src\arm\arminit.cpp" /> | ||||
|     <ClCompile Include="src\arm\disassembler\arm_disasm.cpp" /> | ||||
|     <ClCompile Include="src\core.cpp" /> | ||||
|     <ClCompile Include="src\loader.cpp" /> | ||||
|     <ClCompile Include="src\mem_map.cpp" /> | ||||
|     <ClCompile Include="src\mem_map_funcs.cpp" /> | ||||
|   </ItemGroup> | ||||
|  | @ -155,6 +156,7 @@ | |||
|     <ClInclude Include="src\arm\mmu\wb.h" /> | ||||
|     <ClInclude Include="src\arm\skyeye_defs.h" /> | ||||
|     <ClInclude Include="src\core.h" /> | ||||
|     <ClInclude Include="src\loader.h" /> | ||||
|     <ClInclude Include="src\mem_map.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ | |||
|       <Filter>arm</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="src\mem_map_funcs.cpp" /> | ||||
|     <ClCompile Include="src\loader.cpp" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <Filter Include="arm"> | ||||
|  | @ -67,6 +68,7 @@ | |||
|     <ClInclude Include="src\arm\mmu\wb.h"> | ||||
|       <Filter>arm\mmu</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="src\loader.h" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="CMakeLists.txt" /> | ||||
|  |  | |||
							
								
								
									
										123
									
								
								src/core/src/loader.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								src/core/src/loader.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,123 @@ | |||
| /**
 | ||||
|  * Copyright (C) 2013 Citrus Emulator | ||||
|  * | ||||
|  * @file    loader.cpp | ||||
|  * @author  ShizZy <shizzy247@gmail.com> | ||||
|  * @date    2013-09-18 | ||||
|  * @brief   Loads bootable binaries into the emu | ||||
|  * | ||||
|  * @section LICENSE | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of | ||||
|  * the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details at | ||||
|  * http://www.gnu.org/copyleft/gpl.html
 | ||||
|  * | ||||
|  * Official project repository can be found at: | ||||
|  * http://code.google.com/p/gekko-gc-emu/
 | ||||
|  */ | ||||
| 
 | ||||
| #include "file_util.h" | ||||
| #include "loader.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| bool _Load_BIN(std::string &filename) { | ||||
| 	File::IOFile f(filename, "rb"); | ||||
| 	if (f.IsOpen()) { | ||||
| 		// TODO(ShizZy): read here to memory....
 | ||||
| 	} | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| namespace Loader { | ||||
| 
 | ||||
| /**
 | ||||
|  * Identifies the type of a bootable file | ||||
|  * @param filename String filename of bootable file | ||||
|  * @todo (ShizZy) this function sucks... make it actually check file contents etc. | ||||
|  * @return FileType of file | ||||
|  */ | ||||
| FileType IdentifyFile(std::string &filename) { | ||||
| 	if (filename.size() == 0) { | ||||
| 		ERROR_LOG(LOADER, "invalid filename %s", filename.c_str()); | ||||
| 		return FILETYPE_ERROR; | ||||
| 	} | ||||
| 	std::string extension = filename.size() >= 5 ? filename.substr(filename.size() - 4) : ""; | ||||
| 	 | ||||
| 	if (File::IsDirectory(filename)) { | ||||
| 		return FILETYPE_NORMAL_DIRECTORY; | ||||
| 	} else if (!strcasecmp(extension.c_str(),".bin")) { | ||||
| 		return FILETYPE_3DS_BIN; | ||||
| 	} else if (!strcasecmp(extension.c_str(),".zip")) { | ||||
| 		return FILETYPE_ARCHIVE_ZIP; | ||||
| 	} else if (!strcasecmp(extension.c_str(),".rar")) { | ||||
| 		return FILETYPE_ARCHIVE_RAR; | ||||
| 	} else if (!strcasecmp(extension.c_str(),".r00")) { | ||||
| 		return FILETYPE_ARCHIVE_RAR; | ||||
| 	} else if (!strcasecmp(extension.c_str(),".r01")) { | ||||
| 		return FILETYPE_ARCHIVE_RAR; | ||||
| 	} | ||||
| 	return FILETYPE_UNKNOWN; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Identifies and loads a bootable file | ||||
|  * @param filename String filename of bootable file | ||||
|  * @param error_string Point to string to put error message if an error has occurred | ||||
|  * @return True on success, otherwise false | ||||
|  */ | ||||
| bool LoadFile(std::string &filename, std::string *error_string) { | ||||
| 	INFO_LOG(LOADER,"Identifying file..."); | ||||
| 	// Note that this can modify filename!
 | ||||
| 	switch (IdentifyFile(filename)) { | ||||
| 	 | ||||
| 	case FILETYPE_3DS_BIN: | ||||
| 		{ | ||||
| 			INFO_LOG(LOADER,"File is a BIN !"); | ||||
| 			return _Load_BIN(filename); | ||||
| 		} | ||||
| 
 | ||||
| 	case FILETYPE_ERROR: | ||||
| 		ERROR_LOG(LOADER, "Could not read file"); | ||||
| 		*error_string = "Error reading file"; | ||||
| 		break; | ||||
| 
 | ||||
| 	case FILETYPE_ARCHIVE_RAR: | ||||
| #ifdef WIN32 | ||||
| 		*error_string = "RAR file detected (Require WINRAR)"; | ||||
| #else | ||||
| 		*error_string = "RAR file detected (Require UnRAR)"; | ||||
| #endif | ||||
| 		break; | ||||
| 
 | ||||
| 	case FILETYPE_ARCHIVE_ZIP: | ||||
| #ifdef WIN32 | ||||
| 		*error_string = "ZIP file detected (Require WINRAR)"; | ||||
| #else | ||||
| 		*error_string = "ZIP file detected (Require UnRAR)"; | ||||
| #endif | ||||
| 		break; | ||||
| 
 | ||||
| 	case FILETYPE_NORMAL_DIRECTORY: | ||||
| 		ERROR_LOG(LOADER, "Just a directory."); | ||||
| 		*error_string = "Just a directory."; | ||||
| 		break; | ||||
| 
 | ||||
| 	case FILETYPE_UNKNOWN_BIN: | ||||
| 	case FILETYPE_UNKNOWN_ELF: | ||||
| 	case FILETYPE_UNKNOWN: | ||||
| 	default: | ||||
| 		ERROR_LOG(LOADER, "Failed to identify file"); | ||||
| 		*error_string = "Failed to identify file"; | ||||
| 		break; | ||||
| 	} | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
							
								
								
									
										76
									
								
								src/core/src/loader.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/core/src/loader.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| /**
 | ||||
|  * Copyright (C) 2013 Citrus Emulator | ||||
|  * | ||||
|  * @file    loader.h | ||||
|  * @author  ShizZy <shizzy247@gmail.com> | ||||
|  * @date    2013-09-18 | ||||
|  * @brief   Loads bootable binaries into the emu | ||||
|  * | ||||
|  * @section LICENSE | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of | ||||
|  * the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, but | ||||
|  * WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details at | ||||
|  * http://www.gnu.org/copyleft/gpl.html
 | ||||
|  * | ||||
|  * Official project repository can be found at: | ||||
|  * http://code.google.com/p/gekko-gc-emu/
 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef CORE_LOADER_H_ | ||||
| #define CORE_LOADER_H_ | ||||
| 
 | ||||
| #include "common.h" | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| namespace Loader { | ||||
| 
 | ||||
| enum FileType { | ||||
| 	FILETYPE_ERROR, | ||||
| 
 | ||||
| 	FILETYPE_3DS_CCI, | ||||
| 	FILETYPE_3DS_CIA, | ||||
| 	FILETYPE_3DS_CXI, | ||||
| 
 | ||||
| 	FILETYPE_3DS_BIN, | ||||
| 	FILETYPE_3DS_ELF, | ||||
| 
 | ||||
| 	FILETYPE_CTR_DISC_DIRECTORY, | ||||
| 
 | ||||
| 	FILETYPE_UNKNOWN_BIN, | ||||
| 	FILETYPE_UNKNOWN_ELF, | ||||
| 
 | ||||
| 	FILETYPE_ARCHIVE_RAR, | ||||
| 	FILETYPE_ARCHIVE_ZIP, | ||||
| 
 | ||||
| 	FILETYPE_NORMAL_DIRECTORY, | ||||
| 
 | ||||
| 	FILETYPE_UNKNOWN | ||||
| }; | ||||
| 
 | ||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Identifies the type of a bootable file | ||||
|  * @param filename String filename of bootable file | ||||
|  * @return FileType of file | ||||
|  */ | ||||
| FileType IdentifyFile(std::string &filename); | ||||
| 
 | ||||
| /**
 | ||||
|  * Identifies and loads a bootable file | ||||
|  * @param filename String filename of bootable file | ||||
|  * @param error_string Point to string to put error message if an error has occurred | ||||
|  * @return True on success, otherwise false | ||||
|  */ | ||||
| bool LoadFile(std::string &filename, std::string *error_string); | ||||
| 
 | ||||
| } // namespace
 | ||||
| 
 | ||||
| #endif // CORE_LOADER_H_
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue