Debugger: Added CX4 debugger
This commit is contained in:
parent
f8594b23a7
commit
dade91a189
39 changed files with 1489 additions and 48 deletions
|
@ -840,13 +840,6 @@ void Console::ProcessWorkRamWrite(uint32_t addr, uint8_t value)
|
|||
}
|
||||
}
|
||||
|
||||
void Console::ProcessCx4Exec()
|
||||
{
|
||||
if(_debugger) {
|
||||
_debugger->ProcessCx4Exec();
|
||||
}
|
||||
}
|
||||
|
||||
void Console::ProcessPpuCycle()
|
||||
{
|
||||
if(_debugger) {
|
||||
|
@ -878,12 +871,14 @@ template void Console::ProcessMemoryRead<CpuType::Sa1>(uint32_t addr, uint8_t va
|
|||
template void Console::ProcessMemoryRead<CpuType::Spc>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryRead<CpuType::Gsu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryRead<CpuType::NecDsp>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryRead<CpuType::Cx4>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
|
||||
template void Console::ProcessMemoryWrite<CpuType::Cpu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryWrite<CpuType::Sa1>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryWrite<CpuType::Spc>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryWrite<CpuType::Gsu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryWrite<CpuType::NecDsp>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Console::ProcessMemoryWrite<CpuType::Cx4>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
|
||||
template void Console::ProcessInterrupt<CpuType::Cpu>(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
||||
template void Console::ProcessInterrupt<CpuType::Sa1>(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
|
@ -173,7 +173,6 @@ public:
|
|||
void ProcessPpuWrite(uint32_t addr, uint8_t value, SnesMemoryType memoryType);
|
||||
void ProcessWorkRamRead(uint32_t addr, uint8_t value);
|
||||
void ProcessWorkRamWrite(uint32_t addr, uint8_t value);
|
||||
void ProcessCx4Exec();
|
||||
void ProcessPpuCycle();
|
||||
template<CpuType type> void ProcessInterrupt(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
||||
void ProcessEvent(EventType type);
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
<ClInclude Include="CpuBwRamHandler.h" />
|
||||
<ClInclude Include="CpuDebugger.h" />
|
||||
<ClInclude Include="Cx4.h" />
|
||||
<ClInclude Include="Cx4Debugger.h" />
|
||||
<ClInclude Include="Cx4DisUtils.h" />
|
||||
<ClInclude Include="Cx4Types.h" />
|
||||
<ClInclude Include="DebugUtilities.h" />
|
||||
|
@ -243,6 +244,7 @@
|
|||
<ClCompile Include="CpuDisUtils.cpp" />
|
||||
<ClCompile Include="Cx4.cpp" />
|
||||
<ClCompile Include="Cx4.Instructions.cpp" />
|
||||
<ClCompile Include="Cx4Debugger.cpp" />
|
||||
<ClCompile Include="Cx4DisUtils.cpp" />
|
||||
<ClCompile Include="Debugger.cpp" />
|
||||
<ClCompile Include="DebugHud.cpp" />
|
||||
|
|
|
@ -518,6 +518,9 @@
|
|||
<ClInclude Include="NecDspDebugger.h">
|
||||
<Filter>Debugger\Debuggers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Cx4Debugger.h">
|
||||
<Filter>Debugger\Debuggers</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp" />
|
||||
|
@ -833,6 +836,9 @@
|
|||
<ClCompile Include="NecDspDebugger.cpp">
|
||||
<Filter>Debugger\Debuggers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Cx4Debugger.cpp">
|
||||
<Filter>Debugger\Debuggers</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="SNES">
|
||||
|
|
11
Core/Cx4.cpp
11
Core/Cx4.cpp
|
@ -87,8 +87,10 @@ void Cx4::Run()
|
|||
Stop();
|
||||
}
|
||||
} else {
|
||||
_console->ProcessCx4Exec();
|
||||
uint16_t opCode = _prgRam[_state.Cache.Page][_state.PC++];
|
||||
uint16_t opCode = _prgRam[_state.Cache.Page][_state.PC];
|
||||
uint32_t addr = (_state.Cache.Address[_state.Cache.Page] + (_state.PC * 2)) & 0xFFFFFF;
|
||||
_console->ProcessMemoryRead<CpuType::Cx4>(addr, (uint8_t)opCode, MemoryOperationType::ExecOpCode);
|
||||
_state.PC++;
|
||||
|
||||
if(_state.PC == 0) {
|
||||
//If execution reached the end of the page, start loading the next page
|
||||
|
@ -257,7 +259,9 @@ uint8_t Cx4::ReadCx4(uint32_t addr)
|
|||
{
|
||||
IMemoryHandler* handler = _mappings.GetHandler(addr);
|
||||
if(handler) {
|
||||
return handler->Read(addr);
|
||||
uint8_t value = handler->Read(addr);
|
||||
_console->ProcessMemoryRead<CpuType::Cx4>(addr, value, MemoryOperationType::Read);
|
||||
return value;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -266,6 +270,7 @@ void Cx4::WriteCx4(uint32_t addr, uint8_t value)
|
|||
{
|
||||
IMemoryHandler* handler = _mappings.GetHandler(addr);
|
||||
if(handler) {
|
||||
_console->ProcessMemoryWrite<CpuType::Cx4>(addr, value, MemoryOperationType::Write);
|
||||
handler->Write(addr, value);
|
||||
}
|
||||
}
|
||||
|
|
103
Core/Cx4Debugger.cpp
Normal file
103
Core/Cx4Debugger.cpp
Normal file
|
@ -0,0 +1,103 @@
|
|||
#include "stdafx.h"
|
||||
#include "NecDsp.h"
|
||||
#include "Cx4Debugger.h"
|
||||
#include "DisassemblyInfo.h"
|
||||
#include "Disassembler.h"
|
||||
#include "TraceLogger.h"
|
||||
#include "CallstackManager.h"
|
||||
#include "BreakpointManager.h"
|
||||
#include "BaseCartridge.h"
|
||||
#include "MemoryManager.h"
|
||||
#include "Debugger.h"
|
||||
#include "Console.h"
|
||||
#include "MemoryAccessCounter.h"
|
||||
#include "ExpressionEvaluator.h"
|
||||
#include "EmuSettings.h"
|
||||
#include "Cx4.h"
|
||||
#include "MemoryMappings.h"
|
||||
|
||||
Cx4Debugger::Cx4Debugger(Debugger* debugger)
|
||||
{
|
||||
_debugger = debugger;
|
||||
_traceLogger = debugger->GetTraceLogger().get();
|
||||
_disassembler = debugger->GetDisassembler().get();
|
||||
_cx4 = debugger->GetConsole()->GetCartridge()->GetCx4();
|
||||
_settings = debugger->GetConsole()->GetSettings().get();
|
||||
|
||||
_breakpointManager.reset(new BreakpointManager(debugger, CpuType::Cx4));
|
||||
_step.reset(new StepRequest());
|
||||
}
|
||||
|
||||
void Cx4Debugger::Reset()
|
||||
{
|
||||
}
|
||||
|
||||
void Cx4Debugger::ProcessRead(uint32_t addr, uint8_t value, MemoryOperationType type)
|
||||
{
|
||||
AddressInfo addressInfo = _cx4->GetMemoryMappings()->GetAbsoluteAddress(addr);
|
||||
MemoryOperationInfo operation { (uint32_t)addr, value, type };
|
||||
|
||||
if(type == MemoryOperationType::ExecOpCode) {
|
||||
if(_traceLogger->IsCpuLogged(CpuType::Cx4) || _settings->CheckDebuggerFlag(DebuggerFlags::Cx4DebuggerEnabled)) {
|
||||
_disassembler->BuildCache(addressInfo, 0, CpuType::Cx4);
|
||||
|
||||
if(_traceLogger->IsCpuLogged(CpuType::Cx4)) {
|
||||
DebugState debugState;
|
||||
_debugger->GetState(debugState, true);
|
||||
|
||||
DisassemblyInfo disInfo = _disassembler->GetDisassemblyInfo(addressInfo);
|
||||
_traceLogger->Log(CpuType::Cx4, debugState, disInfo);
|
||||
}
|
||||
}
|
||||
|
||||
_prevProgramCounter = addr;
|
||||
|
||||
if(_step->StepCount > 0) {
|
||||
_step->StepCount--;
|
||||
}
|
||||
}
|
||||
|
||||
_debugger->ProcessBreakConditions(_step->StepCount == 0, GetBreakpointManager(), operation, addressInfo);
|
||||
}
|
||||
|
||||
void Cx4Debugger::ProcessWrite(uint32_t addr, uint8_t value, MemoryOperationType type)
|
||||
{
|
||||
AddressInfo addressInfo = _cx4->GetMemoryMappings()->GetAbsoluteAddress(addr);
|
||||
MemoryOperationInfo operation { (uint32_t)addr, value, type };
|
||||
_debugger->ProcessBreakConditions(_step->StepCount == 0, GetBreakpointManager(), operation, addressInfo);
|
||||
}
|
||||
|
||||
void Cx4Debugger::Run()
|
||||
{
|
||||
_step.reset(new StepRequest());
|
||||
}
|
||||
|
||||
void Cx4Debugger::Step(int32_t stepCount, StepType type)
|
||||
{
|
||||
StepRequest step;
|
||||
|
||||
switch(type) {
|
||||
case StepType::Step: step.StepCount = stepCount; break;
|
||||
|
||||
case StepType::StepOut:
|
||||
case StepType::StepOver:
|
||||
step.StepCount = 1;
|
||||
break;
|
||||
|
||||
case StepType::SpecificScanline:
|
||||
case StepType::PpuStep:
|
||||
break;
|
||||
}
|
||||
|
||||
_step.reset(new StepRequest(step));
|
||||
}
|
||||
|
||||
shared_ptr<CallstackManager> Cx4Debugger::GetCallstackManager()
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BreakpointManager* Cx4Debugger::GetBreakpointManager()
|
||||
{
|
||||
return _breakpointManager.get();
|
||||
}
|
40
Core/Cx4Debugger.h
Normal file
40
Core/Cx4Debugger.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "DebugTypes.h"
|
||||
#include "IDebugger.h"
|
||||
|
||||
class Disassembler;
|
||||
class Debugger;
|
||||
class TraceLogger;
|
||||
class Cx4;
|
||||
class CallstackManager;
|
||||
class MemoryAccessCounter;
|
||||
class MemoryManager;
|
||||
class BreakpointManager;
|
||||
class EmuSettings;
|
||||
|
||||
class Cx4Debugger final : public IDebugger
|
||||
{
|
||||
Debugger* _debugger;
|
||||
Disassembler* _disassembler;
|
||||
TraceLogger* _traceLogger;
|
||||
Cx4* _cx4;
|
||||
EmuSettings* _settings;
|
||||
|
||||
unique_ptr<BreakpointManager> _breakpointManager;
|
||||
unique_ptr<StepRequest> _step;
|
||||
|
||||
uint32_t _prevProgramCounter = 0;
|
||||
|
||||
public:
|
||||
Cx4Debugger(Debugger* debugger);
|
||||
|
||||
void Reset();
|
||||
|
||||
void ProcessRead(uint32_t addr, uint8_t value, MemoryOperationType type);
|
||||
void ProcessWrite(uint32_t addr, uint8_t value, MemoryOperationType type);
|
||||
void Run();
|
||||
void Step(int32_t stepCount, StepType type);
|
||||
shared_ptr<CallstackManager> GetCallstackManager();
|
||||
BreakpointManager* GetBreakpointManager();
|
||||
};
|
|
@ -33,6 +33,7 @@ enum class SnesMemoryType
|
|||
Sa1Memory,
|
||||
NecDspMemory,
|
||||
GsuMemory,
|
||||
Cx4Memory,
|
||||
PrgRom,
|
||||
WorkRam,
|
||||
SaveRam,
|
||||
|
|
|
@ -13,8 +13,7 @@ public:
|
|||
case CpuType::NecDsp: return SnesMemoryType::NecDspMemory;
|
||||
case CpuType::Sa1: return SnesMemoryType::Sa1Memory;
|
||||
case CpuType::Gsu: return SnesMemoryType::GsuMemory;
|
||||
|
||||
case CpuType::Cx4: break;
|
||||
case CpuType::Cx4: return SnesMemoryType::Cx4Memory;
|
||||
}
|
||||
|
||||
throw std::runtime_error("Invalid CPU type");
|
||||
|
@ -41,6 +40,10 @@ public:
|
|||
case SnesMemoryType::DspProgramRom:
|
||||
return CpuType::NecDsp;
|
||||
|
||||
case SnesMemoryType::Cx4DataRam:
|
||||
case SnesMemoryType::Cx4Memory:
|
||||
return CpuType::Cx4;
|
||||
|
||||
default:
|
||||
return CpuType::Cpu;
|
||||
}
|
||||
|
@ -50,7 +53,7 @@ public:
|
|||
|
||||
static constexpr SnesMemoryType GetLastCpuMemoryType()
|
||||
{
|
||||
return SnesMemoryType::GsuMemory;
|
||||
return SnesMemoryType::Cx4Memory;
|
||||
}
|
||||
|
||||
static bool IsPpuMemory(SnesMemoryType memType)
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "SpcDebugger.h"
|
||||
#include "GsuDebugger.h"
|
||||
#include "NecDspDebugger.h"
|
||||
#include "Cx4Debugger.h"
|
||||
#include "BaseCartridge.h"
|
||||
#include "MemoryManager.h"
|
||||
#include "EmuSettings.h"
|
||||
|
@ -60,6 +61,7 @@ Debugger::Debugger(shared_ptr<Console> console)
|
|||
_watchExpEval[(int)CpuType::Sa1].reset(new ExpressionEvaluator(this, CpuType::Sa1));
|
||||
_watchExpEval[(int)CpuType::Gsu].reset(new ExpressionEvaluator(this, CpuType::Gsu));
|
||||
_watchExpEval[(int)CpuType::NecDsp].reset(new ExpressionEvaluator(this, CpuType::NecDsp));
|
||||
_watchExpEval[(int)CpuType::Cx4].reset(new ExpressionEvaluator(this, CpuType::Cx4));
|
||||
|
||||
_codeDataLogger.reset(new CodeDataLogger(_cart->DebugGetPrgRomSize(), _memoryManager.get()));
|
||||
_memoryDumper.reset(new MemoryDumper(this));
|
||||
|
@ -79,6 +81,8 @@ Debugger::Debugger(shared_ptr<Console> console)
|
|||
_gsuDebugger.reset(new GsuDebugger(this));
|
||||
} else if(_cart->GetDsp()) {
|
||||
_necDspDebugger.reset(new NecDspDebugger(this));
|
||||
} else if(_cart->GetCx4()) {
|
||||
_cx4Debugger.reset(new Cx4Debugger(this));
|
||||
}
|
||||
|
||||
_step.reset(new StepRequest());
|
||||
|
@ -131,6 +135,7 @@ void Debugger::ProcessMemoryRead(uint32_t addr, uint8_t value, MemoryOperationTy
|
|||
case CpuType::NecDsp: _necDspDebugger->ProcessRead(addr, value, opType); break;
|
||||
case CpuType::Sa1: _sa1Debugger->ProcessRead(addr, value, opType); break;
|
||||
case CpuType::Gsu: _gsuDebugger->ProcessRead(addr, value, opType); break;
|
||||
case CpuType::Cx4: _cx4Debugger->ProcessRead(addr, value, opType); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,6 +148,7 @@ void Debugger::ProcessMemoryWrite(uint32_t addr, uint8_t value, MemoryOperationT
|
|||
case CpuType::NecDsp: _necDspDebugger->ProcessWrite(addr, value, opType); break;
|
||||
case CpuType::Sa1: _sa1Debugger->ProcessWrite(addr, value, opType); break;
|
||||
case CpuType::Gsu: _gsuDebugger->ProcessWrite(addr, value, opType); break;
|
||||
case CpuType::Cx4: _cx4Debugger->ProcessWrite(addr, value, opType); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,24 +214,6 @@ void Debugger::ProcessPpuCycle()
|
|||
}
|
||||
}
|
||||
|
||||
void Debugger::ProcessCx4Exec()
|
||||
{
|
||||
if(_traceLogger->IsCpuLogged(CpuType::Cx4)) {
|
||||
DebugState debugState;
|
||||
GetState(debugState, true);
|
||||
|
||||
uint32_t addr = (debugState.Cx4.Cache.Address[debugState.Cx4.Cache.Page] + (debugState.Cx4.PC * 2)) & 0xFFFFFF;
|
||||
AddressInfo addressInfo = _memoryManager->GetMemoryMappings()->GetAbsoluteAddress(addr);
|
||||
|
||||
if(addressInfo.Address >= 0) {
|
||||
_disassembler->BuildCache(addressInfo, 0, CpuType::Cx4);
|
||||
|
||||
DisassemblyInfo disInfo = _disassembler->GetDisassemblyInfo(addressInfo);
|
||||
_traceLogger->Log(CpuType::Cx4, debugState, disInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger::SleepUntilResume(BreakSource source, MemoryOperationInfo *operation, int breakpointId)
|
||||
{
|
||||
if(_suspendRequestCount) {
|
||||
|
@ -241,6 +229,8 @@ void Debugger::SleepUntilResume(BreakSource source, MemoryOperationInfo *operati
|
|||
_disassembler->Disassemble(CpuType::Gsu);
|
||||
} else if(_cart->GetDsp()) {
|
||||
_disassembler->Disassemble(CpuType::NecDsp);
|
||||
} else if(_cart->GetCx4()) {
|
||||
_disassembler->Disassemble(CpuType::Cx4);
|
||||
}
|
||||
|
||||
_executionStopped = true;
|
||||
|
@ -334,6 +324,9 @@ void Debugger::Run()
|
|||
if(_necDspDebugger) {
|
||||
_necDspDebugger->Run();
|
||||
}
|
||||
if(_cx4Debugger) {
|
||||
_cx4Debugger->Run();
|
||||
}
|
||||
_waitForBreakResume = false;
|
||||
}
|
||||
|
||||
|
@ -352,8 +345,7 @@ void Debugger::Step(CpuType cpuType, int32_t stepCount, StepType type)
|
|||
case CpuType::NecDsp: debugger = _necDspDebugger.get(); break;
|
||||
case CpuType::Sa1: debugger = _sa1Debugger.get(); break;
|
||||
case CpuType::Gsu: debugger = _gsuDebugger.get(); break;
|
||||
case CpuType::Cx4:
|
||||
throw std::runtime_error("Step(): Unsupported CPU type.");
|
||||
case CpuType::Cx4: debugger = _cx4Debugger.get(); break;
|
||||
}
|
||||
debugger->Step(stepCount, type);
|
||||
break;
|
||||
|
@ -377,6 +369,9 @@ void Debugger::Step(CpuType cpuType, int32_t stepCount, StepType type)
|
|||
if(_necDspDebugger && debugger != _necDspDebugger.get()) {
|
||||
_necDspDebugger->Run();
|
||||
}
|
||||
if(_cx4Debugger && debugger != _cx4Debugger.get()) {
|
||||
_cx4Debugger->Run();
|
||||
}
|
||||
_waitForBreakResume = false;
|
||||
}
|
||||
|
||||
|
@ -453,6 +448,8 @@ AddressInfo Debugger::GetAbsoluteAddress(AddressInfo relAddress)
|
|||
return _cart->GetSa1()->GetMemoryMappings()->GetAbsoluteAddress(relAddress.Address);
|
||||
} else if(relAddress.Type == SnesMemoryType::GsuMemory) {
|
||||
return _cart->GetGsu()->GetMemoryMappings()->GetAbsoluteAddress(relAddress.Address);
|
||||
} else if(relAddress.Type == SnesMemoryType::Cx4Memory) {
|
||||
return _cart->GetCx4()->GetMemoryMappings()->GetAbsoluteAddress(relAddress.Address);
|
||||
} else if(relAddress.Type == SnesMemoryType::NecDspMemory) {
|
||||
return { relAddress.Address, SnesMemoryType::DspProgramRom };
|
||||
}
|
||||
|
@ -555,6 +552,9 @@ void Debugger::SetBreakpoints(Breakpoint breakpoints[], uint32_t length)
|
|||
if(_necDspDebugger) {
|
||||
_necDspDebugger->GetBreakpointManager()->SetBreakpoints(breakpoints, length);
|
||||
}
|
||||
if(_cx4Debugger) {
|
||||
_cx4Debugger->GetBreakpointManager()->SetBreakpoints(breakpoints, length);
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger::SaveRomToDisk(string filename, bool saveAsIps, CdlStripOption stripOption)
|
||||
|
@ -657,12 +657,14 @@ template void Debugger::ProcessMemoryRead<CpuType::Sa1>(uint32_t addr, uint8_t v
|
|||
template void Debugger::ProcessMemoryRead<CpuType::Spc>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryRead<CpuType::Gsu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryRead<CpuType::NecDsp>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryRead<CpuType::Cx4>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::Cpu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::Sa1>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::Spc>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::Gsu>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::NecDsp>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
template void Debugger::ProcessMemoryWrite<CpuType::Cx4>(uint32_t addr, uint8_t value, MemoryOperationType opType);
|
||||
|
||||
template void Debugger::ProcessInterrupt<CpuType::Cpu>(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
||||
template void Debugger::ProcessInterrupt<CpuType::Sa1>(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
||||
|
|
|
@ -31,6 +31,7 @@ class SpcDebugger;
|
|||
class CpuDebugger;
|
||||
class GsuDebugger;
|
||||
class NecDspDebugger;
|
||||
class Cx4Debugger;
|
||||
class Breakpoint;
|
||||
class Assembler;
|
||||
|
||||
|
@ -55,6 +56,7 @@ private:
|
|||
unique_ptr<CpuDebugger> _sa1Debugger;
|
||||
unique_ptr<GsuDebugger> _gsuDebugger;
|
||||
unique_ptr<NecDspDebugger> _necDspDebugger;
|
||||
unique_ptr<Cx4Debugger> _cx4Debugger;
|
||||
|
||||
shared_ptr<ScriptManager> _scriptManager;
|
||||
shared_ptr<TraceLogger> _traceLogger;
|
||||
|
@ -98,8 +100,6 @@ public:
|
|||
void ProcessPpuWrite(uint16_t addr, uint8_t value, SnesMemoryType memoryType);
|
||||
void ProcessPpuCycle();
|
||||
|
||||
void ProcessCx4Exec();
|
||||
|
||||
template<CpuType type>
|
||||
void ProcessInterrupt(uint32_t originalPc, uint32_t currentPc, bool forNmi);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "NecDsp.h"
|
||||
#include "Sa1.h"
|
||||
#include "Gsu.h"
|
||||
#include "Cx4.h"
|
||||
#include "BsxCart.h"
|
||||
#include "BsxMemoryPack.h"
|
||||
#include "Debugger.h"
|
||||
|
@ -114,7 +115,7 @@ vector<DisassemblyResult>& Disassembler::GetDisassemblyList(CpuType type)
|
|||
case CpuType::NecDsp: return _necDspDisassembly;
|
||||
case CpuType::Sa1: return _sa1Disassembly;
|
||||
case CpuType::Gsu: return _gsuDisassembly;
|
||||
case CpuType::Cx4: break;
|
||||
case CpuType::Cx4: return _cx4Disassembly;
|
||||
}
|
||||
throw std::runtime_error("Disassembly::GetDisassemblyList(): Invalid cpu type");
|
||||
}
|
||||
|
@ -158,10 +159,11 @@ uint32_t Disassembler::BuildCache(AddressInfo &addrInfo, uint8_t cpuFlags, CpuTy
|
|||
|
||||
void Disassembler::SetDisassembleFlag(CpuType type)
|
||||
{
|
||||
if(type == CpuType::Cpu || type == CpuType::Sa1 || type == CpuType::Gsu) {
|
||||
if(type == CpuType::Cpu || type == CpuType::Sa1 || type == CpuType::Gsu || type == CpuType::Cx4) {
|
||||
_needDisassemble[(int)CpuType::Cpu] = true;
|
||||
_needDisassemble[(int)CpuType::Sa1] = true;
|
||||
_needDisassemble[(int)CpuType::Gsu] = true;
|
||||
_needDisassemble[(int)CpuType::Cx4] = true;
|
||||
} else {
|
||||
_needDisassemble[(int)type] = true;
|
||||
}
|
||||
|
@ -173,6 +175,7 @@ void Disassembler::ResetPrgCache()
|
|||
_needDisassemble[(int)CpuType::Cpu] = true;
|
||||
_needDisassemble[(int)CpuType::Sa1] = true;
|
||||
_needDisassemble[(int)CpuType::Gsu] = true;
|
||||
_needDisassemble[(int)CpuType::Cx4] = true;
|
||||
}
|
||||
|
||||
void Disassembler::InvalidateCache(AddressInfo addrInfo, CpuType type)
|
||||
|
@ -242,6 +245,13 @@ void Disassembler::Disassemble(CpuType cpuType)
|
|||
maxAddr = 0xFFFF;
|
||||
break;
|
||||
|
||||
case CpuType::Cx4:
|
||||
if(!_console->GetCartridge()->GetCx4()) {
|
||||
return;
|
||||
}
|
||||
mappings = _console->GetCartridge()->GetCx4()->GetMemoryMappings();
|
||||
break;
|
||||
|
||||
default: throw std::runtime_error("Disassemble(): Invalid cpu type");
|
||||
}
|
||||
|
||||
|
@ -562,8 +572,9 @@ bool Disassembler::GetLineData(CpuType type, uint32_t lineIndex, CodeLineData &d
|
|||
}
|
||||
|
||||
case CpuType::NecDsp:
|
||||
case CpuType::Cx4:
|
||||
if(!disInfo.IsInitialized()) {
|
||||
disInfo = DisassemblyInfo(src.Data + result.Address.Address, 0, CpuType::NecDsp);
|
||||
disInfo = DisassemblyInfo(src.Data + result.Address.Address, 0, lineCpuType);
|
||||
} else {
|
||||
data.Flags |= LineFlags::VerifiedCode;
|
||||
}
|
||||
|
@ -572,9 +583,6 @@ bool Disassembler::GetLineData(CpuType type, uint32_t lineIndex, CodeLineData &d
|
|||
data.EffectiveAddress = -1;
|
||||
data.ValueSize = 0;
|
||||
break;
|
||||
|
||||
case CpuType::Cx4:
|
||||
throw std::runtime_error("GetLineData - CPU type not supported");
|
||||
}
|
||||
|
||||
string text;
|
||||
|
|
|
@ -54,6 +54,7 @@ private:
|
|||
vector<DisassemblyResult> _sa1Disassembly;
|
||||
vector<DisassemblyResult> _gsuDisassembly;
|
||||
vector<DisassemblyResult> _necDspDisassembly;
|
||||
vector<DisassemblyResult> _cx4Disassembly;
|
||||
|
||||
DisassemblerSource _sources[(int)SnesMemoryType::Register];
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "Spc.h"
|
||||
#include "Sa1.h"
|
||||
#include "Gsu.h"
|
||||
#include "Cx4.h"
|
||||
#include "BaseCartridge.h"
|
||||
|
||||
MemoryAccessCounter::MemoryAccessCounter(Debugger* debugger, Console *console)
|
||||
|
@ -16,6 +17,7 @@ MemoryAccessCounter::MemoryAccessCounter(Debugger* debugger, Console *console)
|
|||
_spc = console->GetSpc().get();
|
||||
_sa1 = console->GetCartridge()->GetSa1();
|
||||
_gsu = console->GetCartridge()->GetGsu();
|
||||
_cx4 = console->GetCartridge()->GetCx4();
|
||||
|
||||
for(int i = (int)SnesMemoryType::PrgRom; i < (int)SnesMemoryType::Register; i++) {
|
||||
uint32_t memSize = _debugger->GetMemoryDumper()->GetMemorySize((SnesMemoryType)i);
|
||||
|
@ -122,6 +124,15 @@ void MemoryAccessCounter::GetAccessCounts(uint32_t offset, uint32_t length, Snes
|
|||
}
|
||||
break;
|
||||
|
||||
case SnesMemoryType::Cx4Memory:
|
||||
for(uint32_t i = 0; i < length; i++) {
|
||||
AddressInfo info = _cx4->GetMemoryMappings()->GetAbsoluteAddress(offset + i);
|
||||
if(info.Address >= 0) {
|
||||
counts[i] = _counters[(int)info.Type][info.Address];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
memcpy(counts, _counters[(int)memoryType].data() + offset, length * sizeof(AddressCounters));
|
||||
break;
|
||||
|
|
|
@ -8,6 +8,7 @@ class Spc;
|
|||
class Console;
|
||||
class Sa1;
|
||||
class Gsu;
|
||||
class Cx4;
|
||||
|
||||
struct AddressCounters
|
||||
{
|
||||
|
@ -33,6 +34,7 @@ private:
|
|||
Spc* _spc;
|
||||
Sa1* _sa1;
|
||||
Gsu* _gsu;
|
||||
Cx4* _cx4;
|
||||
|
||||
bool IsAddressUninitialized(AddressInfo &addressInfo);
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ void MemoryDumper::SetMemoryState(SnesMemoryType type, uint8_t *buffer, uint32_t
|
|||
case SnesMemoryType::SpcMemory:
|
||||
case SnesMemoryType::Sa1Memory:
|
||||
case SnesMemoryType::GsuMemory:
|
||||
case SnesMemoryType::Cx4Memory:
|
||||
break;
|
||||
|
||||
case SnesMemoryType::PrgRom: memcpy(_cartridge->DebugGetPrgRom(), buffer, length); break;
|
||||
|
@ -70,6 +71,7 @@ uint32_t MemoryDumper::GetMemorySize(SnesMemoryType type)
|
|||
case SnesMemoryType::SpcMemory: return 0x10000;
|
||||
case SnesMemoryType::Sa1Memory: return 0x1000000;
|
||||
case SnesMemoryType::GsuMemory: return 0x1000000;
|
||||
case SnesMemoryType::Cx4Memory: return 0x1000000;
|
||||
case SnesMemoryType::PrgRom: return _cartridge->DebugGetPrgRomSize();
|
||||
case SnesMemoryType::WorkRam: return MemoryManager::WorkRamSize;
|
||||
case SnesMemoryType::SaveRam: return _cartridge->DebugGetSaveRamSize();
|
||||
|
@ -121,6 +123,12 @@ void MemoryDumper::GetMemoryState(SnesMemoryType type, uint8_t *buffer)
|
|||
}
|
||||
break;
|
||||
|
||||
case SnesMemoryType::Cx4Memory:
|
||||
for(int i = 0; i <= 0xFFFFFF; i += 0x1000) {
|
||||
_cartridge->GetCx4()->GetMemoryMappings()->PeekBlock(i, buffer + i);
|
||||
}
|
||||
break;
|
||||
|
||||
case SnesMemoryType::PrgRom: memcpy(buffer, _cartridge->DebugGetPrgRom(), _cartridge->DebugGetPrgRomSize()); break;
|
||||
case SnesMemoryType::WorkRam: memcpy(buffer, _memoryManager->DebugGetWorkRam(), MemoryManager::WorkRamSize); break;
|
||||
case SnesMemoryType::SaveRam: memcpy(buffer, _cartridge->DebugGetSaveRam(), _cartridge->DebugGetSaveRamSize()); break;
|
||||
|
@ -177,6 +185,7 @@ void MemoryDumper::SetMemoryValue(SnesMemoryType memoryType, uint32_t address, u
|
|||
case SnesMemoryType::SpcMemory: _spc->DebugWrite(address, value); break;
|
||||
case SnesMemoryType::Sa1Memory: _cartridge->GetSa1()->GetMemoryMappings()->DebugWrite(address, value); break;
|
||||
case SnesMemoryType::GsuMemory: _cartridge->GetGsu()->GetMemoryMappings()->DebugWrite(address, value); break;
|
||||
case SnesMemoryType::Cx4Memory: _cartridge->GetCx4()->GetMemoryMappings()->DebugWrite(address, value); break;
|
||||
|
||||
case SnesMemoryType::PrgRom: _cartridge->DebugGetPrgRom()[address] = value; invalidateCache(); break;
|
||||
case SnesMemoryType::WorkRam: _memoryManager->DebugGetWorkRam()[address] = value; invalidateCache(); break;
|
||||
|
@ -213,6 +222,7 @@ uint8_t MemoryDumper::GetMemoryValue(SnesMemoryType memoryType, uint32_t address
|
|||
case SnesMemoryType::SpcMemory: return _spc->DebugRead(address);
|
||||
case SnesMemoryType::Sa1Memory: return _cartridge->GetSa1()->GetMemoryMappings()->Peek(address);
|
||||
case SnesMemoryType::GsuMemory: return _cartridge->GetGsu()->GetMemoryMappings()->Peek(address);
|
||||
case SnesMemoryType::Cx4Memory: return _cartridge->GetCx4()->GetMemoryMappings()->Peek(address);
|
||||
|
||||
case SnesMemoryType::PrgRom: return _cartridge->DebugGetPrgRom()[address];
|
||||
case SnesMemoryType::WorkRam: return _memoryManager->DebugGetWorkRam()[address];
|
||||
|
|
|
@ -486,6 +486,7 @@ enum class DebuggerFlags : uint32_t
|
|||
UseAltSpcOpNames = 0x1000,
|
||||
UseLowerCaseDisassembly = 0x2000,
|
||||
|
||||
Cx4DebuggerEnabled = 0x04000000,
|
||||
NecDspDebuggerEnabled = 0x08000000,
|
||||
GsuDebuggerEnabled = 0x10000000,
|
||||
Sa1DebuggerEnabled = 0x20000000,
|
||||
|
|
|
@ -46,6 +46,7 @@ SOURCES_CXX := $(LIBRETRO_DIR)/libretro.cpp \
|
|||
$(CORE_DIR)/Cx4.cpp \
|
||||
$(CORE_DIR)/Cx4.Instructions.cpp \
|
||||
$(CORE_DIR)/Cx4DisUtils.cpp \
|
||||
$(CORE_DIR)/Cx4Debugger.cpp \
|
||||
$(CORE_DIR)/Debugger.cpp \
|
||||
$(CORE_DIR)/DebugHud.cpp \
|
||||
$(CORE_DIR)/DebugStats.cpp \
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace Mesen.GUI.Debugger
|
|||
_cpuType = breakpoint.CpuType;
|
||||
|
||||
cboBreakpointType.Items.Clear();
|
||||
if(_cpuType == CpuType.Cpu || _cpuType == CpuType.Sa1 || _cpuType == CpuType.Gsu) {
|
||||
if(_cpuType == CpuType.Cpu || _cpuType == CpuType.Sa1 || _cpuType == CpuType.Gsu || _cpuType == CpuType.Cx4) {
|
||||
cboBreakpointType.Items.Add(ResourceHelper.GetEnumText(_cpuType.ToMemoryType()));
|
||||
cboBreakpointType.Items.Add("-");
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Mesen.GUI.Debugger.Code
|
|||
{
|
||||
private static Regex _space = new Regex("^[ \t]+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
private static Regex _opCode = new Regex("^[a-z0-9]{2,5}", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
private static Regex _syntax = new Regex("^[]([)!+,.|:]{1}", RegexOptions.Compiled);
|
||||
private static Regex _syntax = new Regex("^[]([)!+,.|:<>]{1}", RegexOptions.Compiled);
|
||||
private static Regex _operand = new Regex("^(([$][0-9a-f]*([.]\\d){0,1})|(#[@$:_0-9a-z]*)|([@_a-z]([@_a-z0-9])*))", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
|
||||
public static List<CodeColor> GetCpuHighlights(CodeLineData lineData, bool highlightCode, string addressFormat, Color? textColor, bool showMemoryValues)
|
||||
|
|
29
UI/Debugger/Code/Cx4DisassemblyManager.cs
Normal file
29
UI/Debugger/Code/Cx4DisassemblyManager.cs
Normal file
|
@ -0,0 +1,29 @@
|
|||
using Mesen.GUI.Debugger.Controls;
|
||||
using Mesen.GUI.Debugger.Integration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Mesen.GUI.Debugger.Code
|
||||
{
|
||||
public class Cx4DisassemblyManager : CpuDisassemblyManager
|
||||
{
|
||||
public override CpuType CpuType { get { return CpuType.Cx4; } }
|
||||
public override SnesMemoryType RelativeMemoryType { get { return SnesMemoryType.Cx4Memory; } }
|
||||
public override int AddressSize { get { return 6; } }
|
||||
public override int ByteCodeSize { get { return 4; } }
|
||||
public override bool AllowSourceView { get { return false; } }
|
||||
|
||||
public override void RefreshCode(ISymbolProvider symbolProvider, SourceFileInfo file)
|
||||
{
|
||||
this._provider = new CodeDataProvider(CpuType.Cx4);
|
||||
}
|
||||
|
||||
protected override int GetFullAddress(int address, int length)
|
||||
{
|
||||
return address;
|
||||
}
|
||||
}
|
||||
}
|
64
UI/Debugger/Code/Cx4LineStyleProvider.cs
Normal file
64
UI/Debugger/Code/Cx4LineStyleProvider.cs
Normal file
|
@ -0,0 +1,64 @@
|
|||
using Mesen.GUI.Config;
|
||||
using Mesen.GUI.Debugger.Controls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Mesen.GUI.Debugger.Code
|
||||
{
|
||||
public class Cx4LineStyleProvider : BaseStyleProvider
|
||||
{
|
||||
public Cx4LineStyleProvider()
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetLineComment(int lineNumber)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void ConfigureActiveStatement(LineProperties props)
|
||||
{
|
||||
props.FgColor = Color.Black;
|
||||
props.TextBgColor = ConfigManager.Config.Debug.Debugger.CodeActiveStatementColor;
|
||||
props.Symbol |= LineSymbol.Arrow;
|
||||
}
|
||||
|
||||
public override LineProperties GetLineStyle(CodeLineData lineData, int lineIndex)
|
||||
{
|
||||
DebuggerInfo cfg = ConfigManager.Config.Debug.Debugger;
|
||||
LineProperties props = new LineProperties();
|
||||
|
||||
if(lineData.Address >= 0) {
|
||||
GetBreakpointLineProperties(props, lineData.Address);
|
||||
}
|
||||
|
||||
bool isActiveStatement = ActiveAddress.HasValue && ActiveAddress.Value == lineData.Address;
|
||||
if(isActiveStatement) {
|
||||
ConfigureActiveStatement(props);
|
||||
}
|
||||
|
||||
if(lineData.Flags.HasFlag(LineFlags.VerifiedData)) {
|
||||
props.LineBgColor = cfg.CodeVerifiedDataColor;
|
||||
} else if(!lineData.Flags.HasFlag(LineFlags.VerifiedCode)) {
|
||||
props.LineBgColor = cfg.CodeUnidentifiedDataColor;
|
||||
}
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
private void GetBreakpointLineProperties(LineProperties props, int cpuAddress)
|
||||
{
|
||||
AddressInfo absAddress = DebugApi.GetAbsoluteAddress(new AddressInfo() { Address = cpuAddress, Type = SnesMemoryType.Cx4Memory });
|
||||
foreach(Breakpoint breakpoint in BreakpointManager.Breakpoints) {
|
||||
if(breakpoint.Matches((uint)cpuAddress, SnesMemoryType.Cx4Memory, CpuType.Cx4) || (absAddress.Address >= 0 && breakpoint.Matches((uint)absAddress.Address, absAddress.Type, CpuType.Cx4))) {
|
||||
SetBreakpointLineProperties(props, breakpoint);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -79,6 +79,8 @@ namespace Mesen.GUI.Config
|
|||
public XmlKeys OpenGsuDebugger = Keys.None;
|
||||
[ShortcutName("Open DSP Debugger")]
|
||||
public XmlKeys OpenNecDspDebugger = Keys.None;
|
||||
[ShortcutName("Open CX4 Debugger")]
|
||||
public XmlKeys OpenCx4Debugger = Keys.None;
|
||||
[ShortcutName("Open Event Viewer")]
|
||||
public XmlKeys OpenEventViewer = Keys.Control | Keys.E;
|
||||
[ShortcutName("Open Memory Tools")]
|
||||
|
|
883
UI/Debugger/Controls/ctrlCx4Status.Designer.cs
generated
Normal file
883
UI/Debugger/Controls/ctrlCx4Status.Designer.cs
generated
Normal file
|
@ -0,0 +1,883 @@
|
|||
namespace Mesen.GUI.Debugger.Controls
|
||||
{
|
||||
partial class ctrlCx4Status
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.grpCx4 = new System.Windows.Forms.GroupBox();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblR0 = new System.Windows.Forms.Label();
|
||||
this.txtR0 = new System.Windows.Forms.TextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label16 = new System.Windows.Forms.Label();
|
||||
this.txtR5 = new System.Windows.Forms.TextBox();
|
||||
this.txtR15 = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.txtR4 = new System.Windows.Forms.TextBox();
|
||||
this.txtR1 = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.txtR2 = new System.Windows.Forms.TextBox();
|
||||
this.label13 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.txtR12 = new System.Windows.Forms.TextBox();
|
||||
this.txtR3 = new System.Windows.Forms.TextBox();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.txtR6 = new System.Windows.Forms.TextBox();
|
||||
this.label14 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.txtR13 = new System.Windows.Forms.TextBox();
|
||||
this.txtR7 = new System.Windows.Forms.TextBox();
|
||||
this.label15 = new System.Windows.Forms.Label();
|
||||
this.txtR14 = new System.Windows.Forms.TextBox();
|
||||
this.chkIrq = new System.Windows.Forms.CheckBox();
|
||||
this.chkOverflow = new System.Windows.Forms.CheckBox();
|
||||
this.chkNegative = new System.Windows.Forms.CheckBox();
|
||||
this.chkCarry = new System.Windows.Forms.CheckBox();
|
||||
this.chkZero = new System.Windows.Forms.CheckBox();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.txtR11 = new System.Windows.Forms.TextBox();
|
||||
this.txtR9 = new System.Windows.Forms.TextBox();
|
||||
this.txtR8 = new System.Windows.Forms.TextBox();
|
||||
this.txtR10 = new System.Windows.Forms.TextBox();
|
||||
this.label12 = new System.Windows.Forms.Label();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label11 = new System.Windows.Forms.Label();
|
||||
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label17 = new System.Windows.Forms.Label();
|
||||
this.label18 = new System.Windows.Forms.Label();
|
||||
this.label19 = new System.Windows.Forms.Label();
|
||||
this.label20 = new System.Windows.Forms.Label();
|
||||
this.label21 = new System.Windows.Forms.Label();
|
||||
this.label22 = new System.Windows.Forms.Label();
|
||||
this.txtPB = new System.Windows.Forms.TextBox();
|
||||
this.txtMDR = new System.Windows.Forms.TextBox();
|
||||
this.txtMAR = new System.Windows.Forms.TextBox();
|
||||
this.txtDPR = new System.Windows.Forms.TextBox();
|
||||
this.txtP = new System.Windows.Forms.TextBox();
|
||||
this.txtROM = new System.Windows.Forms.TextBox();
|
||||
this.txtRAM = new System.Windows.Forms.TextBox();
|
||||
this.label23 = new System.Windows.Forms.Label();
|
||||
this.txtPC = new System.Windows.Forms.TextBox();
|
||||
this.label24 = new System.Windows.Forms.Label();
|
||||
this.txtA = new System.Windows.Forms.TextBox();
|
||||
this.label25 = new System.Windows.Forms.Label();
|
||||
this.txtMult = new System.Windows.Forms.TextBox();
|
||||
this.grpCx4.SuspendLayout();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.tableLayoutPanel2.SuspendLayout();
|
||||
this.tableLayoutPanel3.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// grpCx4
|
||||
//
|
||||
this.grpCx4.Controls.Add(this.tableLayoutPanel2);
|
||||
this.grpCx4.Controls.Add(this.tableLayoutPanel3);
|
||||
this.grpCx4.Controls.Add(this.tableLayoutPanel1);
|
||||
this.grpCx4.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.grpCx4.Location = new System.Drawing.Point(0, 0);
|
||||
this.grpCx4.Name = "grpCx4";
|
||||
this.grpCx4.Size = new System.Drawing.Size(342, 226);
|
||||
this.grpCx4.TabIndex = 0;
|
||||
this.grpCx4.TabStop = false;
|
||||
this.grpCx4.Text = "CX4";
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 9;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblR0, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR0, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label5, 2, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label11, 4, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label16, 6, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR5, 3, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR10, 5, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR15, 7, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label3, 2, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR4, 3, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR1, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label4, 4, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR8, 5, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR2, 1, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label13, 6, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label6, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR12, 7, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR3, 1, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label10, 4, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label8, 2, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR9, 5, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR6, 3, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label14, 6, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label9, 2, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR13, 7, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR7, 3, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label15, 6, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label12, 4, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR14, 7, 2);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtR11, 5, 3);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 16);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 5;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(336, 105);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// lblR0
|
||||
//
|
||||
this.lblR0.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblR0.AutoSize = true;
|
||||
this.lblR0.Location = new System.Drawing.Point(0, 6);
|
||||
this.lblR0.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.lblR0.Name = "lblR0";
|
||||
this.lblR0.Size = new System.Drawing.Size(24, 13);
|
||||
this.lblR0.TabIndex = 0;
|
||||
this.lblR0.Text = "R0:";
|
||||
//
|
||||
// txtR0
|
||||
//
|
||||
this.txtR0.Location = new System.Drawing.Point(24, 3);
|
||||
this.txtR0.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR0.Name = "txtR0";
|
||||
this.txtR0.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR0.TabIndex = 1;
|
||||
this.txtR0.Text = "DDDD";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(79, 32);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(24, 13);
|
||||
this.label5.TabIndex = 19;
|
||||
this.label5.Text = "R5:";
|
||||
//
|
||||
// label16
|
||||
//
|
||||
this.label16.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label16.AutoSize = true;
|
||||
this.label16.Location = new System.Drawing.Point(243, 84);
|
||||
this.label16.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label16.Name = "label16";
|
||||
this.label16.Size = new System.Drawing.Size(30, 13);
|
||||
this.label16.TabIndex = 28;
|
||||
this.label16.Text = "R15:";
|
||||
//
|
||||
// txtR5
|
||||
//
|
||||
this.txtR5.Location = new System.Drawing.Point(103, 29);
|
||||
this.txtR5.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR5.Name = "txtR5";
|
||||
this.txtR5.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR5.TabIndex = 32;
|
||||
this.txtR5.Text = "DDDD";
|
||||
//
|
||||
// txtR15
|
||||
//
|
||||
this.txtR15.Location = new System.Drawing.Point(273, 81);
|
||||
this.txtR15.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR15.Name = "txtR15";
|
||||
this.txtR15.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR15.TabIndex = 40;
|
||||
this.txtR15.Text = "DDDD";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(79, 6);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(24, 13);
|
||||
this.label3.TabIndex = 17;
|
||||
this.label3.Text = "R4:";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(0, 32);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(24, 13);
|
||||
this.label1.TabIndex = 2;
|
||||
this.label1.Text = "R1:";
|
||||
//
|
||||
// txtR4
|
||||
//
|
||||
this.txtR4.Location = new System.Drawing.Point(103, 3);
|
||||
this.txtR4.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR4.Name = "txtR4";
|
||||
this.txtR4.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR4.TabIndex = 29;
|
||||
this.txtR4.Text = "DDDD";
|
||||
//
|
||||
// txtR1
|
||||
//
|
||||
this.txtR1.Location = new System.Drawing.Point(24, 29);
|
||||
this.txtR1.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR1.Name = "txtR1";
|
||||
this.txtR1.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR1.TabIndex = 4;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(0, 58);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(24, 13);
|
||||
this.label2.TabIndex = 3;
|
||||
this.label2.Text = "R2:";
|
||||
//
|
||||
// txtR2
|
||||
//
|
||||
this.txtR2.Location = new System.Drawing.Point(24, 55);
|
||||
this.txtR2.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR2.Name = "txtR2";
|
||||
this.txtR2.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR2.TabIndex = 5;
|
||||
//
|
||||
// label13
|
||||
//
|
||||
this.label13.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label13.AutoSize = true;
|
||||
this.label13.Location = new System.Drawing.Point(243, 6);
|
||||
this.label13.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label13.Name = "label13";
|
||||
this.label13.Size = new System.Drawing.Size(30, 13);
|
||||
this.label13.TabIndex = 25;
|
||||
this.label13.Text = "R12:";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(0, 84);
|
||||
this.label6.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(24, 13);
|
||||
this.label6.TabIndex = 12;
|
||||
this.label6.Text = "R3:";
|
||||
//
|
||||
// txtR12
|
||||
//
|
||||
this.txtR12.Location = new System.Drawing.Point(273, 3);
|
||||
this.txtR12.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR12.Name = "txtR12";
|
||||
this.txtR12.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR12.TabIndex = 31;
|
||||
this.txtR12.Text = "DDDD";
|
||||
//
|
||||
// txtR3
|
||||
//
|
||||
this.txtR3.Location = new System.Drawing.Point(24, 81);
|
||||
this.txtR3.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR3.Name = "txtR3";
|
||||
this.txtR3.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR3.TabIndex = 13;
|
||||
this.txtR3.Text = "DDDD";
|
||||
//
|
||||
// label8
|
||||
//
|
||||
this.label8.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Location = new System.Drawing.Point(79, 58);
|
||||
this.label8.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(24, 13);
|
||||
this.label8.TabIndex = 20;
|
||||
this.label8.Text = "R6:";
|
||||
//
|
||||
// txtR6
|
||||
//
|
||||
this.txtR6.Location = new System.Drawing.Point(103, 55);
|
||||
this.txtR6.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR6.Name = "txtR6";
|
||||
this.txtR6.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR6.TabIndex = 35;
|
||||
this.txtR6.Text = "DDDD";
|
||||
//
|
||||
// label14
|
||||
//
|
||||
this.label14.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label14.AutoSize = true;
|
||||
this.label14.Location = new System.Drawing.Point(243, 32);
|
||||
this.label14.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label14.Name = "label14";
|
||||
this.label14.Size = new System.Drawing.Size(30, 13);
|
||||
this.label14.TabIndex = 26;
|
||||
this.label14.Text = "R13:";
|
||||
//
|
||||
// label9
|
||||
//
|
||||
this.label9.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label9.AutoSize = true;
|
||||
this.label9.Location = new System.Drawing.Point(79, 84);
|
||||
this.label9.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label9.Name = "label9";
|
||||
this.label9.Size = new System.Drawing.Size(24, 13);
|
||||
this.label9.TabIndex = 21;
|
||||
this.label9.Text = "R7:";
|
||||
//
|
||||
// txtR13
|
||||
//
|
||||
this.txtR13.Location = new System.Drawing.Point(273, 29);
|
||||
this.txtR13.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR13.Name = "txtR13";
|
||||
this.txtR13.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR13.TabIndex = 34;
|
||||
this.txtR13.Text = "DDDD";
|
||||
//
|
||||
// txtR7
|
||||
//
|
||||
this.txtR7.Location = new System.Drawing.Point(103, 81);
|
||||
this.txtR7.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR7.Name = "txtR7";
|
||||
this.txtR7.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR7.TabIndex = 38;
|
||||
this.txtR7.Text = "DDDD";
|
||||
//
|
||||
// label15
|
||||
//
|
||||
this.label15.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label15.AutoSize = true;
|
||||
this.label15.Location = new System.Drawing.Point(243, 58);
|
||||
this.label15.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label15.Name = "label15";
|
||||
this.label15.Size = new System.Drawing.Size(30, 13);
|
||||
this.label15.TabIndex = 27;
|
||||
this.label15.Text = "R14:";
|
||||
//
|
||||
// txtR14
|
||||
//
|
||||
this.txtR14.Location = new System.Drawing.Point(273, 55);
|
||||
this.txtR14.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR14.Name = "txtR14";
|
||||
this.txtR14.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR14.TabIndex = 37;
|
||||
this.txtR14.Text = "DDDD";
|
||||
//
|
||||
// chkIrq
|
||||
//
|
||||
this.chkIrq.AutoSize = true;
|
||||
this.chkIrq.Location = new System.Drawing.Point(159, 3);
|
||||
this.chkIrq.Name = "chkIrq";
|
||||
this.chkIrq.Size = new System.Drawing.Size(45, 17);
|
||||
this.chkIrq.TabIndex = 18;
|
||||
this.chkIrq.Text = "IRQ";
|
||||
this.chkIrq.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkOverflow
|
||||
//
|
||||
this.chkOverflow.AutoSize = true;
|
||||
this.chkOverflow.Location = new System.Drawing.Point(120, 3);
|
||||
this.chkOverflow.Name = "chkOverflow";
|
||||
this.chkOverflow.Size = new System.Drawing.Size(33, 17);
|
||||
this.chkOverflow.TabIndex = 20;
|
||||
this.chkOverflow.Text = "V";
|
||||
this.chkOverflow.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkNegative
|
||||
//
|
||||
this.chkNegative.AutoSize = true;
|
||||
this.chkNegative.Location = new System.Drawing.Point(81, 3);
|
||||
this.chkNegative.Name = "chkNegative";
|
||||
this.chkNegative.Size = new System.Drawing.Size(33, 17);
|
||||
this.chkNegative.TabIndex = 17;
|
||||
this.chkNegative.Text = "S";
|
||||
this.chkNegative.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkCarry
|
||||
//
|
||||
this.chkCarry.AutoSize = true;
|
||||
this.chkCarry.Location = new System.Drawing.Point(42, 3);
|
||||
this.chkCarry.Name = "chkCarry";
|
||||
this.chkCarry.Size = new System.Drawing.Size(33, 17);
|
||||
this.chkCarry.TabIndex = 23;
|
||||
this.chkCarry.Text = "C";
|
||||
this.chkCarry.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkZero
|
||||
//
|
||||
this.chkZero.AutoSize = true;
|
||||
this.chkZero.Location = new System.Drawing.Point(3, 3);
|
||||
this.chkZero.Name = "chkZero";
|
||||
this.chkZero.Size = new System.Drawing.Size(33, 17);
|
||||
this.chkZero.TabIndex = 21;
|
||||
this.chkZero.Text = "Z";
|
||||
this.chkZero.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
this.tableLayoutPanel2.ColumnCount = 6;
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel2.Controls.Add(this.chkZero, 0, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.chkCarry, 1, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.chkNegative, 2, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.chkOverflow, 3, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.chkIrq, 4, 0);
|
||||
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 194);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
this.tableLayoutPanel2.RowCount = 1;
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(336, 20);
|
||||
this.tableLayoutPanel2.TabIndex = 16;
|
||||
//
|
||||
// txtR11
|
||||
//
|
||||
this.txtR11.Location = new System.Drawing.Point(188, 81);
|
||||
this.txtR11.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR11.Name = "txtR11";
|
||||
this.txtR11.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR11.TabIndex = 39;
|
||||
this.txtR11.Text = "DDDD";
|
||||
//
|
||||
// txtR9
|
||||
//
|
||||
this.txtR9.Location = new System.Drawing.Point(188, 29);
|
||||
this.txtR9.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR9.Name = "txtR9";
|
||||
this.txtR9.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR9.TabIndex = 33;
|
||||
this.txtR9.Text = "DDDD";
|
||||
//
|
||||
// txtR8
|
||||
//
|
||||
this.txtR8.Location = new System.Drawing.Point(188, 3);
|
||||
this.txtR8.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR8.Name = "txtR8";
|
||||
this.txtR8.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR8.TabIndex = 30;
|
||||
this.txtR8.Text = "DDDD";
|
||||
//
|
||||
// txtR10
|
||||
//
|
||||
this.txtR10.Location = new System.Drawing.Point(188, 55);
|
||||
this.txtR10.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtR10.Name = "txtR10";
|
||||
this.txtR10.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtR10.TabIndex = 36;
|
||||
this.txtR10.Text = "DDDD";
|
||||
//
|
||||
// label12
|
||||
//
|
||||
this.label12.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label12.AutoSize = true;
|
||||
this.label12.Location = new System.Drawing.Point(158, 84);
|
||||
this.label12.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label12.Name = "label12";
|
||||
this.label12.Size = new System.Drawing.Size(30, 13);
|
||||
this.label12.TabIndex = 24;
|
||||
this.label12.Text = "R11:";
|
||||
//
|
||||
// label10
|
||||
//
|
||||
this.label10.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label10.AutoSize = true;
|
||||
this.label10.Location = new System.Drawing.Point(158, 32);
|
||||
this.label10.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label10.Name = "label10";
|
||||
this.label10.Size = new System.Drawing.Size(24, 13);
|
||||
this.label10.TabIndex = 22;
|
||||
this.label10.Text = "R9:";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(158, 6);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(24, 13);
|
||||
this.label4.TabIndex = 18;
|
||||
this.label4.Text = "R8:";
|
||||
//
|
||||
// label11
|
||||
//
|
||||
this.label11.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label11.AutoSize = true;
|
||||
this.label11.Location = new System.Drawing.Point(158, 58);
|
||||
this.label11.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label11.Name = "label11";
|
||||
this.label11.Size = new System.Drawing.Size(30, 13);
|
||||
this.label11.TabIndex = 23;
|
||||
this.label11.Text = "R10:";
|
||||
//
|
||||
// tableLayoutPanel3
|
||||
//
|
||||
this.tableLayoutPanel3.ColumnCount = 8;
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtMult, 5, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label25, 4, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtA, 3, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtDPR, 7, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtMAR, 5, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtMDR, 3, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtPB, 1, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label20, 2, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label21, 4, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label22, 6, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtROM, 3, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtRAM, 5, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label7, 0, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label23, 2, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label19, 2, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label24, 4, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label17, 0, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtPC, 1, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.txtP, 1, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label18, 0, 1);
|
||||
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 121);
|
||||
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
|
||||
this.tableLayoutPanel3.RowCount = 3;
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tableLayoutPanel3.Size = new System.Drawing.Size(336, 73);
|
||||
this.tableLayoutPanel3.TabIndex = 17;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Location = new System.Drawing.Point(0, 5);
|
||||
this.label7.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(24, 13);
|
||||
this.label7.TabIndex = 13;
|
||||
this.label7.Text = "PB:";
|
||||
//
|
||||
// label17
|
||||
//
|
||||
this.label17.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label17.AutoSize = true;
|
||||
this.label17.Location = new System.Drawing.Point(0, 54);
|
||||
this.label17.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label17.Name = "label17";
|
||||
this.label17.Size = new System.Drawing.Size(24, 13);
|
||||
this.label17.TabIndex = 14;
|
||||
this.label17.Text = "PC:";
|
||||
//
|
||||
// label18
|
||||
//
|
||||
this.label18.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label18.AutoSize = true;
|
||||
this.label18.Location = new System.Drawing.Point(0, 29);
|
||||
this.label18.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label18.Name = "label18";
|
||||
this.label18.Size = new System.Drawing.Size(17, 13);
|
||||
this.label18.TabIndex = 15;
|
||||
this.label18.Text = "P:";
|
||||
//
|
||||
// label19
|
||||
//
|
||||
this.label19.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label19.AutoSize = true;
|
||||
this.label19.Location = new System.Drawing.Point(62, 29);
|
||||
this.label19.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label19.Name = "label19";
|
||||
this.label19.Size = new System.Drawing.Size(17, 13);
|
||||
this.label19.TabIndex = 41;
|
||||
this.label19.Text = "A:";
|
||||
//
|
||||
// label20
|
||||
//
|
||||
this.label20.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label20.AutoSize = true;
|
||||
this.label20.Location = new System.Drawing.Point(62, 5);
|
||||
this.label20.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label20.Name = "label20";
|
||||
this.label20.Size = new System.Drawing.Size(35, 13);
|
||||
this.label20.TabIndex = 42;
|
||||
this.label20.Text = "MDR:";
|
||||
//
|
||||
// label21
|
||||
//
|
||||
this.label21.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label21.AutoSize = true;
|
||||
this.label21.Location = new System.Drawing.Point(152, 5);
|
||||
this.label21.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label21.Name = "label21";
|
||||
this.label21.Size = new System.Drawing.Size(34, 13);
|
||||
this.label21.TabIndex = 43;
|
||||
this.label21.Text = "MAR:";
|
||||
//
|
||||
// label22
|
||||
//
|
||||
this.label22.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label22.AutoSize = true;
|
||||
this.label22.Location = new System.Drawing.Point(247, 5);
|
||||
this.label22.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label22.Name = "label22";
|
||||
this.label22.Size = new System.Drawing.Size(33, 13);
|
||||
this.label22.TabIndex = 44;
|
||||
this.label22.Text = "DPR:";
|
||||
//
|
||||
// txtPB
|
||||
//
|
||||
this.txtPB.Location = new System.Drawing.Point(24, 3);
|
||||
this.txtPB.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtPB.Name = "txtPB";
|
||||
this.txtPB.Size = new System.Drawing.Size(38, 20);
|
||||
this.txtPB.TabIndex = 45;
|
||||
this.txtPB.Text = "DDDD";
|
||||
//
|
||||
// txtMDR
|
||||
//
|
||||
this.txtMDR.Location = new System.Drawing.Point(97, 3);
|
||||
this.txtMDR.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtMDR.Name = "txtMDR";
|
||||
this.txtMDR.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtMDR.TabIndex = 46;
|
||||
this.txtMDR.Text = "DDDD";
|
||||
//
|
||||
// txtMAR
|
||||
//
|
||||
this.txtMAR.Location = new System.Drawing.Point(192, 3);
|
||||
this.txtMAR.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtMAR.Name = "txtMAR";
|
||||
this.txtMAR.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtMAR.TabIndex = 47;
|
||||
this.txtMAR.Text = "DDDD";
|
||||
//
|
||||
// txtDPR
|
||||
//
|
||||
this.txtDPR.Location = new System.Drawing.Point(280, 3);
|
||||
this.txtDPR.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtDPR.Name = "txtDPR";
|
||||
this.txtDPR.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtDPR.TabIndex = 48;
|
||||
this.txtDPR.Text = "DDDD";
|
||||
//
|
||||
// txtP
|
||||
//
|
||||
this.txtP.Location = new System.Drawing.Point(24, 27);
|
||||
this.txtP.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtP.Name = "txtP";
|
||||
this.txtP.Size = new System.Drawing.Size(38, 20);
|
||||
this.txtP.TabIndex = 49;
|
||||
this.txtP.Text = "DDDD";
|
||||
//
|
||||
// txtROM
|
||||
//
|
||||
this.txtROM.Location = new System.Drawing.Point(97, 51);
|
||||
this.txtROM.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtROM.Name = "txtROM";
|
||||
this.txtROM.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtROM.TabIndex = 50;
|
||||
this.txtROM.Text = "DDDD";
|
||||
//
|
||||
// txtRAM
|
||||
//
|
||||
this.txtRAM.Location = new System.Drawing.Point(192, 51);
|
||||
this.txtRAM.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtRAM.Name = "txtRAM";
|
||||
this.txtRAM.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtRAM.TabIndex = 51;
|
||||
this.txtRAM.Text = "DDDD";
|
||||
//
|
||||
// label23
|
||||
//
|
||||
this.label23.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label23.AutoSize = true;
|
||||
this.label23.Location = new System.Drawing.Point(62, 54);
|
||||
this.label23.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label23.Name = "label23";
|
||||
this.label23.Size = new System.Drawing.Size(35, 13);
|
||||
this.label23.TabIndex = 52;
|
||||
this.label23.Text = "ROM:";
|
||||
//
|
||||
// txtPC
|
||||
//
|
||||
this.txtPC.Location = new System.Drawing.Point(24, 51);
|
||||
this.txtPC.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtPC.Name = "txtPC";
|
||||
this.txtPC.Size = new System.Drawing.Size(21, 20);
|
||||
this.txtPC.TabIndex = 53;
|
||||
this.txtPC.Text = "DDDD";
|
||||
//
|
||||
// label24
|
||||
//
|
||||
this.label24.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label24.AutoSize = true;
|
||||
this.label24.Location = new System.Drawing.Point(152, 54);
|
||||
this.label24.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label24.Name = "label24";
|
||||
this.label24.Size = new System.Drawing.Size(34, 13);
|
||||
this.label24.TabIndex = 54;
|
||||
this.label24.Text = "RAM:";
|
||||
//
|
||||
// txtA
|
||||
//
|
||||
this.txtA.Location = new System.Drawing.Point(97, 27);
|
||||
this.txtA.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtA.Name = "txtA";
|
||||
this.txtA.Size = new System.Drawing.Size(55, 20);
|
||||
this.txtA.TabIndex = 55;
|
||||
this.txtA.Text = "DDDD";
|
||||
//
|
||||
// label25
|
||||
//
|
||||
this.label25.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.label25.AutoSize = true;
|
||||
this.label25.Location = new System.Drawing.Point(152, 29);
|
||||
this.label25.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.label25.Name = "label25";
|
||||
this.label25.Size = new System.Drawing.Size(40, 13);
|
||||
this.label25.TabIndex = 56;
|
||||
this.label25.Text = "MULT:";
|
||||
//
|
||||
// txtMult
|
||||
//
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.txtMult, 3);
|
||||
this.txtMult.Location = new System.Drawing.Point(192, 27);
|
||||
this.txtMult.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
|
||||
this.txtMult.Name = "txtMult";
|
||||
this.txtMult.Size = new System.Drawing.Size(108, 20);
|
||||
this.txtMult.TabIndex = 57;
|
||||
this.txtMult.Text = "DDDD";
|
||||
//
|
||||
// ctrlCx4Status
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.grpCx4);
|
||||
this.Name = "ctrlCx4Status";
|
||||
this.Size = new System.Drawing.Size(342, 225);
|
||||
this.grpCx4.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.tableLayoutPanel2.ResumeLayout(false);
|
||||
this.tableLayoutPanel2.PerformLayout();
|
||||
this.tableLayoutPanel3.ResumeLayout(false);
|
||||
this.tableLayoutPanel3.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox grpCx4;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label lblR0;
|
||||
private System.Windows.Forms.TextBox txtR0;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox txtR1;
|
||||
private System.Windows.Forms.TextBox txtR2;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.TextBox txtR3;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Label label13;
|
||||
private System.Windows.Forms.Label label14;
|
||||
private System.Windows.Forms.Label label15;
|
||||
private System.Windows.Forms.Label label16;
|
||||
private System.Windows.Forms.TextBox txtR4;
|
||||
private System.Windows.Forms.TextBox txtR12;
|
||||
private System.Windows.Forms.TextBox txtR5;
|
||||
private System.Windows.Forms.TextBox txtR13;
|
||||
private System.Windows.Forms.TextBox txtR6;
|
||||
private System.Windows.Forms.TextBox txtR14;
|
||||
private System.Windows.Forms.TextBox txtR7;
|
||||
private System.Windows.Forms.TextBox txtR15;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
|
||||
private System.Windows.Forms.Label label19;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label17;
|
||||
private System.Windows.Forms.Label label18;
|
||||
private System.Windows.Forms.Label label20;
|
||||
private System.Windows.Forms.Label label21;
|
||||
private System.Windows.Forms.Label label22;
|
||||
private System.Windows.Forms.Label label11;
|
||||
private System.Windows.Forms.TextBox txtR10;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox txtR8;
|
||||
private System.Windows.Forms.Label label10;
|
||||
private System.Windows.Forms.TextBox txtR9;
|
||||
private System.Windows.Forms.Label label12;
|
||||
private System.Windows.Forms.TextBox txtR11;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||
private System.Windows.Forms.CheckBox chkZero;
|
||||
private System.Windows.Forms.CheckBox chkCarry;
|
||||
private System.Windows.Forms.CheckBox chkNegative;
|
||||
private System.Windows.Forms.CheckBox chkOverflow;
|
||||
private System.Windows.Forms.CheckBox chkIrq;
|
||||
private System.Windows.Forms.Label label25;
|
||||
private System.Windows.Forms.TextBox txtA;
|
||||
private System.Windows.Forms.Label label24;
|
||||
private System.Windows.Forms.TextBox txtPC;
|
||||
private System.Windows.Forms.Label label23;
|
||||
private System.Windows.Forms.TextBox txtDPR;
|
||||
private System.Windows.Forms.TextBox txtMAR;
|
||||
private System.Windows.Forms.TextBox txtMDR;
|
||||
private System.Windows.Forms.TextBox txtPB;
|
||||
private System.Windows.Forms.TextBox txtP;
|
||||
private System.Windows.Forms.TextBox txtROM;
|
||||
private System.Windows.Forms.TextBox txtRAM;
|
||||
private System.Windows.Forms.TextBox txtMult;
|
||||
}
|
||||
}
|
66
UI/Debugger/Controls/ctrlCx4Status.cs
Normal file
66
UI/Debugger/Controls/ctrlCx4Status.cs
Normal file
|
@ -0,0 +1,66 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Mesen.GUI.Controls;
|
||||
using Mesen.GUI.Forms;
|
||||
|
||||
namespace Mesen.GUI.Debugger.Controls
|
||||
{
|
||||
public partial class ctrlCx4Status : BaseControl
|
||||
{
|
||||
public ctrlCx4Status()
|
||||
{
|
||||
InitializeComponent();
|
||||
if(IsDesignMode) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateStatus(Cx4State state)
|
||||
{
|
||||
txtR0.Text = state.Regs[0].ToString("X6");
|
||||
txtR1.Text = state.Regs[1].ToString("X6");
|
||||
txtR2.Text = state.Regs[2].ToString("X6");
|
||||
txtR3.Text = state.Regs[3].ToString("X6");
|
||||
txtR4.Text = state.Regs[4].ToString("X6");
|
||||
txtR5.Text = state.Regs[5].ToString("X6");
|
||||
txtR6.Text = state.Regs[6].ToString("X6");
|
||||
txtR7.Text = state.Regs[7].ToString("X6");
|
||||
txtR8.Text = state.Regs[8].ToString("X6");
|
||||
txtR9.Text = state.Regs[9].ToString("X6");
|
||||
txtR10.Text = state.Regs[10].ToString("X6");
|
||||
txtR11.Text = state.Regs[11].ToString("X6");
|
||||
txtR12.Text = state.Regs[12].ToString("X6");
|
||||
txtR13.Text = state.Regs[13].ToString("X6");
|
||||
txtR14.Text = state.Regs[14].ToString("X6");
|
||||
txtR15.Text = state.Regs[15].ToString("X6");
|
||||
|
||||
txtPB.Text = state.PB.ToString("X4");
|
||||
txtP.Text = state.P.ToString("X4");
|
||||
txtPC.Text = state.PC.ToString("X2");
|
||||
|
||||
txtA.Text = state.A.ToString("X6");
|
||||
txtMAR.Text = state.MemoryAddressReg.ToString("X6");
|
||||
txtMDR.Text = state.MemoryDataReg.ToString("X6");
|
||||
txtDPR.Text = state.DataPointerReg.ToString("X6");
|
||||
|
||||
int ramBuffer = (state.RamBuffer[2] << 16) | (state.RamBuffer[1] << 8) | state.RamBuffer[0];
|
||||
txtRAM.Text = ramBuffer.ToString("X6");
|
||||
txtROM.Text = state.RomBuffer.ToString("X6");
|
||||
|
||||
txtMult.Text = state.Mult.ToString("X12");
|
||||
|
||||
chkNegative.Checked = state.Negative;
|
||||
chkZero.Checked = state.Zero;
|
||||
chkOverflow.Checked = state.Overflow;
|
||||
chkCarry.Checked = state.Carry;
|
||||
chkIrq.Checked = state.IrqFlag;
|
||||
}
|
||||
}
|
||||
}
|
120
UI/Debugger/Controls/ctrlCx4Status.resx
Normal file
120
UI/Debugger/Controls/ctrlCx4Status.resx
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
|
@ -52,18 +52,25 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
|
||||
if(DebugApi.GetMemorySize(SnesMemoryType.Sa1InternalRam) > 0) {
|
||||
this.Items.Add("-");
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.Sa1Memory));
|
||||
if(!excludeCpuMemory) {
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.Sa1Memory));
|
||||
}
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.Sa1InternalRam));
|
||||
}
|
||||
|
||||
if(DebugApi.GetMemorySize(SnesMemoryType.GsuWorkRam) > 0) {
|
||||
this.Items.Add("-");
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.GsuMemory));
|
||||
if(!excludeCpuMemory) {
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.GsuMemory));
|
||||
}
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.GsuWorkRam));
|
||||
}
|
||||
|
||||
if(DebugApi.GetMemorySize(SnesMemoryType.Cx4DataRam) > 0) {
|
||||
this.Items.Add("-");
|
||||
if(!excludeCpuMemory) {
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.Cx4Memory));
|
||||
}
|
||||
this.Items.Add(ResourceHelper.GetEnumText(SnesMemoryType.Cx4DataRam));
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ namespace Mesen.GUI.Debugger
|
|||
case DebugWindow.Sa1Debugger: frm = new frmDebugger(CpuType.Sa1); frm.Icon = Properties.Resources.Sa1Debugger; break;
|
||||
case DebugWindow.GsuDebugger: frm = new frmDebugger(CpuType.Gsu); frm.Icon = Properties.Resources.GsuDebugger; break;
|
||||
case DebugWindow.NecDspDebugger: frm = new frmDebugger(CpuType.NecDsp); frm.Icon = Properties.Resources.NecDspDebugger; break;
|
||||
case DebugWindow.Cx4Debugger: frm = new frmDebugger(CpuType.Cx4); frm.Icon = Properties.Resources.Cx4Debugger; break;
|
||||
case DebugWindow.TraceLogger: frm = new frmTraceLogger(); frm.Icon = Properties.Resources.LogWindow; break;
|
||||
case DebugWindow.MemoryTools: frm = new frmMemoryTools(); frm.Icon = Properties.Resources.CheatCode; break;
|
||||
case DebugWindow.TileViewer: frm = new frmTileViewer(); frm.Icon = Properties.Resources.VerticalLayout; break;
|
||||
|
@ -89,6 +90,7 @@ namespace Mesen.GUI.Debugger
|
|||
case CpuType.NecDsp: return (frmDebugger)OpenDebugWindow(DebugWindow.NecDspDebugger);
|
||||
case CpuType.Sa1: return (frmDebugger)OpenDebugWindow(DebugWindow.Sa1Debugger);
|
||||
case CpuType.Gsu: return (frmDebugger)OpenDebugWindow(DebugWindow.GsuDebugger);
|
||||
case CpuType.Cx4: return (frmDebugger)OpenDebugWindow(DebugWindow.Cx4Debugger);
|
||||
}
|
||||
throw new Exception("Invalid CPU type");
|
||||
}
|
||||
|
@ -101,6 +103,7 @@ namespace Mesen.GUI.Debugger
|
|||
case CpuType.NecDsp: return (frmDebugger)GetExistingSingleInstanceWindow(DebugWindow.NecDspDebugger);
|
||||
case CpuType.Sa1: return (frmDebugger)GetExistingSingleInstanceWindow(DebugWindow.Sa1Debugger);
|
||||
case CpuType.Gsu: return (frmDebugger)GetExistingSingleInstanceWindow(DebugWindow.GsuDebugger);
|
||||
case CpuType.Cx4: return (frmDebugger)GetExistingSingleInstanceWindow(DebugWindow.Cx4Debugger);
|
||||
}
|
||||
throw new Exception("Invalid CPU type");
|
||||
}
|
||||
|
@ -148,6 +151,7 @@ namespace Mesen.GUI.Debugger
|
|||
case DebugWindow.Sa1Debugger: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmDebugger) && ((frmDebugger)form).CpuType == CpuType.Sa1);
|
||||
case DebugWindow.GsuDebugger: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmDebugger) && ((frmDebugger)form).CpuType == CpuType.Gsu);
|
||||
case DebugWindow.NecDspDebugger: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmDebugger) && ((frmDebugger)form).CpuType == CpuType.NecDsp);
|
||||
case DebugWindow.Cx4Debugger: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmDebugger) && ((frmDebugger)form).CpuType == CpuType.Cx4);
|
||||
case DebugWindow.TraceLogger: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmTraceLogger));
|
||||
case DebugWindow.EventViewer: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmEventViewer));
|
||||
case DebugWindow.Profiler: return _openedWindows.ToList().Find((form) => form.GetType() == typeof(frmProfiler));
|
||||
|
@ -190,6 +194,7 @@ namespace Mesen.GUI.Debugger
|
|||
Sa1Debugger,
|
||||
GsuDebugger,
|
||||
NecDspDebugger,
|
||||
Cx4Debugger,
|
||||
MemoryTools,
|
||||
TraceLogger,
|
||||
TileViewer,
|
||||
|
|
|
@ -62,6 +62,7 @@ namespace Mesen.GUI.Debugger
|
|||
GetMember(nameof(DebuggerShortcutsConfig.OpenSa1Debugger)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenGsuDebugger)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenNecDspDebugger)),
|
||||
GetMember(nameof(DebuggerShortcutsConfig.OpenCx4Debugger)),
|
||||
};
|
||||
|
||||
ctrlDbgShortcutsMemoryViewer.Shortcuts = new FieldInfo[] {
|
||||
|
|
|
@ -26,6 +26,7 @@ namespace Mesen.GUI.Debugger
|
|||
private ctrlSpcStatus ctrlSpcStatus;
|
||||
private ctrlGsuStatus ctrlGsuStatus;
|
||||
private ctrlNecDspStatus ctrlNecDspStatus;
|
||||
private ctrlCx4Status ctrlCx4Status;
|
||||
|
||||
public CpuType CpuType { get { return _cpuType; } }
|
||||
|
||||
|
@ -135,6 +136,32 @@ namespace Mesen.GUI.Debugger
|
|||
this.ctrlNecDspStatus.Dock = DockStyle.Top;
|
||||
pnlStatus.Controls.Add(this.ctrlNecDspStatus);
|
||||
break;
|
||||
|
||||
case CpuType.Cx4:
|
||||
ctrlDisassemblyView.Initialize(new Cx4DisassemblyManager(), new Cx4LineStyleProvider());
|
||||
ConfigApi.SetDebuggerFlag(DebuggerFlags.Cx4DebuggerEnabled, true);
|
||||
this.Text = "CX4 Debugger";
|
||||
|
||||
ctrlLabelList.Visible = false;
|
||||
ctrlCallstack.Visible = false;
|
||||
mnuStepOver.Visible = false;
|
||||
mnuStepOut.Visible = false;
|
||||
mnuStepInto.Text = "Step";
|
||||
tlpBottomPanel.ColumnCount = 2;
|
||||
|
||||
sepBrkCopStpWdm.Visible = false;
|
||||
mnuBreakOnWdm.Visible = false;
|
||||
mnuBreakOnCop.Visible = false;
|
||||
mnuBreakOnStp.Visible = false;
|
||||
mnuBreakOnBrk.Visible = false;
|
||||
sepBreakOnUnitRead.Visible = false;
|
||||
mnuBreakOnUnitRead.Visible = false;
|
||||
|
||||
this.ctrlCx4Status = new ctrlCx4Status();
|
||||
this.ctrlCx4Status.Padding = new Padding(3, 0, 3, 0);
|
||||
this.ctrlCx4Status.Dock = DockStyle.Top;
|
||||
pnlStatus.Controls.Add(this.ctrlCx4Status);
|
||||
break;
|
||||
}
|
||||
|
||||
ctrlBreakpoints.CpuType = _cpuType;
|
||||
|
@ -428,6 +455,7 @@ namespace Mesen.GUI.Debugger
|
|||
case CpuType.NecDsp: ctrlNecDspStatus.UpdateStatus(state.NecDsp); break;
|
||||
case CpuType.Sa1: ctrlCpuStatus.UpdateStatus(state.Sa1); break;
|
||||
case CpuType.Gsu: ctrlGsuStatus.UpdateStatus(state.Gsu); break;
|
||||
case CpuType.Cx4: ctrlCx4Status.UpdateStatus(state.Cx4); break;
|
||||
default: throw new Exception("Unsupported CPU type");
|
||||
}
|
||||
|
||||
|
@ -436,7 +464,7 @@ namespace Mesen.GUI.Debugger
|
|||
ctrlDisassemblyView.SetActiveAddress(activeAddress);
|
||||
ctrlWatch.UpdateWatch(true);
|
||||
|
||||
if(_cpuType != CpuType.Gsu && _cpuType != CpuType.NecDsp) {
|
||||
if(_cpuType != CpuType.Gsu && _cpuType != CpuType.NecDsp && _cpuType != CpuType.Cx4) {
|
||||
ctrlCallstack.UpdateCallstack(_cpuType);
|
||||
}
|
||||
}
|
||||
|
@ -521,6 +549,7 @@ namespace Mesen.GUI.Debugger
|
|||
case CpuType.NecDsp: activeAddress = (int)(state.NecDsp.PC * 3); break;
|
||||
case CpuType.Sa1: activeAddress = (int)((state.Sa1.K << 16) | state.Sa1.PC); break;
|
||||
case CpuType.Gsu: activeAddress = (int)((state.Gsu.ProgramBank << 16) | state.Gsu.R[15]); break;
|
||||
case CpuType.Cx4: activeAddress = (int)((state.Cx4.Cache.Address[state.Cx4.Cache.Page] + (state.Cx4.PC * 2)) & 0xFFFFFF); break;
|
||||
default: throw new Exception("Unsupported cpu type");
|
||||
}
|
||||
|
||||
|
|
|
@ -957,6 +957,7 @@
|
|||
<Value ID="SpcMemory">SPC Memory</Value>
|
||||
<Value ID="Sa1Memory">SA-1 Memory</Value>
|
||||
<Value ID="GsuMemory">GSU Memory</Value>
|
||||
<Value ID="Cx4Memory">CX4 Memory</Value>
|
||||
<Value ID="PrgRom">PRG ROM</Value>
|
||||
<Value ID="WorkRam">Work RAM</Value>
|
||||
<Value ID="SaveRam">Save RAM</Value>
|
||||
|
|
12
UI/Forms/frmMain.Designer.cs
generated
12
UI/Forms/frmMain.Designer.cs
generated
|
@ -176,6 +176,7 @@
|
|||
this.mnuAbout = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.pnlRenderer = new System.Windows.Forms.Panel();
|
||||
this.ctrlRecentGames = new Mesen.GUI.Controls.ctrlRecentGames();
|
||||
this.mnuCx4Debugger = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuMain.SuspendLayout();
|
||||
this.pnlRenderer.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
@ -1109,7 +1110,8 @@
|
|||
this.mnuSpcDebugger,
|
||||
this.mnuSa1Debugger,
|
||||
this.mnuGsuDebugger,
|
||||
this.mnuNecDspDebugger});
|
||||
this.mnuNecDspDebugger,
|
||||
this.mnuCx4Debugger});
|
||||
this.mnuDebug.Name = "mnuDebug";
|
||||
this.mnuDebug.Size = new System.Drawing.Size(54, 20);
|
||||
this.mnuDebug.Text = "Debug";
|
||||
|
@ -1311,6 +1313,13 @@
|
|||
this.ctrlRecentGames.TabIndex = 1;
|
||||
this.ctrlRecentGames.Visible = false;
|
||||
//
|
||||
// mnuCx4Debugger
|
||||
//
|
||||
this.mnuCx4Debugger.Image = global::Mesen.GUI.Properties.Resources.Cx4Debugger;
|
||||
this.mnuCx4Debugger.Name = "mnuCx4Debugger";
|
||||
this.mnuCx4Debugger.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuCx4Debugger.Text = "CX4 Debugger";
|
||||
//
|
||||
// frmMain
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
|
@ -1485,5 +1494,6 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuAssembler;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuReloadRom;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuNecDspDebugger;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuCx4Debugger;
|
||||
}
|
||||
}
|
|
@ -281,6 +281,7 @@ namespace Mesen.GUI.Forms
|
|||
mnuSa1Debugger.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenSa1Debugger));
|
||||
mnuGsuDebugger.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenGsuDebugger));
|
||||
mnuNecDspDebugger.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenNecDspDebugger));
|
||||
mnuCx4Debugger.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenCx4Debugger));
|
||||
mnuMemoryTools.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenMemoryTools));
|
||||
mnuEventViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenEventViewer));
|
||||
mnuTilemapViewer.InitShortcut(this, nameof(DebuggerShortcutsConfig.OpenTilemapViewer));
|
||||
|
@ -344,6 +345,7 @@ namespace Mesen.GUI.Forms
|
|||
mnuSa1Debugger.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.Sa1Debugger); };
|
||||
mnuGsuDebugger.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.GsuDebugger); };
|
||||
mnuNecDspDebugger.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.NecDspDebugger); };
|
||||
mnuCx4Debugger.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.Cx4Debugger); };
|
||||
mnuTraceLogger.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.TraceLogger); };
|
||||
mnuMemoryTools.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.MemoryTools); };
|
||||
mnuTilemapViewer.Click += (s, e) => { DebugWindowManager.OpenDebugWindow(DebugWindow.TilemapViewer); };
|
||||
|
@ -450,6 +452,9 @@ namespace Mesen.GUI.Forms
|
|||
mnuNecDspDebugger.Enabled = isNecDsp;
|
||||
mnuNecDspDebugger.Visible = isNecDsp;
|
||||
|
||||
mnuCx4Debugger.Enabled = coprocessor == CoprocessorType.CX4;
|
||||
mnuCx4Debugger.Visible = coprocessor == CoprocessorType.CX4;
|
||||
|
||||
mnuTraceLogger.Enabled = running;
|
||||
mnuScriptWindow.Enabled = running;
|
||||
mnuMemoryTools.Enabled = running;
|
||||
|
|
|
@ -62,6 +62,7 @@ namespace Mesen.GUI
|
|||
UseAltSpcOpNames = 0x1000,
|
||||
UseLowerCaseDisassembly = 0x2000,
|
||||
|
||||
Cx4DebuggerEnabled = 0x04000000,
|
||||
NecDspDebuggerEnabled = 0x08000000,
|
||||
GsuDebuggerEnabled = 0x10000000,
|
||||
Sa1DebuggerEnabled = 0x20000000,
|
||||
|
|
|
@ -190,6 +190,7 @@ namespace Mesen.GUI
|
|||
Sa1Memory,
|
||||
NecDspMemory,
|
||||
GsuMemory,
|
||||
Cx4Memory,
|
||||
PrgRom,
|
||||
WorkRam,
|
||||
SaveRam,
|
||||
|
@ -519,6 +520,7 @@ namespace Mesen.GUI
|
|||
case CpuType.NecDsp: return SnesMemoryType.NecDspMemory;
|
||||
case CpuType.Sa1: return SnesMemoryType.Sa1Memory;
|
||||
case CpuType.Gsu: return SnesMemoryType.GsuMemory;
|
||||
case CpuType.Cx4: return SnesMemoryType.Cx4Memory;
|
||||
|
||||
default:
|
||||
throw new Exception("Invalid CPU type");
|
||||
|
@ -533,6 +535,7 @@ namespace Mesen.GUI
|
|||
case CpuType.NecDsp: return 4;
|
||||
case CpuType.Sa1: return 6;
|
||||
case CpuType.Gsu: return 6;
|
||||
case CpuType.Cx4: return 6;
|
||||
|
||||
default:
|
||||
throw new Exception("Invalid CPU type");
|
||||
|
|
10
UI/Properties/Resources.Designer.cs
generated
10
UI/Properties/Resources.Designer.cs
generated
|
@ -260,6 +260,16 @@ namespace Mesen.GUI.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap Cx4Debugger {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Cx4Debugger", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
|
|
@ -466,4 +466,7 @@
|
|||
<data name="NecDspDebugger" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\NecDspDebugger.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Cx4Debugger" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Cx4Debugger.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
BIN
UI/Resources/Cx4Debugger.png
Normal file
BIN
UI/Resources/Cx4Debugger.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 666 B |
12
UI/UI.csproj
12
UI/UI.csproj
|
@ -259,6 +259,8 @@
|
|||
<Compile Include="Debugger\Breakpoints\InteropBreakpoint.cs" />
|
||||
<Compile Include="Debugger\Code\BaseStyleProvider.cs" />
|
||||
<Compile Include="Debugger\Code\CodeHighlighting.cs" />
|
||||
<Compile Include="Debugger\Code\Cx4DisassemblyManager.cs" />
|
||||
<Compile Include="Debugger\Code\Cx4LineStyleProvider.cs" />
|
||||
<Compile Include="Debugger\Code\NecDspLineStyleProvider.cs" />
|
||||
<Compile Include="Debugger\Code\NecDspDisassemblyManager.cs" />
|
||||
<Compile Include="Debugger\Code\Sa1LineStyleProvider.cs" />
|
||||
|
@ -281,6 +283,12 @@
|
|||
<Compile Include="Debugger\Config\RegisterViewerConfig.cs" />
|
||||
<Compile Include="Debugger\Config\TileViewerConfig.cs" />
|
||||
<Compile Include="Debugger\Config\TilemapViewerConfig.cs" />
|
||||
<Compile Include="Debugger\Controls\ctrlCx4Status.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlCx4Status.Designer.cs">
|
||||
<DependentUpon>ctrlCx4Status.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlNecDspStatus.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
@ -979,6 +987,7 @@
|
|||
<Compile Include="Utilities\RandomGameHelper.cs" />
|
||||
<Compile Include="Utilities\RomTestHelper.cs" />
|
||||
<Compile Include="Utilities\XmlColor.cs" />
|
||||
<None Include="Resources\Cx4Debugger.png" />
|
||||
<None Include="Resources\NecDspDebugger.png" />
|
||||
<None Include="Dependencies\Satellaview\BSX0120-0.bin">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
@ -1049,6 +1058,9 @@
|
|||
<EmbeddedResource Include="Debugger\Controls\ctrlCallstack.resx">
|
||||
<DependentUpon>ctrlCallstack.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Debugger\Controls\ctrlCx4Status.resx">
|
||||
<DependentUpon>ctrlCx4Status.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Debugger\Controls\ctrlNecDspStatus.resx">
|
||||
<DependentUpon>ctrlNecDspStatus.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
|
Loading…
Add table
Reference in a new issue