Debugger: Added missing effective addresses on some instructions
This commit is contained in:
parent
c96e37145f
commit
778da40740
2 changed files with 45 additions and 2 deletions
|
@ -105,8 +105,7 @@ uint32_t CpuDisUtils::GetOperandAddress(DisassemblyInfo &info, uint32_t memoryAd
|
|||
|
||||
int32_t CpuDisUtils::GetEffectiveAddress(DisassemblyInfo &info, Console *console, CpuState &state)
|
||||
{
|
||||
AddrMode addrMode = CpuDisUtils::OpMode[info.GetOpCode()];
|
||||
if(addrMode != AddrMode::Rel && addrMode != AddrMode::RelLng && addrMode > AddrMode::ImmM && info.GetOpSize() < 4) {
|
||||
if(HasEffectiveAddress(CpuDisUtils::OpMode[info.GetOpCode()])) {
|
||||
DummyCpu cpu(console);
|
||||
state.PS &= ~(ProcFlags::IndexMode8 | ProcFlags::MemoryMode8);
|
||||
state.PS |= info.GetFlags();
|
||||
|
@ -117,6 +116,48 @@ int32_t CpuDisUtils::GetEffectiveAddress(DisassemblyInfo &info, Console *console
|
|||
return -1;
|
||||
}
|
||||
|
||||
bool CpuDisUtils::HasEffectiveAddress(AddrMode addrMode)
|
||||
{
|
||||
switch(addrMode) {
|
||||
case AddrMode::Acc:
|
||||
case AddrMode::Imp:
|
||||
case AddrMode::Stk:
|
||||
case AddrMode::Sig8:
|
||||
case AddrMode::Imm8:
|
||||
case AddrMode::Rel:
|
||||
case AddrMode::RelLng:
|
||||
case AddrMode::Imm16:
|
||||
case AddrMode::BlkMov:
|
||||
case AddrMode::AbsLngJmp:
|
||||
case AddrMode::AbsLng:
|
||||
case AddrMode::ImmX:
|
||||
case AddrMode::ImmM:
|
||||
case AddrMode::AbsJmp:
|
||||
return false;
|
||||
|
||||
case AddrMode::DirIdxIndX:
|
||||
case AddrMode::DirIdxX:
|
||||
case AddrMode::DirIdxY:
|
||||
case AddrMode::DirIndIdxY:
|
||||
case AddrMode::DirIndLngIdxY:
|
||||
case AddrMode::DirIndLng:
|
||||
case AddrMode::DirInd:
|
||||
case AddrMode::Dir:
|
||||
case AddrMode::StkRel:
|
||||
case AddrMode::StkRelIndIdxY:
|
||||
case AddrMode::Abs:
|
||||
case AddrMode::AbsIdxXInd:
|
||||
case AddrMode::AbsIdxX:
|
||||
case AddrMode::AbsIdxY:
|
||||
case AddrMode::AbsLngIdxX:
|
||||
case AddrMode::AbsInd:
|
||||
case AddrMode::AbsIndLng:
|
||||
return true;
|
||||
}
|
||||
|
||||
throw std::runtime_error("Invalid mode");
|
||||
}
|
||||
|
||||
uint8_t CpuDisUtils::GetOpSize(AddrMode addrMode, uint8_t flags)
|
||||
{
|
||||
switch(addrMode) {
|
||||
|
|
|
@ -15,6 +15,8 @@ private:
|
|||
static uint32_t GetOperandAddress(DisassemblyInfo &info, uint32_t memoryAddr);
|
||||
static uint8_t GetOpSize(AddrMode addrMode, uint8_t flags);
|
||||
|
||||
static bool HasEffectiveAddress(AddrMode addrMode);
|
||||
|
||||
public:
|
||||
static void GetDisassembly(DisassemblyInfo &info, string &out, uint32_t memoryAddr, LabelManager* labelManager);
|
||||
static uint8_t GetOpSize(uint8_t opCode, uint8_t flags);
|
||||
|
|
Loading…
Add table
Reference in a new issue