summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tv955.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tv955.cpp')
-rw-r--r--src/mame/drivers/tv955.cpp56
1 files changed, 37 insertions, 19 deletions
diff --git a/src/mame/drivers/tv955.cpp b/src/mame/drivers/tv955.cpp
index 8023ab87bf1..722d0d167ea 100644
--- a/src/mame/drivers/tv955.cpp
+++ b/src/mame/drivers/tv955.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:
+// copyright-holders:AJR
/***********************************************************************************************************************************
Skeleton driver for "third generation" TeleVideo terminals (905, 955, 9220).
@@ -7,9 +7,9 @@ Skeleton driver for "third generation" TeleVideo terminals (905, 955, 9220).
************************************************************************************************************************************/
#include "emu.h"
+#include "machine/tv955kb.h"
#include "bus/rs232/rs232.h"
#include "cpu/m6502/m65c02.h"
-#include "cpu/mcs48/mcs48.h"
#include "machine/input_merger.h"
#include "machine/mos6551.h"
#include "machine/nvram.h"
@@ -24,6 +24,8 @@ public:
, m_maincpu(*this, "maincpu")
, m_crtc(*this, "crtc")
, m_hostuart(*this, "hostuart")
+ , m_printuart(*this, "printuart")
+ , m_keybuart(*this, "keybuart")
, m_mainport(*this, "mainport")
, m_printer(*this, "printer")
, m_chargen(*this, "chargen")
@@ -38,6 +40,7 @@ private:
SCN2674_DRAW_CHARACTER_MEMBER(draw_character);
void control_latch_w(u8 data);
+ DECLARE_WRITE_LINE_MEMBER(system_reset_w);
void mem_map(address_map &map);
void char_map(address_map &map);
@@ -46,6 +49,8 @@ private:
required_device<cpu_device> m_maincpu;
required_device<scn2674_device> m_crtc;
required_device<mos6551_device> m_hostuart;
+ required_device<mos6551_device> m_printuart;
+ required_device<mos6551_device> m_keybuart;
required_device<rs232_port_device> m_mainport;
required_device<rs232_port_device> m_printer;
required_region_ptr<u8> m_chargen;
@@ -55,16 +60,24 @@ void tv955_state::machine_reset()
{
m_printer->write_rts(0);
m_printer->write_dtr(0);
+
+ m_printuart->write_cts(0);
+ m_keybuart->write_cts(0);
}
SCN2674_DRAW_CHARACTER_MEMBER(tv955_state::draw_character)
{
u16 dots = m_chargen[charcode << 4 | linecount] << 1;
- dots |= (BIT(dots, 1) && BIT(charcode, 7) ? 1 : 0) | (dots & 0x100) << 1;
+ if (BIT(dots, 1) && BIT(charcode, 7))
+ dots |= 1;
+
+ // TODO: attribute logic
+ if (cursor)
+ dots = ~dots;
for (int i = 0; i < 9; i++)
{
- bitmap.pix32(y, x++) = BIT(dots, 9) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y, x++) = BIT(dots, 8) ? rgb_t::white() : rgb_t::black();
dots <<= 1;
}
}
@@ -89,14 +102,19 @@ void tv955_state::control_latch_w(u8 data)
}
}
+WRITE_LINE_MEMBER(tv955_state::system_reset_w)
+{
+ // TODO
+}
+
void tv955_state::mem_map(address_map &map)
{
// verified from maintenance manual (131968-00-C)
map(0x0000, 0x07ff).mirror(0x0800).ram().share("nvram");
map(0x1100, 0x1100).mirror(0x00ff).w(FUNC(tv955_state::control_latch_w));
- map(0x1200, 0x1203).mirror(0x00fc).rw("keybuart", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
- map(0x1400, 0x1403).mirror(0x00fc).rw("printuart", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
- map(0x1800, 0x1803).mirror(0x00fc).rw("hostuart", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
+ map(0x1200, 0x1203).mirror(0x00fc).rw(m_keybuart, FUNC(mos6551_device::read), FUNC(mos6551_device::write));
+ map(0x1400, 0x1403).mirror(0x00fc).rw(m_printuart, FUNC(mos6551_device::read), FUNC(mos6551_device::write));
+ map(0x1800, 0x1803).mirror(0x00fc).rw(m_hostuart, FUNC(mos6551_device::read), FUNC(mos6551_device::write));
map(0x2000, 0x2007).mirror(0x0ff8).rw("crtc", FUNC(scn2674_device::read), FUNC(scn2674_device::write));
map(0x3000, 0x3fff).rom().region("option", 0);
map(0x4000, 0x7fff).ram().share("attrram");
@@ -124,7 +142,9 @@ void tv955_state::tv955(machine_config &config)
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
- I8049(config, "keyboard", 5.7143_MHz_XTAL);
+ tv955kb_device &keyboard(TV955_KEYBOARD(config, "keyboard"));
+ keyboard.txd_cb().set("keybuart", FUNC(mos6551_device::write_rxd));
+ keyboard.reset_cb().set(FUNC(tv955_state::system_reset_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // HM6116LP-4 + 3.2V battery
@@ -151,16 +171,17 @@ void tv955_state::tv955(machine_config &config)
m_hostuart->rts_handler().set(m_mainport, FUNC(rs232_port_device::write_rts));
m_hostuart->dtr_handler().set(m_mainport, FUNC(rs232_port_device::write_dtr));
- mos6551_device &printuart(MOS6551(config, "printuart", 0));
- printuart.set_xtal(3.6864_MHz_XTAL / 2);
- printuart.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
- printuart.txd_handler().set(m_printer, FUNC(rs232_port_device::write_txd));
+ MOS6551(config, m_printuart, 0);
+ m_printuart->set_xtal(3.6864_MHz_XTAL / 2);
+ m_printuart->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
+ m_printuart->txd_handler().set(m_printer, FUNC(rs232_port_device::write_txd));
- mos6551_device &keybuart(MOS6551(config, "keybuart", 0));
- keybuart.set_xtal(3.6864_MHz_XTAL / 2);
- keybuart.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
+ MOS6551(config, m_keybuart, 0);
+ m_keybuart->set_xtal(3.6864_MHz_XTAL / 2);
+ m_keybuart->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
+ m_keybuart->txd_handler().set("keyboard", FUNC(tv955kb_device::write_rxd));
- RS232_PORT(config, m_mainport, default_rs232_devices, nullptr); // DTE
+ RS232_PORT(config, m_mainport, default_rs232_devices, "loopback"); // DTE
m_mainport->rxd_handler().set(m_hostuart, FUNC(mos6551_device::write_rxd));
m_mainport->cts_handler().set(m_hostuart, FUNC(mos6551_device::write_cts));
m_mainport->dsr_handler().set(m_hostuart, FUNC(mos6551_device::write_dsr));
@@ -190,9 +211,6 @@ ROM_START( tv955 )
ROM_REGION(0x1000, "chargen", 0)
ROM_LOAD( "t180002-26b.u45", 0x0000, 0x1000, CRC(69c9ebc7) SHA1(32282c816ec597a7c45e939acb7a4155d35ea584) )
-
- ROM_REGION(0x0800, "keyboard", 0)
- ROM_LOAD( "8049.kbd", 0x0000, 0x0800, CRC(bc86e349) SHA1(0b62003ab7931822f1bcac8370517c685849f62c) )
ROM_END
COMP( 1985, tv955, 0, 0, tv955, tv955, tv955_state, empty_init, "TeleVideo Systems", "TeleVideo 955", MACHINE_IS_SKELETON )