summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/ns32000/ns32000.h
blob: 7b17cafba99e354e32f2eee8d6b88455d331d393 (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
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
/*****************************************************************************
*
*   ns32000.h
*
*   NS32000 CPU family
*
*****************************************************************************/

#ifndef MAME_CPU_NS32016_NS32016_H
#define MAME_CPU_NS32016_NS32016_H

#pragma once


/***********************************************************************
  CONSTANTS
***********************************************************************/



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

class ns32000_cpu_device : public cpu_device
{
public:
	// construction/destruction
	ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);

protected:
	ns32000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int databits, int addrbits);

	// device-level overrides
	virtual void device_start() override;
	virtual void device_reset() override;

	// device_execute_interface overrides
	virtual u32 execute_min_cycles() const override { return 1; }
	virtual u32 execute_max_cycles() const override { return 6; }
	virtual u32 execute_input_lines() const override { return 2; }
	virtual void execute_run() override;
	virtual void execute_set_input(int inputnum, int state) override;
	virtual bool execute_input_edge_triggered(int inputnum) const override { return inputnum == INPUT_LINE_NMI; }


	// device_memory_interface overrides
	virtual space_config_vector memory_space_config() const override;
	virtual bool memory_translate(int spacenum, int intention, offs_t &address) override;

	// device_disasm_interface overrides
	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;

	// addressing modes
	enum
	{
		ADDRESSING_MODE_REGISTER_0 = 0,
		ADDRESSING_MODE_REGISTER_1,
		ADDRESSING_MODE_REGISTER_2,
		ADDRESSING_MODE_REGISTER_3,
		ADDRESSING_MODE_REGISTER_4,
		ADDRESSING_MODE_REGISTER_5,
		ADDRESSING_MODE_REGISTER_6,
		ADDRESSING_MODE_REGISTER_7,
		ADDRESSING_MODE_REGISTER_0_RELATIVE,
		ADDRESSING_MODE_REGISTER_1_RELATIVE,
		ADDRESSING_MODE_REGISTER_2_RELATIVE,
		ADDRESSING_MODE_REGISTER_3_RELATIVE,
		ADDRESSING_MODE_REGISTER_4_RELATIVE,
		ADDRESSING_MODE_REGISTER_5_RELATIVE,
		ADDRESSING_MODE_REGISTER_6_RELATIVE,
		ADDRESSING_MODE_REGISTER_7_RELATIVE,
		ADDRESSING_MODE_FRAME_MEMORY_RELATIVE,
		ADDRESSING_MODE_STACK_MEMORY_RELATIVE,
		ADDRESSING_MODE_STATIC_MEMORY_RELATIVE,
		ADDRESSING_MODE_RESERVED,
		ADDRESSING_MODE_IMMEDIATE,
		ADDRESSING_MODE_ABSOLUTE,
		ADDRESSING_MODE_EXTERNAL,
		ADDRESSING_MODE_TOP_OF_STACK,
		ADDRESSING_MODE_FRAME_MEMORY,
		ADDRESSING_MODE_STACK_MEMORY,
		ADDRESSING_MODE_STATIC_MEMORY,
		ADDRESSING_MODE_PROGRAM_MEMORY,
		ADDRESSING_MODE_INDEX_BYTES,
		ADDRESSING_MODE_INDEX_WORDS,
		ADDRESSING_MODE_INDEX_DOUBLE_WORDS,
		ADDRESSING_MODE_INDEX_QUAD_WORDS,
	};

	// registers
	enum
	{
		NS32000_PC = 1,
		NS32000_SB, NS32000_FP, NS32000_SP1, NS32000_SP0, NS32000_INTBASE, NS32000_PSR, NS32000_MOD,
		NS32000_R0, NS32000_R1, NS32000_R2, NS32000_R3, NS32000_R4, NS32000_R5, NS32000_R6, NS32000_R7,
	};

private:
	// configuration
	address_space_config m_program_config;

	// emulation state
	int m_icount;

	u32 m_pc;
	u32 m_sb;
	u32 m_fp;
	u32 m_sp1;
	u32 m_sp0;
	u32 m_intbase;
	u32 m_psr;
	u32 m_mod;
	u32 m_r[8];
	u32 m_f[8];

	u8 m_irq_line;
	u8 m_nmi_line;
};

class ns32008_cpu_device : public ns32000_cpu_device
{
public:
	ns32008_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};

class ns32016_cpu_device : public ns32000_cpu_device
{
public:
	ns32016_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};

class ns32032_cpu_device : public ns32000_cpu_device
{
public:
	ns32032_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};

/***********************************************************************
  DEVICE TYPE DECLARATIONS
***********************************************************************/

DECLARE_DEVICE_TYPE(NS32008, ns32008_cpu_device)
DECLARE_DEVICE_TYPE(NS32016, ns32016_cpu_device)
DECLARE_DEVICE_TYPE(NS32032, ns32032_cpu_device)

#endif // MAME_CPU_NS32016_NS32016_H