summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-07-02 00:22:36 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-07-02 00:24:33 -0400
commit11782b47bd8fcc670ad259d7fe08de86a97f5eb5 (patch)
tree2eb38a8e2599274773acb529c197b27efd0d6160
parent63eb97a7abcfe78c94606129a14e8781ac68c857 (diff)
wy100: Add speaker (nw)
i8275: Add LC output callback (nw)
-rw-r--r--src/devices/video/i8275.cpp5
-rw-r--r--src/devices/video/i8275.h2
-rw-r--r--src/mame/drivers/wy100.cpp13
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)