diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp index db02651d7d9..076b65be3e1 100644 --- a/src/mame/drivers/namcos2.cpp +++ b/src/mame/drivers/namcos2.cpp @@ -599,7 +599,7 @@ static ADDRESS_MAP_START( namcos2_68k_default_cpu_board_am, AS_PROGRAM, 16, namc AM_RANGE(0x440000, 0x44ffff) AM_READWRITE(paletteram_word_r,paletteram_word_w) AM_SHARE("paletteram") AM_RANGE(0x460000, 0x460fff) AM_READWRITE(dpram_word_r,dpram_word_w) AM_RANGE(0x468000, 0x468fff) AM_READWRITE(dpram_word_r,dpram_word_w) /* mirror */ - AM_RANGE(0x480000, 0x483fff) AM_DEVICE("sci", namco_c139_device, ram_map) + AM_RANGE(0x480000, 0x483fff) AM_DEVREADWRITE("sci", namco_c139_device, ram_r, ram_w) AM_RANGE(0x4a0000, 0x4a000f) AM_DEVICE("sci", namco_c139_device, regs_map) ADDRESS_MAP_END diff --git a/src/mame/drivers/namcos21.cpp b/src/mame/drivers/namcos21.cpp index 75ee0368bfd..2a51f03a11f 100644 --- a/src/mame/drivers/namcos21.cpp +++ b/src/mame/drivers/namcos21.cpp @@ -1252,7 +1252,7 @@ static ADDRESS_MAP_START( common_map, AS_PROGRAM, 16, namcos21_state ) AM_RANGE(0x800000, 0x8fffff) AM_ROM AM_REGION("data", 0) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xa00000, 0xa00fff) AM_READWRITE(namcos2_68k_dualportram_word_r,namcos2_68k_dualportram_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_DEVICE("sci", namco_c139_device, ram_map) + AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("sci", namco_c139_device, ram_r, ram_w) AM_RANGE(0xb80000, 0xb8000f) AM_DEVICE("sci", namco_c139_device, regs_map) AM_RANGE(0xc00000, 0xcfffff) AM_ROM AM_MIRROR(0x100000) AM_REGION("edata", 0) ADDRESS_MAP_END @@ -1481,7 +1481,7 @@ static ADDRESS_MAP_START( winrun_master_map, AS_PROGRAM, 16, namcos21_state ) AM_RANGE(0x800000, 0x87ffff) AM_ROM AM_REGION("data", 0) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xa00000, 0xa00fff) AM_READWRITE(namcos2_68k_dualportram_word_r,namcos2_68k_dualportram_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_DEVICE("sci", namco_c139_device, ram_map) + AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("sci", namco_c139_device, ram_r, ram_w) AM_RANGE(0xb80000, 0xb8000f) AM_DEVICE("sci", namco_c139_device, regs_map) ADDRESS_MAP_END @@ -1493,7 +1493,7 @@ static ADDRESS_MAP_START( winrun_slave_map, AS_PROGRAM, 16, namcos21_state ) AM_RANGE(0x800000, 0x87ffff) AM_ROM AM_REGION("data", 0) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xa00000, 0xa00fff) AM_READWRITE(namcos2_68k_dualportram_word_r,namcos2_68k_dualportram_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_DEVICE("sci", namco_c139_device, ram_map) + AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("sci", namco_c139_device, ram_r, ram_w) AM_RANGE(0xb80000, 0xb8000f) AM_DEVICE("sci", namco_c139_device, regs_map) ADDRESS_MAP_END @@ -1573,7 +1573,7 @@ static ADDRESS_MAP_START( driveyes_common_map, AS_PROGRAM, 16, namcos21_state ) AM_RANGE(0x800000, 0x8fffff) AM_ROM AM_REGION("data", 0) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xa00000, 0xa00fff) AM_READWRITE(namcos2_68k_dualportram_word_r,namcos2_68k_dualportram_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_DEVICE("sci", namco_c139_device, ram_map) + AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("sci", namco_c139_device, ram_r, ram_w) AM_RANGE(0xb80000, 0xb8000f) AM_DEVICE("sci", namco_c139_device, regs_map) ADDRESS_MAP_END diff --git a/src/mame/machine/namco_c139.cpp b/src/mame/machine/namco_c139.cpp new file mode 100644 index 00000000000..8946c632457 --- /dev/null +++ b/src/mame/machine/namco_c139.cpp @@ -0,0 +1,98 @@ +// license:BSD-3-Clause +// copyright-holders: +/*************************************************************************** + + Namco C139 - Serial I/F Controller + + + TODO: + - Is RAM shared with a specific CPU other than master/slave? + +***************************************************************************/ + +#include "emu.h" +#include "namco_c139.h" + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// device type definition +const device_type NAMCO_C139 = &device_creator; + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +static ADDRESS_MAP_START( data_map, AS_DATA, 16, namco_c139_device ) + AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE("sharedram") +ADDRESS_MAP_END + +DEVICE_ADDRESS_MAP_START( regs_map, 16, namco_c139_device ) + AM_RANGE(0x00, 0x00) AM_READ(status_r) +ADDRESS_MAP_END + +//------------------------------------------------- +// namco_c139_device - constructor +//------------------------------------------------- + +namco_c139_device::namco_c139_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, NAMCO_C139, "namco_c139_longname", tag, owner, clock, "namco_c139", __FILE__), + device_memory_interface(mconfig, *this), + m_space_config("data", ENDIANNESS_BIG, 16, 14, 0, *ADDRESS_MAP_NAME(data_map)) +{ +} + + + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void namco_c139_device::device_start() +{ + m_ram = (uint16_t*)memshare("sharedram")->ptr(); + +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void namco_c139_device::device_reset() +{ +} + +//------------------------------------------------- +// memory_space_config - return a description of +// any address spaces owned by this device +//------------------------------------------------- + +const address_space_config *namco_c139_device::memory_space_config(address_spacenum spacenum) const +{ + return (spacenum == AS_DATA) ? &m_space_config : nullptr; +} + +//************************************************************************** +// READ/WRITE HANDLERS +//************************************************************************** + +READ16_MEMBER(namco_c139_device::ram_r) +{ + return m_ram[offset]; +} + +WRITE16_MEMBER(namco_c139_device::ram_w) +{ + COMBINE_DATA(&m_ram[offset]); +} + +READ16_MEMBER(namco_c139_device::status_r) +{ + return 4; // STATUS bit? +} diff --git a/src/mame/machine/namco_c139.h b/src/mame/machine/namco_c139.h new file mode 100644 index 00000000000..05acdfbdd83 --- /dev/null +++ b/src/mame/machine/namco_c139.h @@ -0,0 +1,67 @@ +// license:BSD-3-Clause +// copyright-holders: +/*************************************************************************** + +Template for skeleton device + +***************************************************************************/ + +#pragma once + +#ifndef __NAMCO_C139DEV_H__ +#define __NAMCO_C139DEV_H__ + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_NAMCO_C139_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, NAMCO_C139, 0) + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> namco_c139_device + +class namco_c139_device : public device_t, + public device_memory_interface +{ +public: + // construction/destruction + namco_c139_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // I/O operations + DECLARE_ADDRESS_MAP(regs_map, 16); + + DECLARE_READ16_MEMBER(status_r); + + DECLARE_READ16_MEMBER(ram_r); + DECLARE_WRITE16_MEMBER(ram_w); + +protected: + // device-level overrides +// virtual void device_validity_check(validity_checker &valid) const; + virtual void device_start() override; + virtual void device_reset() override; + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_DATA) const override; +private: + const address_space_config m_space_config; + uint16_t* m_ram; +}; + + +// device type definition +extern const device_type NAMCO_C139; + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + + + +#endif diff --git a/src/mame/machine/namco_c148.cpp b/src/mame/machine/namco_c148.cpp index 053e3368738..3fa615de5bf 100644 --- a/src/mame/machine/namco_c148.cpp +++ b/src/mame/machine/namco_c148.cpp @@ -102,6 +102,8 @@ void namco_c148_device::device_start() { m_hostcpu = machine().device(m_hostcpu_tag); m_linked_c148 = machine().device(m_linked_c148_tag); + assert(m_hostcpu != nullptr); + m_out_ext1_cb.resolve_safe(); m_out_ext2_cb.resolve_safe();