1 // license:BSD-3-Clause
2 // copyright-holders:Fabio Priuli
3 /**********************************************************************
4 
5     Nintendo Super Famicom - Epoch Barcode Battler
6 
7 **********************************************************************/
8 
9 #ifndef MAME_BUS_SNES_CTRL_BCBATTLE_H
10 #define MAME_BUS_SNES_CTRL_BCBATTLE_H
11 
12 #pragma once
13 
14 
15 #include "ctrl.h"
16 #include "machine/bcreader.h"
17 
18 //**************************************************************************
19 //  TYPE DEFINITIONS
20 //**************************************************************************
21 
22 // ======================> snes_bcbattle_device
23 
24 class snes_bcbattle_device : public device_t,
25 							public device_snes_control_port_interface
26 {
27 public:
28 	// construction/destruction
29 	snes_bcbattle_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
30 
31 protected:
32 	// device-level overrides
33 	virtual void device_start() override;
34 	virtual void device_reset() override;
35 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
36 
37 	virtual void device_add_mconfig(machine_config &config) override;
38 
39 	virtual uint8_t read_pin4() override;
40 	virtual void write_strobe(uint8_t data) override;
41 	virtual void port_poll() override;
42 
43 	int read_current_bit();
44 
45 private:
46 	static constexpr device_timer_id TIMER_BATTLER = 1;
47 
48 	required_device<barcode_reader_device> m_reader;
49 	uint8_t m_current_barcode[20];
50 	int m_pending_code, m_new_code, m_transmitting, m_cur_bit, m_cur_byte;
51 	emu_timer *battler_timer;
52 
53 	int m_strobe, m_idx;
54 };
55 
56 // device type definition
57 DECLARE_DEVICE_TYPE(SNES_BARCODE_BATTLER, snes_bcbattle_device)
58 
59 #endif // MAME_BUS_SNES_CTRL_BCBATTLE_H
60