mirror of
https://github.com/holub/mame
synced 2025-05-21 13:18:56 +03:00
Sync with MESS, Curt changes related to Wang PC (no whatsnew)
This commit is contained in:
parent
12d9718806
commit
400e51198b
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -981,6 +981,8 @@ src/emu/machine/s3c2410.h svneol=native#text/plain
|
||||
src/emu/machine/s3c2440.c svneol=native#text/plain
|
||||
src/emu/machine/s3c2440.h svneol=native#text/plain
|
||||
src/emu/machine/s3c24xx.c svneol=native#text/plain
|
||||
src/emu/machine/scn2661.c svneol=native#text/plain
|
||||
src/emu/machine/scn2661.h svneol=native#text/plain
|
||||
src/emu/machine/scsi.c svneol=native#text/plain
|
||||
src/emu/machine/scsi.h svneol=native#text/plain
|
||||
src/emu/machine/scsicd.c svneol=native#text/plain
|
||||
|
@ -952,6 +952,7 @@ INLINE void transmit_receive(mcs51_state_t *mcs51_state, int source)
|
||||
SET_SBUF(data);
|
||||
//Flag the IRQ
|
||||
SET_RI(1);
|
||||
SET_RB8(1); // HACK force 2nd stop bit
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1221,7 +1222,7 @@ INLINE void serial_transmit(mcs51_state_t *mcs51_state, UINT8 data)
|
||||
|
||||
//Flag that we're sending data
|
||||
mcs51_state->uart.data_out = data;
|
||||
LOG(("serial_tansmit: %x %x\n", mode, data));
|
||||
LOG(("serial_transmit: %x %x\n", mode, data));
|
||||
switch(mode) {
|
||||
//8 bit shifter ( + start,stop bit ) - baud set by clock freq / 12
|
||||
case 0:
|
||||
@ -1234,7 +1235,7 @@ INLINE void serial_transmit(mcs51_state_t *mcs51_state, UINT8 data)
|
||||
//9 bit uart
|
||||
case 2:
|
||||
case 3:
|
||||
LOG(("Serial mode %d not supported in mcs51!\n", mode));
|
||||
mcs51_state->uart.bits_to_send = 8+3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1256,7 +1257,7 @@ INLINE void serial_receive(mcs51_state_t *mcs51_state)
|
||||
//9 bit uart
|
||||
case 2:
|
||||
case 3:
|
||||
LOG(("Serial mode %d not supported in mcs51!\n", mode));
|
||||
mcs51_state->uart.delay_cycles = 8+3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1727,7 +1728,7 @@ static void check_irqs(mcs51_state_t *mcs51_state)
|
||||
LOG(("Request: %d\n", priority_request));
|
||||
if (mcs51_state->irq_active && (priority_request <= mcs51_state->cur_irq_prio))
|
||||
{
|
||||
LOG(("higher or equal priority irq in progress already, skipping ...\n"));
|
||||
LOG(("higher or equal priority irq (%u) in progress already, skipping ...\n", mcs51_state->cur_irq_prio));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2191,6 +2192,10 @@ static CPU_RESET( mcs51 )
|
||||
mcs51_state->ds5002fp.range = (GET_RG1 << 1) | GET_RG0;
|
||||
}
|
||||
|
||||
mcs51_state->uart.rx_clk = 0;
|
||||
mcs51_state->uart.tx_clk = 0;
|
||||
mcs51_state->uart.bits_to_send = 0;
|
||||
mcs51_state->uart.delay_cycles = 0;
|
||||
}
|
||||
|
||||
/* Shut down CPU core */
|
||||
|
@ -340,11 +340,9 @@ UINT8 device_serial_interface::transmit_register_get_data_bit()
|
||||
return bit;
|
||||
}
|
||||
|
||||
void device_serial_interface::transmit_register_send_bit()
|
||||
UINT8 device_serial_interface::transmit_register_send_bit()
|
||||
{
|
||||
int data;
|
||||
|
||||
data = transmit_register_get_data_bit();
|
||||
UINT8 data = transmit_register_get_data_bit();
|
||||
|
||||
/* set tx data bit */
|
||||
m_connection_state &=~SERIAL_STATE_TX_DATA;
|
||||
@ -352,6 +350,8 @@ void device_serial_interface::transmit_register_send_bit()
|
||||
|
||||
/* state out through connection */
|
||||
serial_connection_out();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
@ -98,7 +98,7 @@ public:
|
||||
void transmit_register_add_bit(int bit);
|
||||
void transmit_register_setup(UINT8 data_byte);
|
||||
UINT8 transmit_register_get_data_bit();
|
||||
void transmit_register_send_bit();
|
||||
UINT8 transmit_register_send_bit();
|
||||
|
||||
UINT8 serial_helper_get_parity(UINT8 data) { return m_serial_parity_table[data]; }
|
||||
|
||||
|
@ -239,6 +239,7 @@ EMUMACHINEOBJS = \
|
||||
$(EMUMACHINE)/s3c2400.o \
|
||||
$(EMUMACHINE)/s3c2410.o \
|
||||
$(EMUMACHINE)/s3c2440.o \
|
||||
$(EMUMACHINE)/scn2661.o \
|
||||
$(EMUMACHINE)/scsi.o \
|
||||
$(EMUMACHINE)/scsicd.o \
|
||||
$(EMUMACHINE)/scsidev.o \
|
||||
|
@ -23,7 +23,7 @@ const device_type IM6402 = &device_creator<im6402_device>;
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define LOG 0
|
||||
#define LOG 1
|
||||
|
||||
|
||||
|
||||
@ -73,19 +73,27 @@ inline void im6402_device::set_tre(int state)
|
||||
|
||||
inline void im6402_device::receive()
|
||||
{
|
||||
int bit = 1;
|
||||
|
||||
if (m_in_rri_func.isnull())
|
||||
{
|
||||
receive_register_update_bit(get_in_data_bit());
|
||||
bit = get_in_data_bit();
|
||||
}
|
||||
else
|
||||
{
|
||||
receive_register_update_bit(m_in_rri_func());
|
||||
bit = m_in_rri_func();
|
||||
}
|
||||
|
||||
// if (LOG) logerror("IM6402 '%s' Receive Bit %u\n", tag(), bit);
|
||||
|
||||
receive_register_update_bit(bit);
|
||||
|
||||
if (is_receive_register_full())
|
||||
{
|
||||
receive_register_extract();
|
||||
m_rbr = get_received_char();
|
||||
|
||||
if (LOG) logerror("IM6402 '%s' Receive Data %02x\n", tag(), m_rbr);
|
||||
|
||||
if (m_dr)
|
||||
{
|
||||
@ -105,6 +113,8 @@ inline void im6402_device::transmit()
|
||||
{
|
||||
if (is_transmit_register_empty() && !m_tbre)
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Transmit Data %02x\n", tag(), m_tbr);
|
||||
|
||||
transmit_register_setup(m_tbr);
|
||||
|
||||
set_tbre(ASSERT_LINE);
|
||||
@ -113,10 +123,11 @@ inline void im6402_device::transmit()
|
||||
|
||||
if (!is_transmit_register_empty())
|
||||
{
|
||||
int bit = transmit_register_get_data_bit();
|
||||
int bit = transmit_register_send_bit();
|
||||
|
||||
if (LOG) logerror("IM6402 '%s' Transmit Bit %u\n", tag(), bit);
|
||||
|
||||
m_out_tro_func(bit);
|
||||
serial_connection_out();
|
||||
|
||||
if (is_transmit_register_empty())
|
||||
{
|
||||
@ -219,6 +230,9 @@ void im6402_device::device_start()
|
||||
|
||||
void im6402_device::device_reset()
|
||||
{
|
||||
transmit_register_reset();
|
||||
receive_register_reset();
|
||||
|
||||
m_rrc_count = 0;
|
||||
m_trc_count = 0;
|
||||
|
||||
@ -277,6 +291,8 @@ READ8_MEMBER( im6402_device::read )
|
||||
|
||||
WRITE8_MEMBER( im6402_device::write )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Transmit Buffer Register %02x\n", tag(), data);
|
||||
|
||||
m_tbr = data;
|
||||
|
||||
set_tbre(CLEAR_LINE);
|
||||
@ -433,8 +449,10 @@ WRITE_LINE_MEMBER( im6402_device::crl_w )
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Control Register Load\n", tag());
|
||||
|
||||
int word_length = 5 + ((m_cls2 << 1) | m_cls1);
|
||||
int stop_bits = 1 + m_sbs ? ((word_length == 5) ? 0.5 : 1) : 0;
|
||||
int stop_bits = 1 + (m_sbs ? ((word_length == 5) ? 0.5 : 1) : 0);
|
||||
int parity_code;
|
||||
|
||||
if (m_pi) parity_code = SERIAL_PARITY_NONE;
|
||||
@ -452,6 +470,8 @@ WRITE_LINE_MEMBER( im6402_device::crl_w )
|
||||
|
||||
WRITE_LINE_MEMBER( im6402_device::pi_w )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Parity Inhibit %u\n", tag(), state);
|
||||
|
||||
m_pi = state;
|
||||
}
|
||||
|
||||
@ -462,6 +482,8 @@ WRITE_LINE_MEMBER( im6402_device::pi_w )
|
||||
|
||||
WRITE_LINE_MEMBER( im6402_device::sbs_w )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Stop Bit Select %u\n", tag(), state);
|
||||
|
||||
m_sbs = state;
|
||||
}
|
||||
|
||||
@ -472,6 +494,8 @@ WRITE_LINE_MEMBER( im6402_device::sbs_w )
|
||||
|
||||
WRITE_LINE_MEMBER( im6402_device::cls1_w )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Character Length Select 1 %u\n", tag(), state);
|
||||
|
||||
m_cls1 = state;
|
||||
}
|
||||
|
||||
@ -482,6 +506,8 @@ WRITE_LINE_MEMBER( im6402_device::cls1_w )
|
||||
|
||||
WRITE_LINE_MEMBER( im6402_device::cls2_w )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Character Length Select 2 %u\n", tag(), state);
|
||||
|
||||
m_cls2 = state;
|
||||
}
|
||||
|
||||
@ -492,5 +518,7 @@ WRITE_LINE_MEMBER( im6402_device::cls2_w )
|
||||
|
||||
WRITE_LINE_MEMBER( im6402_device::epe_w )
|
||||
{
|
||||
if (LOG) logerror("IM6402 '%s' Even Parity Enable %u\n", tag(), state);
|
||||
|
||||
m_epe = state;
|
||||
}
|
||||
|
@ -129,8 +129,11 @@ private:
|
||||
inline void receive();
|
||||
inline void transmit();
|
||||
|
||||
static const device_timer_id TIMER_RX = 0;
|
||||
static const device_timer_id TIMER_TX = 1;
|
||||
enum
|
||||
{
|
||||
TIMER_RX,
|
||||
TIMER_TX
|
||||
};
|
||||
|
||||
devcb_resolved_read_line m_in_rri_func;
|
||||
devcb_resolved_write_line m_out_tro_func;
|
||||
|
293
src/emu/machine/scn2661.c
Normal file
293
src/emu/machine/scn2661.c
Normal file
@ -0,0 +1,293 @@
|
||||
/***************************************************************************
|
||||
|
||||
Philips SCN2661 Enhanced Programmable Communications Interface emulation
|
||||
|
||||
Copyright the MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "scn2661.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type SCN2661 = &device_creator<scn2661_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define LOG 1
|
||||
|
||||
enum
|
||||
{
|
||||
REGISTER_HOLDING = 0,
|
||||
REGISTER_STATUS,
|
||||
REGISTER_SYNC = REGISTER_STATUS,
|
||||
REGISTER_MODE,
|
||||
REGISTER_COMMAND
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INLINE HELPERS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// receive -
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void scn2661_device::receive()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// transmit -
|
||||
//-------------------------------------------------
|
||||
|
||||
inline void scn2661_device::transmit()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// scn2661_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
scn2661_device::scn2661_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, SCN2661, "SCN2661", tag, owner, clock),
|
||||
device_serial_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void scn2661_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const scn2661_interface *intf = reinterpret_cast<const scn2661_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<scn2661_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_rxd_cb, 0, sizeof(m_in_rxd_cb));
|
||||
memset(&m_out_txd_cb, 0, sizeof(m_out_txd_cb));
|
||||
memset(&m_out_rxrdy_cb, 0, sizeof(m_out_rxrdy_cb));
|
||||
memset(&m_out_txrdy_cb, 0, sizeof(m_out_txrdy_cb));
|
||||
memset(&m_out_rts_cb, 0, sizeof(m_out_rts_cb));
|
||||
memset(&m_out_dtr_cb, 0, sizeof(m_out_dtr_cb));
|
||||
memset(&m_out_txemt_dschg_cb, 0, sizeof(m_out_txemt_dschg_cb));
|
||||
memset(&m_out_bkdet_cb, 0, sizeof(m_out_bkdet_cb));
|
||||
memset(&m_out_xsync_cb, 0, sizeof(m_out_xsync_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void scn2661_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_in_rxd_func.resolve(m_in_rxd_cb, *this);
|
||||
m_out_txd_func.resolve(m_out_txd_cb, *this);
|
||||
m_out_rxrdy_func.resolve(m_out_rxrdy_cb, *this);
|
||||
m_out_txrdy_func.resolve(m_out_txrdy_cb, *this);
|
||||
m_out_rts_func.resolve(m_out_rts_cb, *this);
|
||||
m_out_dtr_func.resolve(m_out_dtr_cb, *this);
|
||||
m_out_txemt_dschg_func.resolve(m_out_txemt_dschg_cb, *this);
|
||||
m_out_bkdet_func.resolve(m_out_bkdet_cb, *this);
|
||||
m_out_xsync_func.resolve(m_out_xsync_cb, *this);
|
||||
|
||||
// create the timers
|
||||
if (m_rxc > 0)
|
||||
{
|
||||
m_rx_timer = timer_alloc(TIMER_RX);
|
||||
m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rxc));
|
||||
}
|
||||
|
||||
if (m_txc > 0)
|
||||
{
|
||||
m_tx_timer = timer_alloc(TIMER_TX);
|
||||
m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_txc));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void scn2661_device::device_reset()
|
||||
{
|
||||
transmit_register_reset();
|
||||
receive_register_reset();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_timer - handler timer events
|
||||
//-------------------------------------------------
|
||||
|
||||
void scn2661_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case TIMER_RX:
|
||||
rxc_w(1);
|
||||
break;
|
||||
|
||||
case TIMER_TX:
|
||||
txc_w(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_callback -
|
||||
//-------------------------------------------------
|
||||
|
||||
void scn2661_device::input_callback(UINT8 state)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( scn2661_device::read )
|
||||
{
|
||||
UINT8 data = 0;
|
||||
|
||||
switch (offset & 0x03)
|
||||
{
|
||||
case REGISTER_HOLDING:
|
||||
data = m_rhr;
|
||||
break;
|
||||
|
||||
case REGISTER_STATUS:
|
||||
data = m_sr;
|
||||
break;
|
||||
|
||||
case REGISTER_MODE:
|
||||
break;
|
||||
|
||||
case REGISTER_COMMAND:
|
||||
data = m_cr;
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write - transmitter buffer register write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( scn2661_device::write )
|
||||
{
|
||||
switch (offset & 0x03)
|
||||
{
|
||||
case REGISTER_HOLDING:
|
||||
m_thr = data;
|
||||
break;
|
||||
|
||||
case REGISTER_SYNC:
|
||||
break;
|
||||
|
||||
case REGISTER_MODE:
|
||||
break;
|
||||
|
||||
case REGISTER_COMMAND:
|
||||
m_cr = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxc_w - receiver clock
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( scn2661_device::rxc_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txc_w - transmitter clock
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( scn2661_device::txc_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// dsr_w - data set ready
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( scn2661_device::dsr_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// dcd_w - data carrier detect
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( scn2661_device::dcd_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cts_w - clear to send
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( scn2661_device::cts_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxrdy_r - receiver ready
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( scn2661_device::rxrdy_r )
|
||||
{
|
||||
return CLEAR_LINE;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txemt_r - transmitter empty
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( scn2661_device::txemt_r )
|
||||
{
|
||||
return CLEAR_LINE;
|
||||
}
|
152
src/emu/machine/scn2661.h
Normal file
152
src/emu/machine/scn2661.h
Normal file
@ -0,0 +1,152 @@
|
||||
/***************************************************************************
|
||||
|
||||
Philips SCN2661 Enhanced Programmable Communications Interface emulation
|
||||
|
||||
Copyright the MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
****************************************************************************
|
||||
_____ _____
|
||||
D2 1 |* \_/ | 28 D1
|
||||
D3 2 | | 27 D0
|
||||
RxD 3 | | 26 Vcc
|
||||
GND 4 | | 25 _RxC/BKDET
|
||||
D4 5 | | 24 _DTR
|
||||
D5 6 | | 23 _RTS
|
||||
D6 7 | SCN2661 | 22 _DSR
|
||||
D7 8 | | 21 RESET
|
||||
_TxC/XSYNC 9 | | 20 BRCLK
|
||||
A1 10 | | 19 TxD
|
||||
_CE 11 | | 18 _TxEMT/DSCHG
|
||||
A0 12 | | 17 _CTS
|
||||
_R/W 13 | | 16 _DCD
|
||||
_RxRDY 14 |_____________| 15 _TxRDY
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __SCN2661__
|
||||
#define __SCN2661__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE CONFIGURATION MACROS
|
||||
***************************************************************************/
|
||||
|
||||
#define MCFG_SCN2661_ADD(_tag, _clock, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, SCN2661, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define SCN2661_INTERFACE(_name) \
|
||||
const scn2661_interface (_name) =
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
// ======================> scn2661_interface
|
||||
|
||||
struct scn2661_interface
|
||||
{
|
||||
int m_rxc;
|
||||
int m_txc;
|
||||
|
||||
devcb_read_line m_in_rxd_cb;
|
||||
devcb_write_line m_out_txd_cb;
|
||||
|
||||
devcb_write_line m_out_rxrdy_cb;
|
||||
devcb_write_line m_out_txrdy_cb;
|
||||
devcb_write_line m_out_rts_cb;
|
||||
devcb_write_line m_out_dtr_cb;
|
||||
devcb_write_line m_out_txemt_dschg_cb;
|
||||
devcb_write_line m_out_bkdet_cb;
|
||||
devcb_write_line m_out_xsync_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> scn2661_device
|
||||
|
||||
class scn2661_device : public device_t,
|
||||
public device_serial_interface,
|
||||
public scn2661_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
scn2661_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rxc_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( txc_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( dsr_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( dcd_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( cts_w );
|
||||
|
||||
DECLARE_READ_LINE_MEMBER( rxrdy_r );
|
||||
DECLARE_READ_LINE_MEMBER( txemt_r );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
// device_serial_interface overrides
|
||||
virtual void input_callback(UINT8 state);
|
||||
|
||||
private:
|
||||
inline void receive();
|
||||
inline void transmit();
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_RX,
|
||||
TIMER_TX
|
||||
};
|
||||
|
||||
devcb_resolved_read_line m_in_rxd_func;
|
||||
devcb_resolved_write_line m_out_txd_func;
|
||||
|
||||
devcb_resolved_write_line m_out_rxrdy_func;
|
||||
devcb_resolved_write_line m_out_txrdy_func;
|
||||
devcb_resolved_write_line m_out_rts_func;
|
||||
devcb_resolved_write_line m_out_dtr_func;
|
||||
devcb_resolved_write_line m_out_txemt_dschg_func;
|
||||
devcb_resolved_write_line m_out_bkdet_func;
|
||||
devcb_resolved_write_line m_out_xsync_func;
|
||||
|
||||
UINT8 m_rhr;
|
||||
UINT8 m_thr;
|
||||
UINT8 m_cr;
|
||||
UINT8 m_sr;
|
||||
UINT8 m_mr1;
|
||||
UINT8 m_mr2;
|
||||
UINT8 m_syn1;
|
||||
UINT8 m_syn2;
|
||||
UINT8 m_dle;
|
||||
|
||||
int m_mr_index;
|
||||
int m_sync_index;
|
||||
|
||||
// timers
|
||||
emu_timer *m_rx_timer;
|
||||
emu_timer *m_tx_timer;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type SCN2661;
|
||||
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user