// 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 - 8 tri-color leds (not fully used: always outputs 6 red, 2 green) - magnets chessboard with 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" namespace { 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 } // anonymous namespace /*************************************************************************** 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 )