diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 856f667fbbf..64b9dee040f 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -1940,6 +1940,7 @@ files { MAME_DIR .. "src/mame/includes/fidelbase.h", MAME_DIR .. "src/mame/drivers/fidel6502.cpp", MAME_DIR .. "src/mame/drivers/fidel68k.cpp", + MAME_DIR .. "src/mame/drivers/fidelmcs48.cpp", } createMESSProjects(_target, _subtarget, "force") diff --git a/src/mame/drivers/fidelmcs48.cpp b/src/mame/drivers/fidelmcs48.cpp new file mode 100644 index 00000000000..9042bb199b0 --- /dev/null +++ b/src/mame/drivers/fidelmcs48.cpp @@ -0,0 +1,190 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:yovan +/****************************************************************************** + + Fidelity generic MCS-48 based chess computer driver + + NOTE: MAME doesn't include a generalized implementation for boardpieces yet, + greatly affecting user playability of emulated electronic board games. + As workaround for the chess games, use an external chess GUI on the side, + such as Arena(in editmode). + + TODO: + - nothing + +****************************************************************************** + +Sensory Chess Challenger 6 (model SC6): +- PCB label 510-1045B01 +- INS8040N-11 MCU, 11MHz XTAL +- external 4KB ROM 2332 101-1035A01, in module slot +- buzzer, 2 7seg LEDs, 8*8 chessboard buttons + +******************************************************************************/ + +#include "emu.h" +#include "includes/fidelbase.h" + +#include "cpu/mcs48/mcs48.h" +#include "sound/volt_reg.h" +#include "speaker.h" + +// internal artwork +#include "fidel_sc6.lh" // clickable + + +class fidelmcs48_state : public fidelbase_state +{ +public: + fidelmcs48_state(const machine_config &mconfig, device_type type, const char *tag) + : fidelbase_state(mconfig, type, tag) + { } + + // SC6 + void sc6_prepare_display(); + DECLARE_WRITE8_MEMBER(sc6_mux_w); + DECLARE_WRITE8_MEMBER(sc6_select_w); + DECLARE_READ8_MEMBER(sc6_input_r); + DECLARE_READ8_MEMBER(sc6_input6_r); + DECLARE_READ8_MEMBER(sc6_input7_r); +}; + + + +// Devices, I/O + +/****************************************************************************** + SC6 +******************************************************************************/ + +// MCU ports/generic + +void fidelmcs48_state::sc6_prepare_display() +{ + // 2 7seg leds + set_display_segmask(3, 0x7f); + display_matrix(7, 2, m_7seg_data, m_led_select); +} + +WRITE8_MEMBER(fidelmcs48_state::sc6_mux_w) +{ + // P24-P27: 7442 A-D + u16 sel = 1 << (data >> 4 & 0xf) & 0x3ff; + + // 7442 0-8: input mux, 7seg data + m_inp_mux = sel & 0x1ff; + m_7seg_data = sel & 0x7f; + sc6_prepare_display(); + + // 7442 9: speaker out + m_dac->write(BIT(sel, 9)); +} + +WRITE8_MEMBER(fidelmcs48_state::sc6_select_w) +{ + // P16,P17: digit select + m_led_select = ~data >> 6 & 3; + sc6_prepare_display(); +} + +READ8_MEMBER(fidelmcs48_state::sc6_input_r) +{ + // P10-P15: multiplexed inputs low + return (~read_inputs(9) & 0xff) | 0xc0; +} + +READ8_MEMBER(fidelmcs48_state::sc6_input6_r) +{ + // T0: multiplexed inputs bit 6 + return ~read_inputs(9) >> 6 & 1; +} + +READ8_MEMBER(fidelmcs48_state::sc6_input7_r) +{ + // T1: multiplexed inputs bit 7 + return ~read_inputs(9) >> 7 & 1; +} + + + +/****************************************************************************** + Address Maps +******************************************************************************/ + +// SC6 + +static ADDRESS_MAP_START( sc6_map, AS_PROGRAM, 8, fidelmcs48_state ) + AM_RANGE(0x0000, 0x0fff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sc6_io, AS_IO, 8, fidelmcs48_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(sc6_mux_w) AM_READNOP + AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(sc6_input_r, sc6_select_w) + AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(sc6_input6_r) + AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(sc6_input7_r) +ADDRESS_MAP_END + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( sc6 ) + PORT_INCLUDE( fidel_cb_buttons ) + + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM / Knight") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB / Bishop") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV / Rook") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Drivers +******************************************************************************/ + +static MACHINE_CONFIG_START( sc6, fidelmcs48_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", I8040, XTAL_11MHz) + MCFG_CPU_PROGRAM_MAP(sc6_map) + MCFG_CPU_IO_MAP(sc6_io) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelbase_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_fidel_sc6) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("speaker") + MCFG_SOUND_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) + MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) + MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) +MACHINE_CONFIG_END + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( fscc6 ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD("101-1035a01", 0x0000, 0x1000, CRC(0024971f) SHA1(76b16364913ada2fb94b9e6a8524b924e6832ddf) ) // 2332 +ROM_END + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ +CONS( 1982, fscc6, 0, 0, sc6, sc6, driver_device, 0, "Fidelity", "Sensory Chess Challenger 6", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/novagmcs48.cpp b/src/mame/drivers/novagmcs48.cpp index 9cf4aeff450..697397a053b 100644 --- a/src/mame/drivers/novagmcs48.cpp +++ b/src/mame/drivers/novagmcs48.cpp @@ -110,7 +110,7 @@ MACHINE_RESET_MEMBER(novagmcs48_state, octo) // Presto/Octo -static ADDRESS_MAP_START( presto_map, AS_IO, 8, novagmcs48_state ) +static ADDRESS_MAP_START( presto_io, AS_IO, 8, novagmcs48_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(presto_input_r) AM_WRITENOP AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(presto_control_w) @@ -127,14 +127,14 @@ static INPUT_PORTS_START( presto ) PORT_INCLUDE( novag_cb_buttons ) PORT_START("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Black/White") // Octo calls it "Change Color" - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Verify / Pawn") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Set Up / Rook") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Knight") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Set Level / Bishop") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Queen") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Take Back / King") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Go") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Black/White") // Octo calls it "Change Color" + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Verify / Pawn") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Set Up / Rook") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Knight") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Set Level / Bishop") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Queen") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Take Back / King") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Go") INPUT_PORTS_END static INPUT_PORTS_START( octo ) @@ -161,7 +161,7 @@ static MACHINE_CONFIG_START( presto, novagmcs48_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8049, 6000000) // LC circuit, measured - MCFG_CPU_IO_MAP(presto_map) + MCFG_CPU_IO_MAP(presto_io) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novagbase_state, display_decay_tick, attotime::from_msec(1)) MCFG_DEFAULT_LAYOUT(layout_novag_presto) diff --git a/src/mame/layout/fidel_sc6.lay b/src/mame/layout/fidel_sc6.lay new file mode 100644 index 00000000000..f3cbcd49389 --- /dev/null +++ b/src/mame/layout/fidel_sc6.lay @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index bb77129937c..869e497ba7e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12421,6 +12421,9 @@ feagv7 // feagv9 // fexcel68k // +@source:fidelmcs48.cpp +fscc6 // + @source:fidelz80.cpp bridgec3 // cc10 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index dea19ce80df..f7c12badc22 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -195,6 +195,7 @@ fccpu20.cpp fccpu30.cpp fidel6502.cpp fidel68k.cpp +fidelmcs48.cpp fidelz80.cpp fk1.cpp fm7.cpp