MCPcopy Create free account
hub / github.com/DaedalusX64/daedalus / DMA_PI_CopyFromRDRAM

Function DMA_PI_CopyFromRDRAM

Source/Core/DMA.cpp:313–361  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

311//
312//*****************************************************************************
313void DMA_PI_CopyFromRDRAM()
314{
315 u32 mem_address {Memory_PI_GetRegister(PI_DRAM_ADDR_REG) & 0xFFFFFFFF};
316 u32 cart_address {Memory_PI_GetRegister(PI_CART_ADDR_REG) & 0xFFFFFFFF};
317 u32 pi_length_reg {(Memory_PI_GetRegister(PI_RD_LEN_REG) & 0xFFFFFFFF) + 1};
318
319#ifdef DAEDALUS_PROFILER
320 DPF(DEBUG_MEMORY_PI, "PI: Copying %d bytes of data from 0x%08x to 0x%08x", pi_length_reg, mem_address, cart_address );
321#endif
322 /*
323 if(pi_length_reg & 0x1)
324 {
325 DBGConsole_Msg(0, "PI Copy RDRAM to CART %db from %08X to %08X", pi_length_reg, cart_address|0xA0000000, mem_address);
326 DBGConsole_Msg(0, "Warning, PI DMA, odd length");
327
328 // Tonic Trouble triggers this !
329
330 pi_length_reg ++;
331 }
332 */
333
334 // Only care for DOM2/ADDR2
335 if(IsFlashDomAddr(cart_address))
336 {
337 u8 * p_dst( (u8 *)g_pMemoryBuffers[MEM_SAVE] );
338 u32 dst_size( MemoryRegionSizes[MEM_SAVE] );
339 cart_address -= PI_DOM2_ADDR2;
340
341 #ifdef DAEDALUS_DEBUG_CONSOLE
342 DBGConsole_Msg(0, "[YWriting to Cart domain 2/addr2 0x%08x]", cart_address);
343 #endif
344
345 if (g_ROM.settings.SaveType != SAVE_TYPE_FLASH)
346 DMA_HandleTransfer( p_dst, cart_address, dst_size, g_pu8RamBase, mem_address, gRamSize, pi_length_reg );
347 else
348 DMA_FLASH_CopyFromDRAM(mem_address, pi_length_reg);
349
350 Save_MarkSaveDirty();
351 }
352 #ifdef DAEDALUS_DEBUG_CONSOLE
353 else
354 {
355 DBGConsole_Msg(0, "[YUnknown PI Address 0x%08x]", cart_address);
356 }
357 #endif
358 Memory_PI_ClrRegisterBits(PI_STATUS_REG, PI_STATUS_DMA_BUSY);
359 Memory_MI_SetRegisterBits(MI_INTR_REG, MI_INTR_PI);
360 R4300_Interrupt_UpdateCause3();
361}

Callers

nothing calls this directly

Calls 4

DMA_HandleTransferFunction · 0.85
DMA_FLASH_CopyFromDRAMFunction · 0.85
Save_MarkSaveDirtyFunction · 0.85

Tested by

no test coverage detected