diff options
Diffstat (limited to 'src/devices/machine/sensorboard.cpp')
-rw-r--r-- | src/devices/machine/sensorboard.cpp | 106 |
1 files changed, 63 insertions, 43 deletions
diff --git a/src/devices/machine/sensorboard.cpp b/src/devices/machine/sensorboard.cpp index 72b7b57f6d5..5fa63885f1f 100644 --- a/src/devices/machine/sensorboard.cpp +++ b/src/devices/machine/sensorboard.cpp @@ -57,7 +57,7 @@ sensor state instead. */ #include "emu.h" -#include "machine/sensorboard.h" +#include "sensorboard.h" DEFINE_DEVICE_TYPE(SENSORBOARD, sensorboard_device, "sensorboard", "Sensorboard") @@ -69,17 +69,19 @@ DEFINE_DEVICE_TYPE(SENSORBOARD, sensorboard_device, "sensorboard", "Sensorboard" sensorboard_device::sensorboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, SENSORBOARD, tag, owner, clock), device_nvram_interface(mconfig, *this), - m_out_piece(*this, "piece_%c%u", 0U + 'a', 1U), + m_out_piece(*this, "piece_%c%u", unsigned('a'), 1U), m_out_pui(*this, "piece_ui%u", 0U), m_out_count(*this, "count_ui%u", 0U), m_inp_rank(*this, "RANK.%u", 1), m_inp_spawn(*this, "SPAWN"), m_inp_ui(*this, "UI"), m_inp_conf(*this, "CONF"), - m_custom_init_cb(*this), - m_custom_sensor_cb(*this), - m_custom_spawn_cb(*this), - m_custom_output_cb(*this) + m_clear_cb(*this), + m_init_cb(*this), + m_remove_cb(*this, 0), + m_sensor_cb(*this, 0), + m_spawn_cb(*this, 0), + m_output_cb(*this) { m_nvram_auto = false; m_nosensors = false; @@ -87,6 +89,7 @@ sensorboard_device::sensorboard_device(const machine_config &mconfig, const char m_inductive = false; m_ui_enabled = 7; set_delay(attotime::never); + clear_cb().set(*this, FUNC(sensorboard_device::clear_board)); // set defaults for most common use case (aka chess) set_size(8, 8); @@ -101,21 +104,15 @@ sensorboard_device::sensorboard_device(const machine_config &mconfig, const char void sensorboard_device::device_start() { - // resolve handlers - m_custom_init_cb.resolve_safe(); - m_custom_sensor_cb.resolve_safe(0); - m_custom_spawn_cb.resolve(); - m_custom_output_cb.resolve(); - - if (m_custom_output_cb.isnull()) + if (m_output_cb.isunset()) { m_out_piece.resolve(); m_out_pui.resolve(); m_out_count.resolve(); } - m_undotimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sensorboard_device::undo_tick),this)); - m_sensortimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sensorboard_device::sensor_off),this)); + m_undotimer = timer_alloc(FUNC(sensorboard_device::undo_tick), this); + m_sensortimer = timer_alloc(FUNC(sensorboard_device::sensor_off), this); cancel_sensor(); u16 wmask = ~((1 << m_width) - 1); @@ -157,7 +154,7 @@ void sensorboard_device::device_start() save_item(NAME(m_sensordelay)); } -void sensorboard_device::preset_chess(int state) +void sensorboard_device::preset_chess(u8 data) { // set chessboard start position @@ -196,8 +193,8 @@ void sensorboard_device::device_reset() if (!nvram_on()) { - clear_board(); - m_custom_init_cb(0); + m_clear_cb(0); + m_init_cb(0); } undo_reset(); refresh(); @@ -211,27 +208,29 @@ void sensorboard_device::device_reset() void sensorboard_device::nvram_default() { - clear_board(); - m_custom_init_cb(1); + m_clear_cb(0); + m_init_cb(0); } -void sensorboard_device::nvram_read(emu_file &file) +bool sensorboard_device::nvram_read(util::read_stream &file) { - file.read(m_curstate, sizeof(m_curstate)); + auto const [err, actual] = read(file, m_curstate, sizeof(m_curstate)); + return !err && (sizeof(m_curstate) == actual); } -void sensorboard_device::nvram_write(emu_file &file) +bool sensorboard_device::nvram_write(util::write_stream &file) { // save last board position - file.write(m_curstate, sizeof(m_curstate)); + auto const [err, actual] = write(file, m_curstate, sizeof(m_curstate)); + return !err; } -bool sensorboard_device::nvram_can_write() +bool sensorboard_device::nvram_can_write() const { return nvram_on(); } -bool sensorboard_device::nvram_on() +bool sensorboard_device::nvram_on() const { return (m_inp_conf->read() & 3) ? bool(m_inp_conf->read() & 2) : m_nvram_auto; } @@ -317,20 +316,23 @@ u16 sensorboard_device::read_rank(u8 y, bool reverse) void sensorboard_device::refresh() { - bool custom_out = !m_custom_output_cb.isnull(); + if (machine().phase() < machine_phase::RESET) + return; + + bool custom_out = !m_output_cb.isunset(); // output spawn icons for (int i = 0; i < m_maxspawn; i++) { if (custom_out) - m_custom_output_cb(i + 0x101, i + 1); + m_output_cb(i + 0x101, i + 1); else m_out_pui[i + 1] = i + 1; } // output hand piece if (custom_out) - m_custom_output_cb(0x100, m_hand); + m_output_cb(0x100, m_hand); else m_out_pui[0] = m_hand; @@ -346,7 +348,7 @@ void sensorboard_device::refresh() piece += m_maxid; if (custom_out) - m_custom_output_cb(pos, piece); + m_output_cb(pos, piece); else m_out_piece[x][y] = piece; } @@ -377,8 +379,8 @@ void sensorboard_device::refresh() if (custom_out) { - m_custom_output_cb(0x200, c0); - m_custom_output_cb(0x201, c1); + m_output_cb(0x200, c0); + m_output_cb(0x201, c1); } else { @@ -476,13 +478,15 @@ INPUT_CHANGED_MEMBER(sensorboard_device::sensor) m_sensortimer->adjust(m_sensordelay); } + bool drop = m_hand != 0; + // optional custom handling: // return d0 = block drop piece // return d1 = block pick up piece - u8 custom = m_custom_sensor_cb(pos); + u8 custom = m_sensor_cb(pos); // drop piece - if (m_hand != 0) + if (drop) { if (~custom & 1) drop_piece(x, y); @@ -497,7 +501,7 @@ INPUT_CHANGED_MEMBER(sensorboard_device::sensor) INPUT_CHANGED_MEMBER(sensorboard_device::ui_spawn) { - u8 pos = (newval) ? (u8)param : 32 - count_leading_zeros(m_inp_spawn->read()); + u8 pos = (newval) ? (u8)param : 32 - count_leading_zeros_32(m_inp_spawn->read()); if (pos == 0 || pos > m_maxspawn) return; @@ -506,8 +510,8 @@ INPUT_CHANGED_MEMBER(sensorboard_device::ui_spawn) m_handpos = -1; // optional callback to change piece id - if (!m_custom_spawn_cb.isnull()) - m_hand = m_custom_spawn_cb(pos); + if (!m_spawn_cb.isunset()) + m_hand = m_spawn_cb(pos); refresh(); } @@ -518,7 +522,12 @@ INPUT_CHANGED_MEMBER(sensorboard_device::ui_hand) return; cancel_sensor(); - remove_hand(); + + // optional custom handling: + // return d0: block remove hand + if (~m_remove_cb() & 1) + remove_hand(); + refresh(); } @@ -597,17 +606,18 @@ INPUT_CHANGED_MEMBER(sensorboard_device::ui_init) if (!newval) return; - u8 init = (u8)param; + u8 init = param ? 1 : 0; cancel_sensor(); cancel_hand(); - clear_board(); + u8 rotate = m_inp_ui->read() & 2; + m_clear_cb((init ^ 1) | rotate); if (init) - m_custom_init_cb(0); + m_init_cb(init | rotate); // rotate pieces - if (m_inp_ui->read() & 2) + if (rotate) { u8 tempstate[0x100]; for (int y = 0; y < m_height; y++) @@ -644,6 +654,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<16 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x09) PORT_NAME("Sensor J1") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<16 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x0a) PORT_NAME("Sensor K1") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<16 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x0b) PORT_NAME("Sensor L1") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<16 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x0c) PORT_NAME("Sensor M1") PORT_START("RANK.2") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<17 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x10) PORT_NAME("Sensor A2") @@ -658,6 +669,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<17 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x19) PORT_NAME("Sensor J2") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<17 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x1a) PORT_NAME("Sensor K2") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<17 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x1b) PORT_NAME("Sensor L2") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<17 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x1c) PORT_NAME("Sensor M2") PORT_START("RANK.3") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<18 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x20) PORT_NAME("Sensor A3") @@ -672,6 +684,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<18 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x29) PORT_NAME("Sensor J3") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<18 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x2a) PORT_NAME("Sensor K3") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<18 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x2b) PORT_NAME("Sensor L3") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<18 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x2c) PORT_NAME("Sensor M3") PORT_START("RANK.4") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<19 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x30) PORT_NAME("Sensor A4") @@ -686,6 +699,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<19 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x39) PORT_NAME("Sensor J4") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<19 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x3a) PORT_NAME("Sensor K4") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<19 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x3b) PORT_NAME("Sensor L4") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<19 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x3c) PORT_NAME("Sensor M4") PORT_START("RANK.5") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<20 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x40) PORT_NAME("Sensor A5") @@ -700,6 +714,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<20 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x49) PORT_NAME("Sensor J5") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<20 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x4a) PORT_NAME("Sensor K5") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<20 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x4b) PORT_NAME("Sensor L5") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<20 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x4c) PORT_NAME("Sensor M5") PORT_START("RANK.6") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<21 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x50) PORT_NAME("Sensor A6") @@ -714,6 +729,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<21 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x59) PORT_NAME("Sensor J6") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<21 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x5a) PORT_NAME("Sensor K6") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<21 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x5b) PORT_NAME("Sensor L6") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<21 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x5c) PORT_NAME("Sensor M6") PORT_START("RANK.7") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<22 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x60) PORT_NAME("Sensor A7") @@ -728,6 +744,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<22 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x69) PORT_NAME("Sensor J7") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<22 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x6a) PORT_NAME("Sensor K7") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<22 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x6b) PORT_NAME("Sensor L7") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<22 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x6c) PORT_NAME("Sensor M7") PORT_START("RANK.8") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<23 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x70) PORT_NAME("Sensor A8") @@ -742,6 +759,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<23 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x79) PORT_NAME("Sensor J8") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<23 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x7a) PORT_NAME("Sensor K8") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<23 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x7b) PORT_NAME("Sensor L8") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<23 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x7c) PORT_NAME("Sensor M8") PORT_START("RANK.9") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<24 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x80) PORT_NAME("Sensor A9") @@ -756,6 +774,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<24 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x89) PORT_NAME("Sensor J9") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<24 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x8a) PORT_NAME("Sensor K9") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<24 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x8b) PORT_NAME("Sensor L9") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<24 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x8c) PORT_NAME("Sensor M9") PORT_START("RANK.10") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<25 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x90) PORT_NAME("Sensor A10") @@ -770,6 +789,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<25 | 1<<9, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x99) PORT_NAME("Sensor J10") PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<25 | 1<<10, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x9a) PORT_NAME("Sensor K10") PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<25 | 1<<11, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x9b) PORT_NAME("Sensor L10") + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<25 | 1<<12, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x9c) PORT_NAME("Sensor M10") PORT_START("SPAWN") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("SS_CHECK", 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, ui_spawn, 1) PORT_NAME("Spawn Piece 1") @@ -792,7 +812,7 @@ static INPUT_PORTS_START( sensorboard ) PORT_START("UI") PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("UI_CHECK", 1<<0, NOTEQUALS, 0) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Modifier 2 / Force Sensor") // hold while clicking to force sensor (ignore piece) PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("UI_CHECK", 1<<0, NOTEQUALS, 0) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("Modifier 1 / Force Piece") // hold while clicking to force piece (ignore sensor) - PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(sensorboard_device, check_sensor_busy) // check if any sensor is busy / pressed (read-only) + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(sensorboard_device, check_sensor_busy) // check if any sensor is busy / pressed (read-only) PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("UI_CHECK", 1<<1, NOTEQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, ui_hand, 0) PORT_NAME("Remove Piece") PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("UI_CHECK", 1<<1, NOTEQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, ui_undo, 0) PORT_NAME("Undo Buffer First") PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("UI_CHECK", 1<<1, NOTEQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, ui_undo, 1) PORT_NAME("Undo Buffer Previous") |