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, | 	STREAMINGINTERFACE, | ||||||
| 	VIDEO, | 	VIDEO, | ||||||
| 	VIDEOINTERFACE, | 	VIDEOINTERFACE, | ||||||
| 	WII_IOB, | 	LOADER, | ||||||
| 	WII_IPC, | 	FILESYS, | ||||||
| 	WII_IPC_DVD, | 	WII_IPC_DVD, | ||||||
| 	WII_IPC_ES, | 	WII_IPC_ES, | ||||||
| 	WII_IPC_FILEIO, | 	WII_IPC_FILEIO, | ||||||
|  |  | ||||||
|  | @ -60,8 +60,8 @@ LogManager::LogManager() | ||||||
| 	m_Log[LogTypes::CONSOLE]			= new LogContainer("CONSOLE",		"Dolphin Console"); | 	m_Log[LogTypes::CONSOLE]			= new LogContainer("CONSOLE",		"Dolphin Console"); | ||||||
| 	m_Log[LogTypes::OSREPORT]			= new LogContainer("OSREPORT",		"OSReport"); | 	m_Log[LogTypes::OSREPORT]			= new LogContainer("OSREPORT",		"OSReport"); | ||||||
| 	m_Log[LogTypes::WIIMOTE]			= new LogContainer("Wiimote",		"Wiimote"); | 	m_Log[LogTypes::WIIMOTE]			= new LogContainer("Wiimote",		"Wiimote"); | ||||||
| 	m_Log[LogTypes::WII_IOB]			= new LogContainer("WII_IOB",		"WII IO Bridge"); | 	m_Log[LogTypes::LOADER]				= new LogContainer("Loader",		"Loader"); | ||||||
| 	m_Log[LogTypes::WII_IPC]			= new LogContainer("WII_IPC",		"WII IPC"); | 	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_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_HLE]		= new LogContainer("WII_IPC_HLE",	"WII IPC HLE"); | ||||||
| 	m_Log[LogTypes::WII_IPC_DVD]		= new LogContainer("WII_IPC_DVD",	"WII IPC DVD"); | 	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\arminit.cpp" /> | ||||||
|     <ClCompile Include="src\arm\disassembler\arm_disasm.cpp" /> |     <ClCompile Include="src\arm\disassembler\arm_disasm.cpp" /> | ||||||
|     <ClCompile Include="src\core.cpp" /> |     <ClCompile Include="src\core.cpp" /> | ||||||
|  |     <ClCompile Include="src\loader.cpp" /> | ||||||
|     <ClCompile Include="src\mem_map.cpp" /> |     <ClCompile Include="src\mem_map.cpp" /> | ||||||
|     <ClCompile Include="src\mem_map_funcs.cpp" /> |     <ClCompile Include="src\mem_map_funcs.cpp" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  | @ -155,6 +156,7 @@ | ||||||
|     <ClInclude Include="src\arm\mmu\wb.h" /> |     <ClInclude Include="src\arm\mmu\wb.h" /> | ||||||
|     <ClInclude Include="src\arm\skyeye_defs.h" /> |     <ClInclude Include="src\arm\skyeye_defs.h" /> | ||||||
|     <ClInclude Include="src\core.h" /> |     <ClInclude Include="src\core.h" /> | ||||||
|  |     <ClInclude Include="src\loader.h" /> | ||||||
|     <ClInclude Include="src\mem_map.h" /> |     <ClInclude Include="src\mem_map.h" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ | ||||||
|       <Filter>arm</Filter> |       <Filter>arm</Filter> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|     <ClCompile Include="src\mem_map_funcs.cpp" /> |     <ClCompile Include="src\mem_map_funcs.cpp" /> | ||||||
|  |     <ClCompile Include="src\loader.cpp" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Filter Include="arm"> |     <Filter Include="arm"> | ||||||
|  | @ -67,6 +68,7 @@ | ||||||
|     <ClInclude Include="src\arm\mmu\wb.h"> |     <ClInclude Include="src\arm\mmu\wb.h"> | ||||||
|       <Filter>arm\mmu</Filter> |       <Filter>arm\mmu</Filter> | ||||||
|     </ClInclude> |     </ClInclude> | ||||||
|  |     <ClInclude Include="src\loader.h" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <None Include="CMakeLists.txt" /> |     <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