summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/sensorboard.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/sensorboard.h')
-rw-r--r--src/devices/machine/sensorboard.h29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/devices/machine/sensorboard.h b/src/devices/machine/sensorboard.h
index bb095294cfa..c786ba63def 100644
--- a/src/devices/machine/sensorboard.h
+++ b/src/devices/machine/sensorboard.h
@@ -34,13 +34,14 @@ public:
sensorboard_device &set_ui_enable(bool b) { if (!b) m_maxspawn = 0; m_ui_enabled = (b) ? 7 : 0; return *this; } // enable UI inputs
sensorboard_device &set_mod_enable(bool b) { if (b) m_ui_enabled |= 1; else m_ui_enabled &= ~1; return *this; } // enable modifier keys
- auto clear_cb() { return m_clear_cb.bind(); } // 0 = internal clear, 1 = user presses clear
+ auto clear_cb() { return m_clear_cb.bind(); } // d0: 0 = internal clear, 1 = user presses clear, d1: rotate
auto init_cb() { return m_init_cb.bind(); } // for setting pieces starting position
+ auto remove_cb() { return m_remove_cb.bind(); } // user removes piece from hand
auto sensor_cb() { return m_sensor_cb.bind(); } // x = offset & 0xf, y = offset >> 4 & 0xf
auto spawn_cb() { return m_spawn_cb.bind(); } // spawnpoint/piece = offset, retval = new piece id
auto output_cb() { return m_output_cb.bind(); } // pos = offset(A8 for ui/board, A9 for count), id = data
- void preset_chess(int state = 0); // init_cb() preset for chessboards
+ void preset_chess(u8 data = 0); // init_cb() preset for chessboards
// read sensors
u8 read_sensor(u8 x, u8 y);
@@ -52,7 +53,7 @@ public:
// handle board state
u8 read_piece(u8 x, u8 y) { return m_curstate[y * m_width + x]; }
void write_piece(u8 x, u8 y, u8 id) { m_curstate[y * m_width + x] = id; }
- void clear_board(int state = 0) { memset(m_curstate, 0, sizeof(m_curstate)); } // default clear_cb()
+ void clear_board(u8 data = 0) { memset(m_curstate, 0, sizeof(m_curstate)); } // default clear_cb()
void refresh();
void cancel_sensor();
@@ -60,7 +61,10 @@ public:
// handle pieces
void cancel_hand();
void remove_hand();
+ u8 get_hand() { return m_hand; }
+ void set_hand(u8 hand) { m_hand = hand; }
int get_handpos() { return m_handpos; }
+ void set_handpos(int pos) { m_handpos = pos; }
bool drop_piece(u8 x, u8 y);
bool pickup_piece(u8 x, u8 y);
@@ -72,18 +76,18 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(ui_init);
DECLARE_INPUT_CHANGED_MEMBER(ui_refresh) { refresh(); }
- DECLARE_CUSTOM_INPUT_MEMBER(check_sensor_busy) { return (m_sensorpos == -1) ? 0 : 1; }
- DECLARE_CUSTOM_INPUT_MEMBER(check_bs_mask) { return m_bs_mask; }
- DECLARE_CUSTOM_INPUT_MEMBER(check_ss_mask) { return m_ss_mask; }
- DECLARE_CUSTOM_INPUT_MEMBER(check_ui_enabled) { return m_ui_enabled; }
+ ioport_value check_sensor_busy() { return (m_sensorpos == -1) ? 0 : 1; }
+ ioport_value check_bs_mask() { return m_bs_mask; }
+ ioport_value check_ss_mask() { return m_ss_mask; }
+ ioport_value check_ui_enabled() { return m_ui_enabled; }
protected:
// device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
virtual void device_post_load() override { refresh(); }
- virtual ioport_constructor device_input_ports() const override;
+ virtual ioport_constructor device_input_ports() const override ATTR_COLD;
// device_nvram_interface overrides
virtual void nvram_default() override;
@@ -100,8 +104,9 @@ private:
required_ioport m_inp_ui;
required_ioport m_inp_conf;
- devcb_write_line m_clear_cb;
- devcb_write_line m_init_cb;
+ devcb_write8 m_clear_cb;
+ devcb_write8 m_init_cb;
+ devcb_read8 m_remove_cb;
devcb_read8 m_sensor_cb;
devcb_read8 m_spawn_cb;
devcb_write16 m_output_cb;