summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/wy100.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/wy100.cpp')
-rw-r--r--src/mame/drivers/wy100.cpp271
1 files changed, 0 insertions, 271 deletions
diff --git a/src/mame/drivers/wy100.cpp b/src/mame/drivers/wy100.cpp
deleted file mode 100644
index 56d963dfa72..00000000000
--- a/src/mame/drivers/wy100.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:AJR
-/*******************************************************************************
-
- Skeleton driver for Wyse WY-100 video terminal.
-
- The WY-100 was Wyse Technology's first product.
-
- Of the two 8276 CRTCs, one is used solely to keep track of which characters
- are protected, which is the only transparent attribute supported.
-
- Known emulation bugs:
- - Return key often gets corrupted when looped back
- - Frequent screen glitches when writing to the display
- - No dimming of protected characters
-
-*******************************************************************************/
-
-#include "emu.h"
-#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
-{
-public:
- wy100_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_rambank(*this, "rambank")
- , m_crtc(*this, "crtc%u", 1U)
- , m_pci(*this, "pci")
- , m_modem(*this, "modem")
- , m_printer(*this, "aux")
- , m_chargen(*this, "chargen")
- {
- }
-
- void wy100(machine_config &config);
-
-protected:
- virtual void machine_start() override;
-
-private:
- I8275_DRAW_CHARACTER_MEMBER(draw_character);
-
- DECLARE_WRITE_LINE_MEMBER(brdy_w);
- DECLARE_WRITE_LINE_MEMBER(txd_w);
- void p2_w(u8 data);
- u8 memory_r(offs_t offset);
- void memory_w(offs_t offset, u8 data);
-
- void prg_map(address_map &map);
- void io_map(address_map &map);
- void bank_map(address_map &map);
-
- required_device<mcs48_cpu_device> m_maincpu;
- required_device<address_map_bank_device> m_rambank;
- required_device_array<i8276_device, 2> m_crtc;
- required_device<mc2661_device> m_pci;
- required_device<rs232_port_device> m_modem;
- required_device<rs232_port_device> m_printer;
-
- required_region_ptr<u8> m_chargen;
-
- bool m_brdy;
- bool m_bs_enable;
- bool m_txd;
- bool m_printer_select;
-};
-
-void wy100_state::machine_start()
-{
- m_brdy = false;
- m_bs_enable = false;
- m_txd = true;
- m_printer_select = false;
-
- save_item(NAME(m_brdy));
- save_item(NAME(m_bs_enable));
- save_item(NAME(m_txd));
- save_item(NAME(m_printer_select));
-}
-
-WRITE_LINE_MEMBER(wy100_state::brdy_w)
-{
- m_brdy = state;
-}
-
-I8275_DRAW_CHARACTER_MEMBER(wy100_state::draw_character)
-{
- // LTEN attribute output is not used (GPA1 generates underline instead)
- u8 dots = 0;
- if (!vsp)
- {
- if (BIT(gpa, 1) && (linecount & 0xb) == 0xa)
- dots = 0xff;
- else if (!BIT(gpa, 0))
- dots = m_chargen[(charcode << 4) | linecount];
- }
- if (rvv)
- dots ^= 0xff;
-
- // TODO: dim protected characters
- const rgb_t fg = rgb_t::white();
- const rgb_t bg = rgb_t::black();
- for (int i = 0; i < 10; i++)
- bitmap.pix32(y, x + i) = BIT(dots, i < 1 || i > 8 ? 7 : 8 - i) ? fg : bg;
-}
-
-WRITE_LINE_MEMBER(wy100_state::txd_w)
-{
- m_txd = state;
- if (m_printer_select)
- m_printer->write_txd(state);
- else
- m_modem->write_txd(state);
-}
-
-void wy100_state::p2_w(u8 data)
-{
- m_rambank->set_bank(data & 0x1f);
- if (!BIT(data, 6))
- m_bs_enable = false;
- if (BIT(data, 7) && !m_printer_select)
- {
- m_printer_select = true;
- m_printer->write_txd(m_txd);
- m_modem->write_txd(1);
- }
- else if (!BIT(data, 7) && m_printer_select)
- {
- m_printer_select = false;
- m_modem->write_txd(m_txd);
- m_printer->write_txd(1);
- }
-}
-
-u8 wy100_state::memory_r(offs_t offset)
-{
- u8 p2 = m_maincpu->p2_r();
- u8 data = BIT(p2, 5) ? m_pci->read(p2 & 3) : m_rambank->read8(offset);
- if (BIT(p2, 5))
- logerror("%s: Reading %02X from PCI register %d\n", machine().describe_context(), data, p2 & 3);
- if (m_bs_enable && !machine().side_effects_disabled())
- {
- u8 chardata = (data & 0xe0) == 0x80 ? data : data & 0x7f;
- m_crtc[0]->dack_w(chardata);
- m_crtc[1]->dack_w((chardata & 0xfe) | (BIT(data, 7) ? 0x00 : 0x01));
- }
- return data;
-}
-
-void wy100_state::memory_w(offs_t offset, u8 data)
-{
- u8 p2 = m_maincpu->p2_r();
-
- // CRTC access is write-only
- if (!BIT(p2, 6))
- {
- m_crtc[0]->write(p2 & 1, data);
- m_crtc[1]->write(p2 & 1, data);
- }
- else if (m_brdy)
- m_bs_enable = true;
-
- if (BIT(p2, 5))
- {
- logerror("%s: Writing %02X to PCI register %d\n", machine().describe_context(), data, p2 & 3);
-
- m_pci->write(p2 & 3, data);
- }
-
- m_rambank->write8(offset, data);
-}
-
-void wy100_state::prg_map(address_map &map)
-{
- map(0x000, 0xfff).rom().region("maincpu", 0);
-}
-
-void wy100_state::io_map(address_map &map)
-{
- map(0x00, 0xff).rw(FUNC(wy100_state::memory_r), FUNC(wy100_state::memory_w));
-}
-
-void wy100_state::bank_map(address_map &map)
-{
- map(0x0000, 0x0bff).nopw();
- map(0x0c00, 0x0fff).ram(); // buffer RAM (P2114A-6 at 4-5A)
- map(0x1000, 0x1fff).ram(); // display RAM (P2114A-6 at 6-9A, optionally also at 10-13A)
-}
-
-
-static INPUT_PORTS_START(wy100)
-INPUT_PORTS_END
-
-
-void wy100_state::wy100(machine_config &config)
-{
- I8039(config, m_maincpu, 10.1376_MHz_XTAL); // INS8039N-11
- 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(m_pci, FUNC(mc2661_device::rxrdy_r)).invert();
-
- WY100_KEYBOARD(config, "keyboard");
-
- ADDRESS_MAP_BANK(config, m_rambank);
- m_rambank->set_addrmap(0, &wy100_state::bank_map);
- m_rambank->set_data_width(8);
- m_rambank->set_addr_width(13);
- m_rambank->set_stride(0x100);
-
- MC2661(config, m_pci, 10.1376_MHz_XTAL / 2); // INS2651N
- m_pci->rts_handler().set(m_modem, FUNC(rs232_port_device::write_rts));
- m_pci->dtr_handler().set(m_modem, FUNC(rs232_port_device::write_dtr));
- m_pci->txd_handler().set(FUNC(wy100_state::txd_w));
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_raw(18.48_MHz_XTAL, 1000, 0, 800, 308, 0, 286);
- //screen.set_raw(18.48_MHz_XTAL, 1100, 0, 800, 336, 0, 312);
- screen.set_color(rgb_t::green());
- screen.set_screen_update("crtc1", FUNC(i8276_device::screen_update));
-
- for (auto &crtc : m_crtc)
- {
- I8276(config, crtc, 18.48_MHz_XTAL / 10);
- crtc->set_screen("screen");
- crtc->set_character_width(10);
- }
- m_crtc[0]->set_display_callback(FUNC(wy100_state::draw_character));
- 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));
- m_modem->cts_handler().set(m_pci, FUNC(mc2661_device::cts_w));
- m_modem->rxd_handler().set(m_pci, FUNC(mc2661_device::rx_w));
-
- RS232_PORT(config, m_printer, default_rs232_devices, nullptr);
- m_printer->dsr_handler().set(m_pci, FUNC(mc2661_device::dsr_w));
-}
-
-
-ROM_START(wy100)
- ROM_REGION(0x1000, "maincpu", 0)
- ROM_LOAD("wy100_00401f.bin", 0x0000, 0x1000, CRC(1f71de8f) SHA1(2bd9f712aba8b44823ce0b3e111da7b472a1ab38))
-
- ROM_REGION(0x0800, "chargen", 0)
- ROM_LOAD("wy100_23-002-01c.bin", 0x0000, 0x0800, CRC(93c31537) SHA1(085e5ad110a76bee83e819a718a7d4cbfb8e07e7))
-ROM_END
-
-
-COMP(1981, wy100, 0, 0, wy100, wy100, wy100_state, empty_init, "Wyse Technology", "WY-100", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS)