diff --git a/src/devices/machine/clock.h b/src/devices/machine/clock.h index 46bb2361909..4bf0bed47a0 100644 --- a/src/devices/machine/clock.h +++ b/src/devices/machine/clock.h @@ -10,6 +10,7 @@ class clock_device : public device_t { public: auto signal_handler() { return m_signal_handler.bind(); } + DECLARE_READ_LINE_MEMBER(signal_r) { return m_signal; } clock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 64aeb1f25d2..1fb44232036 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -288,7 +288,7 @@ P27 - row 3 through inverter PROG - I/O expander T0 - optical card sensor (high = bright/reflective, low = dark/non reflective) -T1 - connects to inverter, then nothing? +T1 - connects to inverter, then 5MHz/4 D8243C I/O expander: -------------------- @@ -525,8 +525,7 @@ public: m_i8243(*this, "i8243"), m_beeper_off(*this, "beeper_off"), m_beeper(*this, "beeper"), - m_irq_on(*this, "irq_on"), - m_barcode(*this, "BARCODE") + m_irq_on(*this, "irq_on") { } void cc10(machine_config &config); @@ -552,7 +551,6 @@ private: optional_device m_beeper_off; optional_device m_beeper; optional_device m_irq_on; - optional_ioport m_barcode; TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); } TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); } @@ -601,14 +599,10 @@ private: void vbrc_prepare_display(); DECLARE_WRITE8_MEMBER(vbrc_speech_w); DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w); - DECLARE_READ_LINE_MEMBER(vbrc_mcu_t0_r); - DECLARE_READ_LINE_MEMBER(vbrc_mcu_t1_r); - DECLARE_WRITE_LINE_MEMBER(vbrc_clock_w); DECLARE_READ8_MEMBER(vbrc_mcu_p2_r); template void vbrc_ioexp_port_w(uint8_t data); void vbrc_main_io(address_map &map); void vbrc_main_map(address_map &map); - int m_vbrc_t1; // DSC void dsc_prepare_display(); @@ -616,9 +610,6 @@ private: DECLARE_WRITE8_MEMBER(dsc_select_w); DECLARE_READ8_MEMBER(dsc_input_r); void dsc_map(address_map &map); - -protected: - virtual void machine_start() override; }; @@ -664,17 +655,6 @@ void fidelbase_state::machine_reset() { } -void fidelz80_state::machine_start() -{ - fidelbase_state::machine_start(); - - // zerofill - m_vbrc_t1 = 0; - - // register for savestates - save_item(NAME(m_vbrc_t1)); -} - /*************************************************************************** @@ -1064,10 +1044,6 @@ void fidelz80_state::vbrc_prepare_display() u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8); set_display_segmask(0xff, 0x3fff); display_matrix(16, 8, outdata, m_led_select); - - // d14(13) is tone (not on speech model) - if (m_dac != nullptr) - m_dac->write(BIT(outdata, 14)); } WRITE8_MEMBER(fidelz80_state::vbrc_speech_w) @@ -1086,9 +1062,13 @@ WRITE8_MEMBER(fidelz80_state::vbrc_speech_w) template void fidelz80_state::vbrc_ioexp_port_w(uint8_t data) { - // P4-P7: digit segment data + // P4x-P7x: digit segment data m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P)); vbrc_prepare_display(); + + // P71 is tone (not on speech model) + if (P == 3 && m_dac != nullptr) + m_dac->write(BIT(data, 1)); } @@ -1108,23 +1088,6 @@ READ8_MEMBER(fidelz80_state::vbrc_mcu_p2_r) return (m_i8243->p2_r() & 0x0f) | (read_inputs(8) << 4 ^ 0xf0); } -READ_LINE_MEMBER(fidelz80_state::vbrc_mcu_t0_r) -{ - // T0: card scanner - return m_barcode->read(); -} - -READ_LINE_MEMBER(fidelz80_state::vbrc_mcu_t1_r) -{ - // T1: master clock / 4 - return m_vbrc_t1; -} - -WRITE_LINE_MEMBER(fidelz80_state::vbrc_clock_w) -{ - m_vbrc_t1 = state; -} - /****************************************************************************** @@ -1922,10 +1885,11 @@ void fidelz80_state::brc_base(machine_config &config) m_mcu->p2_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_p2_r)); m_mcu->p2_out_cb().set(m_i8243, FUNC(i8243_device::p2_w)); m_mcu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w)); - m_mcu->t0_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_t0_r)); - m_mcu->t1_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_t1_r)); + m_mcu->t0_in_cb().set_ioport("BARCODE"); // card scanner - CLOCK(config, "t1_clock", 5_MHz_XTAL/4).signal_handler().set(FUNC(fidelz80_state::vbrc_clock_w)); + // MCU T1 tied to master clock / 4 + CLOCK(config, "t1_clock", 5_MHz_XTAL/4).signal_handler().set_nop(); + m_mcu->t1_in_cb().set("t1_clock", FUNC(clock_device::signal_r)).invert(); I8243(config, m_i8243); m_i8243->p4_out_cb().set(FUNC(fidelz80_state::vbrc_ioexp_port_w<0>)); @@ -2209,8 +2173,8 @@ CONS( 1980, vscsp, vsc, 0, vsc, vscsp, fidelz80_state, empty_init, "Fi CONS( 1980, vscg, vsc, 0, vsc, vscg, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1980, vscfr, vsc, 0, vsc, vscfr, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1980, vbrc, 0, 0, vbrc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING ) -CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING ) -CONS( 1982, bridgec3, 0, 0, bv3, bv3, fidelz80_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING ) +CONS( 1980, vbrc, 0, 0, vbrc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) +CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) +CONS( 1982, bridgec3, 0, 0, bv3, bv3, fidelz80_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING ) CONS( 1981, damesc, 0, 0, dsc, dsc, fidelz80_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/drivers/novag68k.cpp b/src/mame/drivers/novag68k.cpp index 8e93e285e13..f396ca9b476 100644 --- a/src/mame/drivers/novag68k.cpp +++ b/src/mame/drivers/novag68k.cpp @@ -127,19 +127,9 @@ READ8_MEMBER(novag68k_state::diablo68k_input2_r) WRITE8_MEMBER(novag68k_state::scorpio68k_control_w) { - // d0: HD44780 E - // d1: HD44780 RS - if (m_lcd_control & ~data & 1) - m_lcd->write(m_lcd_control >> 1 & 1, m_lcd_data); - m_lcd_control = data & 3; - - // d7: enable beeper - m_beeper->set_state(data >> 7 & 1); - - // d4-d6: input mux, led select - // d2,d3: led data - m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff; - display_matrix(2, 8, ~data >> 2 & 3, m_inp_mux); + // d2,d3: led data, rest same as diablo + m_led_data = ~data >> 2 & 3; + diablo68k_control_w(space, offset, data); }