From 3ec0a6596975ffb5e386d746b9179125cf518a25 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 24 Dec 2020 18:40:07 +0100 Subject: [PATCH] Machines promoted to working ---------------------------- Super Nova (Novag) [hap, Berger] --- src/mame/drivers/novag_snova.cpp | 41 +-- src/mame/drivers/odyssey2.cpp | 5 +- src/mame/drivers/saitek_mark5.cpp | 2 +- src/mame/drivers/saitek_ssystem3.cpp | 2 +- src/mame/layout/novag_snova.lay | 478 +++++++++++++++++++++++++++ 5 files changed, 505 insertions(+), 23 deletions(-) create mode 100644 src/mame/layout/novag_snova.lay diff --git a/src/mame/drivers/novag_snova.cpp b/src/mame/drivers/novag_snova.cpp index c809817c52f..de9d497ba04 100644 --- a/src/mame/drivers/novag_snova.cpp +++ b/src/mame/drivers/novag_snova.cpp @@ -16,7 +16,6 @@ TODO: - NMI on power-off switch, it sets 0x14 bit 7 for standby power (see below) - add nvram, MCU is missing standby power emulation - beeps are glitchy, as if interrupted for too long -- internal artwork - rs232 port isn't working? - unmapped reads from 0x33/0x34 @@ -33,6 +32,9 @@ TODO: #include "screen.h" #include "speaker.h" +// internal artwork +#include "novag_snova.lh" // clickable + namespace { @@ -149,7 +151,7 @@ void snova_state::p2_w(u8 data) m_dac->write(BIT(data, 2)); // P24: serial tx - m_rs232->write_txd(BIT(data, 4)); + m_rs232->write_txd(BIT(~data, 4)); // P25-P27: 4051 S1-S2 // 4051 Y0-Y7: multiplexed inputs @@ -194,24 +196,24 @@ void snova_state::main_map(address_map &map) static INPUT_PORTS_START( snova ) PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) // pawn - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) // knight - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) // bishop - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) // rook - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) // queen - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) // king + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Trace Back / Next Best") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Trace Forward / Auto Play") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Set Level / Pawn") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Info / Echo / Knight") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Easy / Moves / Bishop") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Solve Mate / Language / Rook") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Sound / Game / Queen") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Referee / Board / King") PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) // go - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) // verify - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // new game + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Go") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Restore") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Hint / Human") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board / Clear") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Color / Video") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Set Up / Verify") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Random / Auto Clock") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("New Game") INPUT_PORTS_END @@ -244,6 +246,7 @@ void snova_state::snova(machine_config &config) screen.set_visarea_full(); PWM_DISPLAY(config, m_led_pwm).set_size(2, 8); + config.set_default_layout(layout_novag_snova); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -276,5 +279,5 @@ ROM_END ******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -CONS( 1990, nsnova, 0, 0, snova, snova, snova_state, empty_init, "Novag", "Super Nova (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1990, nsnova, 0, 0, snova, snova, snova_state, empty_init, "Novag", "Super Nova (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/odyssey2.cpp b/src/mame/drivers/odyssey2.cpp index 1790f3dcd26..e79ba927676 100644 --- a/src/mame/drivers/odyssey2.cpp +++ b/src/mame/drivers/odyssey2.cpp @@ -270,6 +270,7 @@ void odyssey2_state::odyssey2_palette(palette_device &palette) const void odyssey2_state::adjust_palette() { + // JO7400 has an RGB port, on other consoles it's an optional homebrew modification if (ioport("CONF")->read() & 1) m_i8244->i8244_palette(*m_palette); else @@ -456,7 +457,7 @@ void vpp_state::i8243_port_w(u8 data) // P4,P5: color mix I8244 side (IC674) // P6,P7: color mix EF9340 side (IC678) u8 mask = 0xf; - if (~P & 1) + if constexpr (~P & 1) { data <<= 4; mask <<= 4; @@ -464,7 +465,7 @@ void vpp_state::i8243_port_w(u8 data) m_screen->update_now(); - if (P & 2) + if constexpr (P & 2) m_mix_i8244 = (m_mix_i8244 & ~mask) | (data & mask); else m_mix_ef934x = (m_mix_ef934x & ~mask) | (data & mask); diff --git a/src/mame/drivers/saitek_mark5.cpp b/src/mame/drivers/saitek_mark5.cpp index f87a57bc2eb..83a92784c4f 100644 --- a/src/mame/drivers/saitek_mark5.cpp +++ b/src/mame/drivers/saitek_mark5.cpp @@ -174,7 +174,7 @@ void mark5_state::pwm_output_w(offs_t offset, u8 data) template void mark5_state::lcd_output_w(u64 data) { - if (N == 0) + if constexpr (N == 0) { // HLCD0538 R pins m_lcd_rowsel = data & 0xff; diff --git a/src/mame/drivers/saitek_ssystem3.cpp b/src/mame/drivers/saitek_ssystem3.cpp index 137a4811353..ae504cc2138 100644 --- a/src/mame/drivers/saitek_ssystem3.cpp +++ b/src/mame/drivers/saitek_ssystem3.cpp @@ -308,7 +308,7 @@ void ssystem3_state::lcd2_output_w(offs_t offset, u32 data) m_lcd2_data = u64(data) << 32 | m_lcd2_data >> 32; - if (N == 1) + if constexpr (N == 1) lcd2_update(); } diff --git a/src/mame/layout/novag_snova.lay b/src/mame/layout/novag_snova.lay new file mode 100644 index 00000000000..866fdb9af21 --- /dev/null +++ b/src/mame/layout/novag_snova.lay @@ -0,0 +1,478 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +