replaced read rx/cts/dcd callbacks in ACIA6850 write write handlers, which allows multiple chips to be connected together without using glue methods. [smf]

This commit is contained in:
smf- 2013-12-22 12:00:26 +00:00
parent 8b0c23f055
commit b4c7b67ff9
47 changed files with 167 additions and 577 deletions

View File

@ -32,15 +32,12 @@ static struct ptm6840_interface ptm_interface =
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, ptm_irq_w)
};
static struct acia6850_interface acia_interface =
static ACIA6850_INTERFACE( acia_interface )
{
31250*16, // tx clock
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, rx_in), // rx in
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, tx_out), // tx out
DEVCB_NULL, // cts in
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), // tx out
DEVCB_NULL, // rts out
DEVCB_NULL, // dcd in
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, acia_irq_w)
};
@ -80,8 +77,7 @@ a2bus_midi_device::a2bus_midi_device(const machine_config &mconfig, const char *
device_t(mconfig, A2BUS_MIDI, "6850 MIDI card", tag, owner, clock, "a2midi", __FILE__),
device_a2bus_card_interface(mconfig, *this),
m_ptm(*this, MIDI_PTM_TAG),
m_acia(*this, MIDI_ACIA_TAG),
m_mdout(*this, "mdout")
m_acia(*this, MIDI_ACIA_TAG)
{
}
@ -89,8 +85,7 @@ a2bus_midi_device::a2bus_midi_device(const machine_config &mconfig, device_type
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_a2bus_card_interface(mconfig, *this),
m_ptm(*this, MIDI_PTM_TAG),
m_acia(*this, MIDI_ACIA_TAG),
m_mdout(*this, "mdout")
m_acia(*this, MIDI_ACIA_TAG)
{
}
@ -107,7 +102,6 @@ void a2bus_midi_device::device_start()
void a2bus_midi_device::device_reset()
{
m_acia_irq = m_ptm_irq = false;
m_rx_state = 0;
}
/*-------------------------------------------------
@ -192,19 +186,10 @@ WRITE_LINE_MEMBER( a2bus_midi_device::ptm_irq_w )
WRITE_LINE_MEMBER( a2bus_midi_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 16
{
m_acia->rx_clock_in();
}
}
READ_LINE_MEMBER( a2bus_midi_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( a2bus_midi_device::tx_out )
{
m_mdout->tx(state);
}

View File

@ -36,8 +36,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( ptm_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
virtual void device_start();
@ -48,11 +46,9 @@ protected:
required_device<ptm6840_device> m_ptm;
required_device<acia6850_device> m_acia;
required_device<serial_port_device> m_mdout;
private:
bool m_acia_irq, m_ptm_irq;
int m_rx_state;
};
// device type definition

View File

@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::acia_irq_w )
m_slot->irq_w(state);
}
READ_LINE_MEMBER( c64_maplin_midi_cartridge_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::tx_out )
{
m_mdout->tx(state);
}
static ACIA6850_INTERFACE( acia_intf )
{
500000,
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, rx_in),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, acia_irq_w)
};
@ -70,7 +57,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 64
{
@ -125,9 +112,7 @@ machine_config_constructor c64_maplin_midi_cartridge_device::device_mconfig_addi
c64_maplin_midi_cartridge_device::c64_maplin_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, C64_MIDI_MAPLIN, "C64 Maplin MIDI", tag, owner, clock, "c64_midimap", __FILE__),
device_c64_expansion_card_interface(mconfig, *this),
m_acia(*this, MC6850_TAG),
m_mdout(*this, "mdout"),
m_rx_state(0)
m_acia(*this, MC6850_TAG)
{
}
@ -139,7 +124,6 @@ c64_maplin_midi_cartridge_device::c64_maplin_midi_cartridge_device(const machine
void c64_maplin_midi_cartridge_device::device_start()
{
// state saving
save_item(NAME(m_rx_state));
}
@ -150,8 +134,6 @@ void c64_maplin_midi_cartridge_device::device_start()
void c64_maplin_midi_cartridge_device::device_reset()
{
m_acia->reset();
m_rx_state = 0;
}

View File

@ -41,8 +41,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
// device-level overrides
@ -55,9 +53,6 @@ protected:
private:
required_device<acia6850_device> m_acia;
required_device<serial_port_device> m_mdout;
int m_rx_state;
};

View File

@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::acia_irq_w )
m_slot->nmi_w(state);
}
READ_LINE_MEMBER( c64_namesoft_midi_cartridge_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::tx_out )
{
m_mdout->tx(state);
}
static ACIA6850_INTERFACE( acia_intf )
{
500000,
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, rx_in),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, acia_irq_w)
};
@ -70,7 +57,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 16
{
@ -125,9 +112,7 @@ machine_config_constructor c64_namesoft_midi_cartridge_device::device_mconfig_ad
c64_namesoft_midi_cartridge_device::c64_namesoft_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, C64_MIDI_NAMESOFT, "C64 Namesoft MIDI", tag, owner, clock, "c64_midins", __FILE__),
device_c64_expansion_card_interface(mconfig, *this),
m_acia(*this, MC6850_TAG),
m_mdout(*this, "mdout"),
m_rx_state(0)
m_acia(*this, MC6850_TAG)
{
}
@ -138,8 +123,6 @@ c64_namesoft_midi_cartridge_device::c64_namesoft_midi_cartridge_device(const mac
void c64_namesoft_midi_cartridge_device::device_start()
{
// state saving
save_item(NAME(m_rx_state));
}
//-------------------------------------------------
@ -149,8 +132,6 @@ void c64_namesoft_midi_cartridge_device::device_start()
void c64_namesoft_midi_cartridge_device::device_reset()
{
m_acia->reset();
m_rx_state = 0;
}

View File

@ -41,9 +41,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
// device-level overrides
virtual void device_start();
@ -55,9 +52,6 @@ protected:
private:
required_device<acia6850_device> m_acia;
required_device<serial_port_device> m_mdout;
int m_rx_state;
};

View File

@ -60,24 +60,11 @@ WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::acia_irq_w )
m_slot->irq_w(m_ptm_irq || m_acia_irq);
}
READ_LINE_MEMBER( c64_passport_midi_cartridge_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::tx_out )
{
m_mdout->tx(state);
}
static ACIA6850_INTERFACE( acia_intf )
{
500000,
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, rx_in),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, acia_irq_w)
};
@ -93,7 +80,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 16
{
@ -151,10 +138,8 @@ c64_passport_midi_cartridge_device::c64_passport_midi_cartridge_device(const mac
device_c64_expansion_card_interface(mconfig, *this),
m_acia(*this, MC6850_TAG),
m_ptm(*this, MC6840_TAG),
m_mdout(*this, "mdout"),
m_ptm_irq(CLEAR_LINE),
m_acia_irq(CLEAR_LINE),
m_rx_state(0)
m_acia_irq(CLEAR_LINE)
{
}
@ -168,7 +153,6 @@ void c64_passport_midi_cartridge_device::device_start()
// state saving
save_item(NAME(m_ptm_irq));
save_item(NAME(m_acia_irq));
save_item(NAME(m_rx_state));
}
@ -180,8 +164,6 @@ void c64_passport_midi_cartridge_device::device_reset()
{
m_acia->reset();
m_ptm->reset();
m_rx_state = 0;
}

View File

@ -43,8 +43,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( ptm_irq_w );
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
// device-level overrides
@ -58,11 +56,9 @@ protected:
private:
required_device<acia6850_device> m_acia;
required_device<ptm6840_device> m_ptm;
required_device<serial_port_device> m_mdout;
int m_ptm_irq;
int m_acia_irq;
int m_rx_state;
};

View File

@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::acia_irq_w )
m_slot->irq_w(state);
}
READ_LINE_MEMBER( c64_sequential_midi_cartridge_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::tx_out )
{
m_mdout->tx(state);
}
static ACIA6850_INTERFACE( acia_intf )
{
500000,
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, rx_in),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, acia_irq_w)
};
@ -70,7 +57,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 16
{
@ -125,9 +112,7 @@ machine_config_constructor c64_sequential_midi_cartridge_device::device_mconfig_
c64_sequential_midi_cartridge_device::c64_sequential_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, C64_MIDI_SCI, "C64 Sequential Circuits MIDI", tag, owner, clock, "c64_midisci", __FILE__),
device_c64_expansion_card_interface(mconfig, *this),
m_acia(*this, MC6850_TAG),
m_mdout(*this, "mdout"),
m_rx_state(0)
m_acia(*this, MC6850_TAG)
{
}
@ -139,7 +124,6 @@ c64_sequential_midi_cartridge_device::c64_sequential_midi_cartridge_device(const
void c64_sequential_midi_cartridge_device::device_start()
{
// state saving
save_item(NAME(m_rx_state));
}
//-------------------------------------------------
@ -149,8 +133,6 @@ void c64_sequential_midi_cartridge_device::device_start()
void c64_sequential_midi_cartridge_device::device_reset()
{
m_acia->reset();
m_rx_state = 0;
}

View File

@ -41,8 +41,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
// device-level overrides
@ -55,9 +53,6 @@ protected:
private:
required_device<acia6850_device> m_acia;
required_device<serial_port_device> m_mdout;
int m_rx_state;
};

View File

@ -37,24 +37,11 @@ WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::acia_irq_w )
m_slot->irq_w(state);
}
READ_LINE_MEMBER( c64_siel_midi_cartridge_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::tx_out )
{
m_mdout->tx(state);
}
static ACIA6850_INTERFACE( acia_intf )
{
XTAL_2MHz,
0, // rx clock (we manually clock rx)
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, rx_in),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, acia_irq_w)
};
@ -70,7 +57,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::midi_rx_w )
{
m_rx_state = state;
m_acia->write_rx(state);
for (int i = 0; i < 64; i++) // divider is set to 64
{
@ -125,9 +112,7 @@ machine_config_constructor c64_siel_midi_cartridge_device::device_mconfig_additi
c64_siel_midi_cartridge_device::c64_siel_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, C64_MIDI_SIEL, "C64 Siel MIDI", tag, owner, clock, "c64_midisiel", __FILE__),
device_c64_expansion_card_interface(mconfig, *this),
m_acia(*this, MC6850_TAG),
m_mdout(*this, "mdout"),
m_rx_state(0)
m_acia(*this, MC6850_TAG)
{
}
@ -139,7 +124,6 @@ c64_siel_midi_cartridge_device::c64_siel_midi_cartridge_device(const machine_con
void c64_siel_midi_cartridge_device::device_start()
{
// state saving
save_item(NAME(m_rx_state));
}
@ -150,8 +134,6 @@ void c64_siel_midi_cartridge_device::device_start()
void c64_siel_midi_cartridge_device::device_reset()
{
m_acia->reset();
m_rx_state = 0;
}

View File

@ -41,8 +41,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
protected:
// device-level overrides
@ -55,9 +53,6 @@ protected:
private:
required_device<acia6850_device> m_acia;
required_device<serial_port_device> m_mdout;
int m_rx_state;
};

View File

@ -169,9 +169,6 @@ static ACIA6850_INTERFACE( acia_intf )
0,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};

View File

@ -84,11 +84,8 @@ void acia6850_device::static_set_interface(device_t &device, const acia6850_inte
void acia6850_device::device_start()
{
// resolve callbacks
m_in_rx_func.resolve(m_in_rx_cb, *this);
m_out_tx_func.resolve(m_out_tx_cb, *this);
m_in_cts_func.resolve(m_in_cts_cb, *this);
m_out_rts_func.resolve(m_out_rts_cb, *this);
m_in_dcd_func.resolve(m_in_dcd_cb, *this);
m_out_irq_func.resolve(m_out_irq_cb, *this);
m_tx_counter = 0;
@ -124,6 +121,9 @@ void acia6850_device::device_start()
save_item(NAME(m_first_reset));
save_item(NAME(m_rts));
save_item(NAME(m_brk));
save_item(NAME(m_rxd));
save_item(NAME(m_dcd));
save_item(NAME(m_cts));
save_item(NAME(m_status_read));
save_item(NAME(m_dcd_triggered));
}
@ -135,10 +135,7 @@ void acia6850_device::device_start()
void acia6850_device::device_reset()
{
int cts = m_in_cts_func();
int dcd = m_in_dcd_func();
m_status = (cts << 3) | (dcd << 2) | ACIA6850_STATUS_TDRE;
m_status = (m_cts << 3) | (m_dcd << 2) | ACIA6850_STATUS_TDRE;
m_tdr = 0;
m_rdr = 0;
m_tx_shift = 0;
@ -178,6 +175,20 @@ void acia6850_device::device_reset()
}
}
DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_rx )
{
m_rts = state;
}
DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_dcd )
{
m_dcd = state;
}
DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_cts )
{
m_cts = state;
}
//-------------------------------------------------
// device_timer - handle timer callbacks
@ -226,9 +237,7 @@ READ8_MEMBER( acia6850_device::status_read )
void acia6850_device::check_dcd_input()
{
int dcd = m_in_dcd_func();
if (dcd)
if (m_dcd)
{
// IRQ from DCD is edge triggered
if ( ! ( m_status & ACIA6850_STATUS_DCD ) )
@ -438,9 +447,7 @@ void acia6850_device::tx_tick()
}
else
{
int _cts = m_in_cts_func();
if (_cts)
if (m_cts)
{
m_status |= ACIA6850_STATUS_CTS;
}
@ -542,9 +549,7 @@ void acia6850_device::tx_tick()
void acia6850_device::tx_clock_in()
{
int _cts = m_in_cts_func();
if (_cts)
if (m_cts)
{
m_status |= ACIA6850_STATUS_CTS;
}
@ -578,13 +583,11 @@ void acia6850_device::rx_tick()
}
else
{
int rxd = m_in_rx_func();
switch (m_rx_state)
{
case START:
{
if (rxd == 0)
if (m_rxd == 0)
{
if (LOG) logerror("MC6850 '%s': RX START BIT\n", tag());
m_rx_shift = 0;
@ -596,9 +599,9 @@ void acia6850_device::rx_tick()
}
case DATA:
{
if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), rxd);
m_rx_shift |= rxd ? 0x80 : 0;
m_rx_parity ^= rxd;
if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), m_rxd);
m_rx_shift |= m_rxd ? 0x80 : 0;
m_rx_parity ^= m_rxd;
if (--m_rx_bits == 0)
{
@ -618,8 +621,8 @@ void acia6850_device::rx_tick()
}
case PARITY:
{
if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), rxd);
m_rx_parity ^= rxd;
if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), m_rxd);
m_rx_parity ^= m_rxd;
if (m_parity == EVEN)
{
@ -641,7 +644,7 @@ void acia6850_device::rx_tick()
}
case STOP:
{
if (rxd == 1)
if (m_rxd == 1)
{
if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag());
if (m_stopbits == 1)
@ -672,7 +675,7 @@ void acia6850_device::rx_tick()
}
case STOP2:
{
if (rxd == 1)
if (m_rxd == 1)
{
if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag());
m_status &= ~ACIA6850_STATUS_FE;

View File

@ -54,13 +54,8 @@ struct acia6850_interface
int m_tx_clock;
int m_rx_clock;
devcb_read_line m_in_rx_cb;
devcb_write_line m_out_tx_cb;
devcb_read_line m_in_cts_cb;
devcb_write_line m_out_rts_cb;
devcb_read_line m_in_dcd_cb;
devcb_write_line m_out_irq_cb;
};
@ -83,6 +78,10 @@ public:
DECLARE_WRITE8_MEMBER( data_write );
DECLARE_READ8_MEMBER( data_read );
DECLARE_WRITE_LINE_MEMBER( write_rx );
DECLARE_WRITE_LINE_MEMBER( write_dcd );
DECLARE_WRITE_LINE_MEMBER( write_cts );
void tx_clock_in();
void rx_clock_in();
@ -131,11 +130,8 @@ private:
EVEN
};
devcb_resolved_read_line m_in_rx_func;
devcb_resolved_write_line m_out_tx_func;
devcb_resolved_read_line m_in_cts_func;
devcb_resolved_write_line m_out_rts_func;
devcb_resolved_read_line m_in_dcd_func;
devcb_resolved_write_line m_out_irq_func;
UINT8 m_ctrl;
@ -174,6 +170,9 @@ private:
serial_state m_tx_state;
int m_irq;
bool m_dcd_triggered;
int m_rxd;
int m_dcd;
int m_cts;
emu_timer *m_rx_timer;
emu_timer *m_tx_timer;

View File

@ -238,6 +238,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_acia6850_2(*this, "acia6850_2"),
m_upd7759(*this, "upd") { }
UINT8 m_bank_data[4];
@ -248,8 +249,6 @@ public:
UINT8 m_flip_8;
UINT8 m_flip_22;
UINT8 m_videomode;
UINT8 m_z80_m6809_line;
UINT8 m_m6809_z80_line;
UINT8 m_data_r;
UINT8 m_data_t;
int m_irq_state;
@ -286,13 +285,8 @@ public:
DECLARE_WRITE8_MEMBER(fd_ctrl_w);
DECLARE_READ8_MEMBER(upd_r);
DECLARE_WRITE8_MEMBER(upd_w);
DECLARE_READ_LINE_MEMBER(z80_acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(z80_acia_tx_w);
DECLARE_WRITE_LINE_MEMBER(z80_acia_irq);
DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w);
DECLARE_WRITE_LINE_MEMBER(m6809_data_irq);
DECLARE_READ_LINE_MEMBER(data_acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(data_acia_tx_w);
DECLARE_DRIVER_INIT(bfcobra);
virtual void machine_reset();
@ -312,6 +306,7 @@ public:
UINT8 results_phase(void);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<acia6850_device> m_acia6850_2;
required_device<upd7759_device> m_upd7759;
};
@ -1618,16 +1613,6 @@ void bfcobra_state::init_ram()
What are the correct ACIA clocks ?
*/
READ_LINE_MEMBER(bfcobra_state::z80_acia_rx_r)
{
return m_m6809_z80_line;
}
WRITE_LINE_MEMBER(bfcobra_state::z80_acia_tx_w)
{
m_z80_m6809_line = state;
}
WRITE_LINE_MEMBER(bfcobra_state::z80_acia_irq)
{
m_acia_irq = state;
@ -1638,24 +1623,11 @@ static ACIA6850_INTERFACE( z80_acia_if )
{
500000,
500000,
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_rx_r), /*&m6809_z80_line,*/
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_tx_w), /*&z80_m6809_line,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx),
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_irq)
};
READ_LINE_MEMBER(bfcobra_state::m6809_acia_rx_r)
{
return m_z80_m6809_line;
}
WRITE_LINE_MEMBER(bfcobra_state::m6809_acia_tx_w)
{
m_m6809_z80_line = state;
}
WRITE_LINE_MEMBER(bfcobra_state::m6809_data_irq)
{
m_audiocpu->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
@ -1665,22 +1637,14 @@ static ACIA6850_INTERFACE( m6809_acia_if )
{
500000,
500000,
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_rx_r),/*&z80_m6809_line,*/
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_tx_w),/*&m6809_z80_line,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx),
DEVCB_NULL,
DEVCB_NULL
};
READ_LINE_MEMBER(bfcobra_state::data_acia_rx_r)
{
return m_data_r;
}
WRITE_LINE_MEMBER(bfcobra_state::data_acia_tx_w)
{
m_data_t = state;
m_data_t = state;
}
@ -1688,11 +1652,8 @@ static ACIA6850_INTERFACE( data_acia_if )
{
500000,
500000,
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_rx_r),/*data_r,*/
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_tx_w),/*data_t,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_data_irq)
};
@ -1744,11 +1705,9 @@ DRIVER_INIT_MEMBER(bfcobra_state,bfcobra)
membank("bank4")->set_base(memregion("user1")->base());
/* TODO: Properly sort out the data ACIA */
m_data_r = 1;
m_acia6850_2->write_rx(1);
/* Finish this */
save_item(NAME(m_z80_m6809_line));
save_item(NAME(m_m6809_z80_line));
save_item(NAME(m_data_r));
save_item(NAME(m_data_t));
save_item(NAME(m_h_scroll));

View File

@ -90,7 +90,6 @@ public:
int m_mux_input;
UINT8 m_Inputs[64];
UINT8 m_codec_data[256];
UINT8 m_sys85_data_line_r;
UINT8 m_sys85_data_line_t;
DECLARE_WRITE8_MEMBER(watchdog_w);
DECLARE_READ8_MEMBER(irqlatch_r);
@ -124,11 +123,6 @@ public:
///////////////////////////////////////////////////////////////////////////
READ_LINE_MEMBER(bfmsys85_state::sys85_data_r)
{
return m_sys85_data_line_r;
}
WRITE_LINE_MEMBER(bfmsys85_state::sys85_data_w)
{
m_sys85_data_line_t = state;
@ -138,8 +132,8 @@ static ACIA6850_INTERFACE( m6809_acia_if )
{
500000,
500000,
DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_r),
DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_w),
DEVCB_NULL,
DEVCB_NULL
};

View File

@ -2652,11 +2652,6 @@ static const pia6821_interface sys906_pia1_intf =
* ACIA Interface *
*************************************************/
READ_LINE_MEMBER(calomega_state::acia_rx_r)
{
return m_rx_line;
}
WRITE_LINE_MEMBER(calomega_state::acia_tx_w)
{
m_tx_line = state;
@ -2666,11 +2661,8 @@ static ACIA6850_INTERFACE( acia6850_intf )
{
UART_CLOCK,
UART_CLOCK,
DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_rx_r), /*&rx_line,*/
DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_tx_w), /*&tx_line,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(calomega_state,tx_rx_clk)
};

View File

@ -352,13 +352,13 @@ TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb)
case START:
{
m_touch_shift_cnt = 0;
m_a2_data_in = 0;
acia6850_2->write_rx(0);
m_touch_state = DATA;
break;
}
case DATA:
{
m_a2_data_in = (m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1;
acia6850_2->write_rx((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
if (++m_touch_shift_cnt == 8)
m_touch_state = STOP1;
@ -367,13 +367,13 @@ TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb)
}
case STOP1:
{
m_a2_data_in = 1;
acia6850_2->write_rx(1);
m_touch_state = STOP2;
break;
}
case STOP2:
{
m_a2_data_in = 1;
acia6850_2->write_rx(1);
if (++m_touch_data_count == 3)
{
@ -596,84 +596,45 @@ WRITE_LINE_MEMBER(jpmsys5_state::acia_irq)
/* Clocks are incorrect */
READ_LINE_MEMBER(jpmsys5_state::a0_rx_r)
{
return m_a0_data_in;
}
WRITE_LINE_MEMBER(jpmsys5_state::a0_tx_w)
{
m_a0_data_out = state;
}
READ_LINE_MEMBER(jpmsys5_state::a0_dcd_r)
{
return m_a0_acia_dcd;
}
static ACIA6850_INTERFACE( acia0_if )
{
10000,
10000,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_rx_r), /*&a0_data_in,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_tx_w), /*&a0_data_out,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_dcd_r), /*&a0_acia_dcd,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
};
READ_LINE_MEMBER(jpmsys5_state::a1_rx_r)
{
return m_a1_data_in;
}
WRITE_LINE_MEMBER(jpmsys5_state::a1_tx_w)
{
m_a1_data_out = state;
}
READ_LINE_MEMBER(jpmsys5_state::a1_dcd_r)
{
return m_a1_acia_dcd;
}
static ACIA6850_INTERFACE( acia1_if )
{
10000,
10000,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_rx_r), /*&state->m_a1_data_in,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_tx_w), /*&state->m_a1_data_out,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_dcd_r), /*&state->m_a1_acia_dcd,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
};
READ_LINE_MEMBER(jpmsys5_state::a2_rx_r)
{
return m_a2_data_in;
}
WRITE_LINE_MEMBER(jpmsys5_state::a2_tx_w)
{
m_a2_data_out = state;
}
READ_LINE_MEMBER(jpmsys5_state::a2_dcd_r)
{
return m_a2_acia_dcd;
}
static ACIA6850_INTERFACE( acia2_if )
{
10000,
10000,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_rx_r), /*&state->m_a2_data_in,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_tx_w), /*&state->m_a2_data_out,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_dcd_r), /*&state->m_a2_acia_dcd,*/
DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
};
@ -694,8 +655,8 @@ MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v)
{
m_touch_timer->reset();
m_touch_state = IDLE;
m_a2_data_in = 1;
m_a2_acia_dcd = 0;
acia6850_2->write_rx(1);
acia6850_2->write_dcd(0);
m_vfd->reset();
}
@ -892,8 +853,8 @@ MACHINE_START_MEMBER(jpmsys5_state,jpmsys5)
MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5)
{
m_a2_data_in = 1;
m_a2_acia_dcd = 0;
acia6850_2->write_rx(1);
acia6850_2->write_dcd(0);
m_vfd->reset();
}

View File

@ -247,12 +247,6 @@ public:
//Video
UINT8 m_m6840_irq_state;
UINT8 m_m6850_irq_state;
UINT8 m_m68k_m6809_line;
UINT8 m_m6809_m68k_line;
UINT8 m_m68k_acia_cts;
UINT8 m_m6809_acia_cts;
UINT8 m_m6809_acia_rts;
UINT8 m_m6809_acia_dcd;
int m_gfx_index;
INT8 m_cur[2];
@ -282,17 +276,7 @@ public:
DECLARE_VIDEO_START(mpu4_vid);
UINT32 screen_update_mpu4_vid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(scanline_timer_callback);
DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w);
DECLARE_READ_LINE_MEMBER(m6809_acia_cts_r);
DECLARE_WRITE_LINE_MEMBER(m6809_acia_rts_w);
DECLARE_READ_LINE_MEMBER(m6809_acia_dcd_r);
DECLARE_WRITE_LINE_MEMBER(m6809_acia_irq);
DECLARE_READ_LINE_MEMBER(m68k_acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(m68k_acia_tx_w);
DECLARE_READ_LINE_MEMBER(m68k_acia_cts_r);
DECLARE_WRITE_LINE_MEMBER(m68k_acia_rts_w);
DECLARE_READ_LINE_MEMBER(m68k_acia_dcd_r);
DECLARE_WRITE_LINE_MEMBER(m68k_acia_irq);
DECLARE_WRITE_LINE_MEMBER(cpu1_ptm_irq);
DECLARE_WRITE8_MEMBER(vid_o1_callback);
@ -343,34 +327,9 @@ WRITE_LINE_MEMBER(mpu4vid_state::update_mpu68_interrupts)
/* Communications with 6809 board */
READ_LINE_MEMBER(mpu4vid_state::m6809_acia_rx_r)
{
return m_m68k_m6809_line;
}
WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_tx_w)
{
m_m6809_m68k_line = state;
}
READ_LINE_MEMBER(mpu4vid_state::m6809_acia_cts_r)
{
return m_m6809_acia_cts;
}
WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_rts_w)
{
m_m6809_acia_rts = state;
}
READ_LINE_MEMBER(mpu4vid_state::m6809_acia_dcd_r)
{
return m_m6809_acia_dcd;
}
WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_irq)
{
m_m68k_acia_cts = state;
m_acia_1->write_cts(state);
m_maincpu->set_input_line(M6809_IRQ_LINE, state);
}
@ -378,42 +337,14 @@ static ACIA6850_INTERFACE( m6809_acia_if )
{
0,
0,
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rx_r),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_tx_w),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_cts_r),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rts_w),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_dcd_r),
DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx),
DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_dcd),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_irq)
};
READ_LINE_MEMBER(mpu4vid_state::m68k_acia_rx_r)
{
return m_m6809_m68k_line;
}
WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_tx_w)
{
m_m68k_m6809_line = state;
}
READ_LINE_MEMBER(mpu4vid_state::m68k_acia_cts_r)
{
return m_m68k_acia_cts;
}
WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_rts_w)
{
m_m6809_acia_dcd = state;
}
READ_LINE_MEMBER(mpu4vid_state::m68k_acia_dcd_r)
{
return m_m6809_acia_rts;
}
WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_irq)
{
m_m6809_acia_cts = state;
m_acia_0->write_cts(state);
m_m6850_irq_state = state;
update_mpu68_interrupts(1);
}
@ -422,11 +353,8 @@ static ACIA6850_INTERFACE( m68k_acia_if )
{
0,
0,
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rx_r),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_tx_w),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_cts_r),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rts_w),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_dcd_r),
DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx),
DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_dcd),
DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_irq)
};

View File

@ -8,7 +8,6 @@ public:
m_maincpu(*this, "maincpu") { }
UINT8 m_tx_line;
UINT8 m_rx_line;
int m_s903_mux_data;
int m_s905_mux_data;
required_shared_ptr<UINT8> m_videoram;
@ -35,7 +34,6 @@ public:
DECLARE_WRITE8_MEMBER(lamps_903a_w);
DECLARE_WRITE8_MEMBER(lamps_903b_w);
DECLARE_WRITE8_MEMBER(lamps_905_w);
DECLARE_READ_LINE_MEMBER(acia_rx_r);
DECLARE_WRITE_LINE_MEMBER(acia_tx_w);
DECLARE_DRIVER_INIT(elgrande);
DECLARE_DRIVER_INIT(standard);

View File

@ -18,12 +18,14 @@ public:
jpmsys5_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
acia6850_2(*this, "acia6850_2"),
m_upd7759(*this, "upd7759"),
m_tms34061(*this, "tms34061"),
m_vfd(*this, "vfd"),
m_direct_port(*this, "DIRECT") { }
required_device<cpu_device> m_maincpu;
required_device<acia6850_device> acia6850_2;
required_device<upd7759_device> m_upd7759;
optional_device<tms34061_device> m_tms34061;
optional_device<roc10937_t> m_vfd;
@ -42,15 +44,9 @@ public:
int m_muxram[255];
int m_alpha_clock;
int m_chop;
UINT8 m_a0_acia_dcd;
UINT8 m_a0_data_out;
UINT8 m_a0_data_in;
UINT8 m_a1_acia_dcd;
UINT8 m_a1_data_out;
UINT8 m_a1_data_in;
UINT8 m_a2_acia_dcd;
UINT8 m_a2_data_out;
UINT8 m_a2_data_in;
DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
DECLARE_READ16_MEMBER(sys5_tms34061_r);
DECLARE_WRITE16_MEMBER(ramdac_w);
@ -71,15 +67,9 @@ public:
DECLARE_WRITE_LINE_MEMBER(u29_ca2_w);
DECLARE_WRITE_LINE_MEMBER(u29_cb2_w);
DECLARE_WRITE_LINE_MEMBER(acia_irq);
DECLARE_READ_LINE_MEMBER(a0_rx_r);
DECLARE_WRITE_LINE_MEMBER(a0_tx_w);
DECLARE_READ_LINE_MEMBER(a0_dcd_r);
DECLARE_READ_LINE_MEMBER(a1_rx_r);
DECLARE_WRITE_LINE_MEMBER(a1_tx_w);
DECLARE_READ_LINE_MEMBER(a1_dcd_r);
DECLARE_READ_LINE_MEMBER(a2_rx_r);
DECLARE_WRITE_LINE_MEMBER(a2_tx_w);
DECLARE_READ_LINE_MEMBER(a2_dcd_r);
DECLARE_READ16_MEMBER(mux_awp_r);
DECLARE_READ16_MEMBER(coins_awp_r);
void sys5_draw_lamps();

View File

@ -66,11 +66,8 @@ static ACIA6850_INTERFACE( acia_intf )
{
153600,
153600,
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL
};
@ -80,7 +77,10 @@ static MACHINE_CONFIG_START( c68ksbc, c68ksbc_state )
MCFG_CPU_PROGRAM_MAP(c68ksbc_mem)
MCFG_ACIA6850_ADD("acia", acia_intf)
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
MACHINE_CONFIG_END
/* ROM definition */

View File

@ -594,7 +594,7 @@ WRITE8_MEMBER( st_state::ikbd_port2_w )
m_ikbd_joy = BIT(data, 0);
// serial transmit
m_ikbd_rx = BIT(data, 4);
m_acia0->write_rx(BIT(data, 4));
}
@ -1822,11 +1822,6 @@ static const ay8910_interface stbook_psg_intf =
// ACIA6850_INTERFACE( acia_ikbd_intf )
//-------------------------------------------------
READ_LINE_MEMBER( st_state::ikbd_rx_r )
{
return m_ikbd_rx;
}
WRITE_LINE_MEMBER( st_state::ikbd_tx_w )
{
m_ikbd_tx = state;
@ -1843,11 +1838,8 @@ static ACIA6850_INTERFACE( acia_ikbd_intf )
{
Y2/64,
Y2/64,
DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r),
DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w)
};
@ -1860,11 +1852,8 @@ static ACIA6850_INTERFACE( stbook_acia_ikbd_intf )
{
U517/2/16, // 500kHz
U517/2/2, // 1MHZ
DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r),
DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w)
};
@ -1873,16 +1862,6 @@ static ACIA6850_INTERFACE( stbook_acia_ikbd_intf )
// ACIA6850_INTERFACE( acia_midi_intf )
//-------------------------------------------------
READ_LINE_MEMBER( st_state::midi_rx_in )
{
return m_midi_rx_state;
}
WRITE_LINE_MEMBER( st_state::midi_tx_out )
{
m_mdout->tx(state);
}
WRITE_LINE_MEMBER( st_state::acia_midi_irq_w )
{
m_acia_midi_irq = state;
@ -1894,10 +1873,7 @@ static ACIA6850_INTERFACE( acia_midi_intf )
{
Y2/64,
0, // rx clock (we manually clock rx)
DEVCB_DRIVER_LINE_MEMBER(st_state, midi_rx_in),
DEVCB_DRIVER_LINE_MEMBER(st_state, midi_tx_out),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(st_state, acia_midi_irq_w)
};
@ -2152,7 +2128,7 @@ SLOT_INTERFACE_END
WRITE_LINE_MEMBER( st_state::midi_rx_w )
{
m_midi_rx_state = state;
m_acia1->write_rx(state);
for (int i = 0; i < 64; i++) // divider is set to 64
{
@ -2239,10 +2215,8 @@ void st_state::state_save()
save_item(NAME(m_ikbd_mouse_px));
save_item(NAME(m_ikbd_mouse_py));
save_item(NAME(m_ikbd_mouse_pc));
save_item(NAME(m_ikbd_rx));
save_item(NAME(m_ikbd_tx));
save_item(NAME(m_ikbd_joy));
save_item(NAME(m_midi_rx));
save_item(NAME(m_midi_tx));
save_item(NAME(m_acia_ikbd_irq));
save_item(NAME(m_acia_midi_irq));
@ -2618,10 +2592,10 @@ static MACHINE_CONFIG_START( stbook, stbook_state )
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf)
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL, NULL)
MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin", NULL)
MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin")
MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(st_state, midi_rx_w))
MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout", NULL)
MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout")
// cartridge
MCFG_CARTSLOT_ADD("cart")

View File

@ -555,11 +555,8 @@ static ACIA6850_INTERFACE( bbc_acia6850_interface )
{
0,
0,
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rxd_r),
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_txd_w),
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_cts_r),
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rts_w),
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_dcd_r),
DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbcb_acia6850_irq_w)
};
@ -697,6 +694,9 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
/* acia */
MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial))
MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial))
/* devices */
MCFG_VIA6522_ADD("via6522_0", 1000000, bbcb_system_via)
@ -884,6 +884,9 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
/* acia */
MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial))
MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial))
/* devices */
MCFG_UPD7002_ADD("upd7002", bbc_uPD7002)

View File

@ -105,11 +105,8 @@ public:
DECLARE_WRITE8_MEMBER(bml3bus_irq_w);
DECLARE_WRITE8_MEMBER(bml3bus_firq_w);
DECLARE_READ_LINE_MEMBER( bml3_acia_rx_r );
DECLARE_WRITE_LINE_MEMBER( bml3_acia_tx_w );
DECLARE_READ_LINE_MEMBER( bml3_acia_dts_r );
DECLARE_WRITE_LINE_MEMBER( bml3_acia_rts_w );
DECLARE_READ_LINE_MEMBER(bml3_acia_dcd_r);
DECLARE_WRITE_LINE_MEMBER(bml3_acia_irq_w);
DECLARE_READ8_MEMBER(bml3_a000_r); DECLARE_WRITE8_MEMBER(bml3_a000_w);
@ -925,35 +922,17 @@ static const pia6821_interface bml3_pia_config =
};
READ_LINE_MEMBER( bml3_state::bml3_acia_rx_r )
{
logerror("TAPE R\n");
return 1;
}
WRITE_LINE_MEMBER( bml3_state::bml3_acia_tx_w )
{
logerror("%02x TAPE\n",state);
}
READ_LINE_MEMBER( bml3_state::bml3_acia_dts_r )
{
logerror("TAPE R DTS\n");
return 1;
}
WRITE_LINE_MEMBER( bml3_state::bml3_acia_rts_w )
{
logerror("%02x TAPE RTS\n",state);
}
READ_LINE_MEMBER( bml3_state::bml3_acia_dcd_r )
{
logerror("TAPE R DCD\n");
return 1;
}
WRITE_LINE_MEMBER( bml3_state::bml3_acia_irq_w )
{
logerror("%02x TAPE IRQ\n",state);
@ -964,11 +943,8 @@ static ACIA6850_INTERFACE( bml3_acia_if )
{
600,
600,
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rx_r),
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_tx_w),
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dts_r),
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rts_w),
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dcd_r),
DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_irq_w)
};

View File

@ -1308,9 +1308,7 @@ static const acia6850_interface swyft_acia_config =
3579545, // guess
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};
static const via6522_interface swyft_via0_config =

View File

@ -92,9 +92,6 @@ static ACIA6850_INTERFACE( ec65_acia_intf )
0,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};

View File

@ -106,7 +106,6 @@ public:
DECLARE_WRITE8_MEMBER(mekd2_digit_w);
DECLARE_WRITE8_MEMBER(mekd2_segment_w);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mekd2_cart);
DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
TIMER_DEVICE_CALLBACK_MEMBER(mekd2_c);
TIMER_DEVICE_CALLBACK_MEMBER(mekd2_p);
@ -327,11 +326,6 @@ static const pia6821_interface mekd2_u_mc6821_intf =
DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB output */
};
READ_LINE_MEMBER( mekd2_state::cass_r )
{
return (bool)m_cass_data[2];
}
WRITE_LINE_MEMBER( mekd2_state::cass_w )
{
m_cass_state = state;
@ -341,11 +335,8 @@ static ACIA6850_INTERFACE( mekd2_acia_intf )
{
XTAL_MEKD2 / 256, /* tx clock 4800Hz */
300, /* rx clock line, toggled by cassette circuit */
DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_r), /* in rxd func */
DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_w), /* out txd func */
DEVCB_NULL, /* in cts func */
DEVCB_NULL, /* out rts func */
DEVCB_NULL, /* in dcd func */
DEVCB_NULL, // cts
DEVCB_NULL /* out irq func NOT USED */
};
@ -393,7 +384,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mekd2_state::mekd2_p)
if (cass_ws != m_cass_data[0])
{
m_cass_data[0] = cass_ws;
m_cass_data[2] = ((m_cass_data[1] < 12) ? 1 : 0);
m_acia->write_rx((m_cass_data[1] < 12) ? 1 : 0);
m_cass_data[1] = 0;
}
}

View File

@ -284,11 +284,8 @@ static ACIA6850_INTERFACE( mirage_acia6850_interface )
{
0, // tx clock
0, // rx clock
DEVCB_NULL, // rx in
DEVCB_NULL, // rx out
DEVCB_NULL, // cts in
DEVCB_NULL, // rts out
DEVCB_NULL, // dcd in
DEVCB_DRIVER_LINE_MEMBER(mirage_state, acia_irq_w)
};

View File

@ -1153,11 +1153,6 @@ INPUT_PORTS_END
/* Machine Initialization */
READ_LINE_MEMBER( newbrain_eim_state::acia_rx )
{
return m_acia_rxd;
}
WRITE_LINE_MEMBER( newbrain_eim_state::acia_tx )
{
m_acia_txd = state;
@ -1172,11 +1167,8 @@ static ACIA6850_INTERFACE( acia_intf )
{
0,
0,
DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_rx),
DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_tx),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_interrupt)
};

View File

@ -215,11 +215,8 @@ static ACIA6850_INTERFACE( acia0_intf )
{
0,
0,
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, cts_r),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dcd_r),
DEVCB_NULL
};
@ -232,11 +229,8 @@ static ACIA6850_INTERFACE( acia1_intf )
{
0,
0,
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dcd_r),
DEVCB_NULL,
};
@ -318,8 +312,16 @@ static MACHINE_CONFIG_START( ob68k1a, ob68k1a_state )
MCFG_ACIA6850_ADD(MC6850_0_TAG, acia0_intf)
MCFG_ACIA6850_ADD(MC6850_1_TAG, acia1_intf)
MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(ob68k1a_state, rx_tx_0_w), WRITELINE(ob68k1a_state, rx_tx_1_w))
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_rx))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_dcd))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_cts))
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_rx))
MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_dcd))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_cts))
// internal ram
MCFG_RAM_ADD(RAM_TAG)

View File

@ -644,11 +644,6 @@ INPUT_PORTS_END
/* Machine Start */
READ_LINE_MEMBER( sb2m600_state::cassette_rx )
{
return ((m_cassette)->input() > 0.0) ? 1 : 0;
}
WRITE_LINE_MEMBER( sb2m600_state::cassette_tx )
{
m_cassette->output(state ? +1.0 : -1.0);
@ -658,11 +653,8 @@ static ACIA6850_INTERFACE( osi600_acia_intf )
{
X1/32,
X1/32,
DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx),
DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};
@ -670,11 +662,8 @@ static ACIA6850_INTERFACE( uk101_acia_intf )
{
500000, //
500000, //
DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx),
DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};
@ -684,9 +673,6 @@ static ACIA6850_INTERFACE( osi470_acia_intf )
XTAL_4MHz/8, // 250 kHz
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};
@ -935,6 +921,9 @@ void sb2m600_state::device_timer(emu_timer &timer, device_timer_id id, int param
{
switch (id)
{
case TIMER_CASSETTE:
m_acia_0->write_rx(((m_cassette)->input() > 0.0) ? 1 : 0);
break;
case TIMER_SETUP_BEEP:
m_beeper->set_state(0);
m_beeper->set_frequency(300);
@ -947,6 +936,8 @@ void sb2m600_state::device_timer(emu_timer &timer, device_timer_id id, int param
DRIVER_INIT_MEMBER(c1p_state,c1p)
{
timer_set(attotime::zero, TIMER_SETUP_BEEP);
m_cassette_timer = timer_alloc(TIMER_CASSETTE);
m_cassette_timer->adjust(attotime::from_hz(44100), 0, attotime::from_hz(44100));
}

View File

@ -161,11 +161,8 @@ static ACIA6850_INTERFACE( acia_intf )
{
1,
1,
DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL
};

View File

@ -334,11 +334,8 @@ static ACIA6850_INTERFACE( mc6850_intf )
{
153600,
153600,
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL
};
@ -367,7 +364,11 @@ static MACHINE_CONFIG_START( cpu09, tavernie_state )
/* Devices */
MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
MCFG_PIA6821_ADD("pia", mc6821_intf)
MCFG_PTM6840_ADD("ptm", mc6840_intf)
MCFG_ACIA6850_ADD("acia", mc6850_intf)

View File

@ -1114,9 +1114,6 @@ static ACIA6850_INTERFACE( acia_intf )
0,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_LINE_GND,
DEVCB_NULL,
DEVCB_LINE_GND,
DEVCB_DRIVER_LINE_MEMBER(tek4051_state, acia_irq_w)
};

View File

@ -337,9 +337,6 @@ static ACIA6850_INTERFACE( mc6850_intf )
10,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL
};

View File

@ -93,11 +93,8 @@ static ACIA6850_INTERFACE( acia_intf )
{
153600,
153600,
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
DEVCB_NULL,
DEVCB_NULL
};
@ -120,7 +117,10 @@ static MACHINE_CONFIG_START( votrtnt, votrtnt_state )
/* serial hardware */
MCFG_ACIA6850_ADD("acia", acia_intf)
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -87,11 +87,11 @@ public:
m_maincpu(*this, M68000_TAG),
m_fdc(*this, WD1772_TAG),
m_mfp(*this, MC68901_TAG),
m_acia0(*this, MC6850_0_TAG),
m_acia1(*this, MC6850_1_TAG),
m_centronics(*this, CENTRONICS_TAG),
m_ram(*this, RAM_TAG),
m_rs232(*this, RS232_TAG),
m_mdout(*this, "mdout"),
m_p31(*this, "P31"),
m_p32(*this, "P32"),
m_p33(*this, "P33"),
@ -125,11 +125,11 @@ public:
required_device<cpu_device> m_maincpu;
required_device<wd1772_t> m_fdc;
required_device<mc68901_device> m_mfp;
required_device<acia6850_device> m_acia0;
required_device<acia6850_device> m_acia1;
required_device<centronics_device> m_centronics;
required_device<ram_device> m_ram;
required_device<rs232_port_device> m_rs232;
required_device<serial_port_device> m_mdout;
required_ioport m_p31;
required_ioport m_p32;
required_ioport m_p33;
@ -231,11 +231,8 @@ public:
DECLARE_WRITE8_MEMBER( psg_pa_w );
DECLARE_READ_LINE_MEMBER( ikbd_rx_r );
DECLARE_WRITE_LINE_MEMBER( ikbd_tx_w );
DECLARE_WRITE_LINE_MEMBER( acia_ikbd_irq_w );
DECLARE_READ_LINE_MEMBER( midi_rx_in );
DECLARE_WRITE_LINE_MEMBER( midi_tx_out );
DECLARE_WRITE_LINE_MEMBER( acia_midi_irq_w );
DECLARE_READ8_MEMBER( mfp_gpio_r );
@ -254,9 +251,6 @@ public:
/* memory state */
UINT8 m_mmu;
// MIDI state
int m_midi_rx_state;
/* keyboard state */
int m_acia_ikbd_irq;
int m_acia_midi_irq;
@ -267,10 +261,8 @@ public:
UINT8 m_ikbd_mouse_px;
UINT8 m_ikbd_mouse_py;
UINT8 m_ikbd_mouse_pc;
int m_ikbd_rx;
int m_ikbd_tx;
int m_ikbd_joy;
int m_midi_rx;
int m_midi_tx;
/* floppy state */

View File

@ -175,6 +175,9 @@ public:
int m_len3;
int m_mc6850_clock;
UINT8 m_serproc_data;
int m_rxd_serial;
int m_dcd_serial;
int m_cts_serial;
int m_dcd_cass;
int m_rxd_cass;
int m_cass_out_enabled;
@ -340,11 +343,14 @@ public:
DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_intrq_w);
DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_drq_w);
DECLARE_WRITE_LINE_MEMBER(bbc_vsync);
DECLARE_READ_LINE_MEMBER(bbc_rxd_r);
DECLARE_READ_LINE_MEMBER(bbc_dcd_r);
DECLARE_READ_LINE_MEMBER(bbc_cts_r);
void update_acia_rxd();
void update_acia_dcd();
void update_acia_cts();
DECLARE_WRITE_LINE_MEMBER(bbc_rts_w);
DECLARE_WRITE_LINE_MEMBER(bbc_txd_w);
DECLARE_WRITE_LINE_MEMBER(write_rxd_serial);
DECLARE_WRITE_LINE_MEMBER(write_dcd_serial);
DECLARE_WRITE_LINE_MEMBER(write_cts_serial);
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart );

View File

@ -164,7 +164,6 @@ public:
int m_bee; // identity
UINT8 m_enrg1; // enable register 1
UINT8 m_enrg2; // enable register 2
int m_acia_rxd; // ACIA receive
int m_acia_txd; // ACIA transmit
// COP420 state
@ -239,7 +238,6 @@ public:
DECLARE_READ8_MEMBER( usbs_r );
DECLARE_WRITE8_MEMBER( usbs_w );
DECLARE_WRITE8_MEMBER( paging_w );
DECLARE_READ_LINE_MEMBER( acia_rx );
DECLARE_WRITE_LINE_MEMBER( acia_tx );
DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
DECLARE_WRITE_LINE_MEMBER( fdc_interrupt );

View File

@ -30,12 +30,14 @@ class sb2m600_state : public driver_device
public:
enum
{
TIMER_CASSETTE,
TIMER_SETUP_BEEP
};
sb2m600_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, M6502_TAG),
m_acia_0(*this, "acia_0"),
m_cassette(*this, "cassette"),
m_discrete(*this, DISCRETE_TAG),
m_ram(*this, RAM_TAG),
@ -60,7 +62,6 @@ public:
DECLARE_READ8_MEMBER( keyboard_r );
DECLARE_WRITE8_MEMBER( keyboard_w );
DECLARE_WRITE8_MEMBER( ctrl_w );
DECLARE_READ_LINE_MEMBER( cassette_rx );
DECLARE_WRITE_LINE_MEMBER( cassette_tx );
/* keyboard state */
@ -78,6 +79,7 @@ public:
DECLARE_PALETTE_INIT(osi630);
required_device<cpu_device> m_maincpu;
required_device<acia6850_device> m_acia_0;
required_device<cassette_image_device> m_cassette;
optional_device<discrete_sound_device> m_discrete;
required_device<ram_device> m_ram;
@ -94,6 +96,7 @@ public:
required_ioport m_io_sound;
required_ioport m_io_reset;
optional_device<beep_device> m_beeper;
emu_timer *m_cassette_timer;
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -137,7 +137,6 @@ public:
DECLARE_WRITE8_MEMBER( to7_io_portb_out );
DECLARE_WRITE8_MEMBER( to7_io_cb2_out );
DECLARE_WRITE_LINE_MEMBER( to7_modem_cb );
DECLARE_READ_LINE_MEMBER( to7_modem_rx_r );
DECLARE_WRITE_LINE_MEMBER( to7_modem_tx_w );
DECLARE_READ8_MEMBER( to7_modem_mea8000_r );
DECLARE_WRITE8_MEMBER( to7_modem_mea8000_w );
@ -339,7 +338,6 @@ protected:
UINT8 m_thom_cart_bank; /* current bank */
UINT8 m_to7_lightpen_step;
UINT8 m_to7_lightpen;
UINT8 m_to7_modem_rx;
UINT8 m_to7_modem_tx;
/* calls to7_game_update_cb periodically */
emu_timer* m_to7_game_timer;

View File

@ -1297,6 +1297,7 @@ const uPD7002_interface bbc_uPD7002 =
void bbc_state::MC6850_Receive_Clock(int new_clock)
{
m_rxd_cass = new_clock;
update_acia_rxd();
//
// Somehow the "serial processor" generates 16 clock signals towards
@ -1366,6 +1367,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
logerror ("Cassette length %d\n",m_wav_len);
m_nr_high_tones = 0;
m_dcd_cass = 0;
update_acia_dcd();
m_len0=0;
m_len1=0;
m_len2=0;
@ -1387,6 +1389,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
logerror("Serial value 0\n");
m_nr_high_tones = 0;
m_dcd_cass = 0;
update_acia_dcd();
MC6850_Receive_Clock(0);
m_len0=0;
m_len1=0;
@ -1402,6 +1405,7 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
if ( m_nr_high_tones > 100 )
{
m_dcd_cass = 1;
update_acia_dcd();
}
MC6850_Receive_Clock(1);
m_len0=0;
@ -1416,22 +1420,39 @@ TIMER_CALLBACK_MEMBER(bbc_state::bbc_tape_timer_cb)
}
}
READ_LINE_MEMBER( bbc_state::bbc_rxd_r )
WRITE_LINE_MEMBER( bbc_state::write_rxd_serial )
{
return ( m_serproc_data & 0x40 ) ? m_rs232->rx() : m_rxd_cass;
m_rxd_serial = state;
update_acia_rxd();
}
void bbc_state::update_acia_rxd()
{
m_acia->write_rx(( m_serproc_data & 0x40 ) ? m_rxd_serial : m_rxd_cass);
}
READ_LINE_MEMBER( bbc_state::bbc_dcd_r )
WRITE_LINE_MEMBER( bbc_state::write_dcd_serial )
{
return ( m_serproc_data & 0x40 ) ? m_rs232->dcd_r() : m_dcd_cass;
m_dcd_serial = state;
update_acia_dcd();
}
void bbc_state::update_acia_dcd()
{
m_acia->write_dcd(( m_serproc_data & 0x40 ) ? m_dcd_serial : m_dcd_cass);
}
READ_LINE_MEMBER( bbc_state::bbc_cts_r )
WRITE_LINE_MEMBER( bbc_state::write_cts_serial )
{
return ( m_serproc_data & 0x40 ) ? m_rs232->cts_r() : 0;
m_cts_serial = state;
update_acia_cts();
}
void bbc_state::update_acia_cts()
{
m_acia->write_cts(( m_serproc_data & 0x40 ) ? m_cts_serial : 0);
}
@ -1516,6 +1537,9 @@ WRITE8_MEMBER(bbc_state::bbc_SerialULA_w)
};
m_serproc_data = data;
update_acia_rxd();
update_acia_dcd();
update_acia_cts();
BBC_Cassette_motor(m_serproc_data & 0x80);
// Set transmit clock rate

View File

@ -1200,18 +1200,12 @@ void gf1_device::eop_w(int state)
/* 16-bit ISA card device implementation */
static const acia6850_interface gus_midi_interface =
static ACIA6850_INTERFACE(gus_midi_interface)
{
31250 * 16,
0,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, rx_in), // rx in
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, tx_out), // tx out
DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,isa16_gus_device,midi_irq)
};
@ -1290,7 +1284,6 @@ void isa16_gus_device::device_start()
{
m_gf1 = subdevice<gf1_device>("gf1");
m_midi = subdevice<acia6850_device>("midi");
m_mdout = subdevice<serial_port_device>("mdout");
set_isa_device();
m_isa->install_device(0x0200, 0x0201, 0, 0, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) );
m_isa->install_device(0x0220, 0x022f, 0, 0, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) );
@ -1712,23 +1705,13 @@ WRITE_LINE_MEMBER( isa16_gus_device::midi_irq )
WRITE_LINE_MEMBER( isa16_gus_device::midi_rx_w )
{
m_rx_state = state;
m_midi->write_rx(state);
for (int i = 0; i < 16; i++) // divider is set to 16
{
m_midi->rx_clock_in();
}
}
READ_LINE_MEMBER( isa16_gus_device::rx_in )
{
return m_rx_state;
}
WRITE_LINE_MEMBER( isa16_gus_device::tx_out )
{
m_mdout->tx(state);
}
WRITE_LINE_MEMBER( isa16_gus_device::nmi_w)
{
m_irq_status |= IRQ_SB;

View File

@ -255,8 +255,6 @@ public:
DECLARE_WRITE_LINE_MEMBER(drq2_w);
DECLARE_WRITE_LINE_MEMBER(nmi_w);
DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
DECLARE_READ_LINE_MEMBER( rx_in );
DECLARE_WRITE_LINE_MEMBER( tx_out );
// DMA overrides
virtual UINT8 dack_r(int line);
@ -274,11 +272,9 @@ protected:
private:
gf1_device* m_gf1;
acia6850_device* m_midi;
serial_port_device* m_mdout;
UINT8 m_irq_status;
attotime m_joy_time;
int m_rx_state;
};
// device type definition

View File

@ -826,11 +826,6 @@ const pia6821_interface to7_pia6821_modem =
DEVCB_NULL
};
READ_LINE_MEMBER( thomson_state::to7_modem_rx_r )
{
return m_to7_modem_rx;
}
WRITE_LINE_MEMBER( thomson_state::to7_modem_tx_w )
{
m_to7_modem_tx = state;
@ -840,11 +835,8 @@ ACIA6850_INTERFACE( to7_modem )
{
1200,
1200, /* 1200 bauds, might be divided by 16 */
DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_rx_r), /*&to7_modem_rx,*/
DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_tx_w), /*&to7_modem_tx,*/
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_cb)
};
@ -853,7 +845,7 @@ ACIA6850_INTERFACE( to7_modem )
void thomson_state::to7_modem_reset()
{
LOG (( "to7_modem_reset called\n" ));
m_to7_modem_rx = 0;
m_acia->write_rx(0);
m_to7_modem_tx = 0;
/* pia_reset() is called in machine_reset */
/* acia_6850 has no reset (?) */
@ -864,7 +856,6 @@ void thomson_state::to7_modem_reset()
void thomson_state::to7_modem_init()
{
LOG (( "to7_modem_init: MODEM not implemented!\n" ));
save_item(NAME(m_to7_modem_rx));
save_item(NAME(m_to7_modem_tx));
}