Implemented CPU flags changing.
This commit is contained in:
parent
9df2e40060
commit
eb1006704a
7 changed files with 34 additions and 41 deletions
55
Core/Cpu.cpp
55
Core/Cpu.cpp
|
@ -121,45 +121,20 @@ void Cpu::Write(uint32_t addr, uint8_t value, MemoryOperationType type)
|
|||
void Cpu::SetReg(CpuRegister reg, uint16_t value)
|
||||
{
|
||||
switch (reg) {
|
||||
case CpuRegister::CpuRegA:
|
||||
{
|
||||
_state.A = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegX:
|
||||
{
|
||||
_state.X = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegY:
|
||||
{
|
||||
_state.Y = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegSP:
|
||||
{
|
||||
_state.SP = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegD:
|
||||
{
|
||||
_state.D = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegPC:
|
||||
{
|
||||
_state.PC = value;
|
||||
} break;
|
||||
case CpuRegister::CpuRegK:
|
||||
{
|
||||
_state.K = value & 0xFF;
|
||||
} break;
|
||||
case CpuRegister::CpuRegDBR:
|
||||
{
|
||||
_state.DBR = value & 0xFF;
|
||||
} break;
|
||||
case CpuRegister::CpuRegPS:
|
||||
{
|
||||
_state.PS = value & 0xFF;
|
||||
} break;
|
||||
case CpuRegister::CpuRegNmiFlag:
|
||||
{
|
||||
_state.NmiFlag = value != 0;
|
||||
} break;
|
||||
case CpuRegister::CpuRegA: { _state.A = value; } break;
|
||||
case CpuRegister::CpuRegX: { _state.X = value; } break;
|
||||
case CpuRegister::CpuRegY: { _state.Y = value; } break;
|
||||
case CpuRegister::CpuRegSP: { _state.SP = value; } break;
|
||||
case CpuRegister::CpuRegD: { _state.D = value; } break;
|
||||
case CpuRegister::CpuRegPC: { _state.PC = value; } break;
|
||||
case CpuRegister::CpuRegK: { _state.K = value & 0xFF; } break;
|
||||
case CpuRegister::CpuRegDBR: { _state.DBR = value & 0xFF; } break;
|
||||
case CpuRegister::CpuRegPS: { _state.PS = value & 0xFF; } break;
|
||||
case CpuRegister::CpuFlagNmi: { _state.NmiFlag = value != 0; } break;
|
||||
}
|
||||
}
|
||||
|
||||
void Cpu::SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set)
|
||||
{
|
||||
_state.PS = set ? (_state.PS | static_cast<uint8_t>(flag)) : (_state.PS & ~static_cast<uint8_t>(flag));
|
||||
}
|
||||
|
|
|
@ -347,6 +347,7 @@ public:
|
|||
void Serialize(Serializer &s) override;
|
||||
|
||||
void SetReg(CpuRegister reg, uint16_t value);
|
||||
void SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set);
|
||||
|
||||
#ifdef DUMMYCPU
|
||||
private:
|
||||
|
|
|
@ -516,6 +516,11 @@ void Debugger::SetCpuRegister(CpuRegister reg, uint16_t value)
|
|||
_cpu->SetReg(reg, value);
|
||||
}
|
||||
|
||||
void Debugger::SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set)
|
||||
{
|
||||
_cpu->SetCpuProcFlag(flag, set);
|
||||
}
|
||||
|
||||
void Debugger::SetCx4Register(Cx4Register reg, uint32_t value)
|
||||
{
|
||||
_cart->GetCx4()->SetReg(reg, value);
|
||||
|
|
|
@ -130,6 +130,7 @@ public:
|
|||
void GetState(DebugState& state, bool partialPpuState);
|
||||
|
||||
void SetCpuRegister(CpuRegister reg, uint16_t value);
|
||||
void SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set);
|
||||
void SetCx4Register(Cx4Register reg, uint32_t value);
|
||||
void SetGameboyRegister(GbRegister reg, uint16_t value);
|
||||
void SetGsuRegister(GsuRegister reg, uint16_t value);
|
||||
|
|
|
@ -69,6 +69,7 @@ extern "C"
|
|||
DllExport void __stdcall GetState(DebugState& state) { GetDebugger()->GetState(state, false); }
|
||||
|
||||
DllExport void __stdcall SetCpuRegister(CpuRegister reg, uint16_t value) { GetDebugger()->SetCpuRegister(reg, value); }
|
||||
DllExport void __stdcall SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set) { GetDebugger()->SetCpuProcFlag(flag, set); };
|
||||
DllExport void __stdcall SetSpcRegister(SpcRegister reg, uint16_t value) { GetDebugger()->SetSpcRegister(reg, value); }
|
||||
DllExport void __stdcall SetNecDspRegister(NecDspRegister reg, uint16_t value) { GetDebugger()->SetNecDspRegister(reg, value); }
|
||||
DllExport void __stdcall SetSa1Register(CpuRegister reg, uint16_t value) { GetDebugger()->SetSa1Register(reg, value); }
|
||||
|
|
|
@ -34,7 +34,16 @@ namespace Mesen.GUI.Debugger.Controls
|
|||
_cpuBinder.AddBinding(nameof(CpuState.SP), txtS, onEditHandler: (s, e) => { DebugApi.SetCpuRegister(CpuRegister.CpuRegSP, UInt16.Parse(txtS.Text, NumberStyles.HexNumber)); });
|
||||
_cpuBinder.AddBinding(nameof(CpuState.PS), txtP, onEditHandler: (s, e) => { DebugApi.SetCpuRegister(CpuRegister.CpuRegPS, UInt16.Parse(txtP.Text, NumberStyles.HexNumber)); });
|
||||
|
||||
_cpuBinder.AddBinding(nameof(CpuState.NmiFlag), chkNmi, onEditHandler: (s, e) => { DebugApi.SetCpuRegister(CpuRegister.CpuRegNmiFlag, (UInt16)(chkNmi.Checked ? 1 : 0)); });
|
||||
_cpuBinder.AddBinding(nameof(CpuState.NmiFlag), chkNmi, onEditHandler: (s, e) => { DebugApi.SetCpuRegister(CpuRegister.CpuFlagNmi, (UInt16)(chkNmi.Checked ? 1 : 0)); });
|
||||
|
||||
chkIndex.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.IndexMode8, chkIndex.Checked); };
|
||||
chkCarry.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.Carry, chkCarry.Checked); };
|
||||
chkDecimal.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.Decimal, chkDecimal.Checked); };
|
||||
chkInterrupt.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.IrqDisable, chkInterrupt.Checked); };
|
||||
chkNegative.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.Negative, chkNegative.Checked); };
|
||||
chkOverflow.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.Overflow, chkOverflow.Checked); };
|
||||
chkMemory.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.MemoryMode8, chkMemory.Checked); };
|
||||
chkZero.CheckedChanged += (s, e) => { DebugApi.SetCpuProcFlag(ProcFlags.Zero, chkZero.Checked); };
|
||||
}
|
||||
|
||||
public void UpdateStatus(CpuState state)
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace Mesen.GUI
|
|||
}
|
||||
|
||||
[DllImport(DllPath)] public static extern void SetCpuRegister(CpuRegister reg, UInt16 value);
|
||||
[DllImport(DllPath)] public static extern void SetCpuProcFlag(ProcFlags flag, [MarshalAs(UnmanagedType.I1)]bool set);
|
||||
[DllImport(DllPath)] public static extern void SetSpcRegister(SpcRegister reg, UInt16 value);
|
||||
[DllImport(DllPath)] public static extern void SetNecDspRegister(NecDspRegister reg, UInt16 value);
|
||||
[DllImport(DllPath)] public static extern void SetSa1Register(CpuRegister reg, UInt16 value);
|
||||
|
|
Loading…
Add table
Reference in a new issue