From 3bb2d1ee6603b14f264ed9f8a3ed3f8abf8e2371 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Thu, 21 Feb 2013 20:36:50 +0000 Subject: [PATCH] (MESS) ob68k1a: Made RS-232 a bit less hacky. (nw) --- src/mess/drivers/ob68k1a.c | 76 +++++++++++++++++++++---------------- src/mess/includes/ob68k1a.h | 21 ++++++++-- 2 files changed, 60 insertions(+), 37 deletions(-) diff --git a/src/mess/drivers/ob68k1a.c b/src/mess/drivers/ob68k1a.c index a638a8268e0..0f4ece25381 100644 --- a/src/mess/drivers/ob68k1a.c +++ b/src/mess/drivers/ob68k1a.c @@ -59,14 +59,6 @@ Notes: */ -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "machine/ram.h" -#include "machine/6821pia.h" -#include "machine/6840ptm.h" -#include "machine/6850acia.h" -#include "machine/com8116.h" -#include "machine/terminal.h" #include "includes/ob68k1a.h" @@ -82,7 +74,7 @@ Notes: WRITE8_MEMBER( ob68k1a_state::com8116_w ) { m_dbrg->stt_w(space, 0, data & 0x0f); -// m_dbrg->str_w(space, 0, data >> 4); // HACK for terminal + m_dbrg->str_w(space, 0, data >> 4); } @@ -221,10 +213,10 @@ static ACIA6850_INTERFACE( acia0_intf ) { 9600*16, // HACK for terminal 9600*16, // HACK for terminal - DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, tx_r), - DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, rx_w), + DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx), + DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx), DEVCB_LINE_GND, // HACK for terminal - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w), DEVCB_LINE_GND, // HACK for terminal DEVCB_NULL }; @@ -238,11 +230,11 @@ static ACIA6850_INTERFACE( acia1_intf ) { 0, 0, - DEVCB_LINE_VCC, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, + 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, }; @@ -251,36 +243,52 @@ static ACIA6850_INTERFACE( acia1_intf ) // COM8116_INTERFACE( dbrg_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER(ob68k1a_state::rx_tx_0_w) +WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_0_w ) { - device_t *device = machine().device(MC6850_0_TAG); - downcast(device)->rx_clock_in(); - downcast(device)->tx_clock_in(); + m_acia0->rx_clock_in(); + m_acia0->tx_clock_in(); } -WRITE_LINE_MEMBER(ob68k1a_state::rx_tx_1_w) +WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_1_w ) { - device_t *device = machine().device(MC6850_1_TAG); - downcast(device)->rx_clock_in(); - downcast(device)->tx_clock_in(); + m_acia1->rx_clock_in(); + m_acia1->tx_clock_in(); } static COM8116_INTERFACE( dbrg_intf ) { DEVCB_NULL, /* fX/4 output */ - DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state,rx_tx_0_w), - DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state,rx_tx_1_w), + DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_0_w), + DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_1_w), { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, /* receiver divisor ROM */ { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, /* transmitter divisor ROM */ }; //------------------------------------------------- -// GENERIC_TERMINAL_INTERFACE( terminal_intf ) +// rs232_port_interface rs232a_intf //------------------------------------------------- -static serial_terminal_interface terminal_intf = +static const rs232_port_interface rs232a_intf = { + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL +}; + + +//------------------------------------------------- +// rs232_port_interface rs232b_intf +//------------------------------------------------- + +static const rs232_port_interface rs232b_intf = +{ + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, DEVCB_NULL }; @@ -317,8 +325,9 @@ void ob68k1a_state::machine_reset() address_space &program = m_maincpu->space(AS_PROGRAM); // initialize COM8116 -// m_dbrg->stt_w(program, 0, 0x01); -// m_dbrg->str_w(program, 0, 0x01); + com8116_w(program, 0, 0xee); +// m_dbrg->stt_w(program, 0, 0x01); +// m_dbrg->str_w(program, 0, 0x01); // set reset vector void *ram = program.get_write_ptr(0); @@ -326,7 +335,7 @@ void ob68k1a_state::machine_reset() memcpy(ram, rom, 8); - machine().firstcpu->reset(); + m_maincpu->reset(); } @@ -351,7 +360,8 @@ 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, dbrg_intf) - MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 9600) + MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal", NULL) + MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL, NULL) // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/includes/ob68k1a.h b/src/mess/includes/ob68k1a.h index f8dabfe5ffb..1b33a8a8d03 100644 --- a/src/mess/includes/ob68k1a.h +++ b/src/mess/includes/ob68k1a.h @@ -3,7 +3,14 @@ #ifndef __OB68K1A__ #define __OB68K1A__ +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "machine/6821pia.h" +#include "machine/6840ptm.h" +#include "machine/6850acia.h" +#include "machine/com8116.h" #include "machine/ram.h" +#include "machine/serial.h" #define MC68000L10_TAG "u50" #define MC6821_0_TAG "u32" @@ -12,6 +19,8 @@ #define MC6850_0_TAG "u34" #define MC6850_1_TAG "u26" #define COM8116_TAG "u56" +#define RS232_A_TAG "rs232a" +#define RS232_B_TAG "rs232b" class ob68k1a_state : public driver_device { @@ -21,18 +30,22 @@ public: m_maincpu(*this, MC68000L10_TAG), m_dbrg(*this, COM8116_TAG), m_acia0(*this, MC6850_0_TAG), + m_acia1(*this, MC6850_1_TAG), m_pia0(*this, MC6821_0_TAG), m_pia1(*this, MC6821_1_TAG), - m_terminal(*this, TERMINAL_TAG), + m_rs232a(*this, RS232_A_TAG), + m_rs232b(*this, RS232_B_TAG), m_ram(*this, RAM_TAG) { } required_device m_maincpu; required_device m_dbrg; required_device m_acia0; + required_device m_acia1; required_device m_pia0; required_device m_pia1; - required_device m_terminal; + required_device m_rs232a; + required_device m_rs232b; required_device m_ram; virtual void machine_start(); @@ -41,8 +54,8 @@ public: DECLARE_WRITE8_MEMBER( com8116_w ); DECLARE_READ8_MEMBER( pia_r ); DECLARE_WRITE8_MEMBER( pia_w ); - DECLARE_WRITE_LINE_MEMBER(rx_tx_0_w); - DECLARE_WRITE_LINE_MEMBER(rx_tx_1_w); + DECLARE_WRITE_LINE_MEMBER( rx_tx_0_w ); + DECLARE_WRITE_LINE_MEMBER( rx_tx_1_w ); }; #endif