VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
PeddleDisassembler.h
1// -----------------------------------------------------------------------------
2// This file is part of Peddle - A MOS 65xx CPU emulator
3//
4// Copyright (C) Dirk W. Hoffmann. www.dirkwhoffmann.de
5// Published under the terms of the MIT License
6// -----------------------------------------------------------------------------
7
8#pragma once
9
10#include "PeddleTypes.h"
11#include "PeddleUtils.h"
12#include "StrWriter.h"
13
14namespace vc64::peddle {
15
16class Disassembler {
17
18 friend class Peddle;
19 friend class Debugger;
20
21 // Reference to the connected CPU
22 class Peddle &cpu;
23
24public:
25
26 // Visual style for disassembled instructions
27 DasmStyle instrStyle;
28
29 // Visual style for data dumps
30 DasmStyle dataStyle;
31
32
33 //
34 // Initializing
35 //
36
37public:
38
39 Disassembler(Peddle& ref);
40
41
42 //
43 // Configuring
44 //
45
46 void setNumberFormat(DasmNumberFormat instrFormat, DasmNumberFormat dataFormat);
47 void setNumberFormat(DasmNumberFormat format) { setNumberFormat(format, format); }
48 void setIndentation(int value);
49
50
51 //
52 // Running the disassembler
53 //
54
55public:
56
57 // Experimental
58 isize disass(char *dst, const char *fmt, u16 addr) const;
59 isize disass(char *dst, const char *fmt, const RecordedInstruction &instr) const;
60 isize disass(char *dst, u16 addr) const;
61 isize disass(char *dst, const RecordedInstruction &instr) const;
62
63private:
64
65 isize disass8(u8 value, char *dst, isize tab) const;
66 isize disass16(u16 value, char *dst, isize tab) const;
67 isize disassB(u8 byte1, u8 byte2, u8 byte3, char *dst, isize tab) const;
68 isize disassI(u16 addr, u8 byte1, u8 byte2, u8 byte3, char *dst, isize tab) const;
69 isize disassF(u8 flags, char *dst, isize tab) const;
70
71public:
72
73 // Disassembles an instruction (DEPRECATED)
74 isize disassemble(char *str, u16 addr) const;
75 isize disassemble(char *str, u16 pc, u8 byte1, u8 byte2, u8 byte3) const;
76
77 // Creates a textual representation for the status register (DEPRECATED)
78 void disassembleFlags(char *str, u8 sr) const;
79 void disassembleFlags(char *str) const;
80
81 // Creates a textual representation for a single byte or word
82 void dumpByte(char *str, u8 value) const;
83 void dumpWord(char *str, u16 value) const;
84
85 // Creates a textual representation for a sequence of bytes or words
86 void dumpBytes(char *str, u32 addr, isize cnt) const;
87 void dumpBytes(char *str, u8 values[], isize cnt) const;
88 void dumpWords(char *str, u32 addr, isize cnt) const;
89 void dumpWords(char *str, u16 values[], isize cnt) const;
90
91 // Disassembles larger code sections
92 void disassembleRange(std::ostream& os, u16 addr, isize count);
93 void disassembleRange(std::ostream& os, std::pair<u16, u16> range, isize max = 255);
94};
95
96}