1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/*********************************************************************
dvdisasm.h
Disassembly debugger view.
***************************************************************************/
#ifndef __DVDISASM_H__
#define __DVDISASM_H__
#include "debugvw.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
// selections for what goes into the right-hand column
enum disasm_right_column
{
DASM_RIGHTCOL_NONE,
DASM_RIGHTCOL_RAW,
DASM_RIGHTCOL_ENCRYPTED,
DASM_RIGHTCOL_COMMENTS
};
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// a disassembly view_source
class debug_view_disasm_source : public debug_view_source
{
friend class debug_view_disasm;
// construction/destruction
debug_view_disasm_source(const char *name, device_t &device);
public:
// getters
device_t &device() const { return m_device; }
address_space &space() const { return m_space; }
private:
// internal state
device_t & m_device; // underlying device
device_disasm_interface *m_disasmintf; // disassembly interface
address_space & m_space; // address space to display
};
// debug view for disassembly
class debug_view_disasm : public debug_view
{
friend resource_pool_object<debug_view_disasm>::~resource_pool_object();
friend class debug_view_manager;
// construction/destruction
debug_view_disasm(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate);
virtual ~debug_view_disasm();
public:
// getters
const char *expression() const { return m_expression.string(); }
disasm_right_column right_column() const { return m_right_column; }
UINT32 backward_steps() const { return m_backwards_steps; }
UINT32 disasm_width() const { return m_dasm_width; }
offs_t selected_address();
// setters
void set_expression(const char *expression);
void set_right_column(disasm_right_column contents);
void set_backward_steps(UINT32 steps);
void set_disasm_width(UINT32 width);
void set_selected_address(offs_t address);
protected:
// view overrides
virtual void view_update();
virtual void view_notify(debug_view_notification type);
virtual void view_char(int chval);
virtual void view_click(const int button, const debug_view_xy& pos);
private:
// internal helpers
void enumerate_sources();
offs_t find_pc_backwards(offs_t targetpc, int numinstrs);
void generate_bytes(offs_t pcbyte, int numbytes, int minbytes, char *string, int maxchars, bool encrypted);
bool recompute(offs_t pc, int startline, int lines);
// internal state
disasm_right_column m_right_column; // right column contents
UINT32 m_backwards_steps; // number of backwards steps
UINT32 m_dasm_width; // width of the disassembly area
UINT8 * m_last_direct_raw; // last direct raw value
UINT8 * m_last_direct_decrypted;// last direct decrypted value
UINT32 m_last_change_count; // last comment change count
offs_t m_last_pcbyte; // last PC byte value
int m_divider1, m_divider2; // left and right divider columns
int m_divider3; // comment divider column
debug_view_expression m_expression; // expression-related information
dynamic_array<offs_t> m_byteaddress; // addresses of the instructions
dynamic_array<char> m_dasm; // disassembled instructions
// constants
static const int DEFAULT_DASM_LINES = 1000;
static const int DEFAULT_DASM_WIDTH = 50;
static const int DASM_MAX_BYTES = 16;
};
#endif
|