From 856f17da0376a405aa7219c4d8c86c4e8f413d11 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 9 Feb 2021 18:14:10 +0100 Subject: novag_supremo: redumped the ROM [bataais] novag_supremo: move driver to novag_snova [hap] --- scripts/target/mame/mess.lua | 1 - src/mame/drivers/hh_amis2k.cpp | 2 +- src/mame/drivers/novag_snova.cpp | 93 ++++++++++++++++---- src/mame/drivers/novag_supremo.cpp | 171 ------------------------------------- src/mame/mame.lst | 2 - 5 files changed, 77 insertions(+), 192 deletions(-) delete mode 100644 src/mame/drivers/novag_supremo.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 8dd3c92a5ff..42c2bc8409f 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3179,7 +3179,6 @@ files { MAME_DIR .. "src/mame/drivers/novag_savant.cpp", MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp", MAME_DIR .. "src/mame/drivers/novag_snova.cpp", - MAME_DIR .. "src/mame/drivers/novag_supremo.cpp", } createMESSProjects(_target, _subtarget, "novation") diff --git a/src/mame/drivers/hh_amis2k.cpp b/src/mame/drivers/hh_amis2k.cpp index 051503c30f6..5f5ec64bf5e 100644 --- a/src/mame/drivers/hh_amis2k.cpp +++ b/src/mame/drivers/hh_amis2k.cpp @@ -267,7 +267,7 @@ void wildfire_state::wildfire(machine_config &config) ROM_START( wildfire ) ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 ) - // Typed in from patent US4334679, data should be correct(it included checksums). 1st half was also dumped/verfied with release version. + // Typed in from patent US4334679, data should be correct(it included checksums). 1st half was also dumped/verified with release version. ROM_LOAD( "us4341385", 0x0000, 0x0400, CRC(84ac0f1f) SHA1(1e00ddd402acfc2cc267c34eed4b89d863e2144f) ) ROM_CONTINUE( 0x0600, 0x0200 ) ROM_END diff --git a/src/mame/drivers/novag_snova.cpp b/src/mame/drivers/novag_snova.cpp index ce4ad04f04a..e5f088cfc52 100644 --- a/src/mame/drivers/novag_snova.cpp +++ b/src/mame/drivers/novag_snova.cpp @@ -1,12 +1,24 @@ // license:BSD-3-Clause // copyright-holders:hap -// thanks-to:Berger +// thanks-to:Berger, bataais /****************************************************************************** -Novag Super Nova (model 904) +Novag Super Nova & related chess computers. I believe the series started with +Primo. The chess engine is by David Kittinger. + +TODO: +- remove timer hack for supremo (missing extra timer emulation in MCU core) +- 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 +- nsnova serial port isn't working, MCU emulation problem? +- nsnova unmapped reads from 0x33/0x34 +- is the 1988 version of supremo the same ROM? + +=============================================================================== -The chess engine is by David Kittinger. Older versions of the program have a bug -in the opening moves, always playing B5 after D4. +Novag Super Nova (model 904) +---------------------------- Hardware notes: - Hitachi HD63A03YP MCU @ 16MHz (4MHz internal) @@ -15,12 +27,21 @@ Hardware notes: - RJ-12 port for Novag Super System (like the one in sexpertc) - buzzer, 16 LEDs, 8*8 chessboard buttons -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 -- rs232 port isn't working? -- unmapped reads from 0x33/0x34 +Older versions had a bug in the opening moves, always playing B5 after D4. + +=============================================================================== + +Novag Supremo (model 881) +---------------------------- + +Hardware notes: +- Hitachi HD63A03YP MCU @ 8MHz (2MHz internal) +- 32KB ROM(TC57256AD-12), 2KB RAM(TC5516APL) +- LCD with 4 digits and custom segments, no LCD chip +- buzzer, 16 LEDs, 8*8 chessboard buttons + +Supremo also had a "limited edition" rerelease in 1990, plastic is fake-wood +instead of black, otherwise it's the same game. ******************************************************************************/ @@ -58,6 +79,7 @@ public: // machine configs void snova(machine_config &config); + void supremo(machine_config &config); protected: virtual void machine_start() override; @@ -69,11 +91,12 @@ private: required_device m_lcd_pwm; required_device m_led_pwm; required_device m_dac; - required_device m_rs232; + optional_device m_rs232; required_ioport_array<2> m_inputs; output_finder<4, 10> m_out_lcd; - void main_map(address_map &map); + void snova_map(address_map &map); + void supremo_map(address_map &map); void lcd_pwm_w(offs_t offset, u8 data); void update_leds(); @@ -137,7 +160,10 @@ u8 snova_state::p2_r() data |= BIT(m_inputs[i]->read(), m_inp_mux); // P23: serial rx - return (data ^ 1) | (m_rs232->rxd_r() << 3); + if (m_rs232) + data |= m_rs232->rxd_r() << 3; + + return data ^ 1; } void snova_state::p2_w(u8 data) @@ -154,7 +180,8 @@ void snova_state::p2_w(u8 data) m_dac->write(BIT(data, 2)); // P24: serial tx - m_rs232->write_txd(BIT(~data, 4)); + if (m_rs232) + m_rs232->write_txd(BIT(~data, 4)); // P25-P27: 4051 S1-S2 // 4051 Y0-Y7: multiplexed inputs @@ -183,14 +210,20 @@ void snova_state::p6_w(u8 data) Address Maps ******************************************************************************/ -void snova_state::main_map(address_map &map) +void snova_state::supremo_map(address_map &map) { map(0x0000, 0x0027).m(m_maincpu, FUNC(hd6303y_cpu_device::hd6301y_io)); map(0x0040, 0x013f).ram(); // internal - map(0x4000, 0x5fff).ram(); + map(0x4000, 0x47ff).ram(); map(0x8000, 0xffff).rom(); } +void snova_state::snova_map(address_map &map) +{ + supremo_map(map); + map(0x4000, 0x5fff).ram(); +} + /****************************************************************************** @@ -229,7 +262,7 @@ void snova_state::snova(machine_config &config) { /* basic machine hardware */ HD6303Y(config, m_maincpu, 16_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &snova_state::main_map); + m_maincpu->set_addrmap(AS_PROGRAM, &snova_state::snova_map); m_maincpu->in_p2_cb().set(FUNC(snova_state::p2_r)); m_maincpu->out_p2_cb().set(FUNC(snova_state::p2_w)); m_maincpu->out_p5_cb().set(FUNC(snova_state::p5_w)); @@ -259,6 +292,21 @@ void snova_state::snova(machine_config &config) RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); } +void snova_state::supremo(machine_config &config) +{ + snova(config); + + /* basic machine hardware */ + m_maincpu->set_clock(8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &snova_state::supremo_map); + + // THIS IS A HACK, vector @ 0xffec, use ROM_COPY + const attotime irq_period = attotime::from_ticks(4 * 128 * 11, 8_MHz_XTAL); + m_maincpu->set_periodic_int(FUNC(snova_state::irq0_line_hold), irq_period); + + config.device_remove("rs232"); +} + /****************************************************************************** @@ -273,6 +321,16 @@ ROM_START( nsnova ) // ID = N1.05 ROM_LOAD("nsnova.svg", 0, 50926, CRC(5ffa1b53) SHA1(8b1f862bfdf0be837a4e8dc94fea592d6ffff629) ) ROM_END +ROM_START( supremo ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("sp_a10.u5", 0x8000, 0x8000, CRC(1db63786) SHA1(4f24452ed8955b31ba88f68cc95c357660930aa4) ) + + ROM_COPY("maincpu", 0xffec, 0xfff8, 2) // HACK + + ROM_REGION( 50926, "screen", 0 ) + ROM_LOAD("nsnova.svg", 0, 50926, CRC(5ffa1b53) SHA1(8b1f862bfdf0be837a4e8dc94fea592d6ffff629) ) +ROM_END + } // anonymous namespace @@ -284,3 +342,4 @@ 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, v1.05)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, supremo, 0, 0, supremo, snova, snova_state, empty_init, "Novag", "Supremo - Limited Edition", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/novag_supremo.cpp b/src/mame/drivers/novag_supremo.cpp deleted file mode 100644 index ea86b57d440..00000000000 --- a/src/mame/drivers/novag_supremo.cpp +++ /dev/null @@ -1,171 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -// thanks-to:Berger -/****************************************************************************** - -Novag Supremo - -Hardware notes: -- Hitachi HD63A03YP MCU @ 8MHz (2MHz internal) -- 32KB ROM(TC57256AD-12), 2KB RAM(TC5516APL) -- LCD with 4 digits and custom segments, no LCD chip -- buzzer, 16 LEDs, 8*8 chessboard buttons - -Novag Primo is assumed to be on similar hardware -Supremo also had a "limited edition" rerelease in 1990, plastic is fake-wood -instead of black, otherwise it's the same game. - -TODO: -- does not work, most likely due to incomplete cpu emulation (unemulated timer registers), - could also be a bad rom dump on top of that - even when adding IRQ3 with a hack, it - doesn't do much at all -- I/O seems very similar to nsnova, can drivers be merged? (get this one working first) -- is 1988 version the same ROM? - -******************************************************************************/ - -#include "emu.h" - -#include "cpu/m6800/m6801.h" -#include "machine/sensorboard.h" -#include "sound/dac.h" - -#include "speaker.h" - - -namespace { - -class supremo_state : public driver_device -{ -public: - supremo_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_dac(*this, "dac") - { } - - // machine configs - void supremo(machine_config &config); - -protected: - virtual void machine_start() override; - -private: - // devices/pointers - required_device m_maincpu; - required_device m_board; - required_device m_dac; - - void main_map(address_map &map); - - u8 p2_r(); - void p2_w(u8 data); - void p5_w(u8 data); - void p6_w(u8 data); -}; - -void supremo_state::machine_start() -{ -} - - - -/****************************************************************************** - I/O -******************************************************************************/ - - -u8 supremo_state::p2_r() -{ - return 1; -} - -void supremo_state::p2_w(u8 data) -{ - // P22: speaker out - m_dac->write(BIT(data, 2)); -} - -void supremo_state::p5_w(u8 data) -{ -} - -void supremo_state::p6_w(u8 data) -{ -} - - - -/****************************************************************************** - Address Maps -******************************************************************************/ - -void supremo_state::main_map(address_map &map) -{ - map(0x0000, 0x0027).m(m_maincpu, FUNC(hd6303y_cpu_device::hd6301y_io)); - map(0x0040, 0x013f).ram(); // internal - map(0x4000, 0x47ff).ram(); - map(0x8000, 0xffff).rom(); -} - - - -/****************************************************************************** - Input Ports -******************************************************************************/ - -static INPUT_PORTS_START( supremo ) -INPUT_PORTS_END - - - -/****************************************************************************** - Machine Configs -******************************************************************************/ - -void supremo_state::supremo(machine_config &config) -{ - /* basic machine hardware */ - HD6303Y(config, m_maincpu, 8_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &supremo_state::main_map); - m_maincpu->in_p2_cb().set(FUNC(supremo_state::p2_r)); - m_maincpu->out_p2_cb().set(FUNC(supremo_state::p2_w)); - m_maincpu->out_p5_cb().set(FUNC(supremo_state::p5_w)); - m_maincpu->out_p6_cb().set(FUNC(supremo_state::p6_w)); - - // THIS IS A HACK, vector @ 0xffec, use ROM_COPY - //const attotime irq_period = attotime::from_ticks(4 * 128 * 10, 8_MHz_XTAL); - //m_maincpu->set_periodic_int(FUNC(supremo_state::irq0_line_hold), irq_period); - - SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); - m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); - m_board->set_delay(attotime::from_msec(150)); - - /* sound hardware */ - SPEAKER(config, "speaker").front_center(); - DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); -} - - - -/****************************************************************************** - ROM Definitions -******************************************************************************/ - -ROM_START( supremo ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("sp_a10.u5", 0x8000, 0x8000, BAD_DUMP CRC(745d010f) SHA1(365a8e2afcf63678ba0161b9082f6439a9d78c9f) ) -ROM_END - -} // anonymous namespace - - - -/****************************************************************************** - Drivers -******************************************************************************/ - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -CONS( 1990, supremo, 0, 0, supremo, supremo, supremo_state, empty_init, "Novag", "Supremo - Limited Edition", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) - diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f50d876ed04..fd78edf2cb4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32896,8 +32896,6 @@ sfortec1 // @source:novag_snova.cpp nsnova - -@source:novag_supremo.cpp supremo @source:ns5652.cpp -- cgit v1.2.3