2019-02-27 19:49:26 -05:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "DisassemblyInfo.h"
|
|
|
|
#include "DebugTypes.h"
|
2019-07-30 22:34:52 -04:00
|
|
|
#include "DebugUtilities.h"
|
2019-02-27 19:49:26 -05:00
|
|
|
#include "../Utilities/SimpleLock.h"
|
|
|
|
|
|
|
|
class MemoryManager;
|
|
|
|
class Console;
|
2020-02-27 19:59:41 -05:00
|
|
|
class Cpu;
|
2019-04-07 12:25:14 -04:00
|
|
|
class Spc;
|
2020-02-23 15:58:14 -05:00
|
|
|
class Gsu;
|
2020-02-27 19:59:41 -05:00
|
|
|
class Sa1;
|
2020-07-07 21:20:31 -04:00
|
|
|
class Cx4;
|
|
|
|
class NecDsp;
|
2020-05-18 16:10:53 -04:00
|
|
|
class Gameboy;
|
2019-04-28 22:19:52 -04:00
|
|
|
class Debugger;
|
|
|
|
class LabelManager;
|
2019-02-27 19:49:26 -05:00
|
|
|
class CodeDataLogger;
|
2019-05-24 21:47:06 -04:00
|
|
|
class MemoryDumper;
|
2020-02-07 22:55:27 -05:00
|
|
|
class EmuSettings;
|
2019-02-27 19:49:26 -05:00
|
|
|
struct CpuState;
|
2019-04-06 17:38:14 -04:00
|
|
|
enum class CpuType : uint8_t;
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2019-08-04 16:32:59 -04:00
|
|
|
struct DisassemblerSource
|
|
|
|
{
|
2020-12-19 23:30:09 +03:00
|
|
|
uint8_t* Data;
|
|
|
|
vector<DisassemblyInfo>* Cache;
|
2019-08-04 16:32:59 -04:00
|
|
|
uint32_t Size;
|
|
|
|
};
|
|
|
|
|
2019-02-27 19:49:26 -05:00
|
|
|
class Disassembler
|
|
|
|
{
|
|
|
|
private:
|
2020-12-19 23:30:09 +03:00
|
|
|
MemoryManager* _memoryManager;
|
|
|
|
Console* _console;
|
2020-02-27 19:59:41 -05:00
|
|
|
Cpu* _cpu;
|
2020-02-07 22:55:27 -05:00
|
|
|
Spc* _spc;
|
2020-02-23 15:58:14 -05:00
|
|
|
Gsu* _gsu;
|
2020-02-27 19:59:41 -05:00
|
|
|
Sa1* _sa1;
|
2020-07-07 21:20:31 -04:00
|
|
|
Cx4* _cx4;
|
|
|
|
NecDsp* _necDsp;
|
2020-05-18 16:10:53 -04:00
|
|
|
Gameboy* _gameboy;
|
2020-02-07 22:55:27 -05:00
|
|
|
EmuSettings* _settings;
|
2020-12-19 23:30:09 +03:00
|
|
|
Debugger* _debugger;
|
2019-02-27 19:49:26 -05:00
|
|
|
shared_ptr<CodeDataLogger> _cdl;
|
2019-04-28 22:19:52 -04:00
|
|
|
shared_ptr<LabelManager> _labelManager;
|
2020-12-19 23:30:09 +03:00
|
|
|
MemoryDumper* _memoryDumper;
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2020-07-07 21:20:31 -04:00
|
|
|
DisassemblerSource _sources[(int)SnesMemoryType::Register] = {};
|
|
|
|
vector<DisassemblyInfo> _disassemblyCache[(int)SnesMemoryType::Register];
|
2019-08-04 16:32:59 -04:00
|
|
|
|
2020-07-07 21:20:31 -04:00
|
|
|
SimpleLock _disassemblyLock;
|
2020-12-19 23:30:09 +03:00
|
|
|
vector<DisassemblyResult> _disassemblyResult[(int)DebugUtilities::GetLastCpuType() + 1];
|
|
|
|
bool _needDisassemble[(int)DebugUtilities::GetLastCpuType() + 1];
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2020-07-07 21:20:31 -04:00
|
|
|
void InitSource(SnesMemoryType type);
|
2020-06-18 00:58:22 -04:00
|
|
|
DisassemblerSource& GetSource(SnesMemoryType type);
|
2019-07-25 22:22:09 -04:00
|
|
|
void SetDisassembleFlag(CpuType type);
|
2019-02-27 19:49:26 -05:00
|
|
|
|
|
|
|
public:
|
2019-04-28 22:19:52 -04:00
|
|
|
Disassembler(shared_ptr<Console> console, shared_ptr<CodeDataLogger> cdl, Debugger* debugger);
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2020-12-19 23:30:09 +03:00
|
|
|
uint32_t BuildCache(AddressInfo& addrInfo, uint8_t cpuFlags, CpuType type);
|
2019-04-29 20:40:52 -04:00
|
|
|
void ResetPrgCache();
|
2019-06-24 11:46:59 -04:00
|
|
|
void InvalidateCache(AddressInfo addrInfo, CpuType type);
|
2019-04-07 12:25:14 -04:00
|
|
|
void Disassemble(CpuType cpuType);
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2020-12-19 23:30:09 +03:00
|
|
|
DisassemblyInfo GetDisassemblyInfo(AddressInfo& info, uint32_t cpuAddress, uint8_t cpuFlags, CpuType type);
|
2019-02-27 19:49:26 -05:00
|
|
|
|
2019-04-28 22:19:52 -04:00
|
|
|
void RefreshDisassembly(CpuType type);
|
2019-04-07 12:25:14 -04:00
|
|
|
uint32_t GetLineCount(CpuType type);
|
|
|
|
uint32_t GetLineIndex(CpuType type, uint32_t cpuAddress);
|
2020-12-19 23:30:09 +03:00
|
|
|
bool GetLineData(CpuType type, uint32_t lineIndex, CodeLineData& data);
|
|
|
|
int32_t SearchDisassembly(CpuType type, const char* searchString, int32_t startPosition, int32_t endPosition,
|
|
|
|
bool searchBackwards);
|
|
|
|
};
|