Add aliases for processor flags, for conditions
This commit is contained in:
parent
7853aaef77
commit
e25c69e54b
3 changed files with 68 additions and 4 deletions
|
@ -76,8 +76,10 @@ bool ExpressionEvaluator::CheckSpecialTokens(string expression, size_t &pos, str
|
|||
tokenValue = ProcessGsuTokens(token);
|
||||
} else if(_cpuType == CpuType::Gameboy) {
|
||||
tokenValue = ProcessGameboyTokens(token);
|
||||
} else {
|
||||
tokenValue = ProcessCpuSpcTokens(token);
|
||||
} else if(_cpuType == CpuType::Spc) {
|
||||
tokenValue = ProcessCpuSpcTokens(token, true);
|
||||
} else { // Cpu or Sa1
|
||||
tokenValue = ProcessCpuSpcTokens(token, false);
|
||||
}
|
||||
|
||||
if(tokenValue != -1) {
|
||||
|
@ -108,7 +110,7 @@ bool ExpressionEvaluator::CheckSpecialTokens(string expression, size_t &pos, str
|
|||
}
|
||||
}
|
||||
|
||||
int64_t ExpressionEvaluator::ProcessCpuSpcTokens(string token)
|
||||
int64_t ExpressionEvaluator::ProcessCpuSpcTokens(string token, bool spc700)
|
||||
{
|
||||
if(token == "a") {
|
||||
return EvalValues::RegA;
|
||||
|
@ -118,6 +120,32 @@ int64_t ExpressionEvaluator::ProcessCpuSpcTokens(string token)
|
|||
return EvalValues::RegY;
|
||||
} else if(token == "ps") {
|
||||
return EvalValues::RegPS;
|
||||
} else if (token == "pscarry") {
|
||||
return EvalValues::RegPS_Carry;
|
||||
} else if (token == "pszero") {
|
||||
return EvalValues::RegPS_Zero;
|
||||
} else if (token == "psinterrupt") {
|
||||
return EvalValues::RegPS_Interrupt;
|
||||
} else if (token == "psdecimal") {
|
||||
return EvalValues::RegPS_Decimal;
|
||||
} else if (token == "psoverflow") {
|
||||
return EvalValues::RegPS_Overflow;
|
||||
} else if (token == "psnegative") {
|
||||
return EvalValues::RegPS_Negative;
|
||||
} else if (token == "ps8bit" && !spc700) {
|
||||
return EvalValues::RegPS_8bit;
|
||||
} else if (token == "ps8bitindex" && !spc700) {
|
||||
return EvalValues::RegPS_8bitIndex;
|
||||
} else if (token == "ps16bit" && !spc700) {
|
||||
return EvalValues::RegPS_16bit;
|
||||
} else if (token == "ps16bitindex" && !spc700) {
|
||||
return EvalValues::RegPS_16bitIndex;
|
||||
} else if (token == "pshalfcarry" && spc700) {
|
||||
return EvalValues::RegPS_HalfCarry;
|
||||
} else if (token == "psbreak" && spc700) {
|
||||
return EvalValues::RegPS_Break;
|
||||
} else if (token == "psstackzp" && spc700) {
|
||||
return EvalValues::RegPS_StackZeropage;
|
||||
} else if(token == "sp") {
|
||||
return EvalValues::RegSP;
|
||||
} else if(token == "pc") {
|
||||
|
@ -506,6 +534,16 @@ int32_t ExpressionEvaluator::Evaluate(ExpressionData &data, DebugState &state, E
|
|||
case EvalValues::RegPC: token = state.Cpu.PC; break;
|
||||
case EvalValues::Nmi: token = state.Cpu.NmiFlag; resultType = EvalResultType::Boolean; break;
|
||||
case EvalValues::Irq: token = state.Cpu.IrqSource != 0; resultType = EvalResultType::Boolean; break;
|
||||
case EvalValues::RegPS_Carry: token = (state.Cpu.PS & 1) != 0; break;
|
||||
case EvalValues::RegPS_Zero: token = (state.Cpu.PS & 2) != 0; break;
|
||||
case EvalValues::RegPS_Interrupt: token = (state.Cpu.PS & 4) != 0; break;
|
||||
case EvalValues::RegPS_Decimal: token = (state.Cpu.PS & 8) != 0; break;
|
||||
case EvalValues::RegPS_8bitIndex: token = (state.Cpu.PS & 16) != 0; break;
|
||||
case EvalValues::RegPS_8bit: token = (state.Cpu.PS & 32) != 0; break;
|
||||
case EvalValues::RegPS_16bitIndex: token = (state.Cpu.PS & 16) == 0; break;
|
||||
case EvalValues::RegPS_16bit: token = (state.Cpu.PS & 32) == 0; break;
|
||||
case EvalValues::RegPS_Overflow: token = (state.Cpu.PS & 64) != 0; break;
|
||||
case EvalValues::RegPS_Negative: token = (state.Cpu.PS & 128) != 0; break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -517,6 +555,14 @@ int32_t ExpressionEvaluator::Evaluate(ExpressionData &data, DebugState &state, E
|
|||
case EvalValues::RegSP: token = state.Spc.SP; break;
|
||||
case EvalValues::RegPS: token = state.Spc.PS; break;
|
||||
case EvalValues::RegPC: token = state.Spc.PC; break;
|
||||
case EvalValues::RegPS_Carry: token = (state.Cpu.PS & 1) != 0; break;
|
||||
case EvalValues::RegPS_Zero: token = (state.Cpu.PS & 2) != 0; break;
|
||||
case EvalValues::RegPS_Interrupt: (state.Cpu.PS & 4) != 0; break;
|
||||
case EvalValues::RegPS_HalfCarry: (state.Cpu.PS & 8) != 0; break;
|
||||
case EvalValues::RegPS_Break: (state.Cpu.PS & 16) != 0; break;
|
||||
case EvalValues::RegPS_StackZeropage: (state.Cpu.PS & 32) != 0; break;
|
||||
case EvalValues::RegPS_Overflow: (state.Cpu.PS & 64) != 0; break;
|
||||
case EvalValues::RegPS_Negative: (state.Cpu.PS & 128) != 0; break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -90,6 +90,22 @@ enum EvalValues : int64_t
|
|||
RomBR = 20000000141,
|
||||
RamBR = 20000000142,
|
||||
|
||||
RegPS_Carry = 20000000150,
|
||||
RegPS_Zero = 20000000151,
|
||||
RegPS_Interrupt = 20000000152,
|
||||
RegPS_Decimal = 20000000153,
|
||||
RegPS_8bitIndex = 20000000154,
|
||||
RegPS_8bit = 20000000155,
|
||||
RegPS_Overflow = 20000000156,
|
||||
RegPS_Negative = 20000000157,
|
||||
RegPS_16bitIndex = 20000000158,
|
||||
RegPS_16bit = 20000000159,
|
||||
|
||||
// SPC flags
|
||||
RegPS_HalfCarry = 20000000153,
|
||||
RegPS_Break = 20000000154,
|
||||
RegPS_StackZeropage = 20000000155,
|
||||
|
||||
RegB = 20000000160,
|
||||
RegC = 20000000161,
|
||||
RegD = 20000000162,
|
||||
|
@ -151,7 +167,7 @@ private:
|
|||
bool IsOperator(string token, int &precedence, bool unaryOperator);
|
||||
EvalOperators GetOperator(string token, bool unaryOperator);
|
||||
bool CheckSpecialTokens(string expression, size_t &pos, string &output, ExpressionData &data);
|
||||
int64_t ProcessCpuSpcTokens(string token);
|
||||
int64_t ProcessCpuSpcTokens(string token, bool spc);
|
||||
int64_t ProcessSharedTokens(string token);
|
||||
int64_t ProcessGsuTokens(string token);
|
||||
int64_t ProcessGameboyTokens(string token);
|
||||
|
|
|
@ -144,6 +144,8 @@ namespace Mesen.GUI.Debugger
|
|||
"Note: Use the $ prefix to denote hexadecimal values." + Environment.NewLine + 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/PsInterrupt/PsDecimal/PsOverflow/PsNegative: Processor flags" + Environment.NewLine +
|
||||
"Ps8bit/Ps16bit/Ps8bitIndex/Ps16bitIndex: Register sizes" + 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 +
|
||||
|
|
Loading…
Add table
Reference in a new issue