1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 /*
4     Manchester Small-Scale Experimental Machine (SSEM) emulator
5 
6     Written by Ryan Holtz
7 */
8 
9 #ifndef MAME_CPU_SSEM_SSEM_H
10 #define MAME_CPU_SSEM_SSEM_H
11 
12 #pragma once
13 
14 //**************************************************************************
15 //  TYPE DEFINITIONS
16 //**************************************************************************
17 
18 // ======================> ssem_device
19 
20 // Used by core CPU interface
21 class ssem_device : public cpu_device
22 {
23 public:
24 	// construction/destruction
25 	ssem_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
26 
27 protected:
28 	// device-level overrides
29 	virtual void device_start() override;
30 	virtual void device_reset() override;
31 	virtual void device_stop() override;
32 
33 	// device_execute_interface overrides
34 	virtual uint32_t execute_min_cycles() const noexcept override;
35 	virtual uint32_t execute_max_cycles() const noexcept override;
36 	virtual uint32_t execute_input_lines() const noexcept override;
37 	virtual void execute_run() override;
38 	virtual void execute_set_input(int inputnum, int state) override;
39 
40 	// device_memory_interface overrides
41 	virtual space_config_vector memory_space_config() const override;
42 
43 	// device_disasm_interface overrides
44 	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
45 
46 	// device_state_interface overrides
47 	virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
48 
49 	// address spaces
50 	const address_space_config m_program_config;
51 
52 	// memory access
53 	inline uint32_t program_read32(uint32_t addr);
54 	inline void program_write32(uint32_t addr, uint32_t data);
55 
56 	// CPU registers
57 	uint32_t m_pc;
58 	uint32_t m_shifted_pc;
59 	uint32_t m_a;
60 	uint32_t m_halt;
61 
62 	// other internal states
63 	int m_icount;
64 
65 	// address spaces
66 	address_space *m_program;
67 };
68 
69 // device type definition
70 DECLARE_DEVICE_TYPE(SSEMCPU, ssem_device)
71 
72 /***************************************************************************
73     REGISTER ENUMERATION
74 ***************************************************************************/
75 
76 enum
77 {
78 	SSEM_PC = 1,
79 	SSEM_A,
80 	SSEM_HALT
81 };
82 
83 #endif // MAME_CPU_SSEM_SSEM_H
84