#pragma once #include "stdafx.h" #include "DisassemblyInfo.h" #include "DebugTypes.h" #include "../Utilities/SimpleLock.h" class MemoryManager; class Console; class Spc; class Debugger; class LabelManager; class CodeDataLogger; class MemoryDumper; struct CpuState; enum class CpuType : uint8_t; class Disassembler { private: MemoryManager *_memoryManager; Console *_console; Spc *_spc; Debugger *_debugger; shared_ptr _cdl; shared_ptr _labelManager; MemoryDumper *_memoryDumper; vector _prgCache; vector _wramCache; vector _sramCache; vector _spcRamCache; vector _spcRomCache; SimpleLock _disassemblyLock; vector _disassembly; vector _spcDisassembly; bool _needDisassemble[2] = { true, true }; uint8_t *_prgRom; uint32_t _prgRomSize; uint8_t *_wram; uint32_t _wramSize; uint8_t *_sram; uint32_t _sramSize; uint8_t *_spcRam; uint32_t _spcRamSize; uint8_t *_spcRom; uint32_t _spcRomSize; void GetSource(AddressInfo &info, uint8_t **source, uint32_t &size, vector **cache); public: Disassembler(shared_ptr console, shared_ptr cdl, Debugger* debugger); uint32_t BuildCache(AddressInfo &addrInfo, uint8_t cpuFlags, CpuType type); void ResetPrgCache(); void InvalidateCache(AddressInfo addrInfo, CpuType type); void Disassemble(CpuType cpuType); DisassemblyInfo GetDisassemblyInfo(AddressInfo &info); void RefreshDisassembly(CpuType type); uint32_t GetLineCount(CpuType type); uint32_t GetLineIndex(CpuType type, uint32_t cpuAddress); 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); };