summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/roland_s10.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/roland_s10.cpp')
-rw-r--r--src/mame/drivers/roland_s10.cpp38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/mame/drivers/roland_s10.cpp b/src/mame/drivers/roland_s10.cpp
index 072aef20fa6..b5eb0493c19 100644
--- a/src/mame/drivers/roland_s10.cpp
+++ b/src/mame/drivers/roland_s10.cpp
@@ -18,6 +18,7 @@
#include "machine/i8251.h"
#include "machine/mb62h195.h"
#include "machine/mb63h149.h"
+#include "machine/mb87013.h"
#include "machine/nvram.h"
#include "machine/rescap.h"
#include "machine/upd7001.h"
@@ -32,7 +33,6 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_io(*this, "io")
- , m_usart(*this, "usart")
, m_lcdc(*this, "lcdc")
, m_sampler(*this, "sampler")
{
@@ -44,8 +44,6 @@ public:
protected:
HD44780_PIXEL_UPDATE(lcd_pixel_update);
- u8 qdd_r(offs_t offset);
- void qdd_w(offs_t offset, u8 data);
void lcd_data_w(offs_t offset, u8 data);
void led_data_w(offs_t offset, u8 data);
u8 sw_scan_r(offs_t offset);
@@ -60,7 +58,6 @@ protected:
required_device<mcs51_cpu_device> m_maincpu;
required_device<mb62h195_device> m_io;
- required_device<i8251_device> m_usart;
required_device<hd44780_device> m_lcdc;
required_device<sa16_base_device> m_sampler;
};
@@ -102,20 +99,6 @@ HD44780_PIXEL_UPDATE(roland_s220_state::lcd_pixel_update)
bitmap.pix(line * 8 + y, pos * 6 + x) = state;
}
-u8 roland_s10_state::qdd_r(offs_t offset)
-{
- if (!BIT(offset, 1))
- return m_usart->read(offset);
-
- return 0;
-}
-
-void roland_s10_state::qdd_w(offs_t offset, u8 data)
-{
- if (!BIT(offset, 1))
- m_usart->write(offset, data);
-}
-
void roland_s10_state::lcd_data_w(offs_t offset, u8 data)
{
if (offset == 0)
@@ -165,7 +148,7 @@ void roland_s10_state::prog_map(address_map &map)
void roland_s10_state::mks100_ext_map(address_map &map)
{
- map(0x4000, 0x4003).mirror(0xffc).rw(FUNC(roland_s10_state::qdd_r), FUNC(roland_s10_state::qdd_w));
+ map(0x4000, 0x4003).mirror(0xffc).rw("qddia", FUNC(mb87013_device::read), FUNC(mb87013_device::write));
map(0x6000, 0x7fff).ram().share("nvram");
map(0x8000, 0x80ff).mirror(0xf00).w(FUNC(roland_s10_state::lcd_data_w));
map(0x9000, 0x90ff).mirror(0xf00).w(FUNC(roland_s10_state::led_data_w));
@@ -184,7 +167,7 @@ void roland_s10_state::s10_ext_map(address_map &map)
void roland_s220_state::s220_ext_map(address_map &map)
{
map(0x0000, 0x000f).mirror(0x3ff0).w(FUNC(roland_s220_state::output_control_w));
- map(0x4000, 0x4003).mirror(0xffc).rw(FUNC(roland_s220_state::qdd_r), FUNC(roland_s220_state::qdd_w));
+ map(0x4000, 0x4003).mirror(0xffc).rw("qddia", FUNC(mb87013_device::read), FUNC(mb87013_device::write));
map(0x5000, 0x5000).mirror(0xfff).w(FUNC(roland_s220_state::led_latch1_w));
map(0x6000, 0x7fff).ram().share("nvram");
map(0x8000, 0x80ff).mirror(0xf00).w(FUNC(roland_s220_state::lcd_data_w));
@@ -225,9 +208,18 @@ void roland_s10_state::s10(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5564PL-20 + battery
- I8251(config, m_usart, 6.5_MHz_XTAL / 2); // MB89251A
-
- //MB87013(config, "qddia", 6.5_MHz_XTAL);
+ i8251_device &usart(I8251(config, "usart", 6.5_MHz_XTAL)); // MB89251A
+ usart.dtr_handler().set("qddia", FUNC(mb87013_device::dtr_w));
+ usart.txd_handler().set("qddia", FUNC(mb87013_device::txd_w));
+
+ mb87013_device &qddia(MB87013(config, "qddia", 6.5_MHz_XTAL));
+ qddia.sio_rd_callback().set("usart", FUNC(i8251_device::read));
+ qddia.sio_wr_callback().set("usart", FUNC(i8251_device::write));
+ qddia.txc_callback().set("usart", FUNC(i8251_device::write_txc));
+ qddia.rxc_callback().set("usart", FUNC(i8251_device::write_rxc));
+ qddia.rxd_callback().set("usart", FUNC(i8251_device::write_rxd));
+ qddia.dsr_callback().set("usart", FUNC(i8251_device::write_dsr));
+ qddia.op4_callback().set("qddia", FUNC(mb87013_device::rts_w));
mb63h149_device &keyscan(MB63H149(config, "keyscan", 12_MHz_XTAL));
keyscan.int_callback().set_inputline(m_maincpu, MCS51_T1_LINE);