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)
|
void Cpu::SetReg(CpuRegister reg, uint16_t value)
|
||||||
{
|
{
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case CpuRegister::CpuRegA:
|
case CpuRegister::CpuRegA: { _state.A = value; } break;
|
||||||
{
|
case CpuRegister::CpuRegX: { _state.X = value; } break;
|
||||||
_state.A = value;
|
case CpuRegister::CpuRegY: { _state.Y = value; } break;
|
||||||
} break;
|
case CpuRegister::CpuRegSP: { _state.SP = value; } break;
|
||||||
case CpuRegister::CpuRegX:
|
case CpuRegister::CpuRegD: { _state.D = value; } break;
|
||||||
{
|
case CpuRegister::CpuRegPC: { _state.PC = value; } break;
|
||||||
_state.X = value;
|
case CpuRegister::CpuRegK: { _state.K = value & 0xFF; } break;
|
||||||
} break;
|
case CpuRegister::CpuRegDBR: { _state.DBR = value & 0xFF; } break;
|
||||||
case CpuRegister::CpuRegY:
|
case CpuRegister::CpuRegPS: { _state.PS = value & 0xFF; } break;
|
||||||
{
|
case CpuRegister::CpuFlagNmi: { _state.NmiFlag = value != 0; } break;
|
||||||
_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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 Serialize(Serializer &s) override;
|
||||||
|
|
||||||
void SetReg(CpuRegister reg, uint16_t value);
|
void SetReg(CpuRegister reg, uint16_t value);
|
||||||
|
void SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set);
|
||||||
|
|
||||||
#ifdef DUMMYCPU
|
#ifdef DUMMYCPU
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -516,6 +516,11 @@ void Debugger::SetCpuRegister(CpuRegister reg, uint16_t value)
|
||||||
_cpu->SetReg(reg, 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)
|
void Debugger::SetCx4Register(Cx4Register reg, uint32_t value)
|
||||||
{
|
{
|
||||||
_cart->GetCx4()->SetReg(reg, value);
|
_cart->GetCx4()->SetReg(reg, value);
|
||||||
|
|
|
@ -130,6 +130,7 @@ public:
|
||||||
void GetState(DebugState& state, bool partialPpuState);
|
void GetState(DebugState& state, bool partialPpuState);
|
||||||
|
|
||||||
void SetCpuRegister(CpuRegister reg, uint16_t value);
|
void SetCpuRegister(CpuRegister reg, uint16_t value);
|
||||||
|
void SetCpuProcFlag(ProcFlags::ProcFlags flag, bool set);
|
||||||
void SetCx4Register(Cx4Register reg, uint32_t value);
|
void SetCx4Register(Cx4Register reg, uint32_t value);
|
||||||
void SetGameboyRegister(GbRegister reg, uint16_t value);
|
void SetGameboyRegister(GbRegister reg, uint16_t value);
|
||||||
void SetGsuRegister(GsuRegister 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 GetState(DebugState& state) { GetDebugger()->GetState(state, false); }
|
||||||
|
|
||||||
DllExport void __stdcall SetCpuRegister(CpuRegister reg, uint16_t value) { GetDebugger()->SetCpuRegister(reg, value); }
|
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 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 SetNecDspRegister(NecDspRegister reg, uint16_t value) { GetDebugger()->SetNecDspRegister(reg, value); }
|
||||||
DllExport void __stdcall SetSa1Register(CpuRegister reg, uint16_t value) { GetDebugger()->SetSa1Register(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.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.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)
|
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 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 SetSpcRegister(SpcRegister reg, UInt16 value);
|
||||||
[DllImport(DllPath)] public static extern void SetNecDspRegister(NecDspRegister 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);
|
[DllImport(DllPath)] public static extern void SetSa1Register(CpuRegister reg, UInt16 value);
|
||||||
|
|
Loading…
Add table
Reference in a new issue