diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 74ab818cc2d..6a11990b9b4 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2455,6 +2455,7 @@ files { createMESSProjects(_target, _subtarget, "hegener") files { + MAME_DIR .. "src/mame/drivers/mephisto_academy.cpp", MAME_DIR .. "src/mame/drivers/mephisto_berlin.cpp", MAME_DIR .. "src/mame/drivers/mephisto_brikett.cpp", MAME_DIR .. "src/mame/drivers/mephisto_glasgow.cpp", diff --git a/src/mame/drivers/cxg_dominator.cpp b/src/mame/drivers/cxg_dominator.cpp index eafc0d5ab7f..94571012159 100644 --- a/src/mame/drivers/cxg_dominator.cpp +++ b/src/mame/drivers/cxg_dominator.cpp @@ -204,8 +204,8 @@ void dominator_state::dominator(machine_config &config) R65C02(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &dominator_state::main_map); - const attotime irq_period = attotime::from_hz(4_MHz_XTAL / 0x2000); // from 4020 - m_maincpu->set_periodic_int(FUNC(dominator_state::nmi_line_pulse), irq_period); + const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); // from 4020 + m_maincpu->set_periodic_int(FUNC(dominator_state::nmi_line_pulse), nmi_period); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp index ac4993eb3c0..3ff99f9d583 100644 --- a/src/mame/drivers/fidel_elite.cpp +++ b/src/mame/drivers/fidel_elite.cpp @@ -220,7 +220,8 @@ void eag_state::init_eag2100() void eag_state::machine_reset() { fidel_clockdiv_state::machine_reset(); - m_rombank->set_entry(0); + if (m_rombank != nullptr) + m_rombank->set_entry(0); } diff --git a/src/mame/drivers/fidel_vsc.cpp b/src/mame/drivers/fidel_vsc.cpp index 5dba5bf8982..07dacd2b342 100644 --- a/src/mame/drivers/fidel_vsc.cpp +++ b/src/mame/drivers/fidel_vsc.cpp @@ -169,7 +169,7 @@ public: vsc_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_irq_on(*this, "irq_on"), + m_nmi_on(*this, "nmi_on"), m_z80pio(*this, "z80pio"), m_ppi8255(*this, "ppi8255"), m_board(*this, "board"), @@ -189,7 +189,7 @@ protected: private: // devices/pointers required_device m_maincpu; - required_device m_irq_on; + required_device m_nmi_on; required_device m_z80pio; required_device m_ppi8255; required_device m_board; @@ -206,8 +206,8 @@ private: void main_io_trampoline_w(offs_t offset, u8 data); // periodic interrupts - template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } - template TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); } + template TIMER_DEVICE_CALLBACK_MEMBER(nmi_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } + template TIMER_DEVICE_CALLBACK_MEMBER(nmi_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); } // I/O handlers 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_IO, &vsc_state::main_io); - const attotime irq_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), irq_period); - m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half) - TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off), irq_period); + const attotime nmi_period = attotime::from_hz(600); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz) + TIMER(config, m_nmi_on).configure_periodic(FUNC(vsc_state::nmi_on), nmi_period); + m_nmi_on->set_start_delay(nmi_period - attotime::from_usec(845)); // active for 0.845ms (approx half) + TIMER(config, "nmi_off").configure_periodic(FUNC(vsc_state::nmi_off), nmi_period); I8255(config, m_ppi8255); m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w)); diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp index e6835d5eb75..75f79e07db7 100644 --- a/src/mame/drivers/galaga.cpp +++ b/src/mame/drivers/galaga.cpp @@ -592,16 +592,16 @@ Notes: - 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 - 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 - 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, 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. 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 - 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. + 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. - 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. diff --git a/src/mame/drivers/mephisto_academy.cpp b/src/mame/drivers/mephisto_academy.cpp new file mode 100644 index 00000000000..ae1453d28b2 --- /dev/null +++ b/src/mame/drivers/mephisto_academy.cpp @@ -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 m_maincpu; + required_device m_board; + required_device m_led_pwm; + required_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 ) diff --git a/src/mame/drivers/mephisto_modena.cpp b/src/mame/drivers/mephisto_modena.cpp index 789fee31017..6891b54b97d 100644 --- a/src/mame/drivers/mephisto_modena.cpp +++ b/src/mame/drivers/mephisto_modena.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Sandro Ronco +// copyright-holders:Sandro Ronco, hap +// thanks-to:yoyo_chessboard /************************************************************************************************** Mephisto Modena @@ -24,10 +25,10 @@ Hold Pawn + Knight buttons at boot for test mode. #include "mephisto_modena.lh" -class mephisto_modena_state : public driver_device +class modena_state : public driver_device { 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) , m_maincpu(*this, "maincpu") , m_board(*this, "board") @@ -52,21 +53,21 @@ private: void modena_mem(address_map &map); - uint8_t input_r(); - void digits_w(uint8_t data); - void io_w(uint8_t data); - void led_w(uint8_t data); + u8 input_r(); + void digits_w(u8 data); + void io_w(u8 data); + void led_w(u8 data); void update_display(); 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); } - uint8_t m_board_mux = 0xff; - uint8_t m_digits_idx = 0; - uint8_t m_io_ctrl = 0; + u8 m_board_mux = 0xff; + u8 m_digits_idx = 0; + u8 m_io_ctrl = 0; }; -void mephisto_modena_state::machine_start() +void modena_state::machine_start() { m_digits.resolve(); @@ -80,14 +81,14 @@ void mephisto_modena_state::machine_start() I/O ******************************************************************************/ -void mephisto_modena_state::update_display() +void modena_state::update_display() { 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 if (~m_io_ctrl & 1) @@ -101,14 +102,14 @@ uint8_t mephisto_modena_state::input_r() return data; } -void mephisto_modena_state::led_w(uint8_t data) +void modena_state::led_w(u8 data) { // d0-d7: chessboard mux, led data m_board_mux = data; update_display(); } -void mephisto_modena_state::io_w(uint8_t data) +void modena_state::io_w(u8 data) { // d0: button select // d1-d3: led select @@ -119,7 +120,7 @@ void mephisto_modena_state::io_w(uint8_t data) 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_idx = (m_digits_idx + 1) & 3; @@ -131,13 +132,13 @@ void mephisto_modena_state::digits_w(uint8_t data) 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(0x4000, 0x4000).w(FUNC(mephisto_modena_state::digits_w)); - map(0x5000, 0x5000).w(FUNC(mephisto_modena_state::led_w)); - map(0x6000, 0x6000).w(FUNC(mephisto_modena_state::io_w)); - map(0x7000, 0x7000).r(FUNC(mephisto_modena_state::input_r)); + map(0x4000, 0x4000).w(FUNC(modena_state::digits_w)); + map(0x5000, 0x5000).w(FUNC(modena_state::led_w)); + map(0x6000, 0x6000).w(FUNC(modena_state::io_w)); + map(0x7000, 0x7000).r(FUNC(modena_state::input_r)); map(0x7f00, 0x7fff).nopr(); // dummy read on 6502 absolute X page wrap map(0x8000, 0xffff).rom().region("maincpu", 0); } @@ -166,15 +167,17 @@ INPUT_PORTS_END Machine Configs ******************************************************************************/ -void mephisto_modena_state::modena(machine_config &config) +void modena_state::modena(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, XTAL(4'194'304)); // W65C02SP or RP65C02G - m_maincpu->set_addrmap(AS_PROGRAM, &mephisto_modena_state::modena_mem); + M65C02(config, m_maincpu, 4.194304_MHz_XTAL); // W65C02SP or RP65C02G + m_maincpu->set_addrmap(AS_PROGRAM, &modena_state::modena_mem); + 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))); - nmi_on.set_start_delay(attotime::from_hz(XTAL(4'194'304) / (1 << 13)) - attotime::from_usec(975)); // active for 975us - TIMER(config, "nmi_off").configure_periodic(FUNC(mephisto_modena_state::nmi_off), attotime::from_hz(XTAL(4'194'304) / (1 << 13))); + const attotime nmi_period = attotime::from_hz(4.194304_MHz_XTAL / (1 << 13)); + nmi_on.configure_periodic(FUNC(modena_state::nmi_on), nmi_period); + 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); @@ -220,7 +223,7 @@ ROM_END Game driver(s) ***************************************************************************/ -/* 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, modenaa, modena, 0, modena, modena, mephisto_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 ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +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, modena_state, empty_init, "Hegener + Glaser", "Mephisto Modena (set 2)", 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 ) diff --git a/src/mame/drivers/mephisto_mondial68k.cpp b/src/mame/drivers/mephisto_mondial68k.cpp index ac87ba316db..5fd55737902 100644 --- a/src/mame/drivers/mephisto_mondial68k.cpp +++ b/src/mame/drivers/mephisto_mondial68k.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Sandro Ronco +// copyright-holders:Sandro Ronco, hap // thanks-to:Berger /*************************************************************************** @@ -51,9 +51,9 @@ protected: void mondial68k_mem(address_map &map); void lcd_s_w(u32 data); - void input_mux_w(uint8_t data); - void board_mux_w(uint8_t data); - uint8_t inputs_r(); + void input_mux_w(u8 data); + void board_mux_w(u8 data); + u8 inputs_r(); void update_display(); required_device m_maincpu; @@ -63,8 +63,8 @@ protected: required_ioport_array<4> m_inputs; output_finder<4> m_digits; - uint8_t m_input_mux = 0xff; - uint8_t m_board_mux = 0xff; + u8 m_input_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); } -void mondial68k_state::board_mux_w(uint8_t data) +void mondial68k_state::board_mux_w(u8 data) { // d0-d7: chessboard mux, led data m_board_mux = data; update_display(); } -void mondial68k_state::input_mux_w(uint8_t data) +void mondial68k_state::input_mux_w(u8 data) { // d0-d3: button mux // d6,d7: led select @@ -109,9 +109,9 @@ void mondial68k_state::input_mux_w(uint8_t data) update_display(); } -uint8_t mondial68k_state::inputs_r() +u8 mondial68k_state::inputs_r() { - uint8_t data = 0x00; + u8 data = 0x00; // read buttons for (int i=0; i<4; i++) diff --git a/src/mame/drivers/mephisto_polgar.cpp b/src/mame/drivers/mephisto_polgar.cpp index dbb48472522..c5337cf8edb 100644 --- a/src/mame/drivers/mephisto_polgar.cpp +++ b/src/mame/drivers/mephisto_polgar.cpp @@ -25,7 +25,6 @@ TODO: #include "speaker.h" // internal artwork -#include "mephisto_academy.lh" #include "mephisto_milano.lh" #include "mephisto_polgar.lh" @@ -99,32 +98,6 @@ private: 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 m_board; - output_finder<16> m_leds; - bool m_enable_nmi; -}; - uint8_t mephisto_polgar_state::polgar_keys_r(offs_t offset) { 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 ) PORT_START("KEY") 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; } -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) { 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); } -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_REGION( 0x10000, "maincpu", 0 ) @@ -405,24 +312,6 @@ ROM_START( mrisc2 ) ROM_LOAD("risc_2.31", 0x00000, 0x20000, CRC(9ecf9cd3) SHA1(7bfc628183037a172242c9589f15aca218d8fb12) ) 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_REGION( 0x10000, "maincpu", 0 ) 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 ) // 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, 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 ) diff --git a/src/mame/drivers/saitek_superstar.cpp b/src/mame/drivers/saitek_superstar.cpp index b8ad028aba2..c7ee52d972a 100644 --- a/src/mame/drivers/saitek_superstar.cpp +++ b/src/mame/drivers/saitek_superstar.cpp @@ -199,8 +199,8 @@ void star_state::sstar28k(machine_config &config) M6502(config, m_maincpu, 2000000); // no XTAL m_maincpu->set_addrmap(AS_PROGRAM, &star_state::sstar28k_map); - const attotime irq_period = attotime::from_hz(2000000 / 0x2000); // 4020 Q13 - m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period); + const attotime nmi_period = attotime::from_hz(2000000 / 0x2000); // 4020 Q13 + m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); 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); m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map); - const attotime irq_period = attotime::from_hz(4_MHz_XTAL / 0x4000); // 4020 Q14 - m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period); + const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x4000); // 4020 Q14 + m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period); 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); m_maincpu->set_addrmap(AS_PROGRAM, &star_state::tstar432_map); - const attotime irq_period = attotime::from_hz(2_MHz_XTAL / 0x2000); // 4020 Q13 - m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), irq_period); + const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x2000); // 4020 Q13 + m_maincpu->set_periodic_int(FUNC(star_state::nmi_line_pulse), nmi_period); } diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay index f11108f0fe5..7c5b5993ee1 100644 --- a/src/mame/layout/mephisto_academy.lay +++ b/src/mame/layout/mephisto_academy.lay @@ -3,7 +3,21 @@ license:CC0 --> + + + + + + + + + + + + + + @@ -389,47 +403,65 @@ license:CC0 - + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -439,7 +471,7 @@ license:CC0 - + @@ -459,9 +491,8 @@ license:CC0 - - - + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index aa2ad377415..d5bf9da281e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -22219,6 +22219,11 @@ mekd5 // 1980 Motorola Evaluation Kit crzyddz2 // 2006 Sealy menghong // 2004? Sealy +@source:mephisto_academy.cpp +academy +academyg +academyga + @source:mephisto_berlin.cpp berl16 // 1992 Mephisto Berlin 68000 berl16a // 1992 Mephisto Berlin 68000 @@ -22326,9 +22331,6 @@ polgar10 // 1990 Mephisto Polgar 10MHz polgar101 // 1990 Mephisto Polgar 10MHz mrisc // 1992 Mephisto RISC 1MB mrisc2 // 1994 Mephisto RISC II -academy // 1989 Mephisto Academy -academyg // 1989 Mephisto Academy -academyga // 1989 Mephisto Academy milano // 1991 Mephisto Milano milanoa // 1991 Mephisto Milano nshort // 1993 Mephisto Nigel Short diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 91336316aaf..875da275e0f 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -532,6 +532,7 @@ mekd2.cpp mekd3.cpp mekd4.cpp mekd5.cpp +mephisto_academy.cpp mephisto_berlin.cpp mephisto_brikett.cpp mephisto_glasgow.cpp