2015-06-24 19:26:19 -04:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
2017-03-15 19:19:41 -04:00
|
|
|
#include "DebuggerTypes.h"
|
2015-06-24 19:26:19 -04:00
|
|
|
|
2016-11-19 19:21:28 -05:00
|
|
|
struct State;
|
|
|
|
class MemoryManager;
|
2015-06-24 19:26:19 -04:00
|
|
|
class DisassemblyInfo;
|
2016-11-22 22:38:14 -05:00
|
|
|
class LabelManager;
|
2016-11-27 19:43:17 -05:00
|
|
|
class Debugger;
|
2017-03-15 19:19:41 -04:00
|
|
|
class BaseMapper;
|
2015-06-24 19:26:19 -04:00
|
|
|
|
2018-01-03 18:48:16 -05:00
|
|
|
enum class DataType
|
|
|
|
{
|
|
|
|
VerifiedCode,
|
|
|
|
VerifiedData,
|
|
|
|
UnidentifiedData,
|
|
|
|
};
|
|
|
|
|
2015-06-24 19:26:19 -04:00
|
|
|
class Disassembler
|
|
|
|
{
|
|
|
|
private:
|
2016-11-27 19:43:17 -05:00
|
|
|
Debugger* _debugger;
|
2017-03-15 19:19:41 -04:00
|
|
|
MemoryManager* _memoryManager;
|
|
|
|
BaseMapper *_mapper;
|
|
|
|
|
2015-06-24 19:26:19 -04:00
|
|
|
vector<shared_ptr<DisassemblyInfo>> _disassembleCache;
|
2017-03-15 19:19:41 -04:00
|
|
|
vector<shared_ptr<DisassemblyInfo>> _disassembleWorkRamCache;
|
|
|
|
vector<shared_ptr<DisassemblyInfo>> _disassembleSaveRamCache;
|
2015-07-01 23:17:14 -04:00
|
|
|
vector<shared_ptr<DisassemblyInfo>> _disassembleMemoryCache;
|
2015-06-24 19:26:19 -04:00
|
|
|
|
2018-02-10 21:23:22 -05:00
|
|
|
void GetLine(string &out, string code = "", string comment = string(), int32_t cpuAddress = -1, int32_t absoluteAddress = -1, DataType dataType = DataType::VerifiedCode, char memoryType = ' ');
|
|
|
|
void GetCodeLine(string &out, string &code, string &comment, int32_t cpuAddress, int32_t absoluteAddress, string &byteCode, string &addressing, DataType dataType, bool isIndented, char memoryType = ' ');
|
2017-03-09 23:50:20 -05:00
|
|
|
void GetSubHeader(string &out, DisassemblyInfo *info, string &label, uint16_t relativeAddr, uint16_t resetVector, uint16_t nmiVector, uint16_t irqVector);
|
2017-03-15 19:19:41 -04:00
|
|
|
|
|
|
|
void GetInfo(AddressTypeInfo &info, uint8_t** source, uint32_t &size, vector<shared_ptr<DisassemblyInfo>> **cache);
|
2016-11-18 20:28:11 -05:00
|
|
|
|
2015-06-24 19:26:19 -04:00
|
|
|
public:
|
2017-03-15 19:19:41 -04:00
|
|
|
Disassembler(MemoryManager* memoryManager, BaseMapper* mapper, Debugger* debugger);
|
2015-07-01 23:17:14 -04:00
|
|
|
~Disassembler();
|
2016-12-04 11:16:44 -05:00
|
|
|
|
|
|
|
void BuildOpCodeTables(bool useLowerCase);
|
2017-08-19 22:00:12 -04:00
|
|
|
void Reset();
|
2015-06-24 19:26:19 -04:00
|
|
|
|
2019-11-03 13:52:15 -05:00
|
|
|
uint32_t BuildCache(AddressTypeInfo &info, uint16_t memoryAddr, bool isSubEntryPoint, bool processJumps, bool forceDisassemble = false);
|
2017-03-15 19:19:41 -04:00
|
|
|
void InvalidateCache(AddressTypeInfo &info);
|
2016-01-10 19:56:40 -05:00
|
|
|
|
2017-03-04 16:18:28 -05:00
|
|
|
bool IsUnofficialOpCode(uint8_t opCode);
|
2019-01-19 20:41:31 -05:00
|
|
|
static bool IsJump(uint8_t opCode);
|
2019-01-02 22:40:21 -05:00
|
|
|
bool IsUnconditionalJump(uint8_t opCode);
|
2017-03-04 16:18:28 -05:00
|
|
|
|
2018-01-03 18:48:16 -05:00
|
|
|
string GetCode(AddressTypeInfo &addressInfo, uint32_t endAddr, uint16_t memoryAddr, State& cpuState, shared_ptr<MemoryManager> memoryManager, shared_ptr<LabelManager> labelManager);
|
2016-02-13 22:19:42 -05:00
|
|
|
|
2017-08-05 17:18:09 -04:00
|
|
|
DisassemblyInfo GetDisassemblyInfo(AddressTypeInfo &info);
|
2017-03-11 15:01:33 -05:00
|
|
|
|
|
|
|
void RebuildPrgRomCache(uint32_t absoluteAddr, int32_t length);
|
2015-06-24 19:26:19 -04:00
|
|
|
};
|