summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-03-06 15:00:11 -0500
committer AJR <ajrhacker@users.noreply.github.com>2020-03-06 15:03:31 -0500
commit6ab1dfb1a818e4d976f7e94537260ef36d2f7cc0 (patch)
treed9b4e12bd411506443dbcae3328d3b2252b477bf /src/devices
parentddfe149872e94f8dfcc021456ca782e1dfb37ab1 (diff)
Clean up odds and ends (nw)
- com8116: Delete SY2661-1/-2 tables (these are just second sources of SCN2661A/B) - mc2661: Remove obsolete device - rs232: Remove 7200 baud setting formerly required by one driver to work around incorrect table
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/bus/rs232/rs232.h5
-rw-r--r--src/devices/machine/com8116.cpp12
-rw-r--r--src/devices/machine/com8116.h2
-rw-r--r--src/devices/machine/mc2661.cpp507
-rw-r--r--src/devices/machine/mc2661.h101
5 files changed, 2 insertions, 625 deletions
diff --git a/src/devices/bus/rs232/rs232.h b/src/devices/bus/rs232/rs232.h
index 2ba7d61c53e..5a007dd34a3 100644
--- a/src/devices/bus/rs232/rs232.h
+++ b/src/devices/bus/rs232/rs232.h
@@ -22,7 +22,6 @@
#define RS232_BAUD_38400 (0x0b)
#define RS232_BAUD_57600 (0x0c)
#define RS232_BAUD_115200 (0x0d)
-#define RS232_BAUD_7200 (0x0e)
#define PORT_RS232_BAUD(_tag, _default_baud, _description, _class, _write_line) \
PORT_START(_tag) \
@@ -34,7 +33,6 @@
PORT_CONFSETTING( RS232_BAUD_1200, "1200") \
PORT_CONFSETTING( RS232_BAUD_2400, "2400") \
PORT_CONFSETTING( RS232_BAUD_4800, "4800") \
- PORT_CONFSETTING( RS232_BAUD_7200, "7200") \
PORT_CONFSETTING( RS232_BAUD_9600, "9600") \
PORT_CONFSETTING( RS232_BAUD_14400, "14400") \
PORT_CONFSETTING( RS232_BAUD_19200, "19200") \
@@ -211,8 +209,7 @@ protected:
28800,
38400,
57600,
- 115200,
- 7200
+ 115200
};
return values[baud];
diff --git a/src/devices/machine/com8116.cpp b/src/devices/machine/com8116.cpp
index 7847c496b61..9942234a640 100644
--- a/src/devices/machine/com8116.cpp
+++ b/src/devices/machine/com8116.cpp
@@ -45,7 +45,7 @@ const int com8116_device::divisors_16X_5_0688MHz[16] =
const int com8116_device::divisors_16X_6_01835MHz[16] =
{ 7523, 5015, 3420, 2797, 2508, 1881, 1254, 627, 313, 209, 188, 157, 104, 78, 39, 20 };
-// SMC/COM5016(T)-5 and WD WD-1943-05; Synertek SY2661-1 and 2 are NOT the same as this despite using same clock speed, see below
+// SMC/COM5016(T)-5 and WD WD-1943-05; Synertek SY2661-1 and 2 are NOT the same as this despite using same clock speed
// SMC/COM8156(T)-5 is the same chip but clocked twice as fast and 32x clocks per baud instead of 16x
// Motorola K1135C is similar, with undivided 4.9152 MHz on pin 1
// baud rates are 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2000, 2400, 3600, 4800, 7200, 9600, 19200
@@ -80,16 +80,6 @@ const int com8116_device::divisors_16X_4_6080MHz[16] =
// COM8046 combines the -6 and STD tables into one device as a 32-entry table
-// Synertek SY2661-1 (from http://bitsavers.informatik.uni-stuttgart.de/pdf/synertek/_dataBooks/Synertek_1981-1982_Data_Catalog.pdf page 3-40 (pdf page 139))
-// baud rates are 50, 75, 110, 134.5, 150, 200, 300, 600, 1050, 1200, 1800, 2000, 2400, 4800, 9600, 19200
-const int com8116_device::divisors_16X_4_9152MHz_SY2661_1[16] =
- { 6144, 4096, 2793, 2284, 2048, 1536, 1024, 512, 292, 256, 171, 154, 128, 64, 32, 16 };
-
-// Synertek SY2661-2 (from http://bitsavers.informatik.uni-stuttgart.de/pdf/synertek/_dataBooks/Synertek_1981-1982_Data_Catalog.pdf page 3-40 (pdf page 139))
-// baud rates are 45.5, 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2000, 2400, 4800, 9600, 19200, 38400
-const int com8116_device::divisors_16X_4_9152MHz_SY2661_2[16] =
- { 6752, 6144, 4096, 2793, 2284, 2048, 1024, 512, 256, 171, 154, 128, 64, 32, 16, 8 };
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
diff --git a/src/devices/machine/com8116.h b/src/devices/machine/com8116.h
index 990a0e5db77..c881d08312d 100644
--- a/src/devices/machine/com8116.h
+++ b/src/devices/machine/com8116.h
@@ -59,8 +59,6 @@ protected:
static const int divisors_16X_1_8432MHz[16];
static const int divisors_16X_5_0688MHz_030[16];
static const int divisors_16X_4_6080MHz[16];
- static const int divisors_16X_4_9152MHz_SY2661_1[16];
- static const int divisors_16X_4_9152MHz_SY2661_2[16];
// device-level overrides
virtual void device_start() override;
diff --git a/src/devices/machine/mc2661.cpp b/src/devices/machine/mc2661.cpp
deleted file mode 100644
index 28bf4511222..00000000000
--- a/src/devices/machine/mc2661.cpp
+++ /dev/null
@@ -1,507 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Curt Coder
-/***************************************************************************
-
- Motorola MC2661/MC68661 Enhanced Programmable Communications Interface
-
-***************************************************************************/
-
-#include "emu.h"
-#include "mc2661.h"
-
-//#define VERBOSE 1
-#include "logmacro.h"
-
-
-
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-DEFINE_DEVICE_TYPE(MC2661, mc2661_device, "mc2661", "MC2661")
-
-
-
-//**************************************************************************
-// MACROS / CONSTANTS
-//**************************************************************************
-
-uint32_t baud_rates[16] =
-{
- 50, 75, 110, 135 /*134.5*/, 150, 300, 600, 1200, 1800, 2000, 2400, 3600, 4800, 7200, 9600, 19200
-};
-
-enum
-{
- REGISTER_HOLDING = 0,
- REGISTER_STATUS,
- REGISTER_SYNC = REGISTER_STATUS,
- REGISTER_MODE,
- REGISTER_COMMAND
-};
-
-
-#define MODE_BAUD_RATE (m_mr[0] & 0x03)
-#define MODE_CHARACTER ((m_mr[0] >> 2) & 0x03)
-#define MODE_PARITY BIT(m_mr[0], 4)
-#define MODE_PARITY_EVEN BIT(m_mr[0], 5)
-#define MODE_TRANSPARENT BIT(m_mr[0], 6)
-#define MODE_SINGLE_SYN BIT(m_mr[0], 7)
-#define MODE_STOP_BITS ((m_mr[0] >> 6) & 0x03)
-
-
-#define SYN1 m_sync[0]
-#define SYN2 m_sync[1]
-#define DLE m_sync[2]
-
-
-#define COMMAND_TXEN BIT(m_cr, 0)
-#define COMMAND_DTR BIT(m_cr, 1)
-#define COMMAND_RXEN BIT(m_cr, 2)
-#define COMMAND_BREAK BIT(m_cr, 3)
-#define COMMAND_DLE BIT(m_cr, 3)
-#define COMMAND_RESET BIT(m_cr, 4)
-#define COMMAND_RTS BIT(m_cr, 5)
-#define COMMAND_MODE (m_cr >> 6)
-
-
-enum
-{
- MODE_NORMAL = 0,
- MODE_ASYNC,
- MODE_LOCAL_LOOP_BACK,
- MODE_REMOTE_LOOP_BACK
-};
-
-
-#define STATUS_TXRDY 0x01
-#define STATUS_RXRDY 0x02
-#define STATUS_TXEMT 0x04
-#define STATUS_PE 0x08
-#define STATUS_DLE 0x08
-#define STATUS_OVERRUN 0x10
-#define STATUS_FE 0x20
-#define STATUS_SYN 0x20
-#define STATUS_DCD 0x40
-#define STATUS_DSR 0x80
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// mc2661_device - constructor
-//-------------------------------------------------
-
-mc2661_device::mc2661_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, MC2661, tag, owner, clock),
- device_serial_interface(mconfig, *this),
- m_write_txd(*this),
- m_write_rxrdy(*this),
- m_write_txrdy(*this),
- m_write_rts(*this),
- m_write_dtr(*this),
- m_write_txemt_dschg(*this),
- m_write_bkdet(*this),
- m_write_xsync(*this),
- m_rxc(0),
- m_txc(0),
- m_sr(0)
-{
-}
-
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void mc2661_device::device_start()
-{
- // resolve callbacks
- m_write_txd.resolve_safe();
- m_write_rxrdy.resolve_safe();
- m_write_txrdy.resolve_safe();
- m_write_rts.resolve_safe();
- m_write_dtr.resolve_safe();
- m_write_txemt_dschg.resolve_safe();
- m_write_bkdet.resolve_safe();
- m_write_xsync.resolve_safe();
-
- // create the timers
- if (m_rxc > 0)
- {
- set_rcv_rate(m_rxc);
- }
-
- if (m_txc > 0)
- {
- set_tra_rate(m_txc);
- }
-
- // save state
- save_item(NAME(m_rhr));
- save_item(NAME(m_thr));
- save_item(NAME(m_cr));
- save_item(NAME(m_sr));
- save_item(NAME(m_mr));
- save_item(NAME(m_sync));
- save_item(NAME(m_mode_index));
- save_item(NAME(m_sync_index));
-}
-
-
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void mc2661_device::device_reset()
-{
- receive_register_reset();
- transmit_register_reset();
-
- m_mr[0] = m_mr[1] = 0;
- m_sync[0] = m_sync[1] = m_sync[2] = 0;
- m_cr = 0;
- m_sr = 0;
-
- m_mode_index = 0;
- m_sync_index = 0;
-
- m_write_txd(1);
- m_write_rxrdy(CLEAR_LINE);
- m_write_txrdy(CLEAR_LINE);
- m_write_rts(1);
- m_write_dtr(1);
- m_write_txemt_dschg(CLEAR_LINE);
- m_write_bkdet(0);
- m_write_xsync(0);
-}
-
-
-//-------------------------------------------------
-// tra_callback -
-//-------------------------------------------------
-
-void mc2661_device::tra_callback()
-{
- m_write_txd(transmit_register_get_data_bit());
-}
-
-
-//-------------------------------------------------
-// tra_complete -
-//-------------------------------------------------
-
-void mc2661_device::tra_complete()
-{
- // TODO
- m_sr |= STATUS_TXRDY;
- m_write_txrdy(ASSERT_LINE);
-}
-
-
-//-------------------------------------------------
-// rcv_complete -
-//-------------------------------------------------
-
-void mc2661_device::rcv_complete()
-{
- // TODO
- receive_register_extract();
- m_rhr = get_received_char();
- m_sr |= STATUS_RXRDY;
- if (is_receive_parity_error())
- m_sr |= STATUS_PE;
- if (is_receive_framing_error())
- m_sr |= STATUS_FE;
- m_write_rxrdy(ASSERT_LINE);
-}
-
-
-//-------------------------------------------------
-// read - register read
-//-------------------------------------------------
-
-uint8_t mc2661_device::read(offs_t offset)
-{
- uint8_t data = 0;
-
- switch (offset & 0x03)
- {
- case REGISTER_HOLDING:
- data = m_rhr;
- if (!machine().side_effects_disabled())
- {
- m_sr &= ~STATUS_RXRDY;
- m_write_rxrdy(CLEAR_LINE);
- }
- break;
-
- case REGISTER_STATUS:
- data = m_sr;
- break;
-
- case REGISTER_MODE:
- data = m_mr[m_mode_index];
-
- if (!machine().side_effects_disabled())
- {
- m_mode_index++;
- m_mode_index &= 0x01;
- }
-
- break;
-
- case REGISTER_COMMAND:
- if (!machine().side_effects_disabled())
- {
- m_mode_index = 0;
- m_sync_index = 0;
- }
-
- data = m_cr;
- break;
- }
-
- return data;
-}
-
-
-//-------------------------------------------------
-// write - register write
-//-------------------------------------------------
-
-void mc2661_device::write(offs_t offset, uint8_t data)
-{
- switch (offset & 0x03)
- {
- case REGISTER_HOLDING:
- LOG("MC2661 Transmit Holding Register: %02x\n", data);
-
- m_thr = data;
- if(COMMAND_TXEN)
- {
- if(COMMAND_MODE != 0x02)
- transmit_register_setup(m_thr);
- m_sr &= ~STATUS_TXRDY;
- m_write_txrdy(CLEAR_LINE);
- }
- if(COMMAND_MODE == 0x02) // loopback - the Wicat will set this after enabling the transmitter
- {
- m_rhr = data;
- m_sr |= STATUS_RXRDY; // pcd expects this
- m_write_rxrdy(ASSERT_LINE);
- }
- break;
-
- case REGISTER_SYNC:
- LOG("MC2661 Sync Register %u: %02x\n", m_sync_index + 1, data);
-
- m_sync[m_sync_index] = data;
-
- m_sync_index++;
- if (m_sync_index == 3) m_sync_index = 0;
- break;
-
- case REGISTER_MODE:
- LOG("MC2661 Mode Register %u: %02x\n", m_mode_index + 1, data);
-
- m_mr[m_mode_index] = data;
-
- if (m_mode_index == 0)
- {
- int data_bit_count = 5 + MODE_CHARACTER;
- parity_t parity;
-
- if (!MODE_PARITY) parity = PARITY_NONE;
- else if (MODE_PARITY_EVEN) parity = PARITY_EVEN;
- else parity = PARITY_ODD;
-
- stop_bits_t stop_bits;
-
- switch (MODE_STOP_BITS)
- {
- case 0:
- default:
- stop_bits = STOP_BITS_0;
- break;
-
- case 1:
- stop_bits = STOP_BITS_1;
- break;
-
- case 2:
- stop_bits = STOP_BITS_1_5;
- break;
-
- case 3:
- stop_bits = STOP_BITS_2;
- break;
- }
-
- set_data_frame(1, data_bit_count, parity, stop_bits);
- }
- if(m_mode_index == 1)
- {
- uint32_t rx_baud = baud_rates[data & 0x0f];
- uint32_t tx_baud = baud_rates[data & 0x0f];
- if(data & 0x10) // internal receiver clock
- {
-// if((m_mr[0] & 0x03) != 0)
-// rx_baud *= 16;
- }
- else // external receiver clock
- {
- switch(m_mr[0] & 0x03)
- {
- case 0x02:
- rx_baud *= 16;
- break;
- case 0x03:
- rx_baud *= 64;
- break;
- default:
- // x1
- break;
- }
- }
- if(data & 0x20) // internal transmitter clock
- {
-// if((m_mr[0] & 0x03) != 0)
-// tx_baud *= 16;
- }
- else // external transmitter clock
- {
- switch(m_mr[0] & 0x03)
- {
- case 0x02:
- tx_baud *= 16;
- break;
- case 0x03:
- tx_baud *= 64;
- break;
- default:
- // x1
- break;
- }
- }
-
- set_rcv_rate(rx_baud);
- set_tra_rate(tx_baud);
- }
-
- m_mode_index++;
- m_mode_index &= 0x01;
- break;
-
- case REGISTER_COMMAND:
- LOG("MC2661 Command Register: %02x\n", data);
-
- m_cr = data & 0xef;
-
- m_write_dtr(!COMMAND_DTR);
- m_write_rts(!COMMAND_RTS);
-
- if (COMMAND_MODE == 0x02) // local loopback
- {
- if(COMMAND_DTR && COMMAND_RTS) // CR1 and CR5 must be set to 1 to use local loopback
- {
- // probably much more to it that this, but this is enough for the Wicat to be happy
- m_rhr = m_thr;
- m_sr |= STATUS_RXRDY;
- m_write_rxrdy(ASSERT_LINE);
- return;
- }
- }
-
- if (COMMAND_TXEN)
- {
- m_sr |= STATUS_TXRDY;
- m_write_txrdy(ASSERT_LINE);
- }
- else
- {
- m_sr &= ~STATUS_TXRDY;
- m_write_txrdy(CLEAR_LINE);
- }
- if (!COMMAND_RXEN)
- {
- m_sr &= ~(STATUS_RXRDY | STATUS_FE | STATUS_OVERRUN | STATUS_PE);
- m_write_rxrdy(CLEAR_LINE);
- }
- if (COMMAND_RESET)
- {
- m_sr &= ~(STATUS_FE | STATUS_OVERRUN | STATUS_PE);
- }
- break;
- }
-}
-
-//-------------------------------------------------
-// dsr_w - data set ready
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( mc2661_device::dsr_w )
-{
- LOG("MC2661 Data Set Ready: %u\n", state);
-
- if (state)
- {
- m_sr &= ~STATUS_DSR;
- }
- else
- {
- m_sr |= STATUS_DSR;
- }
-}
-
-
-//-------------------------------------------------
-// dcd_w - data carrier detect
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( mc2661_device::dcd_w )
-{
- LOG("MC2661 Data Carrier Detect: %u\n", state);
-
- if (state)
- {
- m_sr &= ~STATUS_DCD;
- }
- else
- {
- m_sr |= STATUS_DCD;
- }
-}
-
-
-//-------------------------------------------------
-// cts_w - clear to send
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( mc2661_device::cts_w )
-{
- LOG("MC2661 Clear to Send: %u\n", state);
-}
-
-
-//-------------------------------------------------
-// rxrdy_r - receiver ready
-//-------------------------------------------------
-
-READ_LINE_MEMBER( mc2661_device::rxrdy_r )
-{
- return (m_sr & STATUS_RXRDY) ? ASSERT_LINE : CLEAR_LINE;
-}
-
-
-//-------------------------------------------------
-// txemt_r - transmitter empty
-//-------------------------------------------------
-
-READ_LINE_MEMBER( mc2661_device::txemt_r )
-{
- return (m_sr & STATUS_TXEMT) ? ASSERT_LINE : CLEAR_LINE;
-}
diff --git a/src/devices/machine/mc2661.h b/src/devices/machine/mc2661.h
deleted file mode 100644
index 4c7e52ded1e..00000000000
--- a/src/devices/machine/mc2661.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Curt Coder
-/***************************************************************************
-
- Motorola MC2661/MC68661 Enhanced Programmable Communications Interface
-
-****************************************************************************
- _____ _____
- 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 | MC2661 | 22 _DSR
- D7 8 | MC68661 | 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
-
-***************************************************************************/
-
-#ifndef MAME_MACHINE_MC2661_H
-#define MAME_MACHINE_MC2661_H
-
-#pragma once
-
-#include "diserial.h"
-
-
-class mc2661_device : public device_t,
- public device_serial_interface
-{
-public:
- // construction/destruction
- mc2661_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- void set_rxc(int clock) { m_rxc = clock; }
- void set_txc(int clock) { m_txc = clock; }
-
- auto txd_handler() { return m_write_txd.bind(); }
- auto rxrdy_handler() { return m_write_rxrdy.bind(); }
- auto txrdy_handler() { return m_write_txrdy.bind(); }
- auto rts_handler() { return m_write_rts.bind(); }
- auto dtr_handler() { return m_write_dtr.bind(); }
- auto txemt_dschg_handler() { return m_write_txemt_dschg.bind(); }
- auto bkdet_handler() { return m_write_bkdet.bind(); }
- auto xsync_handler() { return m_write_xsync.bind(); }
-
- uint8_t read(offs_t offset);
- void write(offs_t offset, uint8_t data);
-
- 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 );
-
- DECLARE_WRITE_LINE_MEMBER( rx_w ) { device_serial_interface::rx_w(state); }
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // device_serial_interface overrides
- virtual void tra_callback() override;
- virtual void tra_complete() override;
- virtual void rcv_complete() override;
-
-private:
- devcb_write_line m_write_txd;
- devcb_write_line m_write_rxrdy;
- devcb_write_line m_write_txrdy;
- devcb_write_line m_write_rts;
- devcb_write_line m_write_dtr;
- devcb_write_line m_write_txemt_dschg;
- devcb_write_line m_write_bkdet;
- devcb_write_line m_write_xsync;
-
- int m_rxc;
- int m_txc;
-
- uint8_t m_rhr;
- uint8_t m_thr;
- uint8_t m_cr;
- uint8_t m_sr;
- uint8_t m_mr[2];
- uint8_t m_sync[3];
-
- int m_mode_index;
- int m_sync_index;
-};
-
-DECLARE_DEVICE_TYPE(MC2661, mc2661_device)
-
-#endif // MAME_MACHINE_MC2661_H