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);
|
tokenValue = ProcessGsuTokens(token);
|
||||||
} else if(_cpuType == CpuType::Gameboy) {
|
} else if(_cpuType == CpuType::Gameboy) {
|
||||||
tokenValue = ProcessGameboyTokens(token);
|
tokenValue = ProcessGameboyTokens(token);
|
||||||
} else {
|
} else if(_cpuType == CpuType::Spc) {
|
||||||
tokenValue = ProcessCpuSpcTokens(token);
|
tokenValue = ProcessCpuSpcTokens(token, true);
|
||||||
|
} else { // Cpu or Sa1
|
||||||
|
tokenValue = ProcessCpuSpcTokens(token, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tokenValue != -1) {
|
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") {
|
if(token == "a") {
|
||||||
return EvalValues::RegA;
|
return EvalValues::RegA;
|
||||||
|
@ -118,6 +120,32 @@ int64_t ExpressionEvaluator::ProcessCpuSpcTokens(string token)
|
||||||
return EvalValues::RegY;
|
return EvalValues::RegY;
|
||||||
} else if(token == "ps") {
|
} else if(token == "ps") {
|
||||||
return EvalValues::RegPS;
|
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") {
|
} else if(token == "sp") {
|
||||||
return EvalValues::RegSP;
|
return EvalValues::RegSP;
|
||||||
} else if(token == "pc") {
|
} 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::RegPC: token = state.Cpu.PC; break;
|
||||||
case EvalValues::Nmi: token = state.Cpu.NmiFlag; resultType = EvalResultType::Boolean; 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::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;
|
break;
|
||||||
|
|
||||||
|
@ -517,6 +555,14 @@ int32_t ExpressionEvaluator::Evaluate(ExpressionData &data, DebugState &state, E
|
||||||
case EvalValues::RegSP: token = state.Spc.SP; break;
|
case EvalValues::RegSP: token = state.Spc.SP; break;
|
||||||
case EvalValues::RegPS: token = state.Spc.PS; break;
|
case EvalValues::RegPS: token = state.Spc.PS; break;
|
||||||
case EvalValues::RegPC: token = state.Spc.PC; 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;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,22 @@ enum EvalValues : int64_t
|
||||||
RomBR = 20000000141,
|
RomBR = 20000000141,
|
||||||
RamBR = 20000000142,
|
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,
|
RegB = 20000000160,
|
||||||
RegC = 20000000161,
|
RegC = 20000000161,
|
||||||
RegD = 20000000162,
|
RegD = 20000000162,
|
||||||
|
@ -151,7 +167,7 @@ private:
|
||||||
bool IsOperator(string token, int &precedence, bool unaryOperator);
|
bool IsOperator(string token, int &precedence, bool unaryOperator);
|
||||||
EvalOperators GetOperator(string token, bool unaryOperator);
|
EvalOperators GetOperator(string token, bool unaryOperator);
|
||||||
bool CheckSpecialTokens(string expression, size_t &pos, string &output, ExpressionData &data);
|
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 ProcessSharedTokens(string token);
|
||||||
int64_t ProcessGsuTokens(string token);
|
int64_t ProcessGsuTokens(string token);
|
||||||
int64_t ProcessGameboyTokens(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: 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 +
|
//"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 +
|
"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 +
|
"PC: Program Counter" + Environment.NewLine +
|
||||||
"OpPC: Address of the current instruction's first byte" + Environment.NewLine +
|
"OpPC: Address of the current instruction's first byte" + Environment.NewLine +
|
||||||
"PreviousOpPC: Address of the previous 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