1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 #ifndef MAME_AUDIO_NAMCO52_H 4 #define MAME_AUDIO_NAMCO52_H 5 6 #include "sound/discrete.h" 7 #include "cpu/mb88xx/mb88xx.h" 8 9 class namco_52xx_device : public device_t 10 { 11 public: 12 namco_52xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 13 set_discrete(T && tag)14 template <typename T> void set_discrete(T &&tag) { m_discrete.set_tag(std::forward<T>(tag)); } set_basenote(int node)15 void set_basenote(int node) { m_basenode = node; } set_extclock(attoseconds_t clk)16 void set_extclock(attoseconds_t clk) { m_extclock = clk; } romread_callback()17 auto romread_callback() { return m_romread.bind(); } si_callback()18 auto si_callback() { return m_si.bind(); } set_irq_duration(attotime t)19 namco_52xx_device &set_irq_duration(attotime t) { m_irq_duration = t; return *this; } 20 21 DECLARE_WRITE_LINE_MEMBER( reset ); 22 WRITE_LINE_MEMBER( chip_select ); 23 void write(uint8_t data); 24 25 protected: 26 // device-level overrides 27 virtual void device_start() override; 28 virtual const tiny_rom_entry *device_rom_region() const override; 29 virtual void device_add_mconfig(machine_config &config) override; 30 31 TIMER_CALLBACK_MEMBER( latch_callback ); 32 TIMER_CALLBACK_MEMBER( external_clock_pulse ); 33 34 private: 35 // internal state 36 required_device<mb88_cpu_device> m_cpu; 37 required_device<discrete_device> m_discrete; 38 39 attotime m_irq_duration; 40 int m_basenode; 41 attoseconds_t m_extclock; 42 emu_timer *m_extclock_pulse_timer; 43 devcb_read8 m_romread; 44 devcb_read8 m_si; 45 46 uint8_t m_latched_cmd; 47 uint32_t m_address; 48 49 uint8_t K_r(); 50 DECLARE_READ_LINE_MEMBER( SI_r ); 51 uint8_t R0_r(); 52 uint8_t R1_r(); 53 void P_w(uint8_t data); 54 void R2_w(uint8_t data); 55 void R3_w(uint8_t data); 56 void O_w(uint8_t data); 57 }; 58 59 DECLARE_DEVICE_TYPE(NAMCO_52XX, namco_52xx_device) 60 61 62 63 /* discrete nodes */ 64 #define NAMCO_52XX_P_DATA(base) (base) 65 66 67 #endif // MAME_AUDIO_NAMCO52_H 68