summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/vsmile/keyboard.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/vsmile/keyboard.h')
-rw-r--r--src/devices/bus/vsmile/keyboard.h143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/devices/bus/vsmile/keyboard.h b/src/devices/bus/vsmile/keyboard.h
new file mode 100644
index 00000000000..2d01776ee39
--- /dev/null
+++ b/src/devices/bus/vsmile/keyboard.h
@@ -0,0 +1,143 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz, Vas Crabb
+#ifndef MAME_BUS_VSMILE_KEYBOARD_H
+#define MAME_BUS_VSMILE_KEYBOARD_H
+
+#pragma once
+
+#include "vsmile_ctrl.h"
+
+#include "machine/keyboard.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+ ***************************************************************************/
+
+// ======================> vsmile_keyboard_device
+
+class vsmile_keyboard_device : public vsmile_ctrl_device_base, protected device_matrix_keyboard_interface<5U>
+{
+public:
+ // construction/destruction
+ virtual ~vsmile_keyboard_device();
+
+ // input handlers
+ DECLARE_INPUT_CHANGED_MEMBER(joy_changed);
+ DECLARE_INPUT_CHANGED_MEMBER(key_changed);
+ DECLARE_INPUT_CHANGED_MEMBER(button_changed);
+
+ enum stale_non_key_inputs : uint16_t
+ {
+ STALE_NONE = 0U,
+ STALE_LEFT_RIGHT = 1U << 0,
+ STALE_UP_DOWN = 1U << 1,
+ STALE_OK = 1U << 3,
+ STALE_QUIT = 1U << 4,
+ STALE_HELP = 1U << 5,
+
+ STALE_JOY = STALE_LEFT_RIGHT | STALE_UP_DOWN,
+ STALE_BUTTONS = STALE_OK | STALE_QUIT | STALE_HELP,
+ STALE_ALL = STALE_JOY | STALE_BUTTONS
+ };
+
+ enum comms_state : uint8_t
+ {
+ STATE_POWERUP = 0U,
+ STATE_HELLO_MESSAGE,
+ STATE_HELLO_RECEIVE_BYTE1,
+ STATE_HELLO_RECEIVE_BYTE2,
+ STATE_HELLO_REPLY_BYTE1,
+ STATE_HELLO_REPLY_BYTE2,
+ STATE_HELLO_REPLY_BYTE3,
+ STATE_RUNNING
+ };
+
+protected:
+ vsmile_keyboard_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock, uint8_t layout_type);
+
+ // device_t implementation
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // vsmile_ctrl_device_base implementation
+ virtual void tx_complete() override;
+ virtual void tx_timeout() override;
+ virtual void rx_complete(uint8_t data, bool cts) override;
+
+ // device_matrix_keyboard_interface implementation
+ virtual void key_make(uint8_t row, uint8_t column) override;
+ virtual void key_break(uint8_t row, uint8_t column) override;
+
+ uint16_t stale_all() { return STALE_ALL; }
+ bool translate(uint8_t code, uint8_t &translated) const;
+
+ void enter_active_state();
+
+ void uart_tx_fifo_push(uint8_t data);
+
+ required_ioport m_io_joy;
+ required_ioport_array<5> m_io_keys;
+ required_ioport m_io_buttons;
+
+ const uint8_t m_layout_type;
+
+ uint8_t m_state;
+
+ uint16_t m_sent_joy, m_sent_buttons;
+
+ uint16_t m_stale;
+ bool m_active;
+ emu_timer *m_idle_timer;
+ emu_timer *m_hello_timer;
+ emu_timer *m_hello_timeout_timer;
+
+private:
+ TIMER_CALLBACK_MEMBER(handle_idle);
+ TIMER_CALLBACK_MEMBER(handle_hello);
+ TIMER_CALLBACK_MEMBER(handle_hello_timeout);
+
+ uint8_t m_ctrl_probe_history[2];
+};
+
+class vsmile_keyboard_us_device : public vsmile_keyboard_device
+{
+public:
+ // construction/destruction
+ vsmile_keyboard_us_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+
+protected:
+ // device_t implementation
+ virtual ioport_constructor device_input_ports() const override;
+};
+
+class vsmile_keyboard_fr_device : public vsmile_keyboard_device
+{
+public:
+ // construction/destruction
+ vsmile_keyboard_fr_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+
+protected:
+ // device_t implementation
+ virtual ioport_constructor device_input_ports() const override;
+};
+
+class vsmile_keyboard_ge_device : public vsmile_keyboard_device
+{
+public:
+ // construction/destruction
+ vsmile_keyboard_ge_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
+
+protected:
+ // device_t implementation
+ virtual ioport_constructor device_input_ports() const override;
+};
+
+/***************************************************************************
+ DEVICE TYPES
+ ***************************************************************************/
+
+DECLARE_DEVICE_TYPE(VSMILE_KEYBOARD_US, vsmile_keyboard_us_device)
+DECLARE_DEVICE_TYPE(VSMILE_KEYBOARD_FR, vsmile_keyboard_fr_device)
+DECLARE_DEVICE_TYPE(VSMILE_KEYBOARD_GE, vsmile_keyboard_ge_device)
+
+#endif // MAME_BUS_VSMILE_KEYBOARD_H