sc1/sc2: small cleanup (nw)

This commit is contained in:
hap 2019-02-25 03:38:11 +01:00
parent e633318616
commit c247995143
9 changed files with 246 additions and 252 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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 )

View File

@ -2,67 +2,89 @@
// 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);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
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;
void sc2_io(address_map &map);
void sc2_mem(address_map &map);
uint8_t m_kp_matrix;
uint8_t m_led_selected;
uint8_t m_digit_data;
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(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();
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;
required_device<cpu_device> m_maincpu;
output_finder<4> m_digits;
output_finder<2> m_leds;
DECLARE_READ8_MEMBER(speaker_w);
template<int State> DECLARE_READ8_MEMBER(speaker_w);
};
READ8_MEMBER( sc2_state::sc2_beep )
void sc2_state::machine_start()
{
//if (!machine().side_effects_disabled())
{
m_beep_state = ~m_beep_state;
m_digits.resolve();
m_leds.resolve();
m_beep->set_state(m_beep_state);
}
save_item(NAME(m_kp_matrix));
save_item(NAME(m_led_selected));
save_item(NAME(m_digit_data));
}
void sc2_state::machine_reset()
{
m_kp_matrix = 0;
m_led_selected = 0;
m_digit_data = 0;
}
template<int State>
READ8_MEMBER( sc2_state::speaker_w )
{
if (!machine().side_effects_disabled())
m_dac->write(State);
return 0xff;
}
@ -73,94 +95,33 @@ void sc2_state::sc2_mem(address_map &map)
map(0x0000, 0x0fff).rom();
map(0x1000, 0x13ff).ram();
map(0x2000, 0x33ff).rom();
map(0x3c00, 0x3c00).r(FUNC(sc2_state::sc2_beep));
map(0x3400, 0x3400).r(FUNC(sc2_state::speaker_w<1>));
map(0x3c00, 0x3c00).r(FUNC(sc2_state::speaker_w<0>));
}
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));
map(0x00, 0x03).mirror(0xfc).rw(m_pio, 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)
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)
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_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()
{
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()
{
uint8_t digit_data = bitswap<8>( m_digit_data,7,0,1,2,3,4,5,6 ) & 0x7f;
uint8_t digit_data = bitswap<8>(m_digit_data,7,0,1,2,3,4,5,6) & 0x7f;
if (!BIT(m_led_selected, 0))
// latch display data
for (int i = 0; i < 4; i++)
{
m_digits[0] = digit_data;
m_led_7seg_data[0] = digit_data;
if (!BIT(m_led_selected, i))
{
m_digits[i] = digit_data;
m_leds[0] = BIT(m_digit_data, 7);
}
if (!BIT(m_led_selected, 1))
{
m_digits[1] = digit_data;
m_led_7seg_data[1] = digit_data;
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;
}
if (!BIT(m_led_selected, 3))
{
m_digits[3] = digit_data;
m_led_7seg_data[3] = 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 )

View File

@ -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">

View File

@ -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">