diff options
Diffstat (limited to 'src/devices/machine')
-rw-r--r-- | src/devices/machine/sensorboard.cpp | 20 | ||||
-rw-r--r-- | src/devices/machine/sensorboard.h | 5 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/devices/machine/sensorboard.cpp b/src/devices/machine/sensorboard.cpp index b2106665aaf..7f2bee9ae04 100644 --- a/src/devices/machine/sensorboard.cpp +++ b/src/devices/machine/sensorboard.cpp @@ -58,7 +58,7 @@ sensorboard_device::sensorboard_device(const machine_config &mconfig, const char // set defaults for most common use case (aka chess) set_size(8, 8); set_spawnpoints(12); - m_sensordelay = attotime::from_msec(75); + set_delay(attotime::from_msec(75)); } @@ -184,6 +184,20 @@ void sensorboard_device::device_reset() // public handlers //------------------------------------------------- +sensorboard_device &sensorboard_device::set_type(sb_type type) +{ + m_inductive = (type == INDUCTIVE); + m_magnets = (type == MAGNETS) || m_inductive; + + if (type == NOSENSORS) + { + set_mod_enable(false); + set_delay(attotime::never); + } + + return *this; +} + u8 sensorboard_device::read_sensor(u8 x, u8 y) { if (x >= m_width || y >= m_height) @@ -192,7 +206,7 @@ u8 sensorboard_device::read_sensor(u8 x, u8 y) u8 live_state = BIT(m_inp_rank[y]->read(), x); int pos = (y << 4 & 0xf0) | (x & 0x0f); - if (m_magnets || m_inductive) + if (m_magnets) { u8 piece = read_piece(x, y); u8 state = (piece != 0 && pos != m_handpos && pos != m_droppos) ? 1 : 0; @@ -383,7 +397,7 @@ INPUT_CHANGED_MEMBER(sensorboard_device::sensor) return; // auto click / sensor delay - if (m_sensordelay != attotime::never && (m_magnets || m_inductive || (pos != m_handpos && ~m_inp_ui->read() & 2))) + if (m_sensordelay != attotime::never && (m_magnets || (pos != m_handpos && ~m_inp_ui->read() & 2))) { m_sensorpos = pos; m_sensortimer->adjust(m_sensordelay); diff --git a/src/devices/machine/sensorboard.h b/src/devices/machine/sensorboard.h index 77f43bfd26c..da59b02854a 100644 --- a/src/devices/machine/sensorboard.h +++ b/src/devices/machine/sensorboard.h @@ -18,13 +18,14 @@ public: enum sb_type { - BUTTONS = 0, + NOSENSORS = 0, + BUTTONS, MAGNETS, INDUCTIVE }; // configuration helpers - sensorboard_device &set_type(sb_type t) { m_magnets = (t == MAGNETS); m_inductive = (t == INDUCTIVE); return *this; } // sensor type + sensorboard_device &set_type(sb_type type); // sensor type sensorboard_device &set_size(u8 width, u8 height) { m_width = width; m_height = height; return *this; } // board dimensions, max 10 * 10 sensorboard_device &set_spawnpoints(u8 i) { m_maxspawn = i; m_maxid = i; return *this; } // number of piece spawnpoints, max 16 sensorboard_device &set_max_id(u8 i) { m_maxid = i; return *this; } // maximum piece id (if larger than set_spawnpoints) |