summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2013-05-19 21:44:31 +0000
committer Curt Coder <curtcoder@mail.com>2013-05-19 21:44:31 +0000
commit1d3030a04ed27bb6abe9607d48e89995e59eb203 (patch)
tree5d32e0f641786b927d2bf3558427b77d67e50442
parentc41d0241657dac28e684a71895f3fbad246bf53d (diff)
(MESS) mpz80: Refactored to use serial terminal thru an RS-232 port. [Curt Coder]
-rw-r--r--src/mess/drivers/horizon.c1
-rw-r--r--src/mess/drivers/mpz80.c16
-rw-r--r--src/mess/drivers/xor100.c1
-rw-r--r--src/mess/includes/mpz80.h4
-rw-r--r--src/mess/machine/s100.c37
-rw-r--r--src/mess/machine/s100.h10
-rw-r--r--src/mess/machine/s100_wunderbus.c87
-rw-r--r--src/mess/machine/s100_wunderbus.h3
8 files changed, 64 insertions, 95 deletions
diff --git a/src/mess/drivers/horizon.c b/src/mess/drivers/horizon.c
index 8d2f5584175..f4ddb2498a0 100644
--- a/src/mess/drivers/horizon.c
+++ b/src/mess/drivers/horizon.c
@@ -199,7 +199,6 @@ static S100_INTERFACE( s100_intf )
DEVCB_NULL,
DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/mpz80.c b/src/mess/drivers/mpz80.c
index 8f41895912b..7c893500a26 100644
--- a/src/mess/drivers/mpz80.c
+++ b/src/mess/drivers/mpz80.c
@@ -629,16 +629,6 @@ INPUT_PORTS_END
//**************************************************************************
//-------------------------------------------------
-// GENERIC_TERMINAL_INTERFACE( terminal_intf )
-//-------------------------------------------------
-
-static GENERIC_TERMINAL_INTERFACE( terminal_intf )
-{
- DEVCB_DEVICE_MEMBER(S100_TAG, s100_device, terminal_receive_w)
-};
-
-
-//-------------------------------------------------
// S100_INTERFACE( s100_intf )
//-------------------------------------------------
@@ -677,8 +667,7 @@ static S100_INTERFACE( s100_intf )
DEVCB_NULL,
DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER(TERMINAL_TAG, generic_terminal_device, write)
+ DEVCB_NULL
};
static SLOT_INTERFACE_START( mpz80_s100_cards )
@@ -755,9 +744,6 @@ static MACHINE_CONFIG_START( mpz80, mpz80_state )
MCFG_S100_SLOT_ADD("s100_13", mpz80_s100_cards, NULL, NULL)
MCFG_S100_SLOT_ADD("s100_14", mpz80_s100_cards, NULL, NULL)
- // devices
- MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
-
// internal ram
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("65K")
diff --git a/src/mess/drivers/xor100.c b/src/mess/drivers/xor100.c
index 5f163af5192..2c2f34d57d9 100644
--- a/src/mess/drivers/xor100.c
+++ b/src/mess/drivers/xor100.c
@@ -556,7 +556,6 @@ static S100_INTERFACE( s100_intf )
DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
};
static SLOT_INTERFACE_START( xor100_s100_cards )
diff --git a/src/mess/includes/mpz80.h b/src/mess/includes/mpz80.h
index a3d80ed6f85..9b4cc604c10 100644
--- a/src/mess/includes/mpz80.h
+++ b/src/mess/includes/mpz80.h
@@ -12,11 +12,9 @@
#include "machine/s100_djdma.h"
#include "machine/s100_mm65k16s.h"
#include "machine/s100_wunderbus.h"
-#include "machine/terminal.h"
#define Z80_TAG "17a"
#define AM9512_TAG "17d"
-#define TERMINAL_TAG "terminal"
class mpz80_state : public driver_device
{
@@ -25,7 +23,6 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, Z80_TAG),
m_ram(*this, RAM_TAG),
- m_terminal(*this, TERMINAL_TAG),
m_s100(*this, S100_TAG),
m_rom(*this, Z80_TAG),
m_map_ram(*this, "map_ram"),
@@ -45,7 +42,6 @@ public:
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
- required_device<generic_terminal_device> m_terminal;
required_device<s100_device> m_s100;
required_memory_region m_rom;
optional_shared_ptr<UINT8> m_map_ram;
diff --git a/src/mess/machine/s100.c b/src/mess/machine/s100.c
index 0a7a63c2754..26598f17dbe 100644
--- a/src/mess/machine/s100.c
+++ b/src/mess/machine/s100.c
@@ -87,7 +87,6 @@ void s100_device::device_config_complete()
memset(&m_out_rdy_cb, 0, sizeof(m_out_rdy_cb));
memset(&m_out_hold_cb, 0, sizeof(m_out_hold_cb));
memset(&m_out_error_cb, 0, sizeof(m_out_error_cb));
- memset(&m_out_terminal_cb, 0, sizeof(m_out_terminal_cb));
}
}
@@ -131,7 +130,6 @@ void s100_device::device_start()
m_out_rdy_func.resolve(m_out_rdy_cb, *this);
m_out_hold_func.resolve(m_out_hold_cb, *this);
m_out_error_func.resolve(m_out_error_cb, *this);
- m_out_terminal_func.resolve(m_out_terminal_cb, *this);
}
@@ -246,41 +244,6 @@ WRITE_LINE_MEMBER( s100_device::hold_w ) { m_out_hold_func(state); }
WRITE_LINE_MEMBER( s100_device::error_w ) { m_out_error_func(state); }
-//-------------------------------------------------
-// terminal_receive_w - receive character
-//-------------------------------------------------
-
-WRITE8_MEMBER( s100_device::terminal_receive_w )
-{
- device_s100_card_interface *entry = m_device_list.first();
-
- while (entry)
- {
- if (entry->s100_has_terminal())
- {
- entry->s100_terminal_w(data);
- break;
- }
- entry = entry->next();
- }
-}
-
-
-//-------------------------------------------------
-// terminal_transmit_w - transmit character
-//-------------------------------------------------
-
-WRITE8_MEMBER( s100_device::terminal_transmit_w )
-{
- terminal_transmit_w(data);
-}
-
-void s100_device::terminal_transmit_w(UINT8 data)
-{
- m_out_terminal_func(0, data);
-}
-
-
//**************************************************************************
// DEVICE S100 CARD INTERFACE
diff --git a/src/mess/machine/s100.h b/src/mess/machine/s100.h
index 695e2c48466..03513f2524c 100644
--- a/src/mess/machine/s100.h
+++ b/src/mess/machine/s100.h
@@ -144,7 +144,6 @@ struct s100_bus_interface
devcb_write_line m_out_rdy_cb;
devcb_write_line m_out_hold_cb;
devcb_write_line m_out_error_cb;
- devcb_write8 m_out_terminal_cb;
};
class device_s100_card_interface;
@@ -185,10 +184,6 @@ public:
DECLARE_WRITE_LINE_MEMBER( hold_w );
DECLARE_WRITE_LINE_MEMBER( error_w );
- DECLARE_WRITE8_MEMBER( terminal_receive_w );
- DECLARE_WRITE8_MEMBER( terminal_transmit_w );
- void terminal_transmit_w(UINT8 data);
-
protected:
// device-level overrides
virtual void device_start();
@@ -213,7 +208,6 @@ private:
devcb_resolved_write_line m_out_rdy_func;
devcb_resolved_write_line m_out_hold_func;
devcb_resolved_write_line m_out_error_func;
- devcb_resolved_write8 m_out_terminal_func;
simple_list<device_s100_card_interface> m_device_list;
};
@@ -267,10 +261,6 @@ public:
virtual void s100_sxtrq_w(int state) { }
virtual int s100_sixtn_r() { return 1; }
- // terminal
- virtual bool s100_has_terminal() { return false; }
- virtual void s100_terminal_w(UINT8 data) { }
-
// reset
virtual void s100_poc_w(int state) { }
virtual void s100_reset_w(int state) { }
diff --git a/src/mess/machine/s100_wunderbus.c b/src/mess/machine/s100_wunderbus.c
index 8cefadce842..5b1305ccad4 100644
--- a/src/mess/machine/s100_wunderbus.c
+++ b/src/mess/machine/s100_wunderbus.c
@@ -19,6 +19,9 @@
#define INS8250_1_TAG "6d"
#define INS8250_2_TAG "5d"
#define INS8250_3_TAG "4d"
+#define RS232_A_TAG "rs232a"
+#define RS232_B_TAG "rs232b"
+#define RS232_C_TAG "rs232c"
#define UPD1990C_TAG "12a"
@@ -58,30 +61,14 @@ WRITE_LINE_MEMBER( s100_wunderbus_device::pic_int_w )
//-------------------------------------------------
// ins8250_interface ace1_intf
//-------------------------------------------------
-/*
-static INS8250_TRANSMIT( ace1_transmit )
-{
- s100_wunderbus_device *wunderbus = downcast<s100_wunderbus_device *>(device->owner());
-
- wunderbus->m_bus->terminal_transmit_w(data);
-}
-*/
-//-------------------------------------------------
-// s100_terminal_w - terminal write
-//-------------------------------------------------
-
-void s100_wunderbus_device::s100_terminal_w(UINT8 data)
-{
-// ins8250_receive(m_ace1, data);
-}
static ins8250_interface ace1_intf =
{
- DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir3_w),
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL
};
@@ -92,11 +79,11 @@ static ins8250_interface ace1_intf =
static ins8250_interface ace2_intf =
{
- DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir4_w),
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL
};
@@ -107,16 +94,63 @@ static ins8250_interface ace2_intf =
static ins8250_interface ace3_intf =
{
- DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, serial_port_device, tx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, dtr_w),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, rts_w),
DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir5_w),
DEVCB_NULL,
- DEVCB_NULL,
DEVCB_NULL
};
//-------------------------------------------------
+// rs232_port_interface rs232a_intf
+//-------------------------------------------------
+
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
+ DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
+DEVICE_INPUT_DEFAULTS_END
+
+static const rs232_port_interface rs232a_intf =
+{
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, rx_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, dcd_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, dsr_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, ri_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, cts_w)
+};
+
+
+//-------------------------------------------------
+// rs232_port_interface rs232b_intf
+//-------------------------------------------------
+
+static const rs232_port_interface rs232b_intf =
+{
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, rx_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, dcd_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, dsr_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, ri_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, cts_w)
+};
+
+
+//-------------------------------------------------
+// rs232_port_interface rs232c_intf
+//-------------------------------------------------
+
+static const rs232_port_interface rs232c_intf =
+{
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, rx_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, dcd_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, dsr_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, ri_w),
+ DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, cts_w)
+};
+
+
+//-------------------------------------------------
// UPD1990A_INTERFACE( rtc_intf )
//-------------------------------------------------
@@ -145,6 +179,9 @@ static MACHINE_CONFIG_FRAGMENT( s100_wunderbus )
MCFG_INS8250_ADD(INS8250_1_TAG, ace1_intf, XTAL_18_432MHz/10)
MCFG_INS8250_ADD(INS8250_2_TAG, ace2_intf, XTAL_18_432MHz/10)
MCFG_INS8250_ADD(INS8250_3_TAG, ace3_intf, XTAL_18_432MHz/10)
+ MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal", terminal)
+ MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL, NULL)
+ MCFG_RS232_PORT_ADD(RS232_C_TAG, rs232c_intf, default_rs232_devices, NULL, NULL)
MCFG_UPD1990A_ADD(UPD1990C_TAG, XTAL_32_768kHz, rtc_intf)
MACHINE_CONFIG_END
diff --git a/src/mess/machine/s100_wunderbus.h b/src/mess/machine/s100_wunderbus.h
index 6c21c669af3..3c9fcf2f3a0 100644
--- a/src/mess/machine/s100_wunderbus.h
+++ b/src/mess/machine/s100_wunderbus.h
@@ -16,6 +16,7 @@
#include "machine/ins8250.h"
#include "machine/pic8259.h"
#include "machine/s100.h"
+#include "machine/serial.h"
#include "machine/upd1990a.h"
@@ -52,8 +53,6 @@ protected:
virtual void s100_vi2_w(int state);
virtual UINT8 s100_sinp_r(address_space &space, offs_t offset);
virtual void s100_sout_w(address_space &space, offs_t offset, UINT8 data);
- virtual bool s100_has_terminal() { return true; }
- virtual void s100_terminal_w(UINT8 data);
private:
required_device<pic8259_device> m_pic;