summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-02-25 03:38:11 +0100
committer hap <happppp@users.noreply.github.com>2019-02-25 03:38:22 +0100
commitc24799514395edc7ccf9f4c16f4dd99ca7a4d61d (patch)
treeb4d4c707d11faff79e47332924bb237bc2fa2ebe
parente6333186167975f60ac38167b4bcad8070ece51d (diff)
sc1/sc2: small cleanup (nw)
-rw-r--r--src/mame/drivers/chessmst.cpp86
-rw-r--r--src/mame/drivers/fidel_cc10.cpp6
-rw-r--r--src/mame/drivers/fidel_cc7.cpp12
-rw-r--r--src/mame/drivers/fidel_vcc.cpp6
-rw-r--r--src/mame/drivers/intellect02.cpp8
-rw-r--r--src/mame/drivers/sc1.cpp120
-rw-r--r--src/mame/drivers/sc2.cpp248
-rw-r--r--src/mame/layout/sc1.lay4
-rw-r--r--src/mame/layout/sc2.lay4
9 files changed, 244 insertions, 250 deletions
diff --git a/src/mame/drivers/chessmst.cpp b/src/mame/drivers/chessmst.cpp
index 817435988af..0e29d45d49f 100644
--- a/src/mame/drivers/chessmst.cpp
+++ b/src/mame/drivers/chessmst.cpp
@@ -30,16 +30,16 @@
class chessmst_state : public driver_device
{
public:
- chessmst_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_pia2(*this, "z80pio2")
- , m_speaker(*this, "speaker")
- , m_beeper(*this, "beeper")
- , m_extra(*this, "EXTRA")
- , m_buttons(*this, "BUTTONS")
- , m_digits(*this, "digit%u", 0U)
- , m_leds(*this, "led_%c%u", unsigned('a'), 1U)
+ chessmst_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_pio(*this, "z80pio%u", 0),
+ m_speaker(*this, "speaker"),
+ m_beeper(*this, "beeper"),
+ m_extra(*this, "EXTRA"),
+ m_buttons(*this, "BUTTONS"),
+ m_digits(*this, "digit%u", 0U),
+ m_leds(*this, "led_%c%u", unsigned('a'), 1U)
{ }
DECLARE_INPUT_CHANGED_MEMBER(chessmst_sensor);
@@ -71,7 +71,7 @@ private:
void update_display();
required_device<z80_device> m_maincpu;
- required_device<z80pio_device> m_pia2;
+ required_device_array<z80pio_device, 2> m_pio;
optional_device<speaker_sound_device> m_speaker;
optional_device<beep_device> m_beeper;
required_ioport m_extra;
@@ -109,8 +109,8 @@ void chessmst_state::chessmst_io(address_map &map)
map.unmap_value_high();
map.global_mask(0xff);
//AM_RANGE(0x00, 0x03) AM_MIRROR(0xf0) read/write in both, not used by the software
- map(0x04, 0x07).mirror(0xf0).rw("z80pio1", FUNC(z80pio_device::read), FUNC(z80pio_device::write));
- map(0x08, 0x0b).mirror(0xf0).rw(m_pia2, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
+ map(0x04, 0x07).mirror(0xf0).rw(m_pio[0], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
+ map(0x08, 0x0b).mirror(0xf0).rw(m_pio[1], FUNC(z80pio_device::read), FUNC(z80pio_device::write));
}
void chessmst_state::chessmstdm_io(address_map &map)
@@ -121,8 +121,8 @@ void chessmst_state::chessmstdm_io(address_map &map)
WRITE_LINE_MEMBER( chessmst_state::timer_555_w )
{
- m_pia2->strobe_b(state);
- m_pia2->data_b_write(m_matrix);
+ m_pio[1]->strobe_b(state);
+ m_pio[1]->data_b_write(m_matrix);
}
INPUT_CHANGED_MEMBER(chessmst_state::reset_button)
@@ -237,7 +237,7 @@ static INPUT_PORTS_START( chessmst )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game [0]") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_ENTER)
PORT_START("EXTRA")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Halt") PORT_CODE(KEYCODE_F2) PORT_WRITE_LINE_DEVICE_MEMBER("z80pio1", z80pio_device, strobe_a) // -> PIO(1) ASTB pin
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Halt") PORT_CODE(KEYCODE_F2) PORT_WRITE_LINE_DEVICE_MEMBER("z80pio0", z80pio_device, strobe_a) // -> PIO(0) ASTB pin
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, reset_button, 0) // -> Z80 RESET pin
INPUT_PORTS_END
@@ -368,32 +368,32 @@ WRITE8_MEMBER( chessmst_state::pio2_port_b_w )
static const z80_daisy_config chessmst_daisy_chain[] =
{
- { "z80pio1" },
+ { "z80pio0" },
{ nullptr }
};
static const z80_daisy_config chessmstdm_daisy_chain[] =
{
- { "z80pio2" },
+ { "z80pio1" },
{ nullptr }
};
void chessmst_state::chessmst(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 9.8304_MHz_XTAL/4); // U880 Z80 clone
+ Z80(config, m_maincpu, 9.8304_MHz_XTAL/4); // UB880 Z80 clone
m_maincpu->set_addrmap(AS_PROGRAM, &chessmst_state::chessmst_mem);
m_maincpu->set_addrmap(AS_IO, &chessmst_state::chessmst_io);
m_maincpu->set_daisy_config(chessmst_daisy_chain);
- z80pio_device& pio1(Z80PIO(config, "z80pio1", 9.8304_MHz_XTAL/4));
- pio1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- pio1.out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
- pio1.out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_w));
+ Z80PIO(config, m_pio[0], 9.8304_MHz_XTAL/4);
+ m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_pio[0]->out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
+ m_pio[0]->out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_w));
- Z80PIO(config, m_pia2, 9.8304_MHz_XTAL/4);
- m_pia2->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
- m_pia2->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
+ Z80PIO(config, m_pio[1], 9.8304_MHz_XTAL/4);
+ m_pio[1]->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
+ m_pio[1]->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
config.set_default_layout(layout_chessmst);
@@ -405,19 +405,19 @@ void chessmst_state::chessmst(machine_config &config)
void chessmst_state::chessmsta(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 8_MHz_XTAL/4); // U880 Z80 clone
+ Z80(config, m_maincpu, 8_MHz_XTAL/2); // UA880 Z80 clone
m_maincpu->set_addrmap(AS_PROGRAM, &chessmst_state::chessmst_mem);
m_maincpu->set_addrmap(AS_IO, &chessmst_state::chessmst_io);
m_maincpu->set_daisy_config(chessmst_daisy_chain);
- z80pio_device& pio1(Z80PIO(config, "z80pio1", 8_MHz_XTAL/4));
- pio1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- pio1.out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
- pio1.out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_w));
+ Z80PIO(config, m_pio[0], 8_MHz_XTAL/2);
+ m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_pio[0]->out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
+ m_pio[0]->out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_w));
- Z80PIO(config, m_pia2, 8_MHz_XTAL/4);
- m_pia2->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
- m_pia2->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
+ Z80PIO(config, m_pio[1], 8_MHz_XTAL/2);
+ m_pio[1]->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
+ m_pio[1]->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
config.set_default_layout(layout_chessmst);
@@ -429,20 +429,20 @@ void chessmst_state::chessmsta(machine_config &config)
void chessmst_state::chessmstdm(machine_config &config)
{
/* basic machine hardware */
- Z80(config, m_maincpu, 8_MHz_XTAL/2); // U880 Z80 clone
+ Z80(config, m_maincpu, 8_MHz_XTAL/2); // UA880 Z80 clone
m_maincpu->set_addrmap(AS_PROGRAM, &chessmst_state::chessmstdm_mem);
m_maincpu->set_addrmap(AS_IO, &chessmst_state::chessmstdm_io);
m_maincpu->set_daisy_config(chessmstdm_daisy_chain);
- z80pio_device& pio1(Z80PIO(config, "z80pio1", 8_MHz_XTAL/4));
- pio1.out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
- pio1.out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_dm_w));
- pio1.in_pb_callback().set_ioport("EXTRA");
+ Z80PIO(config, m_pio[0], 8_MHz_XTAL/2);
+ m_pio[0]->out_pa_callback().set(FUNC(chessmst_state::pio1_port_a_w));
+ m_pio[0]->out_pb_callback().set(FUNC(chessmst_state::pio1_port_b_dm_w));
+ m_pio[0]->in_pb_callback().set_ioport("EXTRA");
- Z80PIO(config, m_pia2, 8_MHz_XTAL/4);
- m_pia2->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_pia2->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
- m_pia2->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
+ Z80PIO(config, m_pio[1], 8_MHz_XTAL/2);
+ m_pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_pio[1]->in_pa_callback().set(FUNC(chessmst_state::pio2_port_a_r));
+ m_pio[1]->out_pb_callback().set(FUNC(chessmst_state::pio2_port_b_w));
config.set_default_layout(layout_chessmstdm);
diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp
index 2438b145029..850d8f9a29d 100644
--- a/src/mame/drivers/fidel_cc10.cpp
+++ b/src/mame/drivers/fidel_cc10.cpp
@@ -195,13 +195,13 @@ static INPUT_PORTS_START( ccx )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
diff --git a/src/mame/drivers/fidel_cc7.cpp b/src/mame/drivers/fidel_cc7.cpp
index 6eb5bf10c15..b99642da9cc 100644
--- a/src/mame/drivers/fidel_cc7.cpp
+++ b/src/mame/drivers/fidel_cc7.cpp
@@ -136,14 +136,14 @@ void bcc_state::main_io(address_map &map)
static INPUT_PORTS_START( bcc )
PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
@@ -162,13 +162,13 @@ INPUT_PORTS_END
static INPUT_PORTS_START( bkc )
PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD)
PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD)
@@ -181,7 +181,7 @@ static INPUT_PORTS_START( bkc )
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
INPUT_PORTS_END
diff --git a/src/mame/drivers/fidel_vcc.cpp b/src/mame/drivers/fidel_vcc.cpp
index d3370d5cb4a..c7f43621a9e 100644
--- a/src/mame/drivers/fidel_vcc.cpp
+++ b/src/mame/drivers/fidel_vcc.cpp
@@ -267,13 +267,13 @@ static INPUT_PORTS_START( vcc )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_O)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
diff --git a/src/mame/drivers/intellect02.cpp b/src/mame/drivers/intellect02.cpp
index 6fc4699c6dd..e76770b5ced 100644
--- a/src/mame/drivers/intellect02.cpp
+++ b/src/mame/drivers/intellect02.cpp
@@ -65,7 +65,7 @@ public:
m_maincpu(*this, "maincpu"),
m_ppi8255(*this, "ppi8255"),
m_led_delay(*this, "led_delay_%u", 0),
- m_buttons(*this, "IN.%u", 0),
+ m_keypad(*this, "IN.%u", 0),
m_dac(*this, "dac"),
m_cart(*this, "cartslot"),
m_digit(*this, "digit%u", 0U),
@@ -86,7 +86,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<i8255_device> m_ppi8255;
required_device_array<timer_device, 6> m_led_delay;
- required_ioport_array<2> m_buttons;
+ required_ioport_array<2> m_keypad;
required_device<dac_bit_interface> m_dac;
required_device<generic_slot_device> m_cart;
output_finder<4> m_digit;
@@ -178,7 +178,7 @@ READ8_MEMBER(intel02_state::input_r)
{
// d0-d3: buttons through a priority encoder
// d4-d7: buttons (direct)
- return (count_leading_zeros(m_buttons[0]->read()) - 17) | (~m_buttons[1]->read() << 4 & 0xf0);
+ return (count_leading_zeros(m_keypad[0]->read()) - 17) | (~m_keypad[1]->read() << 4 & 0xf0);
}
WRITE8_MEMBER(intel02_state::_7seg_w)
@@ -252,7 +252,7 @@ static INPUT_PORTS_START( intel02 )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Input") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Game Select") PORT_CODE(KEYCODE_S)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Erase") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Erase") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, intel02_state, reset_button, nullptr)
diff --git a/src/mame/drivers/sc1.cpp b/src/mame/drivers/sc1.cpp
index d6da7214f88..68579ca10c1 100644
--- a/src/mame/drivers/sc1.cpp
+++ b/src/mame/drivers/sc1.cpp
@@ -2,16 +2,13 @@
// copyright-holders:Sandro Ronco
/***************************************************************************
-Schachcomputer SC1
-
-2009-05-12 Skeleton driver.
+Schachcomputer SC 1
ToDo:
- speaker
- LEDs
- 7seg sometimes flashes
-
****************************************************************************/
#include "emu.h"
@@ -23,33 +20,49 @@ ToDo:
#include "sc1.lh"
+namespace {
+
class sc1_state : public driver_device
{
public:
- sc1_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_speaker(*this, "speaker")
- , m_digits(*this, "digit%u", 0U)
+ sc1_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_pio(*this, "z80pio"),
+ m_speaker(*this, "speaker"),
+ m_keypad(*this, "LINE%u", 1),
+ m_digits(*this, "digit%u", 0U)
{ }
void sc1(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
- DECLARE_WRITE8_MEMBER( matrix_w );
- DECLARE_WRITE8_MEMBER( pio_port_a_w );
- DECLARE_READ8_MEMBER( pio_port_b_r );
+ required_device<cpu_device> m_maincpu;
+ required_device<z80pio_device> m_pio;
+ required_device<speaker_sound_device> m_speaker;
+ required_ioport_array<8> m_keypad;
+ output_finder<4> m_digits;
void sc1_io(address_map &map);
void sc1_mem(address_map &map);
uint8_t m_matrix;
- virtual void machine_start() override { m_digits.resolve(); }
- required_device<cpu_device> m_maincpu;
- required_device<speaker_sound_device> m_speaker;
- output_finder<4> m_digits;
+
+ DECLARE_WRITE8_MEMBER( matrix_w );
+ DECLARE_WRITE8_MEMBER( pio_port_a_w );
+ DECLARE_READ8_MEMBER( pio_port_b_r );
};
+void sc1_state::machine_start()
+{
+ m_digits.resolve();
+
+ save_item(NAME(m_matrix));
+}
+
/***************************************************************************
Display
@@ -58,7 +71,7 @@ private:
WRITE8_MEMBER( sc1_state::pio_port_a_w )
{
- uint8_t digit = bitswap<8>( data,3,4,6,0,1,2,7,5 ) & 0x7f;
+ uint8_t digit = bitswap<8>(data,3,4,6,0,1,2,7,5) & 0x7f;
if (m_matrix & 0x04)
m_digits[3] = digit;
@@ -86,22 +99,10 @@ READ8_MEMBER( sc1_state::pio_port_b_r )
{
uint8_t data = 0;
- if (m_matrix & 0x01)
- data |= ioport("LINE1")->read();
- if (m_matrix & 0x02)
- data |= ioport("LINE2")->read();
- if (m_matrix & 0x04)
- data |= ioport("LINE3")->read();
- if (m_matrix & 0x08)
- data |= ioport("LINE4")->read();
- if (m_matrix & 0x10)
- data |= ioport("LINE5")->read();
- if (m_matrix & 0x20)
- data |= ioport("LINE6")->read();
- if (m_matrix & 0x40)
- data |= ioport("LINE7")->read();
- if (m_matrix & 0x80)
- data |= ioport("LINE8")->read();
+ // read keypad matrix
+ for (int i = 0; i < 8; i++)
+ if (BIT(m_matrix, i))
+ data |= m_keypad[i]->read();
return data;
}
@@ -118,46 +119,50 @@ void sc1_state::sc1_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- map(0x80, 0x83).rw("z80pio", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
+ map(0x80, 0x83).rw(m_pio, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0xfc, 0xfc).w(FUNC(sc1_state::matrix_w));
}
+
/* Input ports */
+
static INPUT_PORTS_START( sc1 )
PORT_START("LINE1")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_START("LINE2")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_B)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
PORT_START("LINE3")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_C)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
PORT_START("LINE4")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_A)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
PORT_START("LINE5")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_H)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CE") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CE") PORT_CODE(KEYCODE_R)
PORT_START("LINE6")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
PORT_START("LINE7")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("P") PORT_CODE(KEYCODE_O)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("W/S") PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("P") PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("W/S") PORT_CODE(KEYCODE_W)
PORT_START("LINE8")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C") PORT_CODE(KEYCODE_M)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
INPUT_PORTS_END
+/* Machine config */
+
void sc1_state::sc1(machine_config &config)
{
/* basic machine hardware */
@@ -169,22 +174,27 @@ void sc1_state::sc1(machine_config &config)
config.set_default_layout(layout_sc1);
/* devices */
- z80pio_device& pio(Z80PIO(config, "z80pio", XTAL(4'000'000)));
- pio.out_pa_callback().set(FUNC(sc1_state::pio_port_a_w));
- pio.in_pb_callback().set(FUNC(sc1_state::pio_port_b_r));
+ Z80PIO(config, m_pio, 9.8304_MHz_XTAL/4);
+ m_pio->out_pa_callback().set(FUNC(sc1_state::pio_port_a_w));
+ m_pio->in_pb_callback().set(FUNC(sc1_state::pio_port_b_r));
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
}
+
/* ROM definition */
+
ROM_START( sc1 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "sc1.rom", 0x0000, 0x1000, CRC(26965b23) SHA1(01568911446eda9f05ec136df53da147b7c6f2bf))
ROM_END
+} // anonymous namespace
+
+
/* Driver */
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1989, sc1, 0, 0, sc1, sc1, sc1_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1981, sc1, 0, 0, sc1, sc1, sc1_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/sc2.cpp b/src/mame/drivers/sc2.cpp
index 32c1131b695..4d265c0a336 100644
--- a/src/mame/drivers/sc2.cpp
+++ b/src/mame/drivers/sc2.cpp
@@ -2,124 +2,74 @@
// copyright-holders:Sandro Ronco
/***************************************************************************
- Schachcomputer SC2
-
- Note:
- The HW is very similar to Fidelity Chess Challenger series
-
- 12/05/2009 Skeleton driver.
+ Schachcomputer SC 2
****************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "sound/beep.h"
#include "machine/z80pio.h"
+#include "sound/dac.h"
+#include "sound/volt_reg.h"
#include "speaker.h"
#include "sc2.lh"
+
+namespace {
+
class sc2_state : public driver_device
{
public:
- sc2_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_beep(*this, "beeper"),
+ sc2_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_pio(*this, "z80pio"),
+ m_dac(*this, "dac"),
+ m_keypad(*this, "LINE%u", 1),
m_digits(*this, "digit%u", 0U),
m_leds(*this, "led%u", 0U)
{ }
void sc2(machine_config &config);
-private:
- DECLARE_READ8_MEMBER(pio_port_a_r);
- DECLARE_READ8_MEMBER(pio_port_b_r);
- DECLARE_WRITE8_MEMBER(pio_port_a_w);
- DECLARE_WRITE8_MEMBER(pio_port_b_w);
- DECLARE_READ8_MEMBER(sc2_beep);
- uint8_t m_kp_matrix;
- uint8_t m_led_7seg_data[4];
- uint8_t m_led_selected;
- uint8_t m_digit_data;
- uint8_t m_beep_state;
- void sc2_update_display();
+protected:
virtual void machine_start() override;
virtual void machine_reset() override;
- void sc2_io(address_map &map);
- void sc2_mem(address_map &map);
- required_device<beep_device> m_beep;
+private:
required_device<cpu_device> m_maincpu;
+ required_device<z80pio_device> m_pio;
+ required_device<dac_bit_interface> m_dac;
+ required_ioport_array<4> m_keypad;
+
output_finder<4> m_digits;
output_finder<2> m_leds;
-};
-
-READ8_MEMBER( sc2_state::sc2_beep )
-{
- //if (!machine().side_effects_disabled())
- {
- m_beep_state = ~m_beep_state;
-
- m_beep->set_state(m_beep_state);
- }
-
- return 0xff;
-}
-void sc2_state::sc2_mem(address_map &map)
-{
- map.unmap_value_high();
- map(0x0000, 0x0fff).rom();
- map(0x1000, 0x13ff).ram();
- map(0x2000, 0x33ff).rom();
- map(0x3c00, 0x3c00).r(FUNC(sc2_state::sc2_beep));
-}
-
-void sc2_state::sc2_io(address_map &map)
-{
- map.unmap_value_high();
- map.global_mask(0xff);
- map(0x00, 0x03).mirror(0xfc).rw("z80pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write));
-}
-
-/* Input ports */
-static INPUT_PORTS_START( sc2 )
- PORT_START("LINE1")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("L") PORT_CODE(KEYCODE_L)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
-
- PORT_START("LINE2")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2)
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4)
+ void sc2_io(address_map &map);
+ void sc2_mem(address_map &map);
- PORT_START("LINE3")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6)
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8)
+ uint8_t m_kp_matrix;
+ uint8_t m_led_selected;
+ uint8_t m_digit_data;
- PORT_START("LINE4")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("W") PORT_CODE(KEYCODE_W)
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("R") PORT_CODE(KEYCODE_R)
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("P") PORT_CODE(KEYCODE_O)
-INPUT_PORTS_END
+ void sc2_update_display();
+ DECLARE_READ8_MEMBER(pio_port_a_r);
+ DECLARE_READ8_MEMBER(pio_port_b_r);
+ DECLARE_WRITE8_MEMBER(pio_port_a_w);
+ DECLARE_WRITE8_MEMBER(pio_port_b_w);
+ DECLARE_READ8_MEMBER(speaker_w);
+ template<int State> DECLARE_READ8_MEMBER(speaker_w);
+};
void sc2_state::machine_start()
{
m_digits.resolve();
m_leds.resolve();
- save_item(NAME(m_led_7seg_data));
save_item(NAME(m_kp_matrix));
save_item(NAME(m_led_selected));
save_item(NAME(m_digit_data));
- save_item(NAME(m_beep_state));
}
void sc2_state::machine_reset()
@@ -127,40 +77,51 @@ void sc2_state::machine_reset()
m_kp_matrix = 0;
m_led_selected = 0;
m_digit_data = 0;
- m_beep_state = 0;
- memset(m_led_7seg_data, 0, ARRAY_LENGTH(m_led_7seg_data));
}
-void sc2_state::sc2_update_display()
+
+template<int State>
+READ8_MEMBER( sc2_state::speaker_w )
{
- uint8_t digit_data = bitswap<8>( m_digit_data,7,0,1,2,3,4,5,6 ) & 0x7f;
+ if (!machine().side_effects_disabled())
+ m_dac->write(State);
- if (!BIT(m_led_selected, 0))
- {
- m_digits[0] = digit_data;
- m_led_7seg_data[0] = digit_data;
+ return 0xff;
+}
- m_leds[0] = BIT(m_digit_data, 7);
- }
+void sc2_state::sc2_mem(address_map &map)
+{
+ map.unmap_value_high();
+ map(0x0000, 0x0fff).rom();
+ map(0x1000, 0x13ff).ram();
+ map(0x2000, 0x33ff).rom();
+ map(0x3400, 0x3400).r(FUNC(sc2_state::speaker_w<1>));
+ map(0x3c00, 0x3c00).r(FUNC(sc2_state::speaker_w<0>));
+}
- if (!BIT(m_led_selected, 1))
- {
- m_digits[1] = digit_data;
- m_led_7seg_data[1] = digit_data;
+void sc2_state::sc2_io(address_map &map)
+{
+ map.unmap_value_high();
+ map.global_mask(0xff);
+ map(0x00, 0x03).mirror(0xfc).rw(m_pio, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
+}
- m_leds[1] = BIT(m_digit_data, 7);
- }
- if (!BIT(m_led_selected, 2))
- {
- m_digits[2] = digit_data;
- m_led_7seg_data[2] = digit_data;
- }
+void sc2_state::sc2_update_display()
+{
+ uint8_t digit_data = bitswap<8>(m_digit_data,7,0,1,2,3,4,5,6) & 0x7f;
- if (!BIT(m_led_selected, 3))
+ // latch display data
+ for (int i = 0; i < 4; i++)
{
- m_digits[3] = digit_data;
- m_led_7seg_data[3] = digit_data;
+ if (!BIT(m_led_selected, i))
+ {
+ m_digits[i] = digit_data;
+
+ // schach/matt leds
+ if (i < 2)
+ m_leds[i] = BIT(m_digit_data, 7);
+ }
}
}
@@ -173,25 +134,10 @@ READ8_MEMBER( sc2_state::pio_port_b_r )
{
uint8_t data = m_led_selected & 0x0f;
- if (BIT(m_kp_matrix, 0))
- {
- data |= ioport("LINE1")->read();
- }
-
- if (BIT(m_kp_matrix, 1))
- {
- data |= ioport("LINE2")->read();
- }
-
- if (BIT(m_kp_matrix, 2))
- {
- data |= ioport("LINE3")->read();
- }
-
- if (BIT(m_kp_matrix, 3))
- {
- data |= ioport("LINE4")->read();
- }
+ // read keypad matrix
+ for (int i = 0; i < 4; i++)
+ if (BIT(m_kp_matrix, i))
+ data |= m_keypad[i]->read();
return data;
}
@@ -212,6 +158,38 @@ WRITE8_MEMBER( sc2_state::pio_port_b_w )
m_kp_matrix = data;
}
+
+/* Input ports */
+
+static INPUT_PORTS_START( sc2 )
+ PORT_START("LINE1")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD)
+
+ PORT_START("LINE2")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
+
+ PORT_START("LINE3")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
+
+ PORT_START("LINE4")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("W") PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("R") PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("P") PORT_CODE(KEYCODE_O)
+INPUT_PORTS_END
+
+
+/* Machine config */
+
void sc2_state::sc2(machine_config &config)
{
/* basic machine hardware */
@@ -223,18 +201,21 @@ void sc2_state::sc2(machine_config &config)
config.set_default_layout(layout_sc2);
/* devices */
- z80pio_device& pio(Z80PIO(config, "z80pio", 9.8304_MHz_XTAL/4));
- pio.in_pa_callback().set(FUNC(sc2_state::pio_port_a_r));
- pio.out_pa_callback().set(FUNC(sc2_state::pio_port_a_w));
- pio.in_pb_callback().set(FUNC(sc2_state::pio_port_b_r));
- pio.out_pb_callback().set(FUNC(sc2_state::pio_port_b_w));
+ Z80PIO(config, m_pio, 9.8304_MHz_XTAL/4);
+ m_pio->in_pa_callback().set(FUNC(sc2_state::pio_port_a_r));
+ m_pio->out_pa_callback().set(FUNC(sc2_state::pio_port_a_w));
+ m_pio->in_pb_callback().set(FUNC(sc2_state::pio_port_b_r));
+ m_pio->out_pb_callback().set(FUNC(sc2_state::pio_port_b_w));
/* sound hardware */
- SPEAKER(config, "mono").front_center();
- BEEP(config, m_beep, 3250).add_route(ALL_OUTPUTS, "mono", 0.50);
+ SPEAKER(config, "speaker").front_center();
+ DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
+ VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
+
/* ROM definition */
+
ROM_START( sc2 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "bm008.bin", 0x0000, 0x0400, CRC(3023ea82) SHA1(07020d153d802c672c39e1af3c716dbe35e23f08))
@@ -248,7 +229,10 @@ ROM_START( sc2 )
ROM_LOAD( "bm016.bin", 0x3000, 0x0400, CRC(4fe0853a) SHA1(c2253e320778b0ea468fb54f26ae83d07f9700e6))
ROM_END
+} // anonymous namespace
+
+
/* Driver */
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC2", MACHINE_SUPPORTS_SAVE )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1981, sc2, 0, 0, sc2, sc2, sc2_state, empty_init, "VEB Mikroelektronik Erfurt", "Schachcomputer SC 2", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/layout/sc1.lay b/src/mame/layout/sc1.lay
index c6ed82b9123..e7878d89293 100644
--- a/src/mame/layout/sc1.lay
+++ b/src/mame/layout/sc1.lay
@@ -7,10 +7,10 @@
</element>
<element name="led" defstate="0">
<disk state="1">
- <color red="0.8" green="0.8" blue="0.0" />
+ <color red="1.0" green="0.0" blue="0.0" />
</disk>
<disk state="0">
- <color red="0.2" green="0.2" blue="0.0" />
+ <color red="0.15" green="0.0" blue="0.0" />
</disk>
</element>
<element name="schach">
diff --git a/src/mame/layout/sc2.lay b/src/mame/layout/sc2.lay
index c68cee7e136..ffb27d79e96 100644
--- a/src/mame/layout/sc2.lay
+++ b/src/mame/layout/sc2.lay
@@ -7,10 +7,10 @@
</element>
<element name="led" defstate="0">
<disk state="1">
- <color red="0.0" green="0.8" blue="0.0" />
+ <color red="1.0" green="0.0" blue="0.0" />
</disk>
<disk state="0">
- <color red="0.0" green="0.2" blue="0.0" />
+ <color red="0.15" green="0.0" blue="0.0" />
</disk>
</element>
<element name="schach">