gba: Up the verbosity of the tracelogger. Using it, I was able to find a nasty bug: bitfields in cpsr\spsr were not being handled as expected by the compiler. Presumably the version and settings on GCC normally used for retrometeor does what's desired? Workaround applied.
This commit is contained in:
parent
9ee8093f7a
commit
96880ccc4a
Binary file not shown.
|
@ -32,15 +32,15 @@ namespace AMeteor
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
unsigned int mode : 5;
|
unsigned int mode : 5;
|
||||||
bool thumb : 1;
|
unsigned int thumb : 1;
|
||||||
bool fiq_d : 1;
|
unsigned int fiq_d : 1;
|
||||||
bool irq_d : 1;
|
unsigned int irq_d : 1;
|
||||||
unsigned int reserved : 19;
|
unsigned int reserved : 19;
|
||||||
bool s_overflow : 1;
|
unsigned int s_overflow : 1;
|
||||||
bool f_overflow : 1;
|
unsigned int f_overflow : 1;
|
||||||
bool f_carry : 1;
|
unsigned int f_carry : 1;
|
||||||
bool f_zero : 1;
|
unsigned int f_zero : 1;
|
||||||
bool f_sign : 1;
|
unsigned int f_sign : 1;
|
||||||
} b;
|
} b;
|
||||||
};
|
};
|
||||||
struct IPsr
|
struct IPsr
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBMETEOR_EXPORTS;%(PreprocessorDefinitions);METDEBUG;METDEBUGLOG;_ITERATOR_DEBUG_LEVEL=0</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBMETEOR_EXPORTS;%(PreprocessorDefinitions);METDEBUG;METDEBUGLOG;_ITERATOR_DEBUG_LEVEL=0</PreprocessorDefinitions>
|
||||||
<DisableSpecificWarnings>4800;4396</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4396;4800</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBMETEOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBMETEOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<DisableSpecificWarnings>4800;4396</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4396;4800</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
|
@ -85,6 +85,8 @@ void trace_bizhawk(std::string msg);
|
||||||
#define IOS_ADD \
|
#define IOS_ADD \
|
||||||
"0x" << std::setbase(16) << std::setw(8) << std::setfill('0') \
|
"0x" << std::setbase(16) << std::setw(8) << std::setfill('0') \
|
||||||
<< std::uppercase
|
<< std::uppercase
|
||||||
|
#define IOS_TRACE \
|
||||||
|
std::setbase(16) << std::setw(8) << std::setfill('0') << std::uppercase
|
||||||
#define IOS_NOR \
|
#define IOS_NOR \
|
||||||
std::setbase(10) << std::setw(0) << std::setfill(' ')
|
std::setbase(10) << std::setw(0) << std::setfill(' ')
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,16 @@ namespace AMeteor
|
||||||
if (traceenabled)
|
if (traceenabled)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << IOS_ADD << R(15) << ' ' << Disassembler::Instruction(R(15), (uint16_t)code).ToString();
|
ss << IOS_TRACE << R(15) << ':' << std::setw(4) << code << " ";
|
||||||
|
ss.setf(std::ios::left, std::ios::adjustfield);
|
||||||
|
ss << std::setw(32) << std::setfill(' ') << Disassembler::Instruction(R(15), (uint16_t)code).ToString();
|
||||||
|
ss.setf(std::ios::right, std::ios::adjustfield);
|
||||||
|
ss << IOS_TRACE;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
ss << std::setw(8) << R(i) << ' ';
|
||||||
|
UpdateCpsr();
|
||||||
|
ss << std::setw(8) << m_st.cpsr.dw << ' ';
|
||||||
|
ss << std::setw(8) << m_st.spsr.dw << ' ';
|
||||||
trace_bizhawk(ss.str());
|
trace_bizhawk(ss.str());
|
||||||
}
|
}
|
||||||
R(15) += 2;
|
R(15) += 2;
|
||||||
|
@ -117,7 +126,16 @@ namespace AMeteor
|
||||||
if (traceenabled)
|
if (traceenabled)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << IOS_ADD << R(15) << ' ' << Disassembler::Instruction(R(15), (uint32_t)code).ToString();
|
ss << IOS_TRACE << R(15) << ':' << std::setw(8) << code << ' ';
|
||||||
|
ss.setf(std::ios::left, std::ios::adjustfield);
|
||||||
|
ss << std::setw(32) << std::setfill(' ') << Disassembler::Instruction(R(15), (uint32_t)code).ToString();
|
||||||
|
ss.setf(std::ios::right, std::ios::adjustfield);
|
||||||
|
ss << IOS_TRACE;
|
||||||
|
for (int i = 0; i < 16; i++)
|
||||||
|
ss << std::setw(8) << R(i) << ' ';
|
||||||
|
UpdateCpsr();
|
||||||
|
ss << std::setw(8) << m_st.cpsr.dw << ' ';
|
||||||
|
ss << std::setw(8) << m_st.spsr.dw << ' ';
|
||||||
trace_bizhawk(ss.str());
|
trace_bizhawk(ss.str());
|
||||||
}
|
}
|
||||||
R(15) += 4;
|
R(15) += 4;
|
||||||
|
|
Loading…
Reference in New Issue