summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit857c00c28776188548356be5f7dab5758b0f08bd (patch)
tree52f2c9b80764994cc76b29554abbc9ec8db14841
parent9cd60e70537db80074cfd70434a812dc68c67f32 (diff)
smartboard: get rid of that "+1" correction for every piece id
-rw-r--r--src/mame/machine/smartboard.cpp154
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)