mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
mephisto_academy: move to separate driver (nw)
This commit is contained in:
parent
53765dacde
commit
776013e80c
@ -2455,6 +2455,7 @@ files {
|
|||||||
|
|
||||||
createMESSProjects(_target, _subtarget, "hegener")
|
createMESSProjects(_target, _subtarget, "hegener")
|
||||||
files {
|
files {
|
||||||
|
MAME_DIR .. "src/mame/drivers/mephisto_academy.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/mephisto_berlin.cpp",
|
MAME_DIR .. "src/mame/drivers/mephisto_berlin.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/mephisto_brikett.cpp",
|
MAME_DIR .. "src/mame/drivers/mephisto_brikett.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/mephisto_glasgow.cpp",
|
MAME_DIR .. "src/mame/drivers/mephisto_glasgow.cpp",
|
||||||
|
@ -204,8 +204,8 @@ void dominator_state::dominator(machine_config &config)
|
|||||||
R65C02(config, m_maincpu, 4_MHz_XTAL);
|
R65C02(config, m_maincpu, 4_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &dominator_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &dominator_state::main_map);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(4_MHz_XTAL / 0x2000); // from 4020
|
const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); // from 4020
|
||||||
m_maincpu->set_periodic_int(FUNC(dominator_state::nmi_line_pulse), irq_period);
|
m_maincpu->set_periodic_int(FUNC(dominator_state::nmi_line_pulse), nmi_period);
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||||
|
|
||||||
|
@ -220,7 +220,8 @@ void eag_state::init_eag2100()
|
|||||||
void eag_state::machine_reset()
|
void eag_state::machine_reset()
|
||||||
{
|
{
|
||||||
fidel_clockdiv_state::machine_reset();
|
fidel_clockdiv_state::machine_reset();
|
||||||
m_rombank->set_entry(0);
|
if (m_rombank != nullptr)
|
||||||
|
m_rombank->set_entry(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ public:
|
|||||||
vsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
vsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_irq_on(*this, "irq_on"),
|
m_nmi_on(*this, "nmi_on"),
|
||||||
m_z80pio(*this, "z80pio"),
|
m_z80pio(*this, "z80pio"),
|
||||||
m_ppi8255(*this, "ppi8255"),
|
m_ppi8255(*this, "ppi8255"),
|
||||||
m_board(*this, "board"),
|
m_board(*this, "board"),
|
||||||
@ -189,7 +189,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<timer_device> m_irq_on;
|
required_device<timer_device> m_nmi_on;
|
||||||
required_device<z80pio_device> m_z80pio;
|
required_device<z80pio_device> m_z80pio;
|
||||||
required_device<i8255_device> m_ppi8255;
|
required_device<i8255_device> m_ppi8255;
|
||||||
required_device<sensorboard_device> m_board;
|
required_device<sensorboard_device> m_board;
|
||||||
@ -206,8 +206,8 @@ private:
|
|||||||
void main_io_trampoline_w(offs_t offset, u8 data);
|
void main_io_trampoline_w(offs_t offset, u8 data);
|
||||||
|
|
||||||
// periodic interrupts
|
// periodic interrupts
|
||||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(nmi_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(nmi_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||||
|
|
||||||
// I/O handlers
|
// I/O handlers
|
||||||
void update_display();
|
void update_display();
|
||||||
@ -426,10 +426,10 @@ void vsc_state::vsc(machine_config &config)
|
|||||||
m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map);
|
||||||
m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io);
|
m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(600); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz)
|
const attotime nmi_period = attotime::from_hz(600); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz)
|
||||||
TIMER(config, m_irq_on).configure_periodic(FUNC(vsc_state::irq_on<INPUT_LINE_NMI>), irq_period);
|
TIMER(config, m_nmi_on).configure_periodic(FUNC(vsc_state::nmi_on<INPUT_LINE_NMI>), nmi_period);
|
||||||
m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half)
|
m_nmi_on->set_start_delay(nmi_period - attotime::from_usec(845)); // active for 0.845ms (approx half)
|
||||||
TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off<INPUT_LINE_NMI>), irq_period);
|
TIMER(config, "nmi_off").configure_periodic(FUNC(vsc_state::nmi_off<INPUT_LINE_NMI>), nmi_period);
|
||||||
|
|
||||||
I8255(config, m_ppi8255);
|
I8255(config, m_ppi8255);
|
||||||
m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w));
|
m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w));
|
||||||
|
@ -592,16 +592,16 @@ Notes:
|
|||||||
|
|
||||||
- bosco: there appears to be a bug in the code at 0BB1, which handles communication
|
- bosco: there appears to be a bug in the code at 0BB1, which handles communication
|
||||||
with the 06XX custom chip. First it saves in A' the command to write, then if a
|
with the 06XX custom chip. First it saves in A' the command to write, then if a
|
||||||
transfer is still in progress it jups to 0BC1, does other things, then restores
|
transfer is still in progress it jumps to 0BC1, does other things, then restores
|
||||||
the command from A' and stores it in RAM. At that point (0BE1) it checks again if
|
the command from A' and stores it in RAM. At that point (0BE1) it checks again if
|
||||||
a transfer is in progress. If the trasnfer has terminated, it jumps to 0BEB, which
|
a transfer is in progress. If the transfer has terminated, it jumps to 0BEB, which
|
||||||
restores the command from RAM, and jumps back to 0BBA to send the command. However,
|
restores the command from RAM, and jumps back to 0BBA to send the command. However,
|
||||||
the instruction at 0BBA is ex af,af', so the command is overwritten with garbage.
|
the instruction at 0BBA is ex af,af', so the command is overwritten with garbage.
|
||||||
There's also an exx at 0BBB which seems unnecessary but that's harmless.
|
There's also an exx at 0BBB which seems unnecessary but that's harmless.
|
||||||
Anyway, what this bug means is that we must make sure that the 06XX generates NMIs
|
Anyway, what this bug means is that we must make sure that the 06XX generates NMIs
|
||||||
quickly enough to ensure that 0BB1 is usually not called with a transfer still is
|
quickly enough to ensure that 0BB1 is usually not called with a transfer still is
|
||||||
progress. It doesn't seem possible to prevent it altogether though, so we can only
|
progress. It doesn't seem possible to prevent it altogether though, so we can only
|
||||||
hope that the transfer doesn't terminate in the middle of the function.
|
hope that the transfer doesn't terminate in the middle of the function.
|
||||||
|
|
||||||
- bosco: we have two dumps of the sound shape ROM, "prom.1d" and "bosco.spr". Music
|
- bosco: we have two dumps of the sound shape ROM, "prom.1d" and "bosco.spr". Music
|
||||||
changes a lot from one version to the other.
|
changes a lot from one version to the other.
|
||||||
|
177
src/mame/drivers/mephisto_academy.cpp
Normal file
177
src/mame/drivers/mephisto_academy.cpp
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Sandro Ronco, hap
|
||||||
|
// thanks-to:yoyo_chessboard
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Mephisto Academy
|
||||||
|
|
||||||
|
Hardware notes:
|
||||||
|
- PCB label HGS 10 130 01
|
||||||
|
- VL65NC02-04PC, 4.91Mhz XTAL
|
||||||
|
- 2*32KB ROM(TC57256AD-12), 1st ROM half-empty
|
||||||
|
- 8KB battery-backed RAM(TC5564APL-15)
|
||||||
|
- HD44100H, HD44780, 2*16 chars LCD screen
|
||||||
|
- magnets chessboard with leds, 8 tri-color leds, beeper
|
||||||
|
|
||||||
|
Since the program is on an external module, it appears it was meant to be
|
||||||
|
a modular chesscomputer. However, no extra modules were sold separately.
|
||||||
|
Module PCB is the same as Super Mondial II College, label HGS 10 116 05.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "cpu/m6502/m65c02.h"
|
||||||
|
#include "machine/74259.h"
|
||||||
|
#include "machine/nvram.h"
|
||||||
|
#include "machine/mmboard.h"
|
||||||
|
#include "video/mmdisplay2.h"
|
||||||
|
#include "video/pwm.h"
|
||||||
|
|
||||||
|
#include "mephisto_academy.lh"
|
||||||
|
|
||||||
|
|
||||||
|
class academy_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
academy_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_led_pwm(*this, "led_pwm")
|
||||||
|
, m_outlatch(*this, "outlatch")
|
||||||
|
, m_keys(*this, "KEY")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void academy(machine_config &config);
|
||||||
|
|
||||||
|
private:
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<mephisto_board_device> m_board;
|
||||||
|
required_device<pwm_display_device> m_led_pwm;
|
||||||
|
required_device<hc259_device> m_outlatch;
|
||||||
|
required_ioport m_keys;
|
||||||
|
|
||||||
|
void main_map(address_map &map);
|
||||||
|
|
||||||
|
void led_w(u8 data);
|
||||||
|
u8 input_r();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
I/O
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
void academy_state::led_w(u8 data)
|
||||||
|
{
|
||||||
|
// d0-d3: keypad led select
|
||||||
|
// d4-d7: keypad led data
|
||||||
|
m_led_pwm->matrix(data & 0xf, ~data >> 4 & 0xf);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 academy_state::input_r()
|
||||||
|
{
|
||||||
|
// 74259 Q1 selects keypad
|
||||||
|
u8 data = m_outlatch->q1_r() ? 0 : m_keys->read();
|
||||||
|
return ~m_board->input_r() | data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Address Maps
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
void academy_state::main_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x1fff).ram().share("nvram");
|
||||||
|
map(0x2400, 0x2400).r(FUNC(academy_state::input_r));
|
||||||
|
map(0x2800, 0x2800).w(m_board, FUNC(mephisto_board_device::mux_w));
|
||||||
|
map(0x2c00, 0x2c00).w(m_board, FUNC(mephisto_board_device::led_w));
|
||||||
|
map(0x3000, 0x3007).w("outlatch", FUNC(hc259_device::write_d7));
|
||||||
|
map(0x3400, 0x3400).w(FUNC(academy_state::led_w));
|
||||||
|
map(0x3800, 0x3801).rw("display:hd44780", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
|
||||||
|
map(0x4000, 0xffff).rom();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Input Ports
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( academy )
|
||||||
|
PORT_START("KEY")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TRAIN") PORT_CODE(KEYCODE_T)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("INFO") PORT_CODE(KEYCODE_I)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("POS") PORT_CODE(KEYCODE_O)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEV") PORT_CODE(KEYCODE_L)
|
||||||
|
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FCT") PORT_CODE(KEYCODE_F)
|
||||||
|
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_F1) // combine for NEW GAME
|
||||||
|
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_F1) // "
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Machine Configs
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
void academy_state::academy(machine_config &config)
|
||||||
|
{
|
||||||
|
/* basic machine hardware */
|
||||||
|
M65C02(config, m_maincpu, 4.9152_MHz_XTAL);
|
||||||
|
m_maincpu->set_addrmap(AS_PROGRAM, &academy_state::main_map);
|
||||||
|
|
||||||
|
const attotime nmi_period = attotime::from_hz(4.9152_MHz_XTAL / (1 << 13));
|
||||||
|
m_maincpu->set_periodic_int(FUNC(academy_state::nmi_line_pulse), nmi_period);
|
||||||
|
|
||||||
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||||
|
|
||||||
|
HC259(config, m_outlatch); // SN74HC259N
|
||||||
|
m_outlatch->parallel_out_cb().set("display:dac", FUNC(dac_byte_interface::write)).rshift(2).mask(0x03);
|
||||||
|
|
||||||
|
MEPHISTO_SENSORS_BOARD(config, "board");
|
||||||
|
MEPHISTO_DISPLAY_MODULE2(config, "display"); // internal
|
||||||
|
|
||||||
|
PWM_DISPLAY(config, m_led_pwm).set_size(4, 4);
|
||||||
|
config.set_default_layout(layout_mephisto_academy);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
ROM Definitions
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
ROM_START( academy )
|
||||||
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
|
ROM_LOAD("acad4000.bin", 0x0000, 0x8000, CRC(9c5affdb) SHA1(621d16227e49b0f46ce58ce15107bae23abacadc) )
|
||||||
|
ROM_LOAD("acad8000.bin", 0x8000, 0x8000, CRC(a967922b) SHA1(1327903ff89bf96d72c930c400f367ae19e3ec68) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( academyg )
|
||||||
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
|
ROM_LOAD("academy_16k_6.3.89", 0x0000, 0x8000, CRC(e242dd6f) SHA1(95d3668b478a93a5d62304d58ef135f848b7d2cf) )
|
||||||
|
ROM_LOAD("academy_32k_6.3.89", 0x8000, 0x8000, CRC(e313d084) SHA1(ced5712d34fcc81bedcd741b7ac9e2ba17bf5235) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( academyga )
|
||||||
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
|
ROM_LOAD("academy_16k_04.10.88", 0x0000, 0x8000, CRC(89055eaa) SHA1(4b3045a75b9107737db39a8c9ab9c15ec6b0ead6) )
|
||||||
|
ROM_LOAD("academy_32k_04.10.88", 0x8000, 0x8000, CRC(478155db) SHA1(d363ab6d5bc0f47a6cdfa5132b77535ef8da8256) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
Game Drivers
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/* YEAR, NAME, PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
|
||||||
|
CONS( 1989, academy, 0, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
CONS( 1989, academyg, academy, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 06-03-89)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
CONS( 1989, academyga, academy, 0, academy, academy, academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 04-10-88)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
@ -1,5 +1,6 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Sandro Ronco
|
// copyright-holders:Sandro Ronco, hap
|
||||||
|
// thanks-to:yoyo_chessboard
|
||||||
/**************************************************************************************************
|
/**************************************************************************************************
|
||||||
|
|
||||||
Mephisto Modena
|
Mephisto Modena
|
||||||
@ -24,10 +25,10 @@ Hold Pawn + Knight buttons at boot for test mode.
|
|||||||
#include "mephisto_modena.lh"
|
#include "mephisto_modena.lh"
|
||||||
|
|
||||||
|
|
||||||
class mephisto_modena_state : public driver_device
|
class modena_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mephisto_modena_state(const machine_config &mconfig, device_type type, const char *tag)
|
modena_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag)
|
: driver_device(mconfig, type, tag)
|
||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
, m_board(*this, "board")
|
, m_board(*this, "board")
|
||||||
@ -52,21 +53,21 @@ private:
|
|||||||
|
|
||||||
void modena_mem(address_map &map);
|
void modena_mem(address_map &map);
|
||||||
|
|
||||||
uint8_t input_r();
|
u8 input_r();
|
||||||
void digits_w(uint8_t data);
|
void digits_w(u8 data);
|
||||||
void io_w(uint8_t data);
|
void io_w(u8 data);
|
||||||
void led_w(uint8_t data);
|
void led_w(u8 data);
|
||||||
void update_display();
|
void update_display();
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi_on) { m_maincpu->set_input_line(M6502_NMI_LINE, ASSERT_LINE); }
|
TIMER_DEVICE_CALLBACK_MEMBER(nmi_on) { m_maincpu->set_input_line(M6502_NMI_LINE, ASSERT_LINE); }
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi_off) { m_maincpu->set_input_line(M6502_NMI_LINE, CLEAR_LINE); }
|
TIMER_DEVICE_CALLBACK_MEMBER(nmi_off) { m_maincpu->set_input_line(M6502_NMI_LINE, CLEAR_LINE); }
|
||||||
|
|
||||||
uint8_t m_board_mux = 0xff;
|
u8 m_board_mux = 0xff;
|
||||||
uint8_t m_digits_idx = 0;
|
u8 m_digits_idx = 0;
|
||||||
uint8_t m_io_ctrl = 0;
|
u8 m_io_ctrl = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
void mephisto_modena_state::machine_start()
|
void modena_state::machine_start()
|
||||||
{
|
{
|
||||||
m_digits.resolve();
|
m_digits.resolve();
|
||||||
|
|
||||||
@ -80,14 +81,14 @@ void mephisto_modena_state::machine_start()
|
|||||||
I/O
|
I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void mephisto_modena_state::update_display()
|
void modena_state::update_display()
|
||||||
{
|
{
|
||||||
m_display->matrix(m_io_ctrl >> 1 & 7, ~m_board_mux);
|
m_display->matrix(m_io_ctrl >> 1 & 7, ~m_board_mux);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t mephisto_modena_state::input_r()
|
u8 modena_state::input_r()
|
||||||
{
|
{
|
||||||
uint8_t data = 0;
|
u8 data = 0;
|
||||||
|
|
||||||
// read buttons
|
// read buttons
|
||||||
if (~m_io_ctrl & 1)
|
if (~m_io_ctrl & 1)
|
||||||
@ -101,14 +102,14 @@ uint8_t mephisto_modena_state::input_r()
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mephisto_modena_state::led_w(uint8_t data)
|
void modena_state::led_w(u8 data)
|
||||||
{
|
{
|
||||||
// d0-d7: chessboard mux, led data
|
// d0-d7: chessboard mux, led data
|
||||||
m_board_mux = data;
|
m_board_mux = data;
|
||||||
update_display();
|
update_display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mephisto_modena_state::io_w(uint8_t data)
|
void modena_state::io_w(u8 data)
|
||||||
{
|
{
|
||||||
// d0: button select
|
// d0: button select
|
||||||
// d1-d3: led select
|
// d1-d3: led select
|
||||||
@ -119,7 +120,7 @@ void mephisto_modena_state::io_w(uint8_t data)
|
|||||||
m_dac->write(BIT(data, 6));
|
m_dac->write(BIT(data, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
void mephisto_modena_state::digits_w(uint8_t data)
|
void modena_state::digits_w(u8 data)
|
||||||
{
|
{
|
||||||
m_digits[m_digits_idx] = data ^ ((m_io_ctrl & 0x10) ? 0xff : 0x00);
|
m_digits[m_digits_idx] = data ^ ((m_io_ctrl & 0x10) ? 0xff : 0x00);
|
||||||
m_digits_idx = (m_digits_idx + 1) & 3;
|
m_digits_idx = (m_digits_idx + 1) & 3;
|
||||||
@ -131,13 +132,13 @@ void mephisto_modena_state::digits_w(uint8_t data)
|
|||||||
Address Maps
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void mephisto_modena_state::modena_mem(address_map &map)
|
void modena_state::modena_mem(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x1fff).ram().share("nvram");
|
map(0x0000, 0x1fff).ram().share("nvram");
|
||||||
map(0x4000, 0x4000).w(FUNC(mephisto_modena_state::digits_w));
|
map(0x4000, 0x4000).w(FUNC(modena_state::digits_w));
|
||||||
map(0x5000, 0x5000).w(FUNC(mephisto_modena_state::led_w));
|
map(0x5000, 0x5000).w(FUNC(modena_state::led_w));
|
||||||
map(0x6000, 0x6000).w(FUNC(mephisto_modena_state::io_w));
|
map(0x6000, 0x6000).w(FUNC(modena_state::io_w));
|
||||||
map(0x7000, 0x7000).r(FUNC(mephisto_modena_state::input_r));
|
map(0x7000, 0x7000).r(FUNC(modena_state::input_r));
|
||||||
map(0x7f00, 0x7fff).nopr(); // dummy read on 6502 absolute X page wrap
|
map(0x7f00, 0x7fff).nopr(); // dummy read on 6502 absolute X page wrap
|
||||||
map(0x8000, 0xffff).rom().region("maincpu", 0);
|
map(0x8000, 0xffff).rom().region("maincpu", 0);
|
||||||
}
|
}
|
||||||
@ -166,15 +167,17 @@ INPUT_PORTS_END
|
|||||||
Machine Configs
|
Machine Configs
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void mephisto_modena_state::modena(machine_config &config)
|
void modena_state::modena(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
M65C02(config, m_maincpu, XTAL(4'194'304)); // W65C02SP or RP65C02G
|
M65C02(config, m_maincpu, 4.194304_MHz_XTAL); // W65C02SP or RP65C02G
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_modena_state::modena_mem);
|
m_maincpu->set_addrmap(AS_PROGRAM, &modena_state::modena_mem);
|
||||||
|
|
||||||
timer_device &nmi_on(TIMER(config, "nmi_on"));
|
timer_device &nmi_on(TIMER(config, "nmi_on"));
|
||||||
nmi_on.configure_periodic(FUNC(mephisto_modena_state::nmi_on), attotime::from_hz(XTAL(4'194'304) / (1 << 13)));
|
const attotime nmi_period = attotime::from_hz(4.194304_MHz_XTAL / (1 << 13));
|
||||||
nmi_on.set_start_delay(attotime::from_hz(XTAL(4'194'304) / (1 << 13)) - attotime::from_usec(975)); // active for 975us
|
nmi_on.configure_periodic(FUNC(modena_state::nmi_on), nmi_period);
|
||||||
TIMER(config, "nmi_off").configure_periodic(FUNC(mephisto_modena_state::nmi_off), attotime::from_hz(XTAL(4'194'304) / (1 << 13)));
|
nmi_on.set_start_delay(nmi_period - attotime::from_usec(975)); // active for 975us
|
||||||
|
TIMER(config, "nmi_off").configure_periodic(FUNC(modena_state::nmi_off), nmi_period);
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||||
|
|
||||||
@ -220,7 +223,7 @@ ROM_END
|
|||||||
Game driver(s)
|
Game driver(s)
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||||
CONS( 1992, modena, 0, 0, modena, modena, mephisto_modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1992, modena, 0, 0, modena, modena, modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
CONS( 1992, modenaa, modena, 0, modena, modena, mephisto_modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1992, modenaa, modena, 0, modena, modena, modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
CONS( 1992, modenab, modena, 0, modena, modena, mephisto_modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1992, modenab, modena, 0, modena, modena, modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Sandro Ronco
|
// copyright-holders:Sandro Ronco, hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
@ -51,9 +51,9 @@ protected:
|
|||||||
void mondial68k_mem(address_map &map);
|
void mondial68k_mem(address_map &map);
|
||||||
|
|
||||||
void lcd_s_w(u32 data);
|
void lcd_s_w(u32 data);
|
||||||
void input_mux_w(uint8_t data);
|
void input_mux_w(u8 data);
|
||||||
void board_mux_w(uint8_t data);
|
void board_mux_w(u8 data);
|
||||||
uint8_t inputs_r();
|
u8 inputs_r();
|
||||||
void update_display();
|
void update_display();
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
@ -63,8 +63,8 @@ protected:
|
|||||||
required_ioport_array<4> m_inputs;
|
required_ioport_array<4> m_inputs;
|
||||||
output_finder<4> m_digits;
|
output_finder<4> m_digits;
|
||||||
|
|
||||||
uint8_t m_input_mux = 0xff;
|
u8 m_input_mux = 0xff;
|
||||||
uint8_t m_board_mux = 0xff;
|
u8 m_board_mux = 0xff;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -94,14 +94,14 @@ void mondial68k_state::lcd_s_w(u32 data)
|
|||||||
m_digits[i] = bitswap<8>((data & 0x7fffffff) >> (8 * i), 7,4,5,0,1,2,3,6);
|
m_digits[i] = bitswap<8>((data & 0x7fffffff) >> (8 * i), 7,4,5,0,1,2,3,6);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mondial68k_state::board_mux_w(uint8_t data)
|
void mondial68k_state::board_mux_w(u8 data)
|
||||||
{
|
{
|
||||||
// d0-d7: chessboard mux, led data
|
// d0-d7: chessboard mux, led data
|
||||||
m_board_mux = data;
|
m_board_mux = data;
|
||||||
update_display();
|
update_display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mondial68k_state::input_mux_w(uint8_t data)
|
void mondial68k_state::input_mux_w(u8 data)
|
||||||
{
|
{
|
||||||
// d0-d3: button mux
|
// d0-d3: button mux
|
||||||
// d6,d7: led select
|
// d6,d7: led select
|
||||||
@ -109,9 +109,9 @@ void mondial68k_state::input_mux_w(uint8_t data)
|
|||||||
update_display();
|
update_display();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t mondial68k_state::inputs_r()
|
u8 mondial68k_state::inputs_r()
|
||||||
{
|
{
|
||||||
uint8_t data = 0x00;
|
u8 data = 0x00;
|
||||||
|
|
||||||
// read buttons
|
// read buttons
|
||||||
for (int i=0; i<4; i++)
|
for (int i=0; i<4; i++)
|
||||||
|
@ -25,7 +25,6 @@ TODO:
|
|||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
// internal artwork
|
// internal artwork
|
||||||
#include "mephisto_academy.lh"
|
|
||||||
#include "mephisto_milano.lh"
|
#include "mephisto_milano.lh"
|
||||||
#include "mephisto_polgar.lh"
|
#include "mephisto_polgar.lh"
|
||||||
|
|
||||||
@ -99,32 +98,6 @@ private:
|
|||||||
uint8_t m_led_latch;
|
uint8_t m_led_latch;
|
||||||
};
|
};
|
||||||
|
|
||||||
class mephisto_academy_state : public mephisto_polgar_state
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
mephisto_academy_state(const machine_config &mconfig, device_type type, const char *tag)
|
|
||||||
: mephisto_polgar_state(mconfig, type, tag)
|
|
||||||
, m_board(*this, "board")
|
|
||||||
, m_leds(*this, "led%u", 100U)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(academy_irq);
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(academy_nmi_w);
|
|
||||||
void academy_led_w(uint8_t data);
|
|
||||||
uint8_t academy_input_r();
|
|
||||||
|
|
||||||
void academy(machine_config &config);
|
|
||||||
void academy_mem(address_map &map);
|
|
||||||
protected:
|
|
||||||
virtual void machine_start() override;
|
|
||||||
virtual void machine_reset() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
required_device<mephisto_board_device> m_board;
|
|
||||||
output_finder<16> m_leds;
|
|
||||||
bool m_enable_nmi;
|
|
||||||
};
|
|
||||||
|
|
||||||
uint8_t mephisto_polgar_state::polgar_keys_r(offs_t offset)
|
uint8_t mephisto_polgar_state::polgar_keys_r(offs_t offset)
|
||||||
{
|
{
|
||||||
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
|
return (BIT(m_keys->read(), offset) << 7) | 0x7f;
|
||||||
@ -217,50 +190,6 @@ void mephisto_milano_state::milano_mem(address_map &map)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(mephisto_academy_state::academy_irq)
|
|
||||||
{
|
|
||||||
if (m_enable_nmi)
|
|
||||||
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(mephisto_academy_state::academy_nmi_w)
|
|
||||||
{
|
|
||||||
m_enable_nmi = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mephisto_academy_state::academy_led_w(uint8_t data)
|
|
||||||
{
|
|
||||||
for(int i=0; i<4; i++)
|
|
||||||
for(int j=0; j<4; j++)
|
|
||||||
{
|
|
||||||
if (BIT(data, i))
|
|
||||||
m_leds[j * 4 + i] = BIT(data, 4 + j) ? 0 : 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t mephisto_academy_state::academy_input_r()
|
|
||||||
{
|
|
||||||
uint8_t data;
|
|
||||||
if (m_board->mux_r() == 0xff)
|
|
||||||
data = m_keys->read();
|
|
||||||
else
|
|
||||||
data = m_board->input_r();
|
|
||||||
|
|
||||||
return data ^ 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mephisto_academy_state::academy_mem(address_map &map)
|
|
||||||
{
|
|
||||||
map(0x0000, 0x1fff).ram().share("nvram");
|
|
||||||
map(0x2400, 0x2400).r(FUNC(mephisto_academy_state::academy_input_r));
|
|
||||||
map(0x2800, 0x2800).w(m_board, FUNC(mephisto_board_device::mux_w));
|
|
||||||
map(0x2c00, 0x2c00).w(m_board, FUNC(mephisto_board_device::led_w));
|
|
||||||
map(0x3000, 0x3007).w("outlatch", FUNC(hc259_device::write_d7));
|
|
||||||
map(0x3400, 0x3400).w(FUNC(mephisto_academy_state::academy_led_w));
|
|
||||||
map(0x3800, 0x3801).rw("display:hd44780", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
|
|
||||||
map(0x4000, 0xffff).rom();
|
|
||||||
}
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( polgar )
|
static INPUT_PORTS_START( polgar )
|
||||||
PORT_START("KEY")
|
PORT_START("KEY")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Trn") PORT_CODE(KEYCODE_T)
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Trn") PORT_CODE(KEYCODE_T)
|
||||||
@ -290,16 +219,6 @@ void mephisto_milano_state::machine_reset()
|
|||||||
m_led_latch = 0;
|
m_led_latch = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mephisto_academy_state::machine_start()
|
|
||||||
{
|
|
||||||
m_leds.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
void mephisto_academy_state::machine_reset()
|
|
||||||
{
|
|
||||||
m_enable_nmi = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mephisto_polgar_state::polgar(machine_config &config)
|
void mephisto_polgar_state::polgar(machine_config &config)
|
||||||
{
|
{
|
||||||
M65C02(config, m_maincpu, XTAL(4'915'200)); // RP65C02G
|
M65C02(config, m_maincpu, XTAL(4'915'200)); // RP65C02G
|
||||||
@ -363,18 +282,6 @@ void mephisto_milano_state::milano(machine_config &config)
|
|||||||
config.set_default_layout(layout_mephisto_milano);
|
config.set_default_layout(layout_mephisto_milano);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mephisto_academy_state::academy(machine_config &config)
|
|
||||||
{
|
|
||||||
polgar(config); // CPU: VL65NC02-04PC, 4.9152Mhz
|
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_academy_state::academy_mem);
|
|
||||||
|
|
||||||
hc259_device &outlatch(HC259(config.replace(), "outlatch"));
|
|
||||||
outlatch.q_out_cb<1>().set(FUNC(mephisto_academy_state::academy_nmi_w));
|
|
||||||
outlatch.q_out_cb<2>().set("display:dac", FUNC(dac_byte_interface::write));
|
|
||||||
|
|
||||||
config.set_default_layout(layout_mephisto_academy);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ROM_START( polgar )
|
ROM_START( polgar )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
@ -405,24 +312,6 @@ ROM_START( mrisc2 )
|
|||||||
ROM_LOAD("risc_2.31", 0x00000, 0x20000, CRC(9ecf9cd3) SHA1(7bfc628183037a172242c9589f15aca218d8fb12) )
|
ROM_LOAD("risc_2.31", 0x00000, 0x20000, CRC(9ecf9cd3) SHA1(7bfc628183037a172242c9589f15aca218d8fb12) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( academy )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
|
||||||
ROM_LOAD("acad4000.bin", 0x4000, 0x4000, CRC(ee1222b5) SHA1(98541d87755a7186b69b9723cc4adbd07f20f0e2) )
|
|
||||||
ROM_LOAD("acad8000.bin", 0x8000, 0x8000, CRC(a967922b) SHA1(1327903ff89bf96d72c930c400f367ae19e3ec68) )
|
|
||||||
ROM_END
|
|
||||||
|
|
||||||
ROM_START( academyg )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
|
||||||
ROM_LOAD("academy_16k_6.3.89", 0x4000, 0x4000, CRC(900a0001) SHA1(174a6bc3bde55994c603e232fcb45fccd62f11f6) )
|
|
||||||
ROM_LOAD("academy_32k_6.3.89", 0x8000, 0x8000, CRC(e313d084) SHA1(ced5712d34fcc81bedcd741b7ac9e2ba17bf5235) )
|
|
||||||
ROM_END
|
|
||||||
|
|
||||||
ROM_START( academyga )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
|
||||||
ROM_LOAD("academy_16k_04.10.88", 0x4000, 0x4000, CRC(fb4d83c4) SHA1(f5132042c3b5a17c173f81eaa57e313ff0bb848e) )
|
|
||||||
ROM_LOAD("academy_32k_04.10.88", 0x8000, 0x8000, CRC(478155db) SHA1(d363ab6d5bc0f47a6cdfa5132b77535ef8da8256) )
|
|
||||||
ROM_END
|
|
||||||
|
|
||||||
ROM_START( milano )
|
ROM_START( milano )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD("milano102.bin", 0x0000, 0x10000, CRC(0e9c8fe1) SHA1(e9176f42d86fe57e382185c703c7eff7e63ca711) )
|
ROM_LOAD("milano102.bin", 0x0000, 0x10000, CRC(0e9c8fe1) SHA1(e9176f42d86fe57e382185c703c7eff7e63ca711) )
|
||||||
@ -452,10 +341,6 @@ CONS( 1992, mrisc, 0, 0, mrisc, polgar, mephisto_risc_state,
|
|||||||
CONS( 1994, mrisc2, mrisc, 0, mrisc, polgar, mephisto_risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1994, mrisc2, mrisc, 0, mrisc, polgar, mephisto_risc_state, empty_init, "Hegener + Glaser / Tasc", "Mephisto Risc II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
|
||||||
// not modular boards
|
// not modular boards
|
||||||
CONS( 1989, academy, 0, 0, academy, polgar, mephisto_academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
|
||||||
CONS( 1989, academyg, academy, 0, academy, polgar, mephisto_academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 06-03-89)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
|
||||||
CONS( 1989, academyga, academy, 0, academy, polgar, mephisto_academy_state, empty_init, "Hegener + Glaser", "Mephisto Academy (German, 04-10-88)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
|
||||||
|
|
||||||
CONS( 1991, milano, 0, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.02)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1991, milano, 0, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.02)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
CONS( 1991, milanoa, milano, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1991, milanoa, milano, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Milano (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
CONS( 1993, nshort, milano, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Nigel Short", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
CONS( 1993, nshort, milano, 0, milano, polgar, mephisto_milano_state, empty_init, "Hegener + Glaser", "Mephisto Nigel Short", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
@ -199,8 +199,8 @@ void star_state::sstar28k(machine_config &config)
|
|||||||
M6502(config, m_maincpu, 2000000); // no XTAL
|
M6502(config, m_maincpu, 2000000); // no XTAL
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::sstar28k_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::sstar28k_map);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(2000000 / 0x2000); // 4020 Q13
|
const attotime nmi_period = attotime::from_hz(2000000 / 0x2000); // 4020 Q13
|
||||||
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period);
|
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period);
|
||||||
|
|
||||||
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
|
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
|
||||||
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
||||||
@ -224,8 +224,8 @@ void star_state::tstar432(machine_config &config)
|
|||||||
R65C02(config.replace(), m_maincpu, 4_MHz_XTAL);
|
R65C02(config.replace(), m_maincpu, 4_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(4_MHz_XTAL / 0x4000); // 4020 Q14
|
const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x4000); // 4020 Q14
|
||||||
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period);
|
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period);
|
||||||
|
|
||||||
config.set_default_layout(layout_saitek_tstar432);
|
config.set_default_layout(layout_saitek_tstar432);
|
||||||
|
|
||||||
@ -242,8 +242,8 @@ void star_state::sstar36k(machine_config &config)
|
|||||||
M6502(config.replace(), m_maincpu, 2_MHz_XTAL);
|
M6502(config.replace(), m_maincpu, 2_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(2_MHz_XTAL / 0x2000); // 4020 Q13
|
const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x2000); // 4020 Q13
|
||||||
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period);
|
m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,21 @@
|
|||||||
license:CC0
|
license:CC0
|
||||||
-->
|
-->
|
||||||
<mamelayout version="2">
|
<mamelayout version="2">
|
||||||
|
|
||||||
<!-- define elements -->
|
<!-- define elements -->
|
||||||
|
|
||||||
|
<element name="ledo">
|
||||||
|
<disk><color red="0.1" green="0.1" blue="0.1" /></disk>
|
||||||
|
</element>
|
||||||
|
<element name="ledr" defstate="0">
|
||||||
|
<disk state="0"><color red="0" green="0" blue="0" /></disk>
|
||||||
|
<disk state="1"><color red="1" green="0" blue="0" /></disk>
|
||||||
|
</element>
|
||||||
|
<element name="ledg" defstate="0">
|
||||||
|
<disk state="0"><color red="0" green="0" blue="0" /></disk>
|
||||||
|
<disk state="1"><color red="0" green="1" blue="0" /></disk>
|
||||||
|
</element>
|
||||||
|
|
||||||
<element name="led" defstate="0">
|
<element name="led" defstate="0">
|
||||||
<disk state="0">
|
<disk state="0">
|
||||||
<color red="0.20" green="0.0" blue="0.0" />
|
<color red="0.20" green="0.0" blue="0.0" />
|
||||||
@ -389,47 +403,65 @@ license:CC0
|
|||||||
</group>
|
</group>
|
||||||
|
|
||||||
<group name="panel">
|
<group name="panel">
|
||||||
<bounds left="0" right="75.25" top="0" bottom="8.5" />
|
<bounds left="0" right="100" top="0" bottom="10" />
|
||||||
|
|
||||||
<bezel element="text_lcd"><bounds x="1" y="6.5" width="24" height="1.7" /></bezel>
|
<bezel element="text_lcd"><bounds x="1" y="6.5" width="24" height="1.7" /></bezel>
|
||||||
<group ref="lcd"><bounds x="1" y="0" width="23.55" height="6.25" /></group>
|
<group ref="lcd"><bounds x="1" y="0" width="23.55" height="6.25" /></group>
|
||||||
|
|
||||||
<bezel name="led100" element="led"> <bounds x="29.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_train"> <bounds x="29.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led101" element="led"> <bounds x="35.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_info"> <bounds x="35.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led102" element="led"> <bounds x="41.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_mem"> <bounds x="41.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led103" element="led"> <bounds x="47.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_pos"> <bounds x="47.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led108" element="led"> <bounds x="54.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_lev"> <bounds x="53.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led109" element="led"> <bounds x="60.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_fct"> <bounds x="59.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led114" element="led"> <bounds x="66.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_ent"> <bounds x="67.25" y="2" width="5" height="1.5" /> </bezel>
|
||||||
<bezel name="led115" element="led"> <bounds x="72.1" y="0.1" width="1.3" height="1.3" /> </bezel>
|
<bezel element="text_cl"> <bounds x="74.25" y="2" width="3" height="1.5" /> </bezel>
|
||||||
|
|
||||||
<bezel element="text_train"> <bounds x="27.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p6"> <bounds x="29.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_info"> <bounds x="33.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p5"> <bounds x="35.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_mem"> <bounds x="39.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p4"> <bounds x="41.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_pos"> <bounds x="45.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p3"> <bounds x="47.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_lev"> <bounds x="52.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p2"> <bounds x="53.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_fct"> <bounds x="58.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_p1"> <bounds x="59.25" y="6.5" width="5" height="1.5" /> </bezel>
|
||||||
<bezel element="text_ent"> <bounds x="64.25" y="2" width="5" height="1.5" /> </bezel>
|
<bezel element="text_newgame"> <bounds x="68.25" y="6.70" width="9" height="1.5" /> </bezel>
|
||||||
<bezel element="text_cl"> <bounds x="71.25" y="2" width="3" height="1.5" /> </bezel>
|
<bezel element="text_black"> <bounds x="67" y="0" width="2" height="1.3" /> </bezel>
|
||||||
|
<bezel element="text_white"> <bounds x="73" y="0" width="2" height="1.3" /> </bezel>
|
||||||
|
|
||||||
<bezel element="text_p6"> <bounds x="27.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x01"> <bounds x="31" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_p5"> <bounds x="33.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x02"> <bounds x="37" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_p4"> <bounds x="39.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x04"> <bounds x="43" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_p3"> <bounds x="45.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x08"> <bounds x="49" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_p2"> <bounds x="52.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x10"> <bounds x="55" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_p1"> <bounds x="58.25" y="6.5" width="5" height="1.5" /> </bezel>
|
<bezel element="hlb" inputtag="KEY" inputmask="0x20"> <bounds x="61" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_newgame"> <bounds x="65.25" y="6.70" width="9" height="1.5" /> </bezel>
|
<bezel element="hlbr" inputtag="KEY" inputmask="0x40"> <bounds x="69" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_black"> <bounds x="64" y="0" width="2" height="1.3" /> </bezel>
|
<bezel element="hlbr" inputtag="KEY" inputmask="0x80"> <bounds x="75" y="3.75" width="1.5" height="2.5" /> </bezel>
|
||||||
<bezel element="text_white"> <bounds x="70" y="0" width="2" height="1.3" /> </bezel>
|
|
||||||
|
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x01"> <bounds x="29" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x02"> <bounds x="35" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x04"> <bounds x="41" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x08"> <bounds x="47" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x10"> <bounds x="54" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlb" inputtag="KEY" inputmask="0x20"> <bounds x="60" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlbr" inputtag="KEY" inputmask="0x40"> <bounds x="66" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
<bezel element="hlbr" inputtag="KEY" inputmask="0x80"> <bounds x="72" y="3.75" width="1.5" height="2.5" /> </bezel>
|
<element ref="ledo"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
|
||||||
|
<element name="0.0" ref="ledr" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="1.0" ref="ledr" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="2.0" ref="ledr" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="3.0" ref="ledr" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="0.2" ref="ledr" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="1.2" ref="ledr" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="2.2" ref="ledr" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="3.2" ref="ledr" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
|
||||||
|
<element name="0.1" ref="ledg" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="1.1" ref="ledg" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="2.1" ref="ledg" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="3.1" ref="ledg" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="0.3" ref="ledg" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="1.3" ref="ledg" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="2.3" ref="ledg" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
|
<element name="3.3" ref="ledg" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
|
|
||||||
@ -439,7 +471,7 @@ license:CC0
|
|||||||
<bounds left="0" right="100" top="0" bottom="98" />
|
<bounds left="0" right="100" top="0" bottom="98" />
|
||||||
<element ref="background"><bounds x="13" y="0" width="87" height="98" /></element>
|
<element ref="background"><bounds x="13" y="0" width="87" height="98" /></element>
|
||||||
|
|
||||||
<!-- chessboard coords -->
|
<!-- chessboard coords -->
|
||||||
<bezel element="white"><bounds x="16.5" y="2.5" width="81" height="81" /></bezel>
|
<bezel element="white"><bounds x="16.5" y="2.5" width="81" height="81" /></bezel>
|
||||||
<bezel element="text_8"><bounds x="13.7" y="7" width="2" height="2" /></bezel>
|
<bezel element="text_8"><bounds x="13.7" y="7" width="2" height="2" /></bezel>
|
||||||
<bezel element="text_7"><bounds x="13.7" y="17" width="2" height="2" /></bezel>
|
<bezel element="text_7"><bounds x="13.7" y="17" width="2" height="2" /></bezel>
|
||||||
@ -459,9 +491,8 @@ license:CC0
|
|||||||
<bezel element="text_g"><bounds x="81" y="84.5" width="2" height="2" /></bezel>
|
<bezel element="text_g"><bounds x="81" y="84.5" width="2" height="2" /></bezel>
|
||||||
<bezel element="text_h"><bounds x="91" y="84.5" width="2" height="2" /></bezel>
|
<bezel element="text_h"><bounds x="91" y="84.5" width="2" height="2" /></bezel>
|
||||||
|
|
||||||
|
<!-- LCD panel -->
|
||||||
<!-- LCD panel -->
|
<group ref="panel"><bounds x="18" y="88" width="100" height="10" /></group>
|
||||||
<group ref="panel"><bounds x="18" y="88" width="75.25" height="8.5" /></group>
|
|
||||||
|
|
||||||
<group ref="sb_board"><bounds x="17" y="3" width="80" height="80" /></group>
|
<group ref="sb_board"><bounds x="17" y="3" width="80" height="80" /></group>
|
||||||
<group ref="sb_ui"><bounds x="1.5" y="3" width="10" height="80" /></group>
|
<group ref="sb_ui"><bounds x="1.5" y="3" width="10" height="80" /></group>
|
||||||
|
@ -22219,6 +22219,11 @@ mekd5 // 1980 Motorola Evaluation Kit
|
|||||||
crzyddz2 // 2006 Sealy
|
crzyddz2 // 2006 Sealy
|
||||||
menghong // 2004? Sealy
|
menghong // 2004? Sealy
|
||||||
|
|
||||||
|
@source:mephisto_academy.cpp
|
||||||
|
academy
|
||||||
|
academyg
|
||||||
|
academyga
|
||||||
|
|
||||||
@source:mephisto_berlin.cpp
|
@source:mephisto_berlin.cpp
|
||||||
berl16 // 1992 Mephisto Berlin 68000
|
berl16 // 1992 Mephisto Berlin 68000
|
||||||
berl16a // 1992 Mephisto Berlin 68000
|
berl16a // 1992 Mephisto Berlin 68000
|
||||||
@ -22326,9 +22331,6 @@ polgar10 // 1990 Mephisto Polgar 10MHz
|
|||||||
polgar101 // 1990 Mephisto Polgar 10MHz
|
polgar101 // 1990 Mephisto Polgar 10MHz
|
||||||
mrisc // 1992 Mephisto RISC 1MB
|
mrisc // 1992 Mephisto RISC 1MB
|
||||||
mrisc2 // 1994 Mephisto RISC II
|
mrisc2 // 1994 Mephisto RISC II
|
||||||
academy // 1989 Mephisto Academy
|
|
||||||
academyg // 1989 Mephisto Academy
|
|
||||||
academyga // 1989 Mephisto Academy
|
|
||||||
milano // 1991 Mephisto Milano
|
milano // 1991 Mephisto Milano
|
||||||
milanoa // 1991 Mephisto Milano
|
milanoa // 1991 Mephisto Milano
|
||||||
nshort // 1993 Mephisto Nigel Short
|
nshort // 1993 Mephisto Nigel Short
|
||||||
|
@ -532,6 +532,7 @@ mekd2.cpp
|
|||||||
mekd3.cpp
|
mekd3.cpp
|
||||||
mekd4.cpp
|
mekd4.cpp
|
||||||
mekd5.cpp
|
mekd5.cpp
|
||||||
|
mephisto_academy.cpp
|
||||||
mephisto_berlin.cpp
|
mephisto_berlin.cpp
|
||||||
mephisto_brikett.cpp
|
mephisto_brikett.cpp
|
||||||
mephisto_glasgow.cpp
|
mephisto_glasgow.cpp
|
||||||
|
Loading…
Reference in New Issue
Block a user