Initial commit
This commit is contained in:
56
src/pse/dma.cpp
Normal file
56
src/pse/dma.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
#include "dma.h"
|
||||
#include "YBaseLib/Log.h"
|
||||
#include "bus.h"
|
||||
Log_SetChannel(DMA);
|
||||
|
||||
DMA::DMA() = default;
|
||||
|
||||
DMA::~DMA() = default;
|
||||
|
||||
bool DMA::Initialize(Bus* bus, GPU* gpu)
|
||||
{
|
||||
m_bus = bus;
|
||||
m_gpu = gpu;
|
||||
return true;
|
||||
}
|
||||
|
||||
void DMA::Reset()
|
||||
{
|
||||
m_state = {};
|
||||
m_DPCR.bits = 0;
|
||||
m_DCIR = 0;
|
||||
}
|
||||
|
||||
u32 DMA::ReadRegister(u32 offset)
|
||||
{
|
||||
const u32 channel_index = offset >> 4;
|
||||
if (channel_index < 7)
|
||||
{
|
||||
switch (offset & UINT32_C(0x0F))
|
||||
{
|
||||
case 0x00:
|
||||
return m_state[channel_index].base_address;
|
||||
case 0x04:
|
||||
return m_state[channel_index].block_control.bits;
|
||||
case 0x08:
|
||||
return m_state[channel_index].channel_control.bits;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (offset == 0x70)
|
||||
return m_DPCR.bits;
|
||||
else if (offset == 0x74)
|
||||
return m_DCIR;
|
||||
}
|
||||
|
||||
Log_ErrorPrintf("Unhandled register read: %02X", offset);
|
||||
return UINT32_C(0xFFFFFFFF);
|
||||
}
|
||||
|
||||
void DMA::WriteRegister(u32 offset, u32 value)
|
||||
{
|
||||
Log_ErrorPrintf("Unhandled register write: %02X <- %08X", offset, value);
|
||||
}
|
||||
Reference in New Issue
Block a user