85 lines
1.7 KiB
C
85 lines
1.7 KiB
C
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
#include "MemoryMappings.h"
|
|
#include "DebugTypes.h"
|
|
#include "BaseCartridge.h"
|
|
#include "Sa1.h"
|
|
|
|
#define DUMMYCPU
|
|
#define Cpu DummyCpu
|
|
#include "Cpu.h"
|
|
#include "Cpu.cpp"
|
|
#undef Cpu
|
|
#undef DUMMYCPU
|
|
|
|
DummyCpu::DummyCpu(Console* console, CpuType type)
|
|
{
|
|
_console = console;
|
|
_memoryMappings = type == CpuType::Cpu
|
|
? console->GetMemoryManager()->GetMemoryMappings()
|
|
: console->GetCartridge()->GetSa1()->GetMemoryMappings();
|
|
_dmaController = nullptr;
|
|
_memoryManager = nullptr;
|
|
}
|
|
|
|
uint8_t DummyCpu::Read(uint32_t addr, MemoryOperationType type)
|
|
{
|
|
uint8_t value = _memoryMappings->Peek(addr);
|
|
LogRead(addr, value);
|
|
return value;
|
|
}
|
|
|
|
void DummyCpu::Write(uint32_t addr, uint8_t value, MemoryOperationType type)
|
|
{
|
|
LogWrite(addr, value);
|
|
}
|
|
|
|
void DummyCpu::SetDummyState(CpuState& state)
|
|
{
|
|
_state = state;
|
|
_state.StopState = CpuStopState::Running;
|
|
_writeCounter = 0;
|
|
_readCounter = 0;
|
|
}
|
|
|
|
uint32_t DummyCpu::GetWriteCount()
|
|
{
|
|
return _writeCounter;
|
|
}
|
|
|
|
uint32_t DummyCpu::GetReadCount()
|
|
{
|
|
return _readCounter;
|
|
}
|
|
|
|
void DummyCpu::LogRead(uint32_t addr, uint8_t value)
|
|
{
|
|
_readAddresses[_readCounter] = addr;
|
|
_readValue[_readCounter] = value;
|
|
_readCounter++;
|
|
}
|
|
|
|
void DummyCpu::LogWrite(uint32_t addr, uint8_t value)
|
|
{
|
|
_writeAddresses[_writeCounter] = addr;
|
|
_writeValue[_writeCounter] = value;
|
|
_writeCounter++;
|
|
}
|
|
|
|
void DummyCpu::GetWriteInfo(uint32_t index, uint32_t& addr, uint8_t& value)
|
|
{
|
|
addr = _writeAddresses[index];
|
|
value = _writeValue[index];
|
|
}
|
|
|
|
void DummyCpu::GetReadInfo(uint32_t index, uint32_t& addr, uint8_t& value)
|
|
{
|
|
addr = _readAddresses[index];
|
|
value = _readValue[index];
|
|
}
|
|
|
|
int32_t DummyCpu::GetLastOperand()
|
|
{
|
|
return _operand;
|
|
}
|