summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/novag_diablo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/novag_diablo.cpp')
-rw-r--r--src/mame/drivers/novag_diablo.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mame/drivers/novag_diablo.cpp b/src/mame/drivers/novag_diablo.cpp
index 9b9086401f5..dd370c74c6a 100644
--- a/src/mame/drivers/novag_diablo.cpp
+++ b/src/mame/drivers/novag_diablo.cpp
@@ -6,7 +6,7 @@
* novag_diablo.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
-- hook up RS232 port (when connected, I'm only getting "New Game")
+- hook up RS232 port correctly (when connected, I'm only getting "New Game")
*******************************************************************************
@@ -43,6 +43,7 @@ class diablo_state : public novagbase_state
public:
diablo_state(const machine_config &mconfig, device_type type, const char *tag) :
novagbase_state(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_acia(*this, "acia"),
m_rs232(*this, "rs232")
@@ -54,6 +55,7 @@ public:
private:
// devices/pointers
+ required_device<m68000_base_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<mos6551_device> m_acia;
required_device<rs232_port_device> m_rs232;
@@ -217,15 +219,23 @@ void diablo_state::diablo68k(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 16_MHz_XTAL);
+ m_maincpu->disable_interrupt_mixer();
m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::diablo68k_map);
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
- TIMER(config, m_irq_on).configure_periodic(FUNC(diablo_state::irq_on<M68K_IRQ_2>), irq_period);
+ TIMER(config, m_irq_on).configure_periodic(FUNC(diablo_state::irq_on<M68K_IRQ_IPL1>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1100)); // active for 1.1us
- TIMER(config, "irq_off").configure_periodic(FUNC(diablo_state::irq_off<M68K_IRQ_2>), irq_period);
+ TIMER(config, "irq_off").configure_periodic(FUNC(diablo_state::irq_off<M68K_IRQ_IPL1>), irq_period);
MOS6551(config, m_acia).set_xtal(1.8432_MHz_XTAL);
+ m_acia->irq_handler().set_inputline("maincpu", M68K_IRQ_IPL2);
+ m_acia->rts_handler().set("acia", FUNC(mos6551_device::write_cts));
+ m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_acia->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+
RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set("acia", FUNC(mos6551_device::write_rxd));
+ m_rs232->dsr_handler().set("acia", FUNC(mos6551_device::write_dsr));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);