summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debug/dvstate.h
blob: 932d4b80a41134def959807217e599b4c29bfe61 (plain) (blame)
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
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/*********************************************************************

    dvstate.h

    State debugger view.

***************************************************************************/

#ifndef __DVSTATE_H__
#define __DVSTATE_H__

#include "debugvw.h"


//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

// data sources for state views
class debug_view_state_source : public debug_view_source
{
	friend class debug_view_state;

	// construction/destruction
	debug_view_state_source(const char *name, device_t &device);

public:
	// getters
	device_t &device() const { return m_device; }

private:
	// internal state
	device_t &          m_device;               // underlying device
	device_state_interface *m_stateintf;        // state interface
	device_execute_interface *m_execintf;       // execution interface
};


// debug view for state
class debug_view_state : public debug_view
{
	friend resource_pool_object<debug_view_state>::~resource_pool_object();
	friend class debug_view_manager;

	// construction/destruction
	debug_view_state(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate);
	virtual ~debug_view_state();

protected:
	// view overrides
	virtual void view_update();
	virtual void view_notify(debug_view_notification type);

private:
	struct state_item
	{
		state_item(int index, const char *name, UINT8 valuechars);

		state_item *        m_next;             // next item
		UINT64              m_lastval;          // last value
		UINT64              m_currval;          // current value
		int                 m_index;            // index
		UINT8               m_vallen;           // number of value chars
		astring             m_symbol;           // symbol
	};

	// internal helpers
	void enumerate_sources();
	void reset();
	void recompute();

	// internal state
	int                 m_divider;              // dividing column
	UINT64              m_last_update;          // execution counter at last update
	state_item *        m_state_list;           // state data

	// constants
	static const int REG_DIVIDER    = -10;
	static const int REG_CYCLES     = -11;
	static const int REG_BEAMX      = -12;
	static const int REG_BEAMY      = -13;
	static const int REG_FRAME      = -14;
};


#endif