/***************************************************************************** * * machine/ser_mouse.h * ****************************************************************************/ #ifndef SER_MOUSE_H_ #define SER_MOUSE_H_ #include "rs232.h" class serial_mouse_device : public device_t, public device_rs232_port_interface, public device_serial_interface { public: serial_mouse_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); virtual ioport_constructor device_input_ports() const; protected: virtual void device_start(); virtual void device_reset(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); virtual void mouse_trans(int dx, int dy, int nb, int mbc) = 0; virtual void set_frame() = 0; void set_mouse_enable(bool state); void queue_data(UINT8 data) {m_queue[m_head] = data; ++m_head %= 256;} UINT8 unqueue_data() {UINT8 ret = m_queue[m_tail]; ++m_tail %= 256; return ret;} virtual void tra_complete(); virtual void tra_callback(); private: UINT8 m_queue[256]; UINT8 m_head, m_tail, m_mb; emu_timer *m_timer; bool m_enabled; required_ioport m_x; required_ioport m_y; required_ioport m_btn; }; class microsoft_mouse_device : public serial_mouse_device { public: microsoft_mouse_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); virtual DECLARE_WRITE_LINE_MEMBER( input_dtr ) { m_dtr = state; check_state(); } virtual DECLARE_WRITE_LINE_MEMBER( input_rts ) { m_rts = state; check_state(); m_old_rts = state; } protected: virtual void set_frame() { set_data_frame(1, 7, PARITY_NONE, STOP_BITS_2); } virtual void mouse_trans(int dx, int dy, int nb, int mbc); virtual void device_reset() {m_old_rts = 0; serial_mouse_device::device_reset();} private: void check_state(); int m_dtr; int m_rts; int m_old_rts; }; extern const device_type MSFT_SERIAL_MOUSE; class mouse_systems_mouse_device : public serial_mouse_device { public: mouse_systems_mouse_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); virtual DECLARE_WRITE_LINE_MEMBER( input_dtr ) { m_dtr = state; check_state(); } virtual DECLARE_WRITE_LINE_MEMBER( input_rts ) { m_rts = state; check_state(); } protected: virtual void set_frame() { set_data_frame(1, 8, PARITY_NONE, STOP_BITS_2); } virtual void mouse_trans(int dx, int dy, int nb, int mbc); private: void check_state() { set_mouse_enable((m_dtr && m_rts)?true:false); } int m_dtr; int m_rts; }; extern const device_type MSYSTEM_SERIAL_MOUSE; #endif /* SER_MOUSE_H_ */