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