1 // license:BSD-3-Clause
2 // copyright-holders:Nigel Barnes
3 /**********************************************************************
4 
5     Joystick Controllers
6 
7 **********************************************************************/
8 
9 #ifndef MAME_BUS_BBC_ANALOGUE_JOYSTICK_H
10 #define MAME_BUS_BBC_ANALOGUE_JOYSTICK_H
11 
12 #pragma once
13 
14 
15 #include "analogue.h"
16 
17 //**************************************************************************
18 //  TYPE DEFINITIONS
19 //**************************************************************************
20 
21 // ======================> bbc_joystick_device
22 
23 class bbc_joystick_device :
24 	public device_t,
25 	public device_bbc_analogue_interface
26 {
27 protected:
28 	// construction/destruction
29 	bbc_joystick_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
30 
31 	// device-level overrides
32 	virtual void device_start() override;
33 	virtual void device_reset() override;
34 
35 	virtual uint8_t ch_r(int channel) override;
36 	virtual uint8_t pb_r() override;
37 
38 private:
39 	required_ioport_array<4> m_joy;
40 	required_ioport m_buttons;
41 };
42 
43 class bbc_acornjoy_device : public bbc_joystick_device
44 {
45 public:
46 	bbc_acornjoy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
47 
48 	virtual ioport_constructor device_input_ports() const override;
49 };
50 
51 class bbc_voltmace3b_device : public bbc_joystick_device
52 {
53 public:
54 	bbc_voltmace3b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
55 
56 	virtual ioport_constructor device_input_ports() const override;
57 };
58 
59 
60 // device type definition
61 DECLARE_DEVICE_TYPE(BBC_ACORNJOY,   bbc_acornjoy_device)
62 DECLARE_DEVICE_TYPE(BBC_VOLTMACE3B, bbc_voltmace3b_device)
63 
64 #endif // MAME_BUS_BBC_ANALOGUE_JOYSTICK_H
65