1 // license:BSD-3-Clause
2 // copyright-holders:AJR
3 
4 #ifndef MAME_CPU_VT61_VT61_H
5 #define MAME_CPU_VT61_VT61_H
6 
7 #pragma once
8 
9 class vt61_cpu_device : public cpu_device
10 {
11 public:
12 	enum {
13 		VT61_PC,
14 		VT61_AC,
15 		VT61_MAR, VT61_MALO, VT61_MAHI,
16 		VT61_MDR,
17 		VT61_IR,
18 		VT61_R0, VT61_R1, VT61_R2, VT61_R3,
19 		VT61_R4, VT61_R5, VT61_R6, VT61_R7,
20 		VT61_R8, VT61_R9, VT61_R10, VT61_R11,
21 		VT61_R12, VT61_R13, VT61_R14, VT61_R15,
22 		VT61_MISC, VT61_MOD, VT61_INTRC
23 	};
24 
25 	enum {
26 		AS_IDR = 2
27 	};
28 
29 	// construction/destruction
30 	vt61_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
31 
32 protected:
33 	// device-level overrides
34 	virtual void device_start() override;
35 	virtual void device_reset() override;
36 
37 	// device_execute_interface overrides
38 	virtual void execute_run() override;
39 
40 	// device_disasm_interface overrides
41 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
42 
43 	// device_memory_interface overrides
44 	virtual space_config_vector memory_space_config() const override;
45 
46 	// device_state_interface overrides
47 	void state_string_export(const device_state_entry &entry, std::string &str) const override;
48 
49 private:
50 	// address spaces
51 	address_space_config m_program_config;
52 	address_space_config m_memory_config;
53 	address_space_config m_idr_config;
54 	memory_access<10, 1, -1, ENDIANNESS_LITTLE>::cache m_program_cache;
55 	memory_access<16, 0,  0, ENDIANNESS_LITTLE>::cache m_memory_cache;
56 	memory_access< 6, 0,  0, ENDIANNESS_LITTLE>::cache m_idr_cache;
57 
58 	// processor state
59 	u16 m_pc;
60 	u8 m_ac;
61 	u16 m_mar;
62 	u8 m_mdr;
63 	u8 m_ir;
64 	u8 m_sp[16]; // scratchpad memory
65 	s32 m_icount;
66 
67 	// I/O registers
68 	u8 m_misc_flags;
69 	u8 m_modem_flags;
70 	u8 m_intrpt_control;
71 };
72 
73 DECLARE_DEVICE_TYPE(VT61_CPU, vt61_cpu_device)
74 
75 #endif // MAME_CPU_VT61_VT61_H
76