diff options
author | 2013-05-19 21:44:31 +0000 | |
---|---|---|
committer | 2013-05-19 21:44:31 +0000 | |
commit | 1d3030a04ed27bb6abe9607d48e89995e59eb203 (patch) | |
tree | 5d32e0f641786b927d2bf3558427b77d67e50442 /src | |
parent | c41d0241657dac28e684a71895f3fbad246bf53d (diff) |
(MESS) mpz80: Refactored to use serial terminal thru an RS-232 port. [Curt Coder]
Diffstat (limited to 'src')
-rw-r--r-- | src/mess/drivers/horizon.c | 1 | ||||
-rw-r--r-- | src/mess/drivers/mpz80.c | 16 | ||||
-rw-r--r-- | src/mess/drivers/xor100.c | 1 | ||||
-rw-r--r-- | src/mess/includes/mpz80.h | 4 | ||||
-rw-r--r-- | src/mess/machine/s100.c | 37 | ||||
-rw-r--r-- | src/mess/machine/s100.h | 10 | ||||
-rw-r--r-- | src/mess/machine/s100_wunderbus.c | 87 | ||||
-rw-r--r-- | src/mess/machine/s100_wunderbus.h | 3 |
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; |