Debugger: Added aliases for each CPU flag in expressions

This commit is contained in:
Sour 2020-04-18 18:10:14 -04:00
parent 1ff7ed7b8c
commit bafd73f186
3 changed files with 26 additions and 0 deletions

View file

@ -77,6 +77,18 @@ bool ExpressionEvaluator::CheckSpecialTokens(string expression, size_t &pos, str
output += std::to_string((int64_t)EvalValues::RegY);
} else if(token == "ps") {
output += std::to_string((int64_t)EvalValues::RegPS);
} else if(token == "pscarry") {
output += std::to_string((int64_t)EvalValues::RegPS_Carry);
} else if(token == "pszero") {
output += std::to_string((int64_t)EvalValues::RegPS_Zero);
} else if(token == "psinterrupt") {
output += std::to_string((int64_t)EvalValues::RegPS_Interrupt);
} else if(token == "psdecimal") {
output += std::to_string((int64_t)EvalValues::RegPS_Decimal);
} else if(token == "psoverflow") {
output += std::to_string((int64_t)EvalValues::RegPS_Overflow);
} else if(token == "psnegative") {
output += std::to_string((int64_t)EvalValues::RegPS_Negative);
} else if(token == "sp") {
output += std::to_string((int64_t)EvalValues::RegSP);
} else if(token == "pc") {
@ -393,6 +405,12 @@ int32_t ExpressionEvaluator::Evaluate(ExpressionData &data, DebugState &state, E
case EvalValues::SpriteOverflow: token = state.PPU.StatusFlags.SpriteOverflow; resultType = EvalResultType::Boolean; break;
case EvalValues::VerticalBlank: token = state.PPU.StatusFlags.VerticalBlank; resultType = EvalResultType::Boolean; break;
case EvalValues::Branched: token = Disassembler::IsJump(_debugger->GetMemoryDumper()->GetMemoryValue(DebugMemoryType::CpuMemory, state.CPU.PreviousDebugPC, true)); resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Carry: token = (state.CPU.PS & PSFlags::Carry) != 0; resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Zero: token = (state.CPU.PS & PSFlags::Zero) != 0; resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Interrupt: token = (state.CPU.PS & PSFlags::Interrupt) != 0; resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Decimal: token = (state.CPU.PS & PSFlags::Decimal) != 0; resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Overflow: token = (state.CPU.PS & PSFlags::Overflow) != 0; resultType = EvalResultType::Boolean; break;
case EvalValues::RegPS_Negative: token = (state.CPU.PS & PSFlags::Negative) != 0; resultType = EvalResultType::Boolean; break;
}
}
} else if(token >= EvalOperators::Multiplication) {

View file

@ -69,6 +69,13 @@ enum EvalValues : int64_t
SpriteOverflow = 20000000119,
VerticalBlank = 20000000120,
Branched = 20000000121,
RegPS_Carry = 20000000122,
RegPS_Zero = 20000000123,
RegPS_Interrupt = 20000000124,
RegPS_Decimal = 20000000125,
RegPS_Overflow = 20000000126,
RegPS_Negative = 20000000127,
FirstLabelIndex = 20000002000,
};

View file

@ -115,6 +115,7 @@ namespace Mesen.GUI.Debugger
"Note: Use the $ prefix to denote hexadecimal values." + Environment.NewLine +
"Note 2: Labels assigned to the code can be used (their value will match the label's address in CPU memory)." + Environment.NewLine + Environment.NewLine +
"A/X/Y/PS/SP: Value of registers" + Environment.NewLine +
"PsCarry/PsZero/PsOverflow/PsNegative: Value of each matching CPU flag" + Environment.NewLine +
"PC: Program Counter" + Environment.NewLine +
"OpPC: Address of the current instruction's first byte" + Environment.NewLine +
"PreviousOpPC: Address of the previous instruction's first byte" + Environment.NewLine +