diff --git a/src/mame/drivers/mephisto_mondial68k.cpp b/src/mame/drivers/mephisto_mondial68k.cpp index d0e7d8d7a88..bbcc6598dfd 100644 --- a/src/mame/drivers/mephisto_mondial68k.cpp +++ b/src/mame/drivers/mephisto_mondial68k.cpp @@ -16,6 +16,7 @@ Hardware: #include "emu.h" #include "cpu/m68000/m68000.h" +#include "machine/74259.h" #include "machine/sensorboard.h" #include "machine/timer.h" #include "sound/dac.h" @@ -50,10 +51,7 @@ protected: void mondial68k_mem(address_map &map); DECLARE_WRITE32_MEMBER(lcd_s_w); - DECLARE_WRITE8_MEMBER(lcd_dlen_w); - DECLARE_WRITE8_MEMBER(lcd_clb_w); - DECLARE_WRITE8_MEMBER(lcd_data_w); - DECLARE_WRITE8_MEMBER(speaker_w); + DECLARE_WRITE_LINE_MEMBER(speaker_w); DECLARE_WRITE8_MEMBER(input_mux_w); DECLARE_WRITE8_MEMBER(board_mux_w); DECLARE_READ8_MEMBER(inputs_r); @@ -69,7 +67,6 @@ protected: uint8_t m_input_mux; uint8_t m_board_mux; - uint8_t m_dac_data; }; @@ -80,14 +77,12 @@ void mondial68k_state::machine_start() save_item(NAME(m_input_mux)); save_item(NAME(m_board_mux)); - save_item(NAME(m_dac_data)); } void mondial68k_state::machine_reset() { m_input_mux = 0; m_board_mux = 0; - m_dac_data = 0; } @@ -109,25 +104,9 @@ WRITE32_MEMBER(mondial68k_state::lcd_s_w) m_digits[i] = bitswap<8>((data & 0x7fffffff) >> (8 * i), 7,4,5,0,1,2,3,6); } -WRITE8_MEMBER(mondial68k_state::lcd_clb_w) +WRITE_LINE_MEMBER(mondial68k_state::speaker_w) { - m_lcd->clb_w(data & 1); -} - -WRITE8_MEMBER(mondial68k_state::lcd_dlen_w) -{ - m_lcd->dlen_w(data & 1); -} - -WRITE8_MEMBER(mondial68k_state::lcd_data_w) -{ - m_lcd->data_w(data & 1); -} - -WRITE8_MEMBER(mondial68k_state::speaker_w) -{ - m_dac_data ^= 1; - m_dac->write(m_dac_data); + m_dac->write(state); } WRITE8_MEMBER(mondial68k_state::board_mux_w) @@ -173,12 +152,7 @@ void mondial68k_state::mondial68k_mem(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x800000, 0x800000).r(FUNC(mondial68k_state::inputs_r)); - map(0x820000, 0x82000f).nopr(); - map(0x820000, 0x820000).w(FUNC(mondial68k_state::lcd_clb_w)); - map(0x820002, 0x820002).w(FUNC(mondial68k_state::lcd_data_w)); - map(0x820004, 0x820004).w(FUNC(mondial68k_state::lcd_dlen_w)); - map(0x82000c, 0x82000d).nopw(); - map(0x82000e, 0x82000e).w(FUNC(mondial68k_state::speaker_w)); + map(0x820000, 0x82000f).nopr().w("outlatch", FUNC(hc259_device::write_d0)).umask16(0xff00); map(0x840000, 0x840000).w(FUNC(mondial68k_state::input_mux_w)); map(0x860000, 0x860000).w(FUNC(mondial68k_state::board_mux_w)); map(0xc00000, 0xc03fff).ram(); @@ -229,6 +203,13 @@ void mondial68k_state::mondial68k(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mondial68k_state::mondial68k_mem); m_maincpu->set_periodic_int(FUNC(mondial68k_state::irq5_line_hold), attotime::from_hz(128)); + hc259_device &outlatch(HC259(config, "outlatch")); + outlatch.q_out_cb<0>().set(m_lcd, FUNC(pcf2112_device::clb_w)); + outlatch.q_out_cb<1>().set(m_lcd, FUNC(pcf2112_device::data_w)); + outlatch.q_out_cb<2>().set(m_lcd, FUNC(pcf2112_device::dlen_w)); + outlatch.q_out_cb<6>().set_nop(); // another DAC input? + outlatch.q_out_cb<7>().set(FUNC(mondial68k_state::speaker_w)); + 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(100));