mephisto_milano: don't use mmboard device

This commit is contained in:
hap 2021-04-08 14:15:19 +02:00
parent 85b4bcd98c
commit 7b72b123c2
8 changed files with 315 additions and 240 deletions

View File

@ -40,9 +40,11 @@ TODO:
***************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "machine/mmboard.h"
#include "sound/dac.h"
#include "speaker.h"
// internal artwork
@ -50,6 +52,8 @@ TODO:
#include "mephisto_glasgow.lh"
namespace {
class glasgow_state : public driver_device
{
public:
@ -65,10 +69,10 @@ public:
void glasgow(machine_config &config);
protected:
void glasgow_lcd_w(uint8_t data);
void glasgow_lcd_flag_w(uint8_t data);
uint8_t glasgow_keys_r();
void glasgow_keys_w(uint8_t data);
void glasgow_lcd_w(u8 data);
void glasgow_lcd_flag_w(u8 data);
u8 glasgow_keys_r();
void glasgow_keys_w(u8 data);
virtual void machine_start() override;
virtual void machine_reset() override;
@ -81,9 +85,9 @@ protected:
required_ioport_array<2> m_keyboard;
output_finder<4> m_digits;
uint8_t m_lcd_shift_counter;
uint8_t m_led7;
uint8_t m_key_select;
u8 m_lcd_shift_counter;
u8 m_led7;
u8 m_key_select;
};
@ -96,11 +100,11 @@ public:
void dallas32(machine_config &config);
protected:
void write_lcd(uint8_t data);
void write_lcd_flag(uint8_t data);
void write_beeper(uint8_t data);
void write_board(uint8_t data);
uint8_t read_newkeys();
void write_lcd(u8 data);
void write_lcd_flag(u8 data);
void write_beeper(u8 data);
void write_board(u8 data);
u8 read_newkeys();
void amsterd_mem(address_map &map);
void dallas32_mem(address_map &map);
@ -108,7 +112,11 @@ protected:
void glasgow_state::glasgow_lcd_w(uint8_t data)
/******************************************************************************
I/O
******************************************************************************/
void glasgow_state::glasgow_lcd_w(u8 data)
{
if (m_led7 == 0)
m_digits[m_lcd_shift_counter] = data;
@ -117,9 +125,9 @@ void glasgow_state::glasgow_lcd_w(uint8_t data)
m_lcd_shift_counter &= 3;
}
void glasgow_state::glasgow_lcd_flag_w(uint8_t data)
void glasgow_state::glasgow_lcd_flag_w(u8 data)
{
uint8_t const lcd_flag = data & 0x81;
u8 const lcd_flag = data & 0x81;
m_dac->write(BIT(lcd_flag, 0));
@ -129,10 +137,10 @@ void glasgow_state::glasgow_lcd_flag_w(uint8_t data)
m_led7 = 0;
}
uint8_t glasgow_state::glasgow_keys_r()
u8 glasgow_state::glasgow_keys_r()
{
// See if any keys pressed
uint8_t data = 3;
u8 data = 3;
if (m_key_select == m_keyboard[0]->read())
data &= 1;
@ -143,12 +151,12 @@ uint8_t glasgow_state::glasgow_keys_r()
return data;
}
void glasgow_state::glasgow_keys_w(uint8_t data)
void glasgow_state::glasgow_keys_w(u8 data)
{
m_key_select = data;
}
void amsterd_state::write_lcd(uint8_t data)
void amsterd_state::write_lcd(u8 data)
{
if (m_lcd_shift_counter & 4)
m_digits[m_lcd_shift_counter & 3] = data;
@ -157,7 +165,7 @@ void amsterd_state::write_lcd(uint8_t data)
m_lcd_shift_counter &= 7;
}
void amsterd_state::write_lcd_flag(uint8_t data)
void amsterd_state::write_lcd_flag(u8 data)
{
// The key function in the rom expects a value from the
// second key row after writing to here
@ -166,19 +174,19 @@ void amsterd_state::write_lcd_flag(uint8_t data)
m_led7 = data ? 255 : 0;
}
void amsterd_state::write_board(uint8_t data)
void amsterd_state::write_board(u8 data)
{
m_key_select = 0;
m_board->led_w(0);
m_board->mux_w(data);
}
void amsterd_state::write_beeper(uint8_t data)
void amsterd_state::write_beeper(u8 data)
{
m_dac->write(BIT(data, 0));
}
uint8_t amsterd_state::read_newkeys()
u8 amsterd_state::read_newkeys()
{
return m_keyboard[m_key_select & 1]->read();
}
@ -201,6 +209,11 @@ void glasgow_state::machine_reset()
}
/******************************************************************************
Address Maps
******************************************************************************/
void glasgow_state::glasgow_mem(address_map &map)
{
map.global_mask(0x1ffff);
@ -239,6 +252,12 @@ void amsterd_state::dallas32_mem(address_map &map)
map(0x800088, 0x800088).w("board", FUNC(mephisto_board_device::led_w));
}
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( new_keyboard )
PORT_START("LINE0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A / 1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD)
@ -284,6 +303,11 @@ static INPUT_PORTS_START( old_keyboard )
INPUT_PORTS_END
/******************************************************************************
Machine Configs
******************************************************************************/
void glasgow_state::glasgow(machine_config &config)
{
/* basic machine hardware */
@ -323,9 +347,10 @@ void amsterd_state::dallas32(machine_config &config)
}
/***************************************************************************
ROM definitions
***************************************************************************/
/******************************************************************************
ROM Definitions
******************************************************************************/
ROM_START( glasgow )
ROM_REGION( 0x10000, "maincpu", 0 )
@ -387,10 +412,13 @@ ROM_START( roma16a )
ROM_LOAD16_BYTE("roma_l_high", 0x08001, 0x04000, CRC(0b20617b) SHA1(f0296c486ce9009a69de1e50b90b0e1b7555f468) )
ROM_END
} // anonymous namespace
/***************************************************************************
Game drivers
***************************************************************************/
/******************************************************************************
Drivers
******************************************************************************/
/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1984, glasgow, 0, 0, glasgow, old_keyboard, glasgow_state, empty_init, "Hegener + Glaser", "Mephisto III-S Glasgow", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
// copyright-holders:Sandro Ronco, hap
// thanks-to:Berger
/******************************************************************************
Mephisto Milano
@ -19,8 +20,9 @@ Nigel Short is basically a Milano 2.00
#include "cpu/m6502/r65c02.h"
#include "machine/74259.h"
#include "machine/nvram.h"
#include "machine/mmboard.h"
#include "machine/sensorboard.h"
#include "video/mmdisplay2.h"
#include "video/pwm.h"
// internal artwork
#include "mephisto_milano.lh"
@ -28,55 +30,90 @@ Nigel Short is basically a Milano 2.00
namespace {
class mephisto_milano_state : public driver_device
class milano_state : public driver_device
{
public:
mephisto_milano_state(const machine_config &mconfig, device_type type, const char *tag)
milano_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_board(*this, "board")
, m_display(*this, "display")
, m_led_pwm(*this, "led_pwm")
, m_keys(*this, "KEY")
{ }
void milano(machine_config &config);
protected:
virtual void machine_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<mephisto_board_device> m_board;
required_device<sensorboard_device> m_board;
required_device<mephisto_display_module2_device> m_display;
required_device<pwm_display_device> m_led_pwm;
required_ioport m_keys;
void milano_mem(address_map &map);
u8 keys_r(offs_t offset);
u8 board_r();
void update_leds();
void io_w(u8 data);
void board_w(u8 data);
u8 board_r();
u8 keys_r(offs_t offset);
u8 m_board_mux = 0;
u8 m_led_data = 0;
};
void milano_state::machine_start()
{
save_item(NAME(m_board_mux));
save_item(NAME(m_led_data));
}
/******************************************************************************
I/O
******************************************************************************/
u8 mephisto_milano_state::keys_r(offs_t offset)
void milano_state::update_leds()
{
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
m_led_pwm->matrix(m_board_mux, m_led_data);
}
u8 mephisto_milano_state::board_r()
{
return m_board->input_r() ^ 0xff;
}
void mephisto_milano_state::io_w(u8 data)
void milano_state::io_w(u8 data)
{
// default display module
m_display->io_w(data & 0x0f);
// high bits go to board leds
m_board->led_w(data >> 4);
m_led_data = data >> 4;
update_leds();
}
void milano_state::board_w(u8 data)
{
m_board_mux = ~data;
update_leds();
}
u8 milano_state::board_r()
{
u8 data = 0;
// read chessboard sensors
for (int i = 0; i < 8; i++)
if (BIT(m_board_mux, i))
data |= m_board->read_rank(i);
return data;
}
u8 milano_state::keys_r(offs_t offset)
{
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
}
@ -85,15 +122,15 @@ void mephisto_milano_state::io_w(u8 data)
Address Maps
******************************************************************************/
void mephisto_milano_state::milano_mem(address_map &map)
void milano_state::milano_mem(address_map &map)
{
map(0x0000, 0x1fbf).ram().share("nvram");
map(0x1fc0, 0x1fc0).w(m_display, FUNC(mephisto_display_module2_device::latch_w));
map(0x1fd0, 0x1fd0).w(m_board, FUNC(mephisto_board_device::mux_w));
map(0x1fe0, 0x1fe0).r(FUNC(mephisto_milano_state::board_r));
map(0x1fd0, 0x1fd0).w(FUNC(milano_state::board_w));
map(0x1fe0, 0x1fe0).r(FUNC(milano_state::board_r));
map(0x1fe8, 0x1fef).w("outlatch", FUNC(hc259_device::write_d7)).nopr();
map(0x1fd8, 0x1fdf).r(FUNC(mephisto_milano_state::keys_r));
map(0x1ff0, 0x1ff0).w(FUNC(mephisto_milano_state::io_w));
map(0x1fd8, 0x1fdf).r(FUNC(milano_state::keys_r));
map(0x1ff0, 0x1ff0).w(FUNC(milano_state::io_w));
map(0x2000, 0xffff).rom();
}
@ -121,11 +158,12 @@ INPUT_PORTS_END
Machine Configs
******************************************************************************/
void mephisto_milano_state::milano(machine_config &config)
void milano_state::milano(machine_config &config)
{
/* basic machine hardware */
R65C02(config, m_maincpu, 4.9152_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_milano_state::milano_mem);
m_maincpu->set_periodic_int(FUNC(mephisto_milano_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13)));
m_maincpu->set_addrmap(AS_PROGRAM, &milano_state::milano_mem);
m_maincpu->set_periodic_int(FUNC(milano_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13)));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -137,7 +175,13 @@ void mephisto_milano_state::milano(machine_config &config)
outlatch.q_out_cb<4>().set_output("led104");
outlatch.q_out_cb<5>().set_output("led105");
MEPHISTO_BUTTONS_BOARD(config, m_board); // internal
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
/* video hardware */
PWM_DISPLAY(config, m_led_pwm).set_size(8, 2);
MEPHISTO_DISPLAY_MODULE2(config, m_display); // internal
config.set_default_layout(layout_mephisto_milano);
}
@ -171,8 +215,8 @@ ROM_END
Game Drivers
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1991, milano, 0, 0, milano, milano, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.02)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, milanoa, milano, 0, milano, milano, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1991, milano, 0, 0, milano, milano, milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.02)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, milanoa, milano, 0, milano, milano, milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, nshort, 0, 0, milano, milano, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Nigel Short", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, nshort, 0, 0, milano, milano, milano_state, empty_init, "Hegener + Glaser", "Mephisto Nigel Short", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -95,10 +95,12 @@ TODO:
#include "mephisto_bup.lh"
class mephisto_state : public driver_device
namespace {
class mm2_state : public driver_device
{
public:
mephisto_state(const machine_config &mconfig, device_type type, const char *tag)
mm2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_outlatch(*this, "outlatch")
@ -126,13 +128,13 @@ private:
required_ioport_array<8> m_key2;
output_finder<4> m_digits;
void write_lcd(uint8_t data);
void mephisto_nmi_w(uint8_t data);
uint8_t read_keys(offs_t offset);
void write_lcd(u8 data);
void mephisto_nmi_w(u8 data);
u8 read_keys(offs_t offset);
DECLARE_WRITE_LINE_MEMBER(write_led7);
uint8_t m_lcd_shift_counter;
uint8_t m_led7;
uint8_t m_allowNMI;
u8 m_lcd_shift_counter;
u8 m_led7;
u8 m_allowNMI;
virtual void machine_start() override;
virtual void machine_reset() override;
TIMER_DEVICE_CALLBACK_MEMBER(update_nmi);
@ -145,7 +147,7 @@ private:
void rebel5_mem(address_map &map);
};
void mephisto_state::machine_start()
void mm2_state::machine_start()
{
m_digits.resolve();
@ -154,7 +156,7 @@ void mephisto_state::machine_start()
save_item(NAME(m_allowNMI));
}
void mephisto_state::machine_reset()
void mm2_state::machine_reset()
{
m_lcd_shift_counter = 3;
m_allowNMI = 1;
@ -167,7 +169,7 @@ void mephisto_state::machine_reset()
I/O
******************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(mephisto_state::update_nmi)
TIMER_DEVICE_CALLBACK_MEMBER(mm2_state::update_nmi)
{
if (m_allowNMI)
{
@ -176,12 +178,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(mephisto_state::update_nmi)
}
}
TIMER_DEVICE_CALLBACK_MEMBER(mephisto_state::update_nmi_r5)
TIMER_DEVICE_CALLBACK_MEMBER(mm2_state::update_nmi_r5)
{
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
void mephisto_state::write_lcd(uint8_t data)
void mm2_state::write_lcd(u8 data)
{
if (m_led7 == 0)
m_digits[m_lcd_shift_counter] = data; // 0x109 MM IV // 0x040 MM V
@ -192,14 +194,14 @@ void mephisto_state::write_lcd(uint8_t data)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
void mephisto_state::mephisto_nmi_w(uint8_t data)
void mm2_state::mephisto_nmi_w(u8 data)
{
m_allowNMI = 1;
}
uint8_t mephisto_state::read_keys(offs_t offset)
u8 mm2_state::read_keys(offs_t offset)
{
uint8_t data = 0;
u8 data = 0;
if (!m_outlatch->q7_r())
{
@ -213,7 +215,7 @@ uint8_t mephisto_state::read_keys(offs_t offset)
return data | 0x7f;
}
WRITE_LINE_MEMBER(mephisto_state::write_led7)
WRITE_LINE_MEMBER(mm2_state::write_led7)
{
m_led7 = state ? 0x00 : 0xff;
}
@ -224,50 +226,50 @@ WRITE_LINE_MEMBER(mephisto_state::write_led7)
Address Maps
******************************************************************************/
void mephisto_state::bup_mem(address_map &map)
void mm2_state::bup_mem(address_map &map)
{
map(0x0000, 0x0fff).ram();
map(0x1000, 0x1007).w("outlatch", FUNC(hc259_device::write_d7));
map(0x1800, 0x1807).r(FUNC(mephisto_state::read_keys));
map(0x1800, 0x1807).r(FUNC(mm2_state::read_keys));
map(0x2000, 0x2000).r("board", FUNC(mephisto_board_device::input_r));
map(0x2800, 0x2800).w(FUNC(mephisto_state::write_lcd));
map(0x2800, 0x2800).w(FUNC(mm2_state::write_lcd));
map(0x3000, 0x3000).w("board", FUNC(mephisto_board_device::led_w));
map(0x3800, 0x3800).w("board", FUNC(mephisto_board_device::mux_w));
map(0x8000, 0xffff).rom();
}
void mephisto_state::mm2_mem(address_map &map)
void mm2_state::mm2_mem(address_map &map)
{
bup_mem(map);
map(0x4000, 0x7fff).r("cartslot", FUNC(generic_slot_device::read_rom)); // opening library
}
void mephisto_state::rebel5_mem(address_map &map)
void mm2_state::rebel5_mem(address_map &map)
{
map(0x0000, 0x1fff).ram();
map(0x2000, 0x2007).w("outlatch", FUNC(hc259_device::write_d7));
map(0x3000, 0x4000).r("board", FUNC(mephisto_board_device::input_r));
map(0x3000, 0x3007).r(FUNC(mephisto_state::read_keys));
map(0x5000, 0x5000).w(FUNC(mephisto_state::write_lcd));
map(0x3000, 0x3007).r(FUNC(mm2_state::read_keys));
map(0x5000, 0x5000).w(FUNC(mm2_state::write_lcd));
map(0x6000, 0x6000).w("board", FUNC(mephisto_board_device::led_w));
map(0x7000, 0x7000).w("board", FUNC(mephisto_board_device::mux_w));
map(0x8000, 0xffff).rom();
}
void mephisto_state::mm5p_mem(address_map &map)
void mm2_state::mm5p_mem(address_map &map)
{
map(0x0000, 0x1fff).ram();
map(0x2000, 0x2000).w(FUNC(mephisto_state::write_lcd));
map(0x2000, 0x2000).w(FUNC(mm2_state::write_lcd));
map(0x2400, 0x2407).w("board", FUNC(mephisto_board_device::led_w)).nopr();
map(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w));
map(0x2c00, 0x2c07).r(FUNC(mephisto_state::read_keys));
map(0x2c00, 0x2c07).r(FUNC(mm2_state::read_keys));
map(0x3000, 0x3000).r("board", FUNC(mephisto_board_device::input_r));
map(0x3400, 0x3407).w("outlatch", FUNC(hc259_device::write_d7)).nopr();
map(0x3800, 0x3800).w(FUNC(mephisto_state::mephisto_nmi_w));
map(0x3800, 0x3800).w(FUNC(mm2_state::mephisto_nmi_w));
map(0x4000, 0xffff).rom();
}
void mephisto_state::mm4_mem(address_map &map)
void mm2_state::mm4_mem(address_map &map)
{
mm5p_mem(map);
map(0x4000, 0x7fff).r("cartslot", FUNC(generic_slot_device::read_rom));
@ -315,8 +317,8 @@ static INPUT_PORTS_START( mephisto )
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D / 4 / Rook") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD)
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mephisto_state, reset_button, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 2") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mephisto_state, reset_button, 0)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 2") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0)
INPUT_PORTS_END
static INPUT_PORTS_START( bup )
@ -355,11 +357,11 @@ static INPUT_PORTS_START( bup )
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M)
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mephisto_state, reset_button, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 2") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mephisto_state, reset_button, 0)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 1") PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RES 2") PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mm2_state, reset_button, 0)
INPUT_PORTS_END
INPUT_CHANGED_MEMBER(mephisto_state::reset_button)
INPUT_CHANGED_MEMBER(mm2_state::reset_button)
{
// RES buttons in serial tied to CPU RESET
if (ioport("RESET")->read() == 3)
@ -375,13 +377,13 @@ INPUT_CHANGED_MEMBER(mephisto_state::reset_button)
Machine Configs
******************************************************************************/
void mephisto_state::rebel5(machine_config &config)
void mm2_state::rebel5(machine_config &config)
{
/* basic machine hardware */
M65C02(config, m_maincpu, 9.8304_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::rebel5_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::rebel5_mem);
TIMER(config, "nmi_timer").configure_periodic(FUNC(mephisto_state::update_nmi_r5), attotime::from_hz(600));
TIMER(config, "nmi_timer").configure_periodic(FUNC(mm2_state::update_nmi_r5), attotime::from_hz(600));
HC259(config, m_outlatch);
m_outlatch->q_out_cb<0>().set_output("led100");
@ -391,7 +393,7 @@ void mephisto_state::rebel5(machine_config &config)
m_outlatch->q_out_cb<4>().set_output("led104");
m_outlatch->q_out_cb<5>().set_output("led105");
m_outlatch->q_out_cb<6>().set(m_dac, FUNC(dac_bit_interface::write));
m_outlatch->q_out_cb<7>().set(FUNC(mephisto_state::write_led7));
m_outlatch->q_out_cb<7>().set(FUNC(mm2_state::write_led7));
MEPHISTO_SENSORS_BOARD(config, "board");
config.set_default_layout(layout_mephisto_mm2);
@ -401,63 +403,63 @@ void mephisto_state::rebel5(machine_config &config)
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
}
void mephisto_state::mm5p(machine_config &config)
void mm2_state::mm5p(machine_config &config)
{
rebel5(config);
/* basic machine hardware */
m_maincpu->set_clock(4.9152_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::mm5p_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::mm5p_mem);
TIMER(config.replace(), "nmi_timer").configure_periodic(FUNC(mephisto_state::update_nmi), attotime::from_hz(600));
TIMER(config.replace(), "nmi_timer").configure_periodic(FUNC(mm2_state::update_nmi), attotime::from_hz(600));
}
void mephisto_state::mm4(machine_config &config)
void mm2_state::mm4(machine_config &config)
{
mm5p(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::mm4_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::mm4_mem);
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "mephisto_cart");
SOFTWARE_LIST(config, "cart_list").set_original("mephisto_mm4");
}
void mephisto_state::mm4tk(machine_config &config)
void mm2_state::mm4tk(machine_config &config)
{
mm4(config);
m_maincpu->set_clock(18000000);
}
void mephisto_state::mm5(machine_config &config)
void mm2_state::mm5(machine_config &config)
{
mm4(config);
SOFTWARE_LIST(config.replace(), "cart_list").set_original("mephisto_mm5");
}
void mephisto_state::bup(machine_config &config)
void mm2_state::bup(machine_config &config)
{
rebel5(config);
/* basic machine hardware */
m_maincpu->set_clock(7.3728_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::bup_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::bup_mem);
config.device_remove("nmi_timer");
const attotime irq_period = attotime::from_hz(7.3728_MHz_XTAL / 2 / 0x2000); // 450Hz from 4020 Q13
m_maincpu->set_periodic_int(FUNC(mephisto_state::irq0_line_assert), irq_period);
m_maincpu->set_periodic_int(FUNC(mm2_state::irq0_line_assert), irq_period);
m_outlatch->q_out_cb<7>().set(FUNC(mephisto_state::write_led7)).invert();
m_outlatch->q_out_cb<7>().set(FUNC(mm2_state::write_led7)).invert();
config.set_default_layout(layout_mephisto_bup);
}
void mephisto_state::mm2(machine_config &config)
void mm2_state::mm2(machine_config &config)
{
bup(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::mm2_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mm2_state::mm2_mem);
config.set_default_layout(layout_mephisto_mm2);
@ -561,30 +563,32 @@ ROM_START( mm5p )
ROM_LOAD("programm.bin", 0x8000, 0x8000, CRC(ee22b974) SHA1(37267507be30ee84051bc94c3a63fb1298a00261) )
ROM_END
} // anonymous namespace
/******************************************************************************
Drivers
******************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
CONS( 1984, mm2, 0, 0, mm2, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 1, v4.00 1 EPROM)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2a, mm2, 0, mm2, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 2, v4.00 2 EPROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2b, mm2, 0, mm2, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 3, v3.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2c, mm2, 0, mm2, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2d, mm2, 0, mm2, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
CONS( 1984, mm2, 0, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 1, v4.00 1 EPROM)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2a, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 2, v4.00 2 EPROMs)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2b, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 3, v3.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2c, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 4)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, mm2d, mm2, 0, mm2, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM II (set 5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, bup, 0, 0, bup, bup, mephisto_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, bupa, bup, 0, bup, bup, mephisto_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, bup, 0, 0, bup, bup, mm2_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, bupa, bup, 0, bup, bup, mm2_state, empty_init, "Hegener + Glaser", u8"Mephisto Blitz- und Problemlösungs-Modul (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1986, rebel5, 0, 0, rebel5, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka MM III
CONS( 1986, rebel5a, rebel5, 0, rebel5, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1986, rebel5, 0, 0, rebel5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka MM III
CONS( 1986, rebel5a, rebel5, 0, rebel5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto Rebell 5,0 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4, 0, 0, mm4, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4a, mm4, 0, mm4, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4b, mm4, 0, mm4, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mephisto_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
CONS( 1987, mm4, 0, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4a, mm4, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v7.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4b, mm4, 0, mm4, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4tk, mm4, 0, mm4tk, mephisto, mm2_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
CONS( 1990, mm5, 0, 0, mm5, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, mm5a, mm5, 0, mm5, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, mm5p, mm5, 0, mm5p, mephisto, mephisto_state, empty_init, "Hegener + Glaser", "Mephisto MM V (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
CONS( 1990, mm5, 0, 0, mm5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, mm5a, mm5, 0, mm5, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, mm5p, mm5, 0, mm5p, mephisto, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )

View File

@ -112,7 +112,7 @@ void mondial68k_state::input_mux_w(u8 data)
u8 mondial68k_state::inputs_r()
{
u8 data = 0x00;
u8 data = 0;
// read buttons
for (int i = 0; i < 4; i++)

View File

@ -29,10 +29,10 @@ The 10MHz version has a W65C02P-8 @ 9.83MHz.
namespace {
class mephisto_polgar_state : public driver_device
class polgar_state : public driver_device
{
public:
mephisto_polgar_state(const machine_config &mconfig, device_type type, const char *tag)
polgar_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_keys(*this, "KEY")
@ -56,7 +56,7 @@ private:
I/O
******************************************************************************/
u8 mephisto_polgar_state::keys_r(offs_t offset)
u8 polgar_state::keys_r(offs_t offset)
{
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
}
@ -67,14 +67,14 @@ u8 mephisto_polgar_state::keys_r(offs_t offset)
Address Maps
******************************************************************************/
void mephisto_polgar_state::polgar_mem(address_map &map)
void polgar_state::polgar_mem(address_map &map)
{
map(0x0000, 0x1fff).ram().share("nvram");
map(0x2000, 0x2000).w("display", FUNC(mephisto_display_module2_device::latch_w));
map(0x2004, 0x2004).w("display", FUNC(mephisto_display_module2_device::io_w));
map(0x2400, 0x2400).w("board", FUNC(mephisto_board_device::led_w));
map(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w));
map(0x2c00, 0x2c07).r(FUNC(mephisto_polgar_state::keys_r));
map(0x2c00, 0x2c07).r(FUNC(polgar_state::keys_r));
map(0x3000, 0x3000).r("board", FUNC(mephisto_board_device::input_r));
map(0x3400, 0x3407).w("outlatch", FUNC(hc259_device::write_d7));
map(0x4000, 0xffff).rom();
@ -104,11 +104,11 @@ INPUT_PORTS_END
Machine Configs
******************************************************************************/
void mephisto_polgar_state::polgar(machine_config &config)
void polgar_state::polgar(machine_config &config)
{
R65C02(config, m_maincpu, 4.9152_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_polgar_state::polgar_mem);
m_maincpu->set_periodic_int(FUNC(mephisto_polgar_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13)));
m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem);
m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), attotime::from_hz(4.9152_MHz_XTAL / (1 << 13)));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -125,13 +125,13 @@ void mephisto_polgar_state::polgar(machine_config &config)
config.set_default_layout(layout_mephisto_polgar);
}
void mephisto_polgar_state::polgar10(machine_config &config)
void polgar_state::polgar10(machine_config &config)
{
polgar(config);
M65C02(config.replace(), m_maincpu, 9.8304_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_polgar_state::polgar_mem);
m_maincpu->set_periodic_int(FUNC(mephisto_polgar_state::nmi_line_pulse), attotime::from_hz(9.8304_MHz_XTAL / (1 << 13)));
m_maincpu->set_addrmap(AS_PROGRAM, &polgar_state::polgar_mem);
m_maincpu->set_periodic_int(FUNC(polgar_state::nmi_line_pulse), attotime::from_hz(9.8304_MHz_XTAL / (1 << 13)));
}
@ -168,8 +168,8 @@ ROM_END
Game Drivers
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1990, polgar, 0, 0, polgar, polgar, mephisto_polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.50)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, polgara, polgar, 0, polgar, polgar, mephisto_polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, polgar10, polgar, 0, polgar10, polgar, mephisto_polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, polgar101, polgar, 0, polgar10, polgar, mephisto_polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1990, polgar, 0, 0, polgar, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.50)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, polgara, polgar, 0, polgar, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar (v1.10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, polgar10, polgar, 0, polgar10, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, polgar101, polgar, 0, polgar10, polgar, polgar_state, empty_init, "Hegener + Glaser", "Mephisto Polgar 10 MHz (v10.1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -31,10 +31,10 @@ Hardware notes:
namespace {
class mephisto_risc_state : public driver_device
class risc_state : public driver_device
{
public:
mephisto_risc_state(const machine_config &mconfig, device_type type, const char *tag)
risc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_chessm(*this, "chessm")
@ -60,7 +60,7 @@ private:
void chessm_w(u8 data);
};
void mephisto_risc_state::machine_start()
void risc_state::machine_start()
{
m_rombank->configure_entries(0, 4, memregion("maincpu")->base(), 0x8000);
}
@ -71,18 +71,18 @@ void mephisto_risc_state::machine_start()
I/O
******************************************************************************/
u8 mephisto_risc_state::keys_r(offs_t offset)
u8 risc_state::keys_r(offs_t offset)
{
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
}
u8 mephisto_risc_state::chessm_r()
u8 risc_state::chessm_r()
{
// d0: chessmachine data
return m_chessm->data_r();
}
void mephisto_risc_state::chessm_w(u8 data)
void risc_state::chessm_w(u8 data)
{
// d0,d7: chessmachine data
m_chessm->data0_w(BIT(data, 0));
@ -98,19 +98,19 @@ void mephisto_risc_state::chessm_w(u8 data)
Address Maps
******************************************************************************/
void mephisto_risc_state::mrisc_mem(address_map &map)
void risc_state::mrisc_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).ram().share("nvram");
map(0x2000, 0x2000).w("display", FUNC(mephisto_display_module2_device::latch_w));
map(0x2004, 0x2004).w("display", FUNC(mephisto_display_module2_device::io_w));
map(0x2c00, 0x2c07).r(FUNC(mephisto_risc_state::keys_r));
map(0x2c00, 0x2c07).r(FUNC(risc_state::keys_r));
map(0x2400, 0x2400).w("board", FUNC(mephisto_board_device::led_w));
map(0x2800, 0x2800).w("board", FUNC(mephisto_board_device::mux_w));
map(0x3000, 0x3000).r("board", FUNC(mephisto_board_device::input_r));
map(0x3400, 0x3407).w("outlatch", FUNC(hc259_device::write_d7)).nopr();
map(0x3800, 0x3800).w(FUNC(mephisto_risc_state::chessm_w));
map(0x3c00, 0x3c00).r(FUNC(mephisto_risc_state::chessm_r));
map(0x3800, 0x3800).w(FUNC(risc_state::chessm_w));
map(0x3c00, 0x3c00).r(FUNC(risc_state::chessm_r));
map(0x4000, 0x7fff).rom();
map(0x8000, 0xffff).bankr("rombank");
}
@ -139,11 +139,11 @@ INPUT_PORTS_END
Machine Configs
******************************************************************************/
void mephisto_risc_state::mrisc(machine_config &config)
void risc_state::mrisc(machine_config &config)
{
M65SC02(config, m_maincpu, 10_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_risc_state::mrisc_mem);
m_maincpu->set_periodic_int(FUNC(mephisto_risc_state::irq0_line_hold), attotime::from_hz(10_MHz_XTAL / (1 << 14)));
m_maincpu->set_addrmap(AS_PROGRAM, &risc_state::mrisc_mem);
m_maincpu->set_periodic_int(FUNC(risc_state::irq0_line_hold), attotime::from_hz(10_MHz_XTAL / (1 << 14)));
CHESSMACHINE(config, m_chessm, 14'000'000); // Mephisto manual says 14MHz (no XTAL)
config.set_perfect_quantum(m_maincpu);
@ -192,6 +192,6 @@ ROM_END
Game Drivers
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1992, mrisc, 0, 0, mrisc, mrisc, mephisto_risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc 1MB", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1994, mrisc2, mrisc, 0, mrisc, mrisc, mephisto_risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
CONS( 1992, mrisc, 0, 0, mrisc, mrisc, risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc 1MB", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1994, mrisc2, mrisc, 0, mrisc, mrisc, risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -21,11 +21,10 @@
#include "sound/ym3812.h"
#include "speaker.h"
// mephisto_state was also defined in mess/drivers/mephisto.c
class mephisto_pinball_state : public driver_device
class mephisto_state : public driver_device
{
public:
mephisto_pinball_state(const machine_config &mconfig, device_type type, const char *tag)
mephisto_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_aysnd(*this, "aysnd")
@ -62,29 +61,29 @@ private:
};
void mephisto_pinball_state::shift_load_w(u8 data)
void mephisto_state::shift_load_w(u8 data)
{
}
u8 mephisto_pinball_state::ay8910_read()
u8 mephisto_state::ay8910_read()
{
return m_ay8910_data;
}
void mephisto_pinball_state::ay8910_write(u8 data)
void mephisto_state::ay8910_write(u8 data)
{
m_ay8910_data = data;
ay8910_update();
}
void mephisto_pinball_state::t0_t1_w(u8 data)
void mephisto_state::t0_t1_w(u8 data)
{
m_ay8910_bdir = BIT(data, 4); // T0
m_ay8910_bc1 = BIT(data, 5); // T1
ay8910_update();
}
void mephisto_pinball_state::ay8910_update()
void mephisto_state::ay8910_update()
{
if (m_ay8910_bdir)
m_aysnd->data_address_w(m_ay8910_bc1, m_ay8910_data);
@ -92,21 +91,21 @@ void mephisto_pinball_state::ay8910_update()
m_ay8910_data = m_aysnd->data_r();
}
void mephisto_pinball_state::ay8910_columns_w(u8 data)
void mephisto_state::ay8910_columns_w(u8 data)
{
}
u8 mephisto_pinball_state::ay8910_inputs_r()
u8 mephisto_state::ay8910_inputs_r()
{
return 0xff;
}
void mephisto_pinball_state::sound_rombank_w(u8 data)
void mephisto_state::sound_rombank_w(u8 data)
{
m_soundbank->set_entry(data & 0xf);
}
void mephisto_pinball_state::mephisto_map(address_map &map)
void mephisto_state::mephisto_map(address_map &map)
{
map(0x00000, 0x07fff).rom().region("maincpu", 0).mirror(0x8000);
map(0x10000, 0x107ff).ram().share("nvram");
@ -115,12 +114,12 @@ void mephisto_pinball_state::mephisto_map(address_map &map)
map(0x13800, 0x13807).rw("ic20", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0x14000, 0x140ff).rw("ic9", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x14800, 0x14807).rw("ic9", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0x16000, 0x16000).w(FUNC(mephisto_pinball_state::shift_load_w));
map(0x16000, 0x16000).w(FUNC(mephisto_state::shift_load_w));
map(0x17000, 0x17001).nopw(); //???
map(0xf0000, 0xf7fff).rom().region("maincpu", 0).mirror(0x8000);
}
void mephisto_pinball_state::sport2k_map(address_map &map)
void mephisto_state::sport2k_map(address_map &map)
{
map(0x00000, 0x0ffff).rom().region("maincpu", 0);
map(0x20000, 0x21fff).ram().share("nvram");
@ -129,25 +128,25 @@ void mephisto_pinball_state::sport2k_map(address_map &map)
map(0x2b800, 0x2b807).rw("ic20", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0x2c000, 0x2c0ff).rw("ic9", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
map(0x2c800, 0x2c807).rw("ic9", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w));
map(0x2e000, 0x2e000).w(FUNC(mephisto_pinball_state::shift_load_w));
map(0x2e000, 0x2e000).w(FUNC(mephisto_state::shift_load_w));
map(0x2f000, 0x2f001).nopw(); //???
map(0xf0000, 0xfffff).rom().region("maincpu", 0);
}
void mephisto_pinball_state::mephisto_8051_map(address_map &map)
void mephisto_state::mephisto_8051_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xffff).bankr("soundbank");
}
void mephisto_pinball_state::mephisto_8051_io(address_map &map)
void mephisto_state::mephisto_8051_io(address_map &map)
{
map(0x0000, 0x07ff).ram();
map(0x0800, 0x0800).w(FUNC(mephisto_pinball_state::sound_rombank_w));
map(0x0800, 0x0800).w(FUNC(mephisto_state::sound_rombank_w));
map(0x1000, 0x1000).w("dac", FUNC(dac08_device::data_w));
}
void mephisto_pinball_state::sport2k_8051_io(address_map &map)
void mephisto_state::sport2k_8051_io(address_map &map)
{
mephisto_8051_io(map);
map(0x1800, 0x1801).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
@ -157,7 +156,7 @@ void mephisto_pinball_state::sport2k_8051_io(address_map &map)
static INPUT_PORTS_START( mephisto )
INPUT_PORTS_END
void mephisto_pinball_state::machine_start()
void mephisto_state::machine_start()
{
m_soundbank->configure_entries(0, 16, memregion("sound1")->base(), 0x8000);
m_soundbank->set_entry(0);
@ -170,15 +169,15 @@ void mephisto_pinball_state::machine_start()
save_item(NAME(m_ay8910_bc1));
}
void mephisto_pinball_state::machine_reset()
void mephisto_state::machine_reset()
{
}
void mephisto_pinball_state::mephisto(machine_config &config)
void mephisto_state::mephisto(machine_config &config)
{
/* basic machine hardware */
I8088(config, m_maincpu, XTAL(18'000'000)/3);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_pinball_state::mephisto_map);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::mephisto_map);
//m_maincpu->set_irq_acknowledge_callback("muart", FUNC(i8256_device::inta_cb));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -193,32 +192,32 @@ void mephisto_pinball_state::mephisto(machine_config &config)
I8155(config, "ic9", XTAL(18'000'000)/6);
//i8155_device &i8155_2(I8155(config, "ic9", XTAL(18'000'000)/6));
//i8155_2.out_to_callback().set(FUNC(mephisto_pinball_state::clk_shift_w));
//i8155_2.out_to_callback().set(FUNC(mephisto_state::clk_shift_w));
i8051_device &soundcpu(I8051(config, "soundcpu", XTAL(12'000'000)));
soundcpu.set_addrmap(AS_PROGRAM, &mephisto_pinball_state::mephisto_8051_map); // EA tied high for external program ROM
soundcpu.set_addrmap(AS_IO, &mephisto_pinball_state::mephisto_8051_io);
soundcpu.port_in_cb<1>().set(FUNC(mephisto_pinball_state::ay8910_read));
soundcpu.port_out_cb<1>().set(FUNC(mephisto_pinball_state::ay8910_write));
soundcpu.port_out_cb<3>().set(FUNC(mephisto_pinball_state::t0_t1_w));
soundcpu.set_addrmap(AS_PROGRAM, &mephisto_state::mephisto_8051_map); // EA tied high for external program ROM
soundcpu.set_addrmap(AS_IO, &mephisto_state::mephisto_8051_io);
soundcpu.port_in_cb<1>().set(FUNC(mephisto_state::ay8910_read));
soundcpu.port_out_cb<1>().set(FUNC(mephisto_state::ay8910_write));
soundcpu.port_out_cb<3>().set(FUNC(mephisto_state::t0_t1_w));
soundcpu.serial_rx_cb().set_constant(0); // from MUART
SPEAKER(config, "mono").front_center();
AY8910(config, m_aysnd, XTAL(12'000'000)/8);
m_aysnd->port_a_write_callback().set(FUNC(mephisto_pinball_state::ay8910_columns_w));
m_aysnd->port_b_read_callback().set(FUNC(mephisto_pinball_state::ay8910_inputs_r));
m_aysnd->port_a_write_callback().set(FUNC(mephisto_state::ay8910_columns_w));
m_aysnd->port_b_read_callback().set(FUNC(mephisto_state::ay8910_inputs_r));
m_aysnd->add_route(ALL_OUTPUTS, "mono", 0.5);
DAC08(config, "dac", 0).add_route(ALL_OUTPUTS, "mono", 0.5);
}
void mephisto_pinball_state::sport2k(machine_config &config)
void mephisto_state::sport2k(machine_config &config)
{
mephisto(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_pinball_state::sport2k_map);
subdevice<i8051_device>("soundcpu")->set_addrmap(AS_IO, &mephisto_pinball_state::sport2k_8051_io);
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_state::sport2k_map);
subdevice<i8051_device>("soundcpu")->set_addrmap(AS_IO, &mephisto_state::sport2k_8051_io);
YM3812(config, "ymsnd", XTAL(14'318'181)/4).add_route(ALL_OUTPUTS, "mono", 0.5);
}
@ -296,7 +295,7 @@ ROM_START(sport2k)
ROM_LOAD("s511_512.bin", 0x40000, 0x10000, CRC(ca9afa80) SHA1(6f219bdc1ad06e340b2930610897b70369a43684))
ROM_END
GAME(1987, mephistp, 0, mephisto, mephisto, mephisto_pinball_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (rev. 1.2)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1987, mephistp1, mephistp, mephisto, mephisto, mephisto_pinball_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (rev. 1.1)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1987, mephistpn, mephistp, mephisto, mephisto, mephisto_pinball_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (newer?)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1988, sport2k, 0, sport2k, mephisto, mephisto_pinball_state, empty_init, ROT0, "Cirsa", "Sport 2000", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1987, mephistp, 0, mephisto, mephisto, mephisto_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (rev. 1.2)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1987, mephistp1, mephistp, mephisto, mephisto, mephisto_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (rev. 1.1)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1987, mephistpn, mephistp, mephisto, mephisto, mephisto_state, empty_init, ROT0, "Stargame", "Mephisto (Stargame) (newer?)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1988, sport2k, 0, sport2k, mephisto, mephisto_state, empty_init, ROT0, "Cirsa", "Sport 2000", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_NO_SOUND)

View File

@ -195,14 +195,14 @@ license:CC0
<param name="y" start="0" increment="10" />
<param name="i" start="8" increment="-1" />
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element name="piece_a~i~" ref="piece"><bounds x="0" y="~y~" width="10" height="10" /></element>
<element name="piece_b~i~" ref="piece"><bounds x="10" y="~y~" width="10" height="10" /></element>
@ -284,8 +284,8 @@ license:CC0
<element ref="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></element>
<element ref="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- spawn -->
<element ref="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></element>
@ -305,18 +305,18 @@ license:CC0
<element name="piece_ui11" ref="piece"><bounds x="5" y="40" width="4" height="4" /></element>
<element name="piece_ui12" ref="piece"><bounds x="5" y="44" width="4" height="4" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<!-- hand -->
<element ref="text_uih1"><bounds x="0" y="51" width="10" height="2" /></element>
@ -325,7 +325,7 @@ license:CC0
<element ref="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></element>
<element ref="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- undo -->
<element ref="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></element>
@ -338,10 +338,10 @@ license:CC0
<element ref="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element name="count_ui0" ref="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></element>
<element name="count_ui1" ref="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></element>
@ -430,23 +430,23 @@ license:CC0
<element ref="text_h"><bounds x="94" y="86.5" width="2" height="2" /></element>
<!-- chessboard leds -->
<element name="led0" ref="ledr"><bounds x="24" y="85" width="2" height="1" /></element>
<element name="led8" ref="ledr"><bounds x="34" y="85" width="2" height="1" /></element>
<element name="led16" ref="ledr"><bounds x="44" y="85" width="2" height="1" /></element>
<element name="led24" ref="ledr"><bounds x="54" y="85" width="2" height="1" /></element>
<element name="led32" ref="ledr"><bounds x="64" y="85" width="2" height="1" /></element>
<element name="led40" ref="ledr"><bounds x="74" y="85" width="2" height="1" /></element>
<element name="led48" ref="ledr"><bounds x="84" y="85" width="2" height="1" /></element>
<element name="led56" ref="ledr"><bounds x="94" y="85" width="2" height="1" /></element>
<element name="0.0" ref="ledr"><bounds x="24" y="85" width="2" height="1" /></element>
<element name="1.0" ref="ledr"><bounds x="34" y="85" width="2" height="1" /></element>
<element name="2.0" ref="ledr"><bounds x="44" y="85" width="2" height="1" /></element>
<element name="3.0" ref="ledr"><bounds x="54" y="85" width="2" height="1" /></element>
<element name="4.0" ref="ledr"><bounds x="64" y="85" width="2" height="1" /></element>
<element name="5.0" ref="ledr"><bounds x="74" y="85" width="2" height="1" /></element>
<element name="6.0" ref="ledr"><bounds x="84" y="85" width="2" height="1" /></element>
<element name="7.0" ref="ledr"><bounds x="94" y="85" width="2" height="1" /></element>
<element name="led1" ref="ledr"><bounds x="16.5" y="77.5" width="2" height="1" /></element>
<element name="led9" ref="ledr"><bounds x="16.5" y="67.5" width="2" height="1" /></element>
<element name="led17" ref="ledr"><bounds x="16.5" y="57.5" width="2" height="1" /></element>
<element name="led25" ref="ledr"><bounds x="16.5" y="47.5" width="2" height="1" /></element>
<element name="led33" ref="ledr"><bounds x="16.5" y="37.5" width="2" height="1" /></element>
<element name="led41" ref="ledr"><bounds x="16.5" y="27.5" width="2" height="1" /></element>
<element name="led49" ref="ledr"><bounds x="16.5" y="17.5" width="2" height="1" /></element>
<element name="led57" ref="ledr"><bounds x="16.5" y="7.5" width="2" height="1" /></element>
<element name="0.1" ref="ledr"><bounds x="16.5" y="77.5" width="2" height="1" /></element>
<element name="1.1" ref="ledr"><bounds x="16.5" y="67.5" width="2" height="1" /></element>
<element name="2.1" ref="ledr"><bounds x="16.5" y="57.5" width="2" height="1" /></element>
<element name="3.1" ref="ledr"><bounds x="16.5" y="47.5" width="2" height="1" /></element>
<element name="4.1" ref="ledr"><bounds x="16.5" y="37.5" width="2" height="1" /></element>
<element name="5.1" ref="ledr"><bounds x="16.5" y="27.5" width="2" height="1" /></element>
<element name="6.1" ref="ledr"><bounds x="16.5" y="17.5" width="2" height="1" /></element>
<element name="7.1" ref="ledr"><bounds x="16.5" y="7.5" width="2" height="1" /></element>
<group ref="sb_board"><bounds x="20" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="2.5" y="3" width="10" height="80" /></group>