Debugger: GB - Added effective address for (hl)/(bc)/(de) op codes
This commit is contained in:
parent
6da1295696
commit
b17fdc49c6
3 changed files with 50 additions and 4 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include "BsxCart.h"
|
#include "BsxCart.h"
|
||||||
#include "BsxMemoryPack.h"
|
#include "BsxMemoryPack.h"
|
||||||
#include "Gameboy.h"
|
#include "Gameboy.h"
|
||||||
|
#include "GbCpu.h"
|
||||||
#include "Debugger.h"
|
#include "Debugger.h"
|
||||||
#include "MemoryManager.h"
|
#include "MemoryManager.h"
|
||||||
#include "LabelManager.h"
|
#include "LabelManager.h"
|
||||||
|
@ -638,7 +639,8 @@ bool Disassembler::GetLineData(CpuType type, uint32_t lineIndex, CodeLineData &d
|
||||||
data.ValueSize = 0;
|
data.ValueSize = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CpuType::Gameboy:
|
case CpuType::Gameboy: {
|
||||||
|
GbCpuState state = _gameboy->GetCpu()->GetState();
|
||||||
if(!disInfo.IsInitialized()) {
|
if(!disInfo.IsInitialized()) {
|
||||||
disInfo = DisassemblyInfo(src.Data + result.Address.Address, 0, CpuType::Gameboy);
|
disInfo = DisassemblyInfo(src.Data + result.Address.Address, 0, CpuType::Gameboy);
|
||||||
} else {
|
} else {
|
||||||
|
@ -646,9 +648,10 @@ bool Disassembler::GetLineData(CpuType type, uint32_t lineIndex, CodeLineData &d
|
||||||
}
|
}
|
||||||
|
|
||||||
data.OpSize = disInfo.GetOpSize();
|
data.OpSize = disInfo.GetOpSize();
|
||||||
data.EffectiveAddress = -1;
|
data.EffectiveAddress = disInfo.GetEffectiveAddress(_console, &state, lineCpuType);
|
||||||
data.ValueSize = 0;
|
data.ValueSize = 0;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string text;
|
string text;
|
||||||
|
|
|
@ -93,8 +93,9 @@ int32_t DisassemblyInfo::GetEffectiveAddress(Console *console, void *cpuState, C
|
||||||
|
|
||||||
case CpuType::Cx4:
|
case CpuType::Cx4:
|
||||||
case CpuType::NecDsp:
|
case CpuType::NecDsp:
|
||||||
case CpuType::Gameboy:
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
case CpuType::Gameboy: return GameboyDisUtils::GetEffectiveAddress(*this, console, *(GbCpuState*)cpuState);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,35 @@ constexpr const uint8_t _opSize[256] = {
|
||||||
2,1,1,1,1,1,2,1,2,1,3,1,1,1,2,1,
|
2,1,1,1,1,1,2,1,2,1,3,1,1,1,2,1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static enum class AddrType : uint8_t
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
BC,
|
||||||
|
DE,
|
||||||
|
HL,
|
||||||
|
C,
|
||||||
|
Suff
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr const AddrType _gbEffAddrType[256] = {
|
||||||
|
AddrType::None,AddrType::None,AddrType::BC, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::BC, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::DE, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::DE, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::HL, AddrType::HL, AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::HL, AddrType::HL, AddrType::HL, AddrType::HL, AddrType::HL, AddrType::HL, AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::HL, AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::Suff,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::C,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,
|
||||||
|
AddrType::None,AddrType::None,AddrType::C,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None,AddrType::None
|
||||||
|
};
|
||||||
|
|
||||||
void GameboyDisUtils::GetDisassembly(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager, EmuSettings* settings)
|
void GameboyDisUtils::GetDisassembly(DisassemblyInfo& info, string& out, uint32_t memoryAddr, LabelManager* labelManager, EmuSettings* settings)
|
||||||
{
|
{
|
||||||
FastString str(settings->CheckDebuggerFlag(DebuggerFlags::UseLowerCaseDisassembly));
|
FastString str(settings->CheckDebuggerFlag(DebuggerFlags::UseLowerCaseDisassembly));
|
||||||
|
@ -109,7 +138,20 @@ void GameboyDisUtils::GetDisassembly(DisassemblyInfo& info, string& out, uint32_
|
||||||
|
|
||||||
int32_t GameboyDisUtils::GetEffectiveAddress(DisassemblyInfo& info, Console* console, GbCpuState& state)
|
int32_t GameboyDisUtils::GetEffectiveAddress(DisassemblyInfo& info, Console* console, GbCpuState& state)
|
||||||
{
|
{
|
||||||
return -1;
|
switch(_gbEffAddrType[info.GetOpCode()]) {
|
||||||
|
default:
|
||||||
|
case AddrType::None: return -1;
|
||||||
|
|
||||||
|
case AddrType::BC: return (state.B << 8) | state.C;
|
||||||
|
case AddrType::DE: return (state.D << 8) | state.E;
|
||||||
|
case AddrType::HL: return (state.H << 8) | state.L;
|
||||||
|
case AddrType::C: return 0xFF00 + state.C;
|
||||||
|
case AddrType::Suff:
|
||||||
|
if((info.GetByteCode()[1] & 0x07) == 0x06) {
|
||||||
|
return (state.H << 8) | state.L;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t GameboyDisUtils::GetOpSize(uint8_t opCode)
|
uint8_t GameboyDisUtils::GetOpSize(uint8_t opCode)
|
||||||
|
|
Loading…
Add table
Reference in a new issue