diff options
Diffstat (limited to 'src/mame/fidelity/msc.cpp')
-rw-r--r-- | src/mame/fidelity/msc.cpp | 57 |
1 files changed, 22 insertions, 35 deletions
diff --git a/src/mame/fidelity/msc.cpp b/src/mame/fidelity/msc.cpp index 3d30c3c29b3..2b43e680b0e 100644 --- a/src/mame/fidelity/msc.cpp +++ b/src/mame/fidelity/msc.cpp @@ -11,7 +11,8 @@ panel design, the 2nd version has rectangular buttons. See sc6.cpp for the 2nd version. Hardware notes: -- Zilog Z8 MCU(custom label, probably Z8601), 8MHz XTAL +- Zilog Z8 MCU (probably Z8601, custom label: SR0016 1001011A01 or SR0022 + 1001011B01), 8MHz XTAL - buzzer, 18 leds, 8*8 chessboard buttons, module slot released modules, * denotes not dumped yet: @@ -26,12 +27,12 @@ and one for MCS48. A12 is forced high or low to select the bank. #include "emu.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" #include "cpu/z8/z8.h" #include "machine/sensorboard.h" #include "sound/dac.h" #include "video/pwm.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" #include "softlist_dev.h" #include "speaker.h" @@ -54,35 +55,29 @@ public: m_inputs(*this, "IN.0") { } - // machine configs void msc(machine_config &config); protected: - virtual void machine_start() override; + virtual void machine_start() override ATTR_COLD; private: // devices/pointers required_device<z8_device> m_maincpu; required_device<sensorboard_device> m_board; required_device<pwm_display_device> m_display; - required_device<dac_bit_interface> m_dac; + required_device<dac_1bit_device> m_dac; required_ioport m_inputs; u8 m_led_select = 0; u16 m_inp_mux = 0; - // address maps - void main_map(address_map &map); + void main_map(address_map &map) ATTR_COLD; // I/O handlers void update_display(); void mux_w(u8 data); void control_w(u8 data); - u8 rom_r(offs_t offset); - - u8 read_inputs(); - u8 input_hi_r(); - u8 input_lo_r(); + u8 input_r(); }; void msc_state::machine_start() @@ -112,18 +107,20 @@ void msc_state::mux_w(u8 data) void msc_state::control_w(u8 data) { - // P37: input mux highest bit + // P34: speaker out + m_dac->write(BIT(~data, 4)); + // P35,P36: led select - m_inp_mux = (m_inp_mux & 0xff) | (data << 1 & 0x100); m_led_select = ~data >> 5 & 3; - update_display(); - // P34: speaker out - m_dac->write(BIT(~data, 4)); + // P37: input mux highest bit, led data + m_inp_mux = (m_inp_mux & 0xff) | (data << 1 & 0x100); + update_display(); } -u8 msc_state::read_inputs() +u8 msc_state::input_r() { + // P30-P33,P04-P07: multiplexed inputs u8 data = 0; // read chessboard sensors @@ -138,18 +135,6 @@ u8 msc_state::read_inputs() return bitswap<8>(~data,0,1,2,3,4,5,6,7); } -u8 msc_state::input_hi_r() -{ - // P04-P07: multiplexed inputs high - return read_inputs() | 0x0f; -} - -u8 msc_state::input_lo_r() -{ - // P30-P33: multiplexed inputs low - return read_inputs() | 0xf0; -} - /******************************************************************************* @@ -176,7 +161,7 @@ static INPUT_PORTS_START( msc ) 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_CODE(KEYCODE_BACKSPACE) PORT_NAME("CL") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("RE") INPUT_PORTS_END @@ -190,9 +175,11 @@ void msc_state::msc(machine_config &config) // basic machine hardware Z8601(config, m_maincpu, 8_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &msc_state::main_map); - m_maincpu->p0_in_cb().set(FUNC(msc_state::input_hi_r)); + m_maincpu->p0_in_cb().set(FUNC(msc_state::input_r)).mask(0xf0); + m_maincpu->p0_in_cb().append_constant(0x0f).mask(0x0f); m_maincpu->p2_out_cb().set(FUNC(msc_state::mux_w)); - m_maincpu->p3_in_cb().set(FUNC(msc_state::input_lo_r)); + m_maincpu->p3_in_cb().set(FUNC(msc_state::input_r)).mask(0x0f); + m_maincpu->p3_in_cb().append_constant(0xf0).mask(0xf0); m_maincpu->p3_out_cb().set(FUNC(msc_state::control_w)); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); @@ -232,4 +219,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, miniscco, miniscc, 0, msc, msc, msc_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1981, miniscco, miniscc, 0, msc, msc, msc_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (Z8 version)", MACHINE_SUPPORTS_SAVE ) |