trunk/src/mess/machine/psxanalog.c
| r20623 | r20624 | |
| 1 | 1 | #include "machine/psxanalog.h" |
| 2 | 2 | |
| 3 | | const device_type PSX_ANALOG_CONTROLLER = &device_creator<psx_analog_controller_device>; |
| 3 | const device_type PSX_ANALOG_JOYSTICK = &device_creator<psx_analog_joystick_device>; |
| 4 | const device_type PSX_DUALSHOCK = &device_creator<psx_dualshock_device>; |
| 4 | 5 | |
| 5 | | psx_analog_controller_device::psx_analog_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 6 | | device_t(mconfig, PSX_ANALOG_CONTROLLER, "Playstation Analog Controller", tag, owner, clock), |
| 6 | psx_analog_controller_device::psx_analog_controller_device(const machine_config &mconfig, device_type type, const char* name, const char *tag, device_t *owner, UINT32 clock) : |
| 7 | device_t(mconfig, type, name, tag, owner, clock), |
| 7 | 8 | device_psx_controller_interface(mconfig, *this), |
| 8 | 9 | m_pad0(*this, "PSXPAD0"), |
| 9 | 10 | m_pad1(*this, "PSXPAD1"), |
| r20623 | r20624 | |
| 14 | 15 | { |
| 15 | 16 | } |
| 16 | 17 | |
| 18 | psx_dualshock_device::psx_dualshock_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) : |
| 19 | psx_analog_controller_device(mconfig, PSX_DUALSHOCK, "Playstation Dualshock Pad", tag, owner, clock) |
| 20 | { |
| 21 | m_type = DUALSHOCK; |
| 22 | } |
| 23 | |
| 24 | psx_analog_joystick_device::psx_analog_joystick_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) : |
| 25 | psx_analog_controller_device(mconfig, PSX_ANALOG_JOYSTICK, "Playstation Analog Joystick", tag, owner, clock) |
| 26 | { |
| 27 | m_type = JOYSTICK; |
| 28 | } |
| 29 | |
| 17 | 30 | void psx_analog_controller_device::device_reset() |
| 18 | 31 | { |
| 19 | 32 | m_confmode = false; |
| r20623 | r20624 | |
| 30 | 43 | { |
| 31 | 44 | case 2: |
| 32 | 45 | data = m_pad0->read(); |
| 33 | | if(!analog) |
| 46 | if(!analog || (m_type == JOYSTICK)) |
| 34 | 47 | data |= 6; // l3/r3 |
| 35 | 48 | break; |
| 36 | 49 | case 3: |
| r20623 | r20624 | |
| 147 | 160 | switch(count) |
| 148 | 161 | { |
| 149 | 162 | case 0: |
| 150 | | *odata = 0x73; |
| 163 | if(m_type == JOYSTICK) |
| 164 | *odata = 0x53; |
| 165 | else |
| 166 | *odata = 0x73; |
| 151 | 167 | break; |
| 152 | 168 | case 1: |
| 153 | 169 | m_cmd = idata; |
| r20623 | r20624 | |
| 244 | 260 | if(!m_analoglock) |
| 245 | 261 | m_analogmode = newval; |
| 246 | 262 | } |
| 263 | |
trunk/src/mess/machine/psxanalog.h
| r20623 | r20624 | |
| 3 | 3 | |
| 4 | 4 | #include "machine/psxcport.h" |
| 5 | 5 | |
| 6 | | extern const device_type PSX_ANALOG_CONTROLLER; |
| 6 | extern const device_type PSX_DUALSHOCK; |
| 7 | extern const device_type PSX_ANALOG_JOYSTICK; |
| 7 | 8 | |
| 8 | 9 | class psx_analog_controller_device : public device_t, |
| 9 | 10 | public device_psx_controller_interface |
| 10 | 11 | { |
| 11 | 12 | public: |
| 12 | | psx_analog_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 13 | psx_analog_controller_device(const machine_config &mconfig, device_type type, const char* name, const char *tag, device_t *owner, UINT32 clock); |
| 13 | 14 | |
| 14 | 15 | virtual ioport_constructor device_input_ports() const; |
| 15 | 16 | DECLARE_INPUT_CHANGED_MEMBER(change_mode); |
| 16 | 17 | protected: |
| 17 | 18 | virtual void device_reset(); |
| 18 | 19 | virtual void device_start() {} |
| 19 | | virtual void device_config_complete() { m_shortname = "psx_analog_controller"; } |
| 20 | enum { |
| 21 | JOYSTICK, |
| 22 | DUALSHOCK |
| 23 | } m_type; |
| 20 | 24 | private: |
| 21 | 25 | virtual bool get_pad(int count, UINT8 *odata, UINT8 idata); |
| 22 | 26 | UINT8 pad_data(int count, bool analog); |
| r20623 | r20624 | |
| 36 | 40 | required_ioport m_lsticky; |
| 37 | 41 | }; |
| 38 | 42 | |
| 43 | class psx_dualshock_device : public psx_analog_controller_device |
| 44 | { |
| 45 | public: |
| 46 | psx_dualshock_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 47 | protected: |
| 48 | virtual void device_config_complete() { m_shortname = "psx_dualshock_pad"; } |
| 49 | }; |
| 50 | |
| 51 | class psx_analog_joystick_device : public psx_analog_controller_device |
| 52 | { |
| 53 | public: |
| 54 | psx_analog_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 55 | protected: |
| 56 | virtual void device_config_complete() { m_shortname = "psx_analog_joystick"; } |
| 57 | }; |
| 58 | |
| 39 | 59 | #endif /* PSXANALOG_H_ */ |
trunk/src/mess/machine/psxcport.c
| r20623 | r20624 | |
| 44 | 44 | |
| 45 | 45 | SLOT_INTERFACE_START(psx_controllers) |
| 46 | 46 | SLOT_INTERFACE("digital_pad", PSX_STANDARD_CONTROLLER) |
| 47 | | SLOT_INTERFACE("analog_pad", PSX_ANALOG_CONTROLLER) |
| 47 | SLOT_INTERFACE("dualshock_pad", PSX_DUALSHOCK) |
| 48 | SLOT_INTERFACE("analog_joystick", PSX_ANALOG_JOYSTICK) |
| 48 | 49 | SLOT_INTERFACE_END |
| 49 | 50 | |
| 50 | 51 | void psxcontrollerports_device::data_in( int data, int mask ) |