From 11782b47bd8fcc670ad259d7fe08de86a97f5eb5 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 2 Jul 2019 00:22:36 -0400 Subject: wy100: Add speaker (nw) i8275: Add LC output callback (nw) --- src/devices/video/i8275.cpp | 5 ++++- src/devices/video/i8275.h | 2 ++ src/mame/drivers/wy100.cpp | 13 +++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/devices/video/i8275.cpp b/src/devices/video/i8275.cpp index 53d4bfa18d6..f640907635f 100644 --- a/src/devices/video/i8275.cpp +++ b/src/devices/video/i8275.cpp @@ -105,6 +105,7 @@ i8275_device::i8275_device(const machine_config &mconfig, device_type type, cons m_write_drq(*this), m_write_hrtc(*this), m_write_vrtc(*this), + m_write_lc(*this), m_status(0), m_param_idx(0), m_param_end(0), @@ -152,6 +153,7 @@ void i8275_device::device_start() m_write_irq.resolve_safe(); m_write_hrtc.resolve_safe(); m_write_vrtc.resolve_safe(); + m_write_lc.resolve_safe(); // allocate timers m_hrtc_on_timer = timer_alloc(TIMER_HRTC_ON); @@ -280,6 +282,8 @@ void i8275_device::device_timer(emu_timer &timer, device_timer_id id, int param, case TIMER_SCANLINE: //LOG("I8275 y %u x %u HRTC 0\n", y, x); + int line_counter = OFFSET_LINE_COUNTER ? ((lc - 1) % SCANLINES_PER_ROW) : lc; + m_write_lc(line_counter); m_write_hrtc(0); if (m_scanline == 0) @@ -331,7 +335,6 @@ void i8275_device::device_timer(emu_timer &timer, device_timer_id id, int param, if ((m_status & ST_VE) && m_scanline < m_vrtc_scanline) { - int line_counter = OFFSET_LINE_COUNTER ? ((lc - 1) % SCANLINES_PER_ROW) : lc; bool end_of_row = false; bool blank_row = (UNDERLINE >= 8) && ((lc == 0) || (lc == SCANLINES_PER_ROW - 1)); int fifo_idx = 0; diff --git a/src/devices/video/i8275.h b/src/devices/video/i8275.h index 65c7269edd1..c9c27af099f 100644 --- a/src/devices/video/i8275.h +++ b/src/devices/video/i8275.h @@ -80,6 +80,7 @@ public: auto irq_wr_callback() { return m_write_irq.bind(); } auto hrtc_wr_callback() { return m_write_hrtc.bind(); } auto vrtc_wr_callback() { return m_write_vrtc.bind(); } + auto lc_wr_callback() { return m_write_lc.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -181,6 +182,7 @@ protected: devcb_write_line m_write_drq; devcb_write_line m_write_hrtc; devcb_write_line m_write_vrtc; + devcb_write8 m_write_lc; draw_character_delegate m_display_cb; int m_hpixels_per_column; diff --git a/src/mame/drivers/wy100.cpp b/src/mame/drivers/wy100.cpp index 17d1a7c2057..1d91bd2fdfa 100644 --- a/src/mame/drivers/wy100.cpp +++ b/src/mame/drivers/wy100.cpp @@ -12,7 +12,6 @@ Known emulation bugs: - Return key often gets corrupted when looped back - Frequent screen glitches when writing to the display - - Key click is missing - No dimming of protected characters *******************************************************************************/ @@ -21,10 +20,13 @@ #include "bus/rs232/rs232.h" #include "cpu/mcs48/mcs48.h" #include "machine/bankdev.h" +#include "machine/input_merger.h" #include "machine/mc2661.h" #include "machine/wy50kb.h" +#include "sound/spkrdev.h" #include "video/i8275.h" #include "screen.h" +#include "speaker.h" class wy100_state : public driver_device { @@ -224,6 +226,7 @@ void wy100_state::wy100(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &wy100_state::prg_map); m_maincpu->set_addrmap(AS_IO, &wy100_state::io_map); m_maincpu->p1_out_cb().set("keyboard", FUNC(wy100_keyboard_device::scan_w)).mask(0x7f).invert(); + m_maincpu->p1_out_cb().append("spkrgate", FUNC(input_merger_device::in_w<0>)).bit(7); m_maincpu->p2_out_cb().set(FUNC(wy100_state::p2_w)); m_maincpu->t0_in_cb().set("keyboard", FUNC(wy100_keyboard_device::sense_r)).invert(); m_maincpu->t1_in_cb().set(FUNC(wy100_state::t1_r)); @@ -257,6 +260,12 @@ void wy100_state::wy100(machine_config &config) m_crtc[0]->set_display_callback(FUNC(wy100_state::draw_character), this); m_crtc[0]->drq_wr_callback().set_inputline(m_maincpu, MCS48_INPUT_IRQ); m_crtc[0]->drq_wr_callback().append(FUNC(wy100_state::brdy_w)); + m_crtc[0]->lc_wr_callback().set("spkrgate", FUNC(input_merger_device::in_w<1>)).bit(3); + + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.5); + input_merger_device &spkrgate(INPUT_MERGER_ALL_HIGH(config, "spkrgate")); + spkrgate.output_handler().set("speaker", FUNC(speaker_sound_device::level_w)); RS232_PORT(config, m_modem, default_rs232_devices, "loopback"); m_modem->dcd_handler().set(m_pci, FUNC(mc2661_device::dcd_w)); @@ -277,4 +286,4 @@ ROM_START(wy100) ROM_END -COMP(1981, wy100, 0, 0, wy100, wy100, wy100_state, empty_init, "Wyse Technology", "WY-100", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND) +COMP(1981, wy100, 0, 0, wy100, wy100, wy100_state, empty_init, "Wyse Technology", "WY-100", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS) -- cgit v1.2.3