Ejemplo n.º 1
0
void ROMUCode::BootUCode()
{
	u32 ector_crc = HashEctor(
		(u8*)HLEMemory_Get_Pointer(m_current_ucode.m_ram_address),
		m_current_ucode.m_length);

#if defined(_DEBUG) || defined(DEBUGFAST)
	std::string ucode_dump_path = StringFromFormat(
		"%sDSP_UC_%08X.bin", File::GetUserPath(D_DUMPDSP_IDX).c_str(), ector_crc);

	File::IOFile fp(ucode_dump_path, "wb");
	if (fp)
	{
		fp.WriteArray((u8*)HLEMemory_Get_Pointer(m_current_ucode.m_ram_address),
		              m_current_ucode.m_length);
	}
#endif

	DEBUG_LOG(DSPHLE, "CurrentUCode SOURCE Addr: 0x%08x", m_current_ucode.m_ram_address);
	DEBUG_LOG(DSPHLE, "CurrentUCode Length:      0x%08x", m_current_ucode.m_length);
	DEBUG_LOG(DSPHLE, "CurrentUCode DEST Addr:   0x%08x", m_current_ucode.m_imem_address);
	DEBUG_LOG(DSPHLE, "CurrentUCode DMEM Length: 0x%08x", m_current_ucode.m_dmem_length);
	DEBUG_LOG(DSPHLE, "CurrentUCode init_vector: 0x%08x", m_current_ucode.m_start_pc);
	DEBUG_LOG(DSPHLE, "CurrentUCode CRC:         0x%08x", ector_crc);
	DEBUG_LOG(DSPHLE, "BootTask - done");

	m_dsphle->SetUCode(ector_crc);
}
Ejemplo n.º 2
0
void CodeLoaded(const u8 *ptr, int size)
{
	g_dsp.iram_crc = HashEctor(ptr, size);

#if defined(_DEBUG) || defined(DEBUGFAST)
	DumpDSPCode(ptr, size, g_dsp.iram_crc);
#endif

	DSPSymbols::Clear();

	// Auto load text file - if none just disassemble.

	NOTICE_LOG(DSPLLE, "g_dsp.iram_crc: %08x", g_dsp.iram_crc);

	DSPSymbols::Clear();
	bool success = false;
	switch (g_dsp.iram_crc)
	{
		case 0x86840740: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_Zelda.txt"); break;
		case 0x42f64ac4: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_Luigi.txt"); break;
		case 0x07f88145: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_07F88145.txt"); break;
		case 0x3ad3b7ac: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_3AD3B7AC.txt"); break;
		case 0x3daf59b9: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_3DAF59B9.txt"); break;
		case 0x4e8a8b21: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_4E8A8B21.txt"); break;
		case 0xe2136399: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_E2136399.txt"); break;
		case 0xdd7e72d5: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_GBA.txt"); break;
		case 0x347112BA: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AXWii.txt"); break;
		case 0xD643001F: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_SuperMarioGalaxy.txt"); break;
		default: success = false; break;
	}

	if (!success)
	{
		DSPSymbols::AutoDisassembly(0x0, 0x1000);
	}

	// Always add the ROM.
	DSPSymbols::AutoDisassembly(0x8000, 0x9000);

	UpdateDebugger();

	if (g_dsp_jit)
		g_dsp_jit->ClearIRAM();

	DSPAnalyzer::Analyze();
}
Ejemplo n.º 3
0
void IUCode::PrepareBootUCode(u32 mail)
{
	switch (m_NextUCode_steps)
	{
	case 0: m_NextUCode.mram_dest_addr	= mail;				break;
	case 1: m_NextUCode.mram_size		= mail & 0xffff;	break;
	case 2: m_NextUCode.mram_dram_addr	= mail & 0xffff;	break;
	case 3: m_NextUCode.iram_mram_addr	= mail;				break;
	case 4: m_NextUCode.iram_size		= mail & 0xffff;	break;
	case 5: m_NextUCode.iram_dest		= mail & 0xffff;	break;
	case 6: m_NextUCode.iram_startpc	= mail & 0xffff;	break;
	case 7: m_NextUCode.dram_mram_addr	= mail;				break;
	case 8: m_NextUCode.dram_size		= mail & 0xffff;	break;
	case 9: m_NextUCode.dram_dest		= mail & 0xffff;	break;
	}
	m_NextUCode_steps++;

	if (m_NextUCode_steps == 10)
	{
		m_NextUCode_steps = 0;
		m_NeedsResumeMail = true;
		m_UploadSetupInProgress = false;

		u32 ector_crc = HashEctor(
			(u8*)HLEMemory_Get_Pointer(m_NextUCode.iram_mram_addr),
			m_NextUCode.iram_size);

#if defined(_DEBUG) || defined(DEBUGFAST)
		char binFile[MAX_PATH];
		sprintf(binFile, "%sDSP_UC_%08X.bin", File::GetUserPath(D_DUMPDSP_IDX).c_str(), ector_crc);

		File::IOFile pFile(binFile, "wb");
		if (pFile)
		pFile.WriteArray((u8*)Memory::GetPointer(m_NextUCode.iram_mram_addr), m_NextUCode.iram_size);
#endif

		DEBUG_LOG(DSPHLE, "PrepareBootUCode 0x%08x", ector_crc);
		DEBUG_LOG(DSPHLE, "DRAM -> MRAM: src %04x dst %08x size %04x",
			m_NextUCode.mram_dram_addr, m_NextUCode.mram_dest_addr,
			m_NextUCode.mram_size);
		DEBUG_LOG(DSPHLE, "MRAM -> IRAM: src %08x dst %04x size %04x startpc %04x",
			m_NextUCode.iram_mram_addr, m_NextUCode.iram_dest,
			m_NextUCode.iram_size, m_NextUCode.iram_startpc);
		DEBUG_LOG(DSPHLE, "MRAM -> DRAM: src %08x dst %04x size %04x",
			m_NextUCode.dram_mram_addr, m_NextUCode.dram_dest,
			m_NextUCode.dram_size);

		if (m_NextUCode.mram_size)
		{
			WARN_LOG(DSPHLE,
				"Trying to boot new ucode with dram download - not implemented");
		}
		if (m_NextUCode.dram_size)
		{
			WARN_LOG(DSPHLE,
				"Trying to boot new ucode with dram upload - not implemented");
		}

		m_DSPHLE->SwapUCode(ector_crc);
	}
}
Ejemplo n.º 4
0
void UCodeInterface::PrepareBootUCode(u32 mail)
{
    switch (m_next_ucode_steps)
    {
    case 0:
        m_next_ucode.mram_dest_addr = mail;
        break;
    case 1:
        m_next_ucode.mram_size      = mail & 0xffff;
        break;
    case 2:
        m_next_ucode.mram_dram_addr = mail & 0xffff;
        break;
    case 3:
        m_next_ucode.iram_mram_addr = mail;
        break;
    case 4:
        m_next_ucode.iram_size      = mail & 0xffff;
        break;
    case 5:
        m_next_ucode.iram_dest      = mail & 0xffff;
        break;
    case 6:
        m_next_ucode.iram_startpc   = mail & 0xffff;
        break;
    case 7:
        m_next_ucode.dram_mram_addr = mail;
        break;
    case 8:
        m_next_ucode.dram_size      = mail & 0xffff;
        break;
    case 9:
        m_next_ucode.dram_dest      = mail & 0xffff;
        break;
    }
    m_next_ucode_steps++;

    if (m_next_ucode_steps == 10)
    {
        m_next_ucode_steps = 0;
        m_needs_resume_mail = true;
        m_upload_setup_in_progress = false;

        u32 ector_crc = HashEctor(
                            (u8*)HLEMemory_Get_Pointer(m_next_ucode.iram_mram_addr),
                            m_next_ucode.iram_size);

#if defined(_DEBUG) || defined(DEBUGFAST)
        std::string ucode_dump_path = StringFromFormat(
                                          "%sDSP_UC_%08X.bin", File::GetUserPath(D_DUMPDSP_IDX).c_str(), ector_crc);

        File::IOFile fp(ucode_dump_path, "wb");
        if (fp)
        {
            fp.WriteArray((u8*)Memory::GetPointer(m_next_ucode.iram_mram_addr),
                          m_next_ucode.iram_size);
        }
#endif

        DEBUG_LOG(DSPHLE, "PrepareBootUCode 0x%08x", ector_crc);
        DEBUG_LOG(DSPHLE, "DRAM -> MRAM: src %04x dst %08x size %04x",
                  m_next_ucode.mram_dram_addr, m_next_ucode.mram_dest_addr,
                  m_next_ucode.mram_size);
        DEBUG_LOG(DSPHLE, "MRAM -> IRAM: src %08x dst %04x size %04x startpc %04x",
                  m_next_ucode.iram_mram_addr, m_next_ucode.iram_dest,
                  m_next_ucode.iram_size, m_next_ucode.iram_startpc);
        DEBUG_LOG(DSPHLE, "MRAM -> DRAM: src %08x dst %04x size %04x",
                  m_next_ucode.dram_mram_addr, m_next_ucode.dram_dest,
                  m_next_ucode.dram_size);

        if (m_next_ucode.mram_size)
        {
            WARN_LOG(DSPHLE,
                     "Trying to boot new ucode with dram download - not implemented");
        }
        if (m_next_ucode.dram_size)
        {
            WARN_LOG(DSPHLE,
                     "Trying to boot new ucode with dram upload - not implemented");
        }

        m_dsphle->SwapUCode(ector_crc);
    }
}