diff options
author | hap <happppp@users.noreply.github.com> | 2021-04-16 17:03:50 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2021-04-16 17:03:50 +0200 |
commit | 857c00c28776188548356be5f7dab5758b0f08bd (patch) | |
tree | 52f2c9b80764994cc76b29554abbc9ec8db14841 | |
parent | 9cd60e70537db80074cfd70434a812dc68c67f32 (diff) |
smartboard: get rid of that "+1" correction for every piece id
-rw-r--r-- | src/mame/machine/smartboard.cpp | 154 |
1 files changed, 81 insertions, 73 deletions
diff --git a/src/mame/machine/smartboard.cpp b/src/mame/machine/smartboard.cpp index 18e19087451..eff768d1003 100644 --- a/src/mame/machine/smartboard.cpp +++ b/src/mame/machine/smartboard.cpp @@ -16,40 +16,41 @@ #include "emu.h" #include "smartboard.h" +// SB30 chesspiece IDs: 0-31 (+1 for MAME sensorboard_device) enum { - SB30_WHITE_KNIGHT1 = 0, - SB30_WHITE_KNIGHT2 = 1, - SB30_BLACK_KING = 2, - SB30_WHITE_KING = 3, - SB30_BLACK_QUEEN = 4, - SB30_WHITE_QUEEN = 5, - SB30_BLACK_ROOK1 = 6, - SB30_BLACK_ROOK2 = 7, - SB30_WHITE_ROOK1 = 8, - SB30_WHITE_ROOK2 = 9, - SB30_BLACK_BISHOP1 = 10, - SB30_BLACK_BISHOP2 = 11, - SB30_WHITE_BISHOP1 = 12, - SB30_WHITE_BISHOP2 = 13, - SB30_BLACK_KNIGHT1 = 14, - SB30_BLACK_KNIGHT2 = 15, - SB30_WHITE_PAWN1 = 16, - SB30_WHITE_PAWN2 = 17, - SB30_WHITE_PAWN3 = 18, - SB30_WHITE_PAWN4 = 19, - SB30_WHITE_PAWN5 = 20, - SB30_WHITE_PAWN6 = 21, - SB30_WHITE_PAWN7 = 22, - SB30_WHITE_PAWN8 = 23, - SB30_BLACK_PAWN1 = 24, - SB30_BLACK_PAWN2 = 25, - SB30_BLACK_PAWN3 = 26, - SB30_BLACK_PAWN4 = 27, - SB30_BLACK_PAWN5 = 28, - SB30_BLACK_PAWN6 = 29, - SB30_BLACK_PAWN7 = 30, - SB30_BLACK_PAWN8 = 31, + SB30_WHITE_KNIGHT1 = 1, + SB30_WHITE_KNIGHT2, + SB30_BLACK_KING, + SB30_WHITE_KING, + SB30_BLACK_QUEEN, + SB30_WHITE_QUEEN, + SB30_BLACK_ROOK1, + SB30_BLACK_ROOK2, + SB30_WHITE_ROOK1, + SB30_WHITE_ROOK2, + SB30_BLACK_BISHOP1, + SB30_BLACK_BISHOP2, + SB30_WHITE_BISHOP1, + SB30_WHITE_BISHOP2, + SB30_BLACK_KNIGHT1, + SB30_BLACK_KNIGHT2, + SB30_WHITE_PAWN1, + SB30_WHITE_PAWN2, + SB30_WHITE_PAWN3, + SB30_WHITE_PAWN4, + SB30_WHITE_PAWN5, + SB30_WHITE_PAWN6, + SB30_WHITE_PAWN7, + SB30_WHITE_PAWN8, + SB30_BLACK_PAWN1, + SB30_BLACK_PAWN2, + SB30_BLACK_PAWN3, + SB30_BLACK_PAWN4, + SB30_BLACK_PAWN5, + SB30_BLACK_PAWN6, + SB30_BLACK_PAWN7, + SB30_BLACK_PAWN8 }; //************************************************************************** @@ -87,6 +88,7 @@ void tasc_sb30_device::device_start() save_item(NAME(m_shift)); } + //------------------------------------------------- // device_reset - device-specific reset //------------------------------------------------- @@ -114,30 +116,34 @@ void tasc_sb30_device::device_add_mconfig(machine_config &config) } +//------------------------------------------------- +// sensorboard_device interface +//------------------------------------------------- + void tasc_sb30_device::init_cb(int state) { m_board->clear_board(); - m_board->write_piece(0, 0, 1 + SB30_WHITE_ROOK1); - m_board->write_piece(7, 0, 1 + SB30_WHITE_ROOK2); - m_board->write_piece(1, 0, 1 + SB30_WHITE_KNIGHT1); - m_board->write_piece(6, 0, 1 + SB30_WHITE_KNIGHT2); - m_board->write_piece(2, 0, 1 + SB30_WHITE_BISHOP1); - m_board->write_piece(5, 0, 1 + SB30_WHITE_BISHOP2); - m_board->write_piece(3, 0, 1 + SB30_WHITE_QUEEN); - m_board->write_piece(4, 0, 1 + SB30_WHITE_KING); - m_board->write_piece(0, 7, 1 + SB30_BLACK_ROOK1); - m_board->write_piece(7, 7, 1 + SB30_BLACK_ROOK2); - m_board->write_piece(1, 7, 1 + SB30_BLACK_KNIGHT1); - m_board->write_piece(6, 7, 1 + SB30_BLACK_KNIGHT2); - m_board->write_piece(2, 7, 1 + SB30_BLACK_BISHOP1); - m_board->write_piece(5, 7, 1 + SB30_BLACK_BISHOP2); - m_board->write_piece(3, 7, 1 + SB30_BLACK_QUEEN); - m_board->write_piece(4, 7, 1 + SB30_BLACK_KING); + m_board->write_piece(0, 0, SB30_WHITE_ROOK1); + m_board->write_piece(7, 0, SB30_WHITE_ROOK2); + m_board->write_piece(1, 0, SB30_WHITE_KNIGHT1); + m_board->write_piece(6, 0, SB30_WHITE_KNIGHT2); + m_board->write_piece(2, 0, SB30_WHITE_BISHOP1); + m_board->write_piece(5, 0, SB30_WHITE_BISHOP2); + m_board->write_piece(3, 0, SB30_WHITE_QUEEN); + m_board->write_piece(4, 0, SB30_WHITE_KING); + m_board->write_piece(0, 7, SB30_BLACK_ROOK1); + m_board->write_piece(7, 7, SB30_BLACK_ROOK2); + m_board->write_piece(1, 7, SB30_BLACK_KNIGHT1); + m_board->write_piece(6, 7, SB30_BLACK_KNIGHT2); + m_board->write_piece(2, 7, SB30_BLACK_BISHOP1); + m_board->write_piece(5, 7, SB30_BLACK_BISHOP2); + m_board->write_piece(3, 7, SB30_BLACK_QUEEN); + m_board->write_piece(4, 7, SB30_BLACK_KING); for (int x = 0; x < 8; x++) { - m_board->write_piece(x, 1, 1 + SB30_WHITE_PAWN1 + x); - m_board->write_piece(x, 6, 1 + SB30_BLACK_PAWN1 + x); + m_board->write_piece(x, 1, SB30_WHITE_PAWN1 + x); + m_board->write_piece(x, 6, SB30_BLACK_PAWN1 + x); } } @@ -155,13 +161,13 @@ bool tasc_sb30_device::piece_available(u8 id) u8 tasc_sb30_device::spawn_cb(offs_t offset) { - int piece_id = -1; + int piece_id = 0; switch (offset) { case 1+0: for (int p = 0; p < 8; p++) - if (piece_available(1 + SB30_WHITE_PAWN1 + p)) + if (piece_available(SB30_WHITE_PAWN1 + p)) { piece_id = SB30_WHITE_PAWN1 + p; break; @@ -170,7 +176,7 @@ u8 tasc_sb30_device::spawn_cb(offs_t offset) case 1+6: for (int p = 0; p < 8; p++) - if (piece_available(1 + SB30_BLACK_PAWN1 + p)) + if (piece_available(SB30_BLACK_PAWN1 + p)) { piece_id = SB30_BLACK_PAWN1 + p; break; @@ -178,64 +184,64 @@ u8 tasc_sb30_device::spawn_cb(offs_t offset) break; case 2+0: - if (piece_available(1 + SB30_WHITE_KNIGHT1)) + if (piece_available(SB30_WHITE_KNIGHT1)) piece_id = SB30_WHITE_KNIGHT1; - else if (piece_available(1 + SB30_WHITE_KNIGHT2)) + else if (piece_available(SB30_WHITE_KNIGHT2)) piece_id = SB30_WHITE_KNIGHT2; break; case 2+6: - if (piece_available(1 + SB30_BLACK_KNIGHT1)) + if (piece_available(SB30_BLACK_KNIGHT1)) piece_id = SB30_BLACK_KNIGHT1; - else if (piece_available(1 + SB30_BLACK_KNIGHT2)) + else if (piece_available(SB30_BLACK_KNIGHT2)) piece_id = SB30_BLACK_KNIGHT2; break; case 3+0: - if (piece_available(1 + SB30_WHITE_BISHOP1)) + if (piece_available(SB30_WHITE_BISHOP1)) piece_id = SB30_WHITE_BISHOP1; - else if (piece_available(1 + SB30_WHITE_BISHOP2)) + else if (piece_available(SB30_WHITE_BISHOP2)) piece_id = SB30_WHITE_BISHOP2; break; case 3+6: - if (piece_available(1 + SB30_BLACK_BISHOP1)) + if (piece_available(SB30_BLACK_BISHOP1)) piece_id = SB30_BLACK_BISHOP1; - else if (piece_available(1 + SB30_BLACK_BISHOP2)) + else if (piece_available(SB30_BLACK_BISHOP2)) piece_id = SB30_BLACK_BISHOP2; break; case 4+0: - if (piece_available(1 + SB30_WHITE_ROOK1)) + if (piece_available(SB30_WHITE_ROOK1)) piece_id = SB30_WHITE_ROOK1; - else if (piece_available(1 + SB30_WHITE_ROOK2)) + else if (piece_available(SB30_WHITE_ROOK2)) piece_id = SB30_WHITE_ROOK2; break; case 4+6: - if (piece_available(1 + SB30_BLACK_ROOK1)) + if (piece_available(SB30_BLACK_ROOK1)) piece_id = SB30_BLACK_ROOK1; - else if (piece_available(1 + SB30_BLACK_ROOK2)) + else if (piece_available(SB30_BLACK_ROOK2)) piece_id = SB30_BLACK_ROOK2; break; case 5+0: - if (piece_available(1 + SB30_WHITE_QUEEN)) + if (piece_available(SB30_WHITE_QUEEN)) piece_id = SB30_WHITE_QUEEN; break; case 5+6: - if (piece_available(1 + SB30_BLACK_QUEEN)) + if (piece_available(SB30_BLACK_QUEEN)) piece_id = SB30_BLACK_QUEEN; break; case 6+0: - if (piece_available(1 + SB30_WHITE_KING)) + if (piece_available(SB30_WHITE_KING)) piece_id = SB30_WHITE_KING; break; case 6+6: - if (piece_available(1 + SB30_BLACK_KING)) + if (piece_available(SB30_BLACK_KING)) piece_id = SB30_BLACK_KING; break; @@ -243,12 +249,14 @@ u8 tasc_sb30_device::spawn_cb(offs_t offset) break; } - if (piece_id >= 0) - return piece_id + 1; - else - return 0; // not available + return piece_id; } + +//------------------------------------------------- +// I/O handlers +//------------------------------------------------- + u8 tasc_sb30_device::read() { if (m_position < 0x40) |