summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-04-15 17:05:51 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-04-15 17:06:54 -0400
commit8275551541111567becbee88ff485c1314c85916 (patch)
tree92c1bb7d9446e23d73d864507387beced1e099d5
parent3d617ee87266afd6bd26cff2d8fb1d917ba93ce2 (diff)
Convert Sega Model 1 Sound Board and Z80-based Digital Sound Board to use proper UART-based serial interfaces
-rw-r--r--src/mame/audio/dsbz80.cpp52
-rw-r--r--src/mame/audio/dsbz80.h10
-rw-r--r--src/mame/audio/segam1audio.cpp95
-rw-r--r--src/mame/audio/segam1audio.h49
-rw-r--r--src/mame/drivers/model1.cpp86
-rw-r--r--src/mame/drivers/model2.cpp105
-rw-r--r--src/mame/drivers/model3.cpp33
-rw-r--r--src/mame/includes/model1.h9
-rw-r--r--src/mame/includes/model2.h3
-rw-r--r--src/mame/includes/model3.h3
10 files changed, 210 insertions, 235 deletions
diff --git a/src/mame/audio/dsbz80.cpp b/src/mame/audio/dsbz80.cpp
index e8cdaaf0964..4f05d6cab00 100644
--- a/src/mame/audio/dsbz80.cpp
+++ b/src/mame/audio/dsbz80.cpp
@@ -11,6 +11,7 @@
#include "emu.h"
#include "audio/dsbz80.h"
+#include "machine/clock.h"
#define Z80_TAG "mpegcpu"
@@ -20,13 +21,14 @@ static ADDRESS_MAP_START( dsbz80_map, AS_PROGRAM, 8, dsbz80_device )
ADDRESS_MAP_END
static ADDRESS_MAP_START( dsbz80io_map, AS_IO, 8, dsbz80_device )
- AM_RANGE(0xe0, 0xe0) AM_MIRROR(0xff00) AM_WRITE(mpeg_trigger_w)
- AM_RANGE(0xe2, 0xe4) AM_MIRROR(0xff00) AM_READWRITE(mpeg_pos_r, mpeg_start_w)
- AM_RANGE(0xe5, 0xe7) AM_MIRROR(0xff00) AM_WRITE(mpeg_end_w)
- AM_RANGE(0xe8, 0xe8) AM_MIRROR(0xff00) AM_WRITE(mpeg_volume_w)
- AM_RANGE(0xe9, 0xe9) AM_MIRROR(0xff00) AM_WRITE(mpeg_stereo_w)
- AM_RANGE(0xf0, 0xf0) AM_MIRROR(0xff00) AM_READ(latch_r)
- AM_RANGE(0xf1, 0xf1) AM_MIRROR(0xff00) AM_READ(status_r)
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0xe0, 0xe0) AM_WRITE(mpeg_trigger_w)
+ AM_RANGE(0xe2, 0xe4) AM_READWRITE(mpeg_pos_r, mpeg_start_w)
+ AM_RANGE(0xe5, 0xe7) AM_WRITE(mpeg_end_w)
+ AM_RANGE(0xe8, 0xe8) AM_WRITE(mpeg_volume_w)
+ AM_RANGE(0xe9, 0xe9) AM_WRITE(mpeg_stereo_w)
+ AM_RANGE(0xf0, 0xf0) AM_DEVREAD("uart", i8251_device, data_r)
+ AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
ADDRESS_MAP_END
@@ -34,6 +36,13 @@ MACHINE_CONFIG_FRAGMENT( dsbz80 )
MCFG_CPU_ADD(Z80_TAG, Z80, 4000000) /* unknown clock, but probably pretty slow considering the z80 does like nothing */
MCFG_CPU_PROGRAM_MAP(dsbz80_map)
MCFG_CPU_IO_MAP(dsbz80io_map)
+
+ MCFG_DEVICE_ADD("uart", I8251, 4000000)
+ MCFG_I8251_RXRDY_HANDLER(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
+ // no TXD output
+
+ MCFG_CLOCK_ADD("uart_clock", 100000)
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_rxc))
MACHINE_CONFIG_END
//**************************************************************************
@@ -64,7 +73,8 @@ machine_config_constructor dsbz80_device::device_mconfig_additions() const
dsbz80_device::dsbz80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, DSBZ80, "Sega Z80-based Digital Sound Board", tag, owner, clock, "dsbz80", __FILE__),
device_sound_interface(mconfig, *this),
- m_ourcpu(*this, Z80_TAG)
+ m_ourcpu(*this, Z80_TAG),
+ m_uart(*this, "uart")
{
}
@@ -85,28 +95,17 @@ void dsbz80_device::device_start()
void dsbz80_device::device_reset()
{
- m_dsb_latch = 0;
- status = 1;
start = end = 0;
audio_pos = audio_avail = 0;
memset(audio_buf, 0, sizeof(audio_buf));
mp_state = 0;
-}
-WRITE8_MEMBER(dsbz80_device::latch_w)
-{
- m_ourcpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
- m_dsb_latch = data;
- status |= 2;
-// printf("%02x to DSB latch\n", data);
+ m_uart->write_cts(0);
}
-READ8_MEMBER(dsbz80_device::latch_r)
+WRITE_LINE_MEMBER(dsbz80_device::write_txd)
{
- m_ourcpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
-// printf("DSB Z80 read %02x\n", m_dsb_latch);
- status &= ~2;
- return m_dsb_latch;
+ m_uart->write_rxd(state);
}
WRITE8_MEMBER(dsbz80_device::mpeg_trigger_w)
@@ -228,15 +227,6 @@ WRITE8_MEMBER(dsbz80_device::mpeg_stereo_w)
mp_pan = data & 3; // 0 = stereo, 1 = left on both channels, 2 = right on both channels
}
-READ8_MEMBER(dsbz80_device::status_r)
-{
- // bit 0 = ??? (must be 1 for most games)
- // bit 1 = command is pending (used by SWA instead of IRQ)
- // other bits = ???
- // SWA requires that status & 0x38 = 0 or else it loops endlessly...
- return status;
-}
-
void dsbz80_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{
stream_sample_t *out_l = outputs[0];
diff --git a/src/mame/audio/dsbz80.h b/src/mame/audio/dsbz80.h
index 2a10e8bf432..69968468f1d 100644
--- a/src/mame/audio/dsbz80.h
+++ b/src/mame/audio/dsbz80.h
@@ -6,6 +6,7 @@
#define __DSBZ80_H__
#include "cpu/z80/z80.h"
+#include "machine/i8251.h"
#include "sound/mpeg_audio.h"
#define DSBZ80_TAG "dsbz80"
@@ -26,9 +27,10 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
- DECLARE_WRITE8_MEMBER(latch_w);
-
required_device<cpu_device> m_ourcpu;
+ required_device<i8251_device> m_uart;
+
+ DECLARE_WRITE_LINE_MEMBER(write_txd);
DECLARE_WRITE8_MEMBER(mpeg_trigger_w);
DECLARE_WRITE8_MEMBER(mpeg_start_w);
@@ -36,8 +38,6 @@ public:
DECLARE_WRITE8_MEMBER(mpeg_volume_w);
DECLARE_WRITE8_MEMBER(mpeg_stereo_w);
DECLARE_READ8_MEMBER(mpeg_pos_r);
- DECLARE_READ8_MEMBER(latch_r);
- DECLARE_READ8_MEMBER(status_r);
protected:
// device-level overrides
@@ -49,10 +49,8 @@ protected:
private:
mpeg_audio *decoder;
int16_t audio_buf[1152*2];
- uint8_t m_dsb_latch;
uint32_t mp_start, mp_end, mp_vol, mp_pan, mp_state, lp_start, lp_end, start, end;
int mp_pos, audio_pos, audio_avail;
- int status;
};
diff --git a/src/mame/audio/segam1audio.cpp b/src/mame/audio/segam1audio.cpp
index 7a2130eae07..4d0215a1676 100644
--- a/src/mame/audio/segam1audio.cpp
+++ b/src/mame/audio/segam1audio.cpp
@@ -9,25 +9,27 @@
***************************************************************************/
#include "emu.h"
+#include "machine/clock.h"
#include "audio/segam1audio.h"
#include "speaker.h"
-#define M68000_TAG "m1sndcpu"
-#define MULTIPCM_1_TAG "m1pcm1"
-#define MULTIPCM_2_TAG "m1pcm2"
-#define YM3438_TAG "m1ym"
+#define M68000_TAG "sndcpu"
+#define MULTIPCM_1_TAG "pcm1"
+#define MULTIPCM_2_TAG "pcm2"
+#define YM3438_TAG "ymsnd"
+#define UART_TAG "uart"
static ADDRESS_MAP_START( segam1audio_map, AS_PROGRAM, 16, segam1audio_device )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_REGION(":m1sndcpu", 0)
AM_RANGE(0x080000, 0x09ffff) AM_ROM AM_REGION(":m1sndcpu", 0x20000) // mirror of upper ROM socket
- AM_RANGE(0xc20000, 0xc20001) AM_READWRITE(m1_snd_68k_latch_r, m1_snd_68k_latch1_w )
- AM_RANGE(0xc20002, 0xc20003) AM_READWRITE(m1_snd_v60_ready_r, m1_snd_68k_latch2_w )
- AM_RANGE(0xc40000, 0xc40007) AM_DEVREADWRITE8(MULTIPCM_1_TAG, multipcm_device, read, write, 0x00ff )
+ AM_RANGE(0xc20000, 0xc20001) AM_DEVREADWRITE8(UART_TAG, i8251_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0xc20002, 0xc20003) AM_DEVREADWRITE8(UART_TAG, i8251_device, status_r, control_w, 0x00ff)
+ AM_RANGE(0xc40000, 0xc40007) AM_DEVREADWRITE8(MULTIPCM_1_TAG, multipcm_device, read, write, 0x00ff)
AM_RANGE(0xc40012, 0xc40013) AM_WRITENOP
- AM_RANGE(0xc50000, 0xc50001) AM_WRITE(m1_snd_mpcm_bnk1_w )
- AM_RANGE(0xc60000, 0xc60007) AM_DEVREADWRITE8(MULTIPCM_2_TAG, multipcm_device, read, write, 0x00ff )
- AM_RANGE(0xc70000, 0xc70001) AM_WRITE(m1_snd_mpcm_bnk2_w )
- AM_RANGE(0xd00000, 0xd00007) AM_DEVREADWRITE8(YM3438_TAG, ym3438_device, read, write, 0x00ff )
+ AM_RANGE(0xc50000, 0xc50001) AM_WRITE(m1_snd_mpcm_bnk1_w)
+ AM_RANGE(0xc60000, 0xc60007) AM_DEVREADWRITE8(MULTIPCM_2_TAG, multipcm_device, read, write, 0x00ff)
+ AM_RANGE(0xc70000, 0xc70001) AM_WRITE(m1_snd_mpcm_bnk2_w)
+ AM_RANGE(0xd00000, 0xd00007) AM_DEVREADWRITE8(YM3438_TAG, ym3438_device, read, write, 0x00ff)
AM_RANGE(0xf00000, 0xf0ffff) AM_RAM
ADDRESS_MAP_END
@@ -58,6 +60,14 @@ MACHINE_CONFIG_FRAGMENT( segam1audio )
MCFG_DEVICE_ADDRESS_MAP(AS_0, mpcm2_map)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD(UART_TAG, I8251, 8000000) // T82C51, clock unknown
+ MCFG_I8251_RXRDY_HANDLER(INPUTLINE(M68000_TAG, M68K_IRQ_2))
+ MCFG_I8251_TXD_HANDLER(WRITELINE(segam1audio_device, output_txd))
+
+ MCFG_CLOCK_ADD("uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE(UART_TAG, i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(UART_TAG, i8251_device, write_rxc))
MACHINE_CONFIG_END
//**************************************************************************
@@ -90,7 +100,8 @@ segam1audio_device::segam1audio_device(const machine_config &mconfig, const char
m_multipcm_1(*this, MULTIPCM_1_TAG),
m_multipcm_2(*this, MULTIPCM_2_TAG),
m_ym(*this, YM3438_TAG),
- m_main_irq_cb(*this)
+ m_uart(*this, UART_TAG),
+ m_rxd_handler(*this)
{
}
@@ -100,7 +111,7 @@ segam1audio_device::segam1audio_device(const machine_config &mconfig, const char
void segam1audio_device::device_start()
{
- m_main_irq_cb.resolve_safe();
+ m_rxd_handler.resolve_safe();
}
//-------------------------------------------------
@@ -109,26 +120,7 @@ void segam1audio_device::device_start()
void segam1audio_device::device_reset()
{
- // init the sound FIFO
- m_fifo_rptr = m_fifo_wptr = 0;
- memset(m_to_68k, 0, sizeof(m_to_68k));
-}
-
-READ16_MEMBER(segam1audio_device::m1_snd_68k_latch_r)
-{
- uint16_t retval;
-
- retval = m_to_68k[m_fifo_rptr];
-
- m_fifo_rptr++;
- if (m_fifo_rptr >= ARRAY_LENGTH(m_to_68k)) m_fifo_rptr = 0;
-
- return retval;
-}
-
-READ16_MEMBER(segam1audio_device::m1_snd_v60_ready_r)
-{
- return 1;
+ m_uart->write_cts(0);
}
WRITE16_MEMBER(segam1audio_device::m1_snd_mpcm_bnk1_w)
@@ -141,41 +133,12 @@ WRITE16_MEMBER(segam1audio_device::m1_snd_mpcm_bnk2_w)
m_multipcm_2->set_bank(0x100000 * (data & 3), 0x100000 * (data & 3));
}
-WRITE16_MEMBER(segam1audio_device::m1_snd_68k_latch1_w)
+WRITE_LINE_MEMBER(segam1audio_device::write_txd)
{
+ m_uart->write_rxd(state);
}
-WRITE16_MEMBER(segam1audio_device::m1_snd_68k_latch2_w)
+WRITE_LINE_MEMBER(segam1audio_device::output_txd)
{
-}
-
-READ16_MEMBER(segam1audio_device::ready_r)
-{
- int sr = m_audiocpu->state_int(M68K_SR);
-
- if ((sr & 0x0700) > 0x0100)
- {
- return 0;
- }
-
- return 0xff;
-}
-
-void segam1audio_device::check_fifo_irq()
-{
- // if the FIFO has something in it, signal the 68k
- if (m_fifo_rptr != m_fifo_wptr)
- {
- m_audiocpu->set_input_line(2, HOLD_LINE);
- }
-}
-
-void segam1audio_device::write_fifo(uint8_t data)
-{
- m_to_68k[m_fifo_wptr] = data;
- m_fifo_wptr++;
- if (m_fifo_wptr >= ARRAY_LENGTH(m_to_68k)) m_fifo_wptr = 0;
-
- // signal the 68000 that there's data waiting
- m_audiocpu->set_input_line(2, HOLD_LINE);
+ m_rxd_handler(state);
}
diff --git a/src/mame/audio/segam1audio.h b/src/mame/audio/segam1audio.h
index 6298ad7440f..61421bfb62d 100644
--- a/src/mame/audio/segam1audio.h
+++ b/src/mame/audio/segam1audio.h
@@ -6,6 +6,7 @@
#define __SEGAM1AUDIO_H__
#include "cpu/m68000/m68000.h"
+#include "machine/i8251.h"
#include "sound/2612intf.h"
#include "sound/multipcm.h"
@@ -13,9 +14,14 @@
#define M1AUDIO_MPCM1_REGION "m1pcm1"
#define M1AUDIO_MPCM2_REGION "m1pcm2"
+#define M1AUDIO_TXRX_CLOCK 100000 // unknown
+
#define MCFG_SEGAM1AUDIO_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, SEGAM1AUDIO, 0)
+#define MCFG_SEGAM1AUDIO_RXD_HANDLER(_devcb) \
+ devcb = &segam1audio_device::set_rxd_handler(*device, DEVCB_##_devcb);
+
//**************************************************************************
// TYPE DEFINITIONS
@@ -24,38 +30,33 @@
class segam1audio_device : public device_t
{
public:
- // construction/destruction
- segam1audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ // construction/destruction
+ segam1audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // optional information overrides
- virtual machine_config_constructor device_mconfig_additions() const override;
+ // optional information overrides
+ virtual machine_config_constructor device_mconfig_additions() const override;
- required_device<cpu_device> m_audiocpu;
- required_device<multipcm_device> m_multipcm_1;
- required_device<multipcm_device> m_multipcm_2;
- required_device<ym3438_device> m_ym;
+ template<class _Object> static devcb_base &set_rxd_handler(device_t &device, _Object &&object) { return downcast<segam1audio_device &>(device).m_rxd_handler.set_callback(std::forward<_Object>(object)); }
- DECLARE_READ16_MEMBER(m1_snd_68k_latch_r);
- DECLARE_READ16_MEMBER(m1_snd_v60_ready_r);
- DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk1_w);
- DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk2_w);
- DECLARE_WRITE16_MEMBER(m1_snd_68k_latch1_w);
- DECLARE_WRITE16_MEMBER(m1_snd_68k_latch2_w);
- DECLARE_READ16_MEMBER(ready_r);
+ DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk1_w);
+ DECLARE_WRITE16_MEMBER(m1_snd_mpcm_bnk2_w);
- void check_fifo_irq();
- void write_fifo(uint8_t data);
+ DECLARE_WRITE_LINE_MEMBER(write_txd);
+ DECLARE_WRITE_LINE_MEMBER(output_txd);
protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
private:
- int m_to_68k[8];
- int m_fifo_rptr;
- int m_fifo_wptr;
- devcb_write_line m_main_irq_cb;
+ required_device<cpu_device> m_audiocpu;
+ required_device<multipcm_device> m_multipcm_1;
+ required_device<multipcm_device> m_multipcm_2;
+ required_device<ym3438_device> m_ym;
+ required_device<i8251_device> m_uart;
+
+ devcb_write_line m_rxd_handler;
};
diff --git a/src/mame/drivers/model1.cpp b/src/mame/drivers/model1.cpp
index e5829dfb0ee..469325bd3ec 100644
--- a/src/mame/drivers/model1.cpp
+++ b/src/mame/drivers/model1.cpp
@@ -633,6 +633,7 @@ Notes:
#include "emu.h"
#include "includes/model1.h"
+#include "machine/clock.h"
#include "machine/nvram.h"
#include "speaker.h"
@@ -735,6 +736,7 @@ IRQ_CALLBACK_MEMBER(model1_state::irq_callback)
void model1_state::irq_init()
{
m_maincpu->set_input_line(0, CLEAR_LINE);
+ m_m1uart->write_cts(0);
}
TIMER_DEVICE_CALLBACK_MEMBER(model1_state::model1_interrupt)
@@ -749,8 +751,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(model1_state::model1_interrupt)
{
irq_raise(m_sound_irq);
- m_m1audio->check_fifo_irq();
-
if (m_m1comm != nullptr)
m_m1comm->check_vint_irq();
}
@@ -850,47 +850,6 @@ WRITE16_MEMBER(model1_state::mr2_w)
logerror("MW 10[r10], %f (%x)\n", *(float *)(m_mr2+0x1f10/2), space.device().safe_pc());
}
-READ16_MEMBER(model1_state::snd_68k_ready_r)
-{
- if (m_m1audio->ready_r(space, 0) == 0)
- {
- space.device().execute().spin_until_time(attotime::from_usec(40));
- return 0;
- }
-
- return 0xff;
-}
-
-WRITE16_MEMBER(model1_state::snd_latch_to_68k_w)
-{
- m_m1audio->write_fifo(data);
-
- if (data == 0xae)
- {
- m_snd_cmd_state = 0;
- }
-
- if (m_dsbz80 != nullptr)
- {
-// printf("%d: %02x (last %02x)\n", m_snd_cmd_state, data, m_last_snd_cmd);
- // HACK: on h/w, who filters out commands the DSB shouldn't see? Need a wiring diagram.
- if ((m_snd_cmd_state == 2) && (m_last_snd_cmd == 0x50))
- {
- m_dsbz80->latch_w(space, 0, data);
- }
- else // keep in sync but send a "don't care"
- {
- m_dsbz80->latch_w(space, 0, 0x70);
- }
- }
-
- m_last_snd_cmd = data;
- m_snd_cmd_state++;
-
- // give the 68k time to reply
- space.device().execute().spin_until_time(attotime::from_usec(40));
-}
-
static ADDRESS_MAP_START( model1_mem, AS_PROGRAM, 16, model1_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x1fffff) AM_ROMBANK("bank1")
@@ -923,8 +882,8 @@ static ADDRESS_MAP_START( model1_mem, AS_PROGRAM, 16, model1_state )
AM_RANGE(0xc00200, 0xc002ff) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0xc40000, 0xc40001) AM_WRITE(snd_latch_to_68k_w)
- AM_RANGE(0xc40002, 0xc40003) AM_READ(snd_68k_ready_r)
+ AM_RANGE(0xc40000, 0xc40001) AM_DEVREADWRITE8("m1uart", i8251_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0xc40002, 0xc40003) AM_DEVREADWRITE8("m1uart", i8251_device, status_r, control_w, 0x00ff)
AM_RANGE(0xd00000, 0xd00001) AM_READWRITE(model1_tgp_copro_adr_r, model1_tgp_copro_adr_w)
AM_RANGE(0xd20000, 0xd20003) AM_WRITE(model1_tgp_copro_ram_w )
@@ -975,8 +934,8 @@ static ADDRESS_MAP_START( model1_vr_mem, AS_PROGRAM, 16, model1_state )
AM_RANGE(0xc00200, 0xc002ff) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0xc40000, 0xc40001) AM_WRITE(snd_latch_to_68k_w)
- AM_RANGE(0xc40002, 0xc40003) AM_READ(snd_68k_ready_r)
+ AM_RANGE(0xc40000, 0xc40001) AM_DEVREADWRITE8("m1uart", i8251_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0xc40002, 0xc40003) AM_DEVREADWRITE8("m1uart", i8251_device, status_r, control_w, 0x00ff)
AM_RANGE(0xd00000, 0xd00001) AM_READWRITE(model1_tgp_vr_adr_r, model1_tgp_vr_adr_w)
AM_RANGE(0xd20000, 0xd20003) AM_WRITE(model1_vr_tgp_ram_w )
@@ -1154,11 +1113,11 @@ INPUT_PORTS_END
ROM_LOAD("opr14747.bin", 0x0a0000, 0x20000, CRC(a4ad5e19) SHA1(7d7ec300eeb9a8de1590011e37108688c092f329) ) \
ROM_LOAD("opr14748.bin", 0x0c0000, 0x20000, CRC(4a532cb8) SHA1(23280ebbcd6b2bc8a8e643a2d07a58d6598301b8) ) \
\
- ROM_REGION32_LE( 0x2000, "315_5571", 0) \
- ROM_LOAD("315-5571.bin", 0, 0x2000, CRC(1233db2a) SHA1(06760409d40f3d9117fd3e7c7ab62dfd70aa2a4d) ) \
+ /*ROM_REGION32_LE( 0x2000, "315_5571", 0)*/ \
+ /*ROM_LOAD("315-5571.bin", 0, 0x2000, CRC(1233db2a) SHA1(06760409d40f3d9117fd3e7c7ab62dfd70aa2a4d) )*/ \
\
- ROM_REGION32_LE( 0x2000, "315_5572", 0) \
- ROM_LOAD("315-5572.bin", 0, 0x2000, CRC(0a534a3b) SHA1(b8c988bc414b3ad3cd036ba5a64b5ee04a4758b4) )
+ /*ROM_REGION32_LE( 0x2000, "315_5572", 0)*/ \
+ /*ROM_LOAD("315-5572.bin", 0, 0x2000, CRC(0a534a3b) SHA1(b8c988bc414b3ad3cd036ba5a64b5ee04a4758b4) )*/
ROM_START( vf )
MODEL1_CPU_BOARD
@@ -1252,7 +1211,7 @@ ROM_START( vr )
ROM_REGION( 0x2000, "tgp", 0 ) /* TGP program rom */
// The real internal TGP rom
- ROM_LOAD("315-5573.bin", 0, 0x2000, CRC(ec913af2) SHA1(a18bf6c9d7b35f8b9e513a7d279f13a30b32a961) )
+ /*ROM_LOAD("315-5573.bin", 0, 0x2000, CRC(ec913af2) SHA1(a18bf6c9d7b35f8b9e513a7d279f13a30b32a961) )*/
// this is the Daytona TGP program with some modifications needed for Virtua Racing
// Kept here for now to avoid instantly breaking the game until the tgp is up to it
@@ -1316,7 +1275,7 @@ ROM_START( vformula )
ROM_REGION( 0x2000, "tgp", 0 ) /* TGP program rom */
// The real internal TGP rom
- ROM_LOAD("315-5573.bin", 0, 0x2000, CRC(ec913af2) SHA1(a18bf6c9d7b35f8b9e513a7d279f13a30b32a961) )
+ /*ROM_LOAD("315-5573.bin", 0, 0x2000, CRC(ec913af2) SHA1(a18bf6c9d7b35f8b9e513a7d279f13a30b32a961) )*/
// this is the Daytona TGP program with some modifications needed for Virtua Racing
// Kept here for now to avoid instantly breaking the game until the tgp is up to it
@@ -1666,6 +1625,14 @@ static MACHINE_CONFIG_START( model1, model1_state )
MCFG_VIDEO_START_OVERRIDE(model1_state,model1)
MCFG_SEGAM1AUDIO_ADD("m1audio")
+ MCFG_SEGAM1AUDIO_RXD_HANDLER(DEVWRITELINE("m1uart", i8251_device, write_rxd))
+
+ MCFG_DEVICE_ADD("m1uart", I8251, 8000000) // uPD71051C, clock unknown
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("m1audio", segam1audio_device, write_txd))
+
+ MCFG_CLOCK_ADD("m1uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("m1uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("m1uart", i8251_device, write_rxc))
MCFG_M1COMM_ADD("m1comm")
MACHINE_CONFIG_END
@@ -1675,6 +1642,11 @@ static MACHINE_CONFIG_DERIVED(swa, model1)
MCFG_DSBZ80_ADD(DSBZ80_TAG)
MCFG_SOUND_ROUTE(0, "dleft", 1.0)
MCFG_SOUND_ROUTE(1, "dright", 1.0)
+
+ // Apparently m1audio has to filter out commands the DSB shouldn't see
+ MCFG_DEVICE_MODIFY("m1audio")
+ MCFG_SEGAM1AUDIO_RXD_HANDLER(DEVWRITELINE("m1uart", i8251_device, write_rxd))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(DSBZ80_TAG, dsbz80_device, write_txd))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( model1_vr, model1_state )
@@ -1710,6 +1682,14 @@ static MACHINE_CONFIG_START( model1_vr, model1_state )
MCFG_VIDEO_START_OVERRIDE(model1_state,model1)
MCFG_SEGAM1AUDIO_ADD("m1audio")
+ MCFG_SEGAM1AUDIO_RXD_HANDLER(DEVWRITELINE("m1uart", i8251_device, write_rxd))
+
+ MCFG_DEVICE_ADD("m1uart", I8251, 8000000) // uPD71051C, clock unknown
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("m1audio", segam1audio_device, write_txd))
+
+ MCFG_CLOCK_ADD("m1uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("m1uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("m1uart", i8251_device, write_rxc))
MCFG_M1COMM_ADD("m1comm")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp
index 10d76a7d63c..22a5a13092b 100644
--- a/src/mame/drivers/model2.cpp
+++ b/src/mame/drivers/model2.cpp
@@ -122,6 +122,7 @@
#include "cpu/mb86235/mb86235.h"
#include "cpu/sharc/sharc.h"
#include "cpu/z80/z80.h"
+#include "machine/clock.h"
#include "machine/cxd1095.h"
#include "machine/eepromser.h"
#include "machine/msm6253.h"
@@ -409,6 +410,8 @@ MACHINE_RESET_MEMBER(model2_state,model2_common)
m_timers[3] = machine().device<timer_device>("timer3");
for (i=0; i<4; i++)
m_timers[i]->reset();
+
+ m_uart->write_cts(0);
}
MACHINE_RESET_MEMBER(model2_state,model2o)
@@ -1233,59 +1236,37 @@ WRITE32_MEMBER(model2_state::model2_irq_w)
/* TODO: rewrite this part. It's a 8251-compatible chip */
READ32_MEMBER(model2_state::model2_serial_r)
{
- if ((offset == 0) && (mem_mask == 0xffff0000))
+ if (offset == 0)
{
- return 0x00070000; // TxRdy RxRdy (zeroguna also needs bit 4 set)
+ u32 result = 0;
+ if (ACCESSING_BITS_0_7 && (offset == 0))
+ result |= m_uart->data_r(space, 0);
+ if (ACCESSING_BITS_16_23 && (offset == 0))
+ result |= m_uart->status_r(space, 0) << 16;
+ return result;
}
return 0xffffffff;
}
-WRITE32_MEMBER(model2_state::model2o_serial_w)
-{
- if(mem_mask == 0xffff0000)
- {
- //m_soundack++;
- }
- if (mem_mask == 0x0000ffff)
- {
- if (!m_m1audio->ready_r(space, 0))
- {
- space.device().execute().spin_until_time(attotime::from_usec(40));
- }
-
- m_m1audio->write_fifo(data & 0xff);
-
- // give the 68k time to notice
- space.device().execute().spin_until_time(attotime::from_usec(40));
- }
-}
-
WRITE32_MEMBER(model2_state::model2_serial_w)
{
if (ACCESSING_BITS_0_7 && (offset == 0))
{
- if (m_dsbz80 != nullptr)
- {
- m_dsbz80->latch_w(space, 0, data&0xff);
- }
+ m_uart->data_w(space, 0, data & 0xff);
- // for Manx TT DX
- if (m_m1audio != nullptr)
+ if (m_scsp.found())
{
- if (!m_m1audio->ready_r(space, 0))
- {
- space.device().execute().spin_until_time(attotime::from_usec(40));
- }
+ m_scsp->midi_in(space, 0, data&0xff, 0);
- m_m1audio->write_fifo(data & 0xff);
+ // give the 68k time to notice
+ space.device().execute().spin_until_time(attotime::from_usec(40));
}
-
- m_scsp->midi_in(space, 0, data&0xff, 0);
-
- // give the 68k time to notice
- space.device().execute().spin_until_time(attotime::from_usec(40));
+ }
+ if (ACCESSING_BITS_16_23 && (offset == 0))
+ {
+ m_uart->control_w(space, 0, (data >> 16) & 0xff);
}
}
@@ -1578,7 +1559,7 @@ static ADDRESS_MAP_START( model2o_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x00980000, 0x00980003) AM_READWRITE(copro_ctl1_r,copro_ctl1_w)
AM_RANGE(0x00980004, 0x00980007) AM_READ(model2o_fifoctrl_r)
AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_ctl1_w)
- AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2o_serial_w)
+ AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_RANGE(0x12000000, 0x121fffff) AM_RAM_WRITE(model2o_tex_w0) AM_MIRROR(0x200000) AM_SHARE("textureram0") // texture RAM 0
AM_RANGE(0x12400000, 0x125fffff) AM_RAM_WRITE(model2o_tex_w1) AM_MIRROR(0x200000) AM_SHARE("textureram1") // texture RAM 1
@@ -1593,7 +1574,7 @@ static ADDRESS_MAP_START( model2o_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x01c00100, 0x01c0010f) AM_READ8(virtuacop_lightgun_r,0x00ff00ff)
AM_RANGE(0x01c00110, 0x01c00113) AM_READ8(virtuacop_lightgun_offscreen_r,0x00ff00ff)
AM_RANGE(0x01c00200, 0x01c002ff) AM_RAM AM_SHARE("backup2")
- AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2o_serial_w )
+ AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_IMPORT_FROM(model2_base_mem)
ADDRESS_MAP_END
@@ -1618,7 +1599,7 @@ static ADDRESS_MAP_START( model2a_crx_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x00980000, 0x00980003) AM_READWRITE(copro_ctl1_r,copro_ctl1_w)
AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_ctl1_w)
AM_RANGE(0x00980014, 0x00980017) AM_READ(copro_status_r)
- AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w )
+ AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_RANGE(0x12000000, 0x121fffff) AM_RAM_WRITE(model2o_tex_w0) AM_MIRROR(0x200000) AM_SHARE("textureram0") // texture RAM 0
AM_RANGE(0x12400000, 0x125fffff) AM_RAM_WRITE(model2o_tex_w1) AM_MIRROR(0x200000) AM_SHARE("textureram1") // texture RAM 1
@@ -1633,7 +1614,7 @@ static ADDRESS_MAP_START( model2a_crx_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x01c00018, 0x01c0001b) AM_READ(hotd_lightgun_r)
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ_PORT("1c0001c") AM_WRITE(analog_2b_w )
AM_RANGE(0x01c00040, 0x01c00043) AM_WRITENOP
- AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2_serial_w )
+ AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_IMPORT_FROM(model2_base_mem)
ADDRESS_MAP_END
@@ -1655,7 +1636,7 @@ static ADDRESS_MAP_START( model2b_crx_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x00980014, 0x00980017) AM_READ(copro_status_r)
//AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_sharc_ctl1_w )
- AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w )
+ AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_RANGE(0x11000000, 0x110fffff) AM_RAM AM_SHARE("textureram0") // texture RAM 0 (2b/2c)
AM_RANGE(0x11100000, 0x111fffff) AM_RAM AM_SHARE("textureram0") // texture RAM 0 (2b/2c)
@@ -1674,7 +1655,7 @@ static ADDRESS_MAP_START( model2b_crx_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x01c00018, 0x01c0001b) AM_READ(hotd_lightgun_r)
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ_PORT("1c0001c") AM_WRITE(analog_2b_w )
AM_RANGE(0x01c00040, 0x01c00043) AM_WRITENOP
- AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2_serial_w )
+ AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_IMPORT_FROM(model2_base_mem)
ADDRESS_MAP_END
@@ -1690,7 +1671,7 @@ static ADDRESS_MAP_START( model2c_crx_mem, AS_PROGRAM, 32, model2_state )
AM_RANGE(0x00980000, 0x00980003) AM_READWRITE(copro_ctl1_r,copro_ctl1_w)
AM_RANGE(0x00980008, 0x0098000b) AM_WRITE(geo_ctl1_w )
AM_RANGE(0x00980014, 0x00980017) AM_READ(copro_status_r)
- AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w )
+ AM_RANGE(0x009c0000, 0x009cffff) AM_READWRITE(model2_serial_r, model2_serial_w)
AM_RANGE(0x11000000, 0x111fffff) AM_RAM AM_SHARE("textureram0") // texture RAM 0 (2b/2c)
AM_RANGE(0x11200000, 0x113fffff) AM_RAM AM_SHARE("textureram1") // texture RAM 1 (2b/2c)
@@ -2431,6 +2412,15 @@ static MACHINE_CONFIG_START( model2o, model2_state )
MCFG_VIDEO_START_OVERRIDE(model2_state,model2)
MCFG_SEGAM1AUDIO_ADD("m1audio")
+ MCFG_SEGAM1AUDIO_RXD_HANDLER(DEVWRITELINE("uart", i8251_device, write_rxd))
+
+ MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("m1audio", segam1audio_device, write_txd))
+ MCFG_DEVCB_CHAIN_OUTPUT(LOGGER("TXD L")) MCFG_DEVCB_XOR(1)
+
+ MCFG_CLOCK_ADD("uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", i8251_device, write_rxc))
MCFG_M2COMM_ADD("m2comm")
MACHINE_CONFIG_END
@@ -2485,11 +2475,21 @@ static MACHINE_CONFIG_START( model2a, model2_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
+ MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
+
+ MCFG_CLOCK_ADD("uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", i8251_device, write_rxc))
+
MCFG_M2COMM_ADD("m2comm")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( manxttdx, model2a ) /* Includes a Model 1 Sound board for additional sounds - Deluxe version only */
MCFG_SEGAM1AUDIO_ADD("m1audio")
+ MCFG_SEGAM1AUDIO_RXD_HANDLER(DEVWRITELINE("uart", i8251_device, write_rxd))
+
+ MCFG_DEVICE_MODIFY("uart")
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("m1audio", segam1audio_device, write_txd))
MACHINE_CONFIG_END
uint16_t model2_state::crypt_read_callback(uint32_t addr)
@@ -2607,6 +2607,12 @@ static MACHINE_CONFIG_START( model2b, model2_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
+ MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
+
+ MCFG_CLOCK_ADD("uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", i8251_device, write_rxc))
+
MCFG_M2COMM_ADD("m2comm")
MACHINE_CONFIG_END
@@ -2691,6 +2697,12 @@ static MACHINE_CONFIG_START( model2c, model2_state )
MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
+ MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051C, clock unknown
+
+ MCFG_CLOCK_ADD("uart_clock", M1AUDIO_TXRX_CLOCK) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", i8251_device, write_rxc))
+
MCFG_M2COMM_ADD("m2comm")
MACHINE_CONFIG_END
@@ -2698,6 +2710,9 @@ static MACHINE_CONFIG_DERIVED( stcc, model2c )
MCFG_DSBZ80_ADD(DSBZ80_TAG)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_MODIFY("uart")
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE(DSBZ80_TAG, dsbz80_device, write_txd))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( model2c_5881, model2c )
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 0706dad5f4b..ab081d0b2a7 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -735,6 +735,7 @@ JP4/5/6/7 - Jumpers to configure ROMs
#include "includes/model3.h"
#include "cpu/m68000/m68000.h"
+#include "machine/clock.h"
#include "machine/eepromser.h"
#include "machine/53c810.h"
#include "machine/nvram.h"
@@ -1315,6 +1316,9 @@ void model3_state::model3_init(int step)
{
m_step = step;
+ if (m_uart.found())
+ m_uart->write_cts(0);
+
m_sound_irq_enable = 0;
m_sound_timer->adjust(attotime::never);
@@ -1684,8 +1688,19 @@ READ8_MEMBER(model3_state::model3_sound_r)
{
switch (offset)
{
+ case 0:
+ {
+ if (m_uart.found())
+ return m_uart->data_r(space, 0);
+
+ break;
+ }
+
case 4:
{
+ if (m_uart.found())
+ return m_uart->status_r(space, 0);
+
uint8_t res = 0;
res |= 1;
res |= 0x2; // magtruck country check
@@ -1703,10 +1718,8 @@ WRITE8_MEMBER(model3_state::model3_sound_w)
// clear the interrupt
set_irq_line(0x40, CLEAR_LINE);
- if (m_dsbz80 != nullptr)
- {
- m_dsbz80->latch_w(space, 0, data&0xff);
- }
+ if (m_uart.found())
+ m_uart->data_w(space, 0, data);
// send to the sound board
m_scsp1->midi_in(space, 0, data, 0);
@@ -1715,9 +1728,13 @@ WRITE8_MEMBER(model3_state::model3_sound_w)
{
m_sound_timer->adjust(attotime::from_msec(1));
}
+
break;
case 4:
+ if (m_uart.found())
+ m_uart->control_w(space, 0, data);
+
if (data == 0x27)
{
m_sound_irq_enable = 1;
@@ -1727,6 +1744,7 @@ WRITE8_MEMBER(model3_state::model3_sound_w)
{
m_sound_irq_enable = 0;
}
+
break;
}
}
@@ -5783,6 +5801,13 @@ static MACHINE_CONFIG_DERIVED(scud, model3_15)
MCFG_DSBZ80_ADD(DSBZ80_TAG)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD("uart", I8251, 8000000) // uPD71051
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE(DSBZ80_TAG, dsbz80_device, write_txd))
+
+ MCFG_CLOCK_ADD("uart_clock", 100000) // unknown rate
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", i8251_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", i8251_device, write_rxc))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START(model3_20, model3_state)
diff --git a/src/mame/includes/model1.h b/src/mame/includes/model1.h
index 0ca51be1ea3..c78b43bb84e 100644
--- a/src/mame/includes/model1.h
+++ b/src/mame/includes/model1.h
@@ -10,6 +10,7 @@
#include "cpu/mb86233/mb86233.h"
#include "cpu/v60/v60.h"
+#include "machine/i8251.h"
#include "machine/m1comm.h"
#include "video/segaic24.h"
@@ -32,6 +33,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_m1audio(*this, "m1audio")
+ , m_m1uart(*this, "m1uart")
, m_m1comm(*this, "m1comm")
, m_dsbz80(*this, DSBZ80_TAG)
, m_tgp(*this, "tgp")
@@ -65,10 +67,6 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(model1_interrupt);
IRQ_CALLBACK_MEMBER(irq_callback);
- // Sound
- DECLARE_READ16_MEMBER(snd_68k_ready_r);
- DECLARE_WRITE16_MEMBER(snd_latch_to_68k_w);
-
// TGP
DECLARE_READ16_MEMBER(fifoin_status_r);
DECLARE_WRITE16_MEMBER(md1_w);
@@ -193,6 +191,7 @@ private:
// Devices
required_device<v60_device> m_maincpu; // V60
required_device<segam1audio_device> m_m1audio; // Model 1 standard sound board
+ required_device<i8251_device> m_m1uart;
optional_device<m1comm_device> m_m1comm; // Model 1 communication board
optional_device<dsbz80_device> m_dsbz80; // Digital Sound Board
optional_device<mb86233_cpu_device> m_tgp;
@@ -206,8 +205,6 @@ private:
// Sound
int m_sound_irq;
- uint8_t m_last_snd_cmd;
- int m_snd_cmd_state;
// TGP FIFO
uint32_t fifoout_pop();
diff --git a/src/mame/includes/model2.h b/src/mame/includes/model2.h
index 0156f341a82..13b3007fa81 100644
--- a/src/mame/includes/model2.h
+++ b/src/mame/includes/model2.h
@@ -4,6 +4,7 @@
#include "audio/dsbz80.h"
#include "audio/segam1audio.h"
#include "machine/eepromser.h"
+#include "machine/i8251.h"
#include "cpu/i960/i960.h"
#include "cpu/mb86235/mb86235.h"
#include "sound/scsp.h"
@@ -33,6 +34,7 @@ public:
m_maincpu(*this,"maincpu"),
m_dsbz80(*this, DSBZ80_TAG),
m_m1audio(*this, "m1audio"),
+ m_uart(*this, "uart"),
m_m2comm(*this, "m2comm"),
m_audiocpu(*this, "audiocpu"),
m_tgp(*this, "tgp"),
@@ -65,6 +67,7 @@ public:
required_device<i960_cpu_device> m_maincpu;
optional_device<dsbz80_device> m_dsbz80; // Z80-based MPEG Digital Sound Board
optional_device<segam1audio_device> m_m1audio; // Model 1 standard sound board
+ required_device<i8251_device> m_uart;
optional_device<m2comm_device> m_m2comm; // Model 2 communication board
optional_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_tgp;
diff --git a/src/mame/includes/model3.h b/src/mame/includes/model3.h
index 8f27cdbf903..053d7b86dea 100644
--- a/src/mame/includes/model3.h
+++ b/src/mame/includes/model3.h
@@ -6,6 +6,7 @@
#include "machine/53c810.h"
#include "audio/dsbz80.h"
#include "machine/eepromser.h"
+#include "machine/i8251.h"
#include "sound/scsp.h"
#include "machine/315-5881_crypt.h"
#include "machine/msm6242.h"
@@ -67,6 +68,7 @@ public:
m_work_ram(*this, "work_ram"),
m_paletteram64(*this, "paletteram64"),
m_dsbz80(*this, DSBZ80_TAG),
+ m_uart(*this, "uart"),
m_soundram(*this, "soundram"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@@ -89,6 +91,7 @@ public:
required_shared_ptr<uint64_t> m_work_ram;
required_shared_ptr<uint64_t> m_paletteram64;
optional_device<dsbz80_device> m_dsbz80; // Z80-based MPEG Digital Sound Board
+ optional_device<i8251_device> m_uart;
required_shared_ptr<uint16_t> m_soundram;
required_device<gfxdecode_device> m_gfxdecode;