www.pudn.com > potemkin_sourceforPSP.rar > DSLoaders.cpp


 
 
#include "stdafx.h" 
 
#include "../../Globals.h" 
#include "DSLoaders.h" 
 
#include "../ARM/ARM.h" 
#include "../Loaders.h" 
 
#include "NitroROM.h" 
 
void Load_DSELF(const TCHAR *filename) 
{ 
//	std::ifstream in(filename,std::ios::binary); 
//	u32 entry = Load_ELF(in); 
 
//	arm9.r[ARM_REG_PC] = entry; 
	arm7.r[ARM_REG_PC] = 0x23f0000; 
	arm7.enabled=false; 
	WriteMem32(0x23f0000, 0xEAFFFFFE);  //let arm7 sit and branch to itself, moaaha :P 
} 
 
 
 
void Load_DSBIN9(const TCHAR *filename) 
{ 
	u32 entry = Load_BIN(filename,0x02004000); 
 
	arm9.r[ARM_REG_PC] = entry; 
	arm7.r[ARM_REG_PC] = 0x23f0000; 
	arm7.enabled=false; 
 
	WriteMem32(0x23f0000, 0xEAFFFFFE);  //let arm7 sit and branch to itself, moaaha :P 
} 
 
 
void Load_DSEmpty() 
{ 
	arm7.r[ARM_REG_PC] = 0x23f0000; 
 
	WriteMem32(0x23f0000, 0xEAFFFFFE);  //let arm7 sit and branch to itself, moaaha :P 
} 
 
 
void Load_NDS(const TCHAR *filename) 
{ 
	FILE *file = fopen(filename,"rb"); 
	fseek(file,0,SEEK_END); 
	int size = ftell(file); 
	fseek(file,0,SEEK_SET); 
 
 
	NitroROMHeader header; 
	fread(&header,sizeof(NitroROMHeader),1,file); 
 
	const int headerSize = 0; 
 
 
	u8 *memptr = arm9.memMap.GetMemPointer(0x02000000); 
 
	//header.main_rom_offset=0; 
 
 
	arm9.r[ARM_REG_PC] = header.arm9_entry_address; 
	arm7.r[ARM_REG_PC] = header.arm7_entry_address; 
 
	LOG(ROM,"Loading ARM9 code: %08x -> %08x, %08x (%d) bytes", 
		header.arm9_rom_offset, header.arm9_ram_address, header.arm9_size,  header.arm9_size); 
	LOG(ROM,"Loading ARM7 code: %08x -> %08x, %08x (%d) bytes", 
		header.arm7_rom_offset, header.arm7_ram_address, header.arm7_size, header.arm7_size); 
 
	LOG(ROM,"ARM9 entry: %08x    ARM7 entry: %08x", header.arm9_entry_address, header.arm7_entry_address); 
 
	//header.arm9_rom_offset=0; 
	//header.arm9_size = 0x2000; 
	fseek(file, header.arm9_rom_offset + headerSize, SEEK_SET); 
	fread(memptr + header.arm9_ram_address - 0x02000000, header.arm9_size, 1, file); 
 
	fseek(file, header.arm7_rom_offset + headerSize, SEEK_SET); 
	header.arm7_size = 0x2000; 
	fread(memptr + header.arm7_ram_address - 0x02000000, header.arm7_size, 1, file); 
 
	fclose(file); 
} 
 
 
 
void Load_NDS_PassThru(const TCHAR *filename) 
{ 
	FILE *file = fopen(filename,"rb"); 
	fseek(file,0,SEEK_END); 
	int size = ftell(file); 
	fseek(file,0,SEEK_SET); 
 
	u8 *memptr = arm9.memMap.GetMemPointer(0x08000000); 
 
 
	arm7.r[ARM_REG_PC] = 0x08000000; 
	arm9.r[ARM_REG_PC] = 0x20048A0; 
	WriteMem32(0x20048A0, 0xEAFFFFFE);  //let arm9 sit and branch to itself, moaaha :P 
 
	arm9.SetCPSR(0xc0); 
	//header.arm9_rom_offset=0; 
	//header.arm9_size = 0x2000; 
	fread(memptr, size, 1, file); 
	fclose(file); 
}