diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index f8f9e672ac4..72d252ced5e 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2176,6 +2176,7 @@ files { createMESSProjects(_target, _subtarget, "conic") files { MAME_DIR .. "src/mame/drivers/conic_cchess2.cpp", + MAME_DIR .. "src/mame/drivers/conic_cchess3.cpp", } createMESSProjects(_target, _subtarget, "consumenta") diff --git a/src/mame/drivers/conic_cchess2.cpp b/src/mame/drivers/conic_cchess2.cpp index 3f5150d7de3..f2613fee8a9 100644 --- a/src/mame/drivers/conic_cchess2.cpp +++ b/src/mame/drivers/conic_cchess2.cpp @@ -27,11 +27,13 @@ BTANB: ******************************************************************************/ #include "emu.h" + #include "cpu/m6502/m6504.h" #include "machine/6821pia.h" #include "machine/sensorboard.h" #include "sound/dac.h" #include "video/pwm.h" + #include "speaker.h" // internal artwork @@ -234,7 +236,7 @@ INPUT_PORTS_END void cchess2_state::cncchess2(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware M6504(config, m_maincpu, 1000000); // approximation, no XTAL m_maincpu->set_addrmap(AS_PROGRAM, &cchess2_state::main_map); @@ -251,11 +253,11 @@ void cchess2_state::cncchess2(machine_config &config) m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(150)); - /* video hardware */ + // video hardware PWM_DISPLAY(config, m_display).set_size(8, 8); config.set_default_layout(layout_conic_cchess2); - /* sound hardware */ + // sound hardware SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } @@ -267,7 +269,7 @@ void cchess2_state::cncchess2(machine_config &config) ******************************************************************************/ ROM_START( cncchess2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x2000, "maincpu", 0 ) ROM_LOAD("c11485.u2", 0x1000, 0x1000, CRC(b179d536) SHA1(0b1f9c247a4a3e2ccbf8d3ae5efa62b8938f572f) ) // AMI 2332 ROM_END diff --git a/src/mame/drivers/conic_cchess3.cpp b/src/mame/drivers/conic_cchess3.cpp new file mode 100644 index 00000000000..243278c67cf --- /dev/null +++ b/src/mame/drivers/conic_cchess3.cpp @@ -0,0 +1,161 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Berger +/****************************************************************************** + +Conic Computer Chess (model 07013), more commonly known as Conic "Korchnoi". + +The interface is similar to the previous model (07012), where the user needs +to press Enter after their move. + +Hardware notes: +- Synertek 6502A @ 2MHz +- OKI MSM5840H-41RS @ 3.57MHz (2KB internal ROM) +- 2*4KB ROM(AMI), 1KB RAM(2*2114) +- beeper, 8*8+4 leds, magnets chessboard + +TODO: +- It does not work, MSM5840 is unemulated, and the internal ROM is not dumped. + MCU handles inputs, leds, sound, and it communicates with maincpu after + triggering an IRQ. + +******************************************************************************/ + +#include "emu.h" + +#include "cpu/m6502/m6502.h" +#include "machine/sensorboard.h" +#include "sound/dac.h" +#include "video/pwm.h" + +#include "speaker.h" + +// internal artwork +//#include "conic_cchess3.lh" // clickable + + +namespace { + +class cchess3_state : public driver_device +{ +public: + cchess3_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_display(*this, "display"), + m_dac(*this, "dac") + { } + + // machine configs + void cncchess3(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + // devices/pointers + required_device m_maincpu; + required_device m_board; + required_device m_display; + required_device m_dac; + + void main_map(address_map &map); + + // I/O handlers + void main_comm_w(u8 data); + u8 main_comm_r(); +}; + +void cchess3_state::machine_start() +{ +} + + + +/****************************************************************************** + I/O +******************************************************************************/ + +void cchess3_state::main_comm_w(u8 data) +{ +} + +u8 cchess3_state::main_comm_r() +{ + return 0; +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +void cchess3_state::main_map(address_map &map) +{ + map.global_mask(0x3fff); + map(0x0000, 0x03ff).ram(); + map(0x1000, 0x1000).rw(FUNC(cchess3_state::main_comm_r), FUNC(cchess3_state::main_comm_w)); + map(0x2000, 0x3fff).rom(); +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( cncchess3 ) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Configs +******************************************************************************/ + +void cchess3_state::cncchess3(machine_config &config) +{ + // basic machine hardware + M6502(config, m_maincpu, 2_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &cchess3_state::main_map); + + SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); + m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + m_board->set_delay(attotime::from_msec(150)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(8+1, 8); + //config.set_default_layout(layout_conic_cchess3); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( cncchess3 ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD("c107013-1", 0x2000, 0x1000, CRC(3251a529) SHA1(729b22d7653761ff0951ce1da58fdfcd474a700d) ) // AMI 2332 + ROM_LOAD("c107013-2", 0x3000, 0x1000, CRC(0f38dcef) SHA1(f8fb7e12b41753fe52dd2eb2edb843211b5ca7c1) ) // " + + ROM_REGION( 0x0800, "mcu", 0 ) + ROM_LOAD("msm5840h-41rs", 0x0000, 0x0800, NO_DUMP ) +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS +CONS( 1981, cncchess3, 0, 0, cncchess3, cncchess3, cchess3_state, empty_init, "Conic", "Computer Chess (Conic, model 7013)", MACHINE_SUPPORTS_SAVE | MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 964478252c7..95987a38562 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -10799,6 +10799,9 @@ concept // 1982 Corvus Concept @source:conic_cchess2.cpp cncchess2 +@source:conic_cchess3.cpp +cncchess3 + @source:consola_emt.cpp consoemt // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index c9f74340d49..1e597a7f6fd 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -199,6 +199,7 @@ comx35.cpp concept.cpp conchess.cpp conic_cchess2.cpp +conic_cchess3.cpp consola_emt.cpp controlid.cpp cortex.cpp