1 // license:BSD-3-Clause
2 // copyright-holders:R. Belmont
3 #ifndef MAME_AUDIO_DECOBSMT_H
4 #define MAME_AUDIO_DECOBSMT_H
5 
6 #pragma once
7 
8 #include "cpu/m6809/m6809.h"
9 #include "sound/bsmt2000.h"
10 
11 #define DECOBSMT_TAG "decobsmt"
12 
13 
14 //**************************************************************************
15 //  TYPE DEFINITIONS
16 //**************************************************************************
17 
18 class decobsmt_device : public device_t
19 {
20 public:
21 	// construction/destruction
22 	decobsmt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
23 
24 	void bsmt_reset_w(u8 data);
25 	u8 bsmt_status_r();
26 	void bsmt0_w(u8 data);
27 	void bsmt1_w(offs_t offset, u8 data);
28 	u8 bsmt_comms_r();
29 	void bsmt_comms_w(u8 data);
30 
31 	DECLARE_WRITE_LINE_MEMBER(bsmt_reset_line);
32 
33 	void bsmt_map(address_map &map);
34 	void decobsmt_map(address_map &map);
35 protected:
36 	// device-level overrides
37 	virtual void device_start() override;
38 	virtual void device_reset() override;
39 	virtual void device_add_mconfig(machine_config &config) override;
40 
41 private:
42 	required_device<cpu_device> m_ourcpu;
43 	required_device<bsmt2000_device> m_bsmt;
44 
45 	uint8_t m_bsmt_latch;
46 	uint8_t m_bsmt_reset;
47 	uint8_t m_bsmt_comms;
48 
49 	INTERRUPT_GEN_MEMBER(decobsmt_firq_interrupt);
50 
51 	void bsmt_ready_callback();
52 };
53 
54 
55 // device type definition
56 DECLARE_DEVICE_TYPE(DECOBSMT, decobsmt_device)
57 
58 #endif  // MAME_AUDIO_DECOBSMT_H
59