summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2026-04-24 21:33:25 +0200
committer hap <happppp@users.noreply.github.com>2026-04-24 21:38:16 +0200
commita55b81d19a254894b9662eed3c2c0e07b4dd5b09 (patch)
treecdeed7c84624e5248e6e4c3b4421f871450ed516
parent590e5d4b7f38f4784b7b9539f7c61268509ced47 (diff)
namcos21: use memory_share_creator for the nvram
-rw-r--r--src/mame/namco/namco_c148.cpp11
-rw-r--r--src/mame/namco/namcos21.cpp35
-rw-r--r--src/mame/namco/namcos21_c67.cpp24
-rw-r--r--src/mame/namco/namcos21_de.cpp23
4 files changed, 28 insertions, 65 deletions
diff --git a/src/mame/namco/namco_c148.cpp b/src/mame/namco/namco_c148.cpp
index 9cc552f4961..67ad6c10ed6 100644
--- a/src/mame/namco/namco_c148.cpp
+++ b/src/mame/namco/namco_c148.cpp
@@ -46,6 +46,7 @@ Interrupt Controller C148 1C0000-1FFFFF R/W D00-D02
#include "namco_c148.h"
#define VERBOSE 0
+//#define LOG_OUTPUT_FUNC osd_printf_info
#include "logmacro.h"
@@ -162,11 +163,11 @@ inline void namco_c148_device::flush_irq_acks()
m_hostcpu->set_input_line(i, CLEAR_LINE);
}
-void namco_c148_device::pos_irq_level_w(uint8_t data) { m_irqlevel.pos = data & 7; flush_irq_acks(); if(data != 0) { LOG("%s: pos IRQ level = %02x\n",data); } }
-void namco_c148_device::vblank_irq_level_w(uint8_t data) { m_irqlevel.vblank = data & 7; flush_irq_acks(); LOG("%s: vblank IRQ level = %02x\n",data); }
-void namco_c148_device::cpu_irq_level_w(uint8_t data) { m_irqlevel.cpu = data & 7; flush_irq_acks(); LOG("%s: cpu IRQ level = %02x\n",data); }
-void namco_c148_device::ex_irq_level_w(uint8_t data) { m_irqlevel.ex = data & 7; flush_irq_acks(); LOG("%s: ex IRQ level = %02x\n",data); }
-void namco_c148_device::sci_irq_level_w(uint8_t data) { m_irqlevel.sci = data & 7; flush_irq_acks(); LOG("%s: sci IRQ level = %02x\n",data); }
+void namco_c148_device::pos_irq_level_w(uint8_t data) { m_irqlevel.pos = data & 7; flush_irq_acks(); if(data != 0) { LOG("%s: pos IRQ level = %02x\n", tag(), data); } }
+void namco_c148_device::vblank_irq_level_w(uint8_t data) { m_irqlevel.vblank = data & 7; flush_irq_acks(); LOG("%s: vblank IRQ level = %02x\n", tag(), data); }
+void namco_c148_device::cpu_irq_level_w(uint8_t data) { m_irqlevel.cpu = data & 7; flush_irq_acks(); LOG("%s: cpu IRQ level = %02x\n", tag(), data); }
+void namco_c148_device::ex_irq_level_w(uint8_t data) { m_irqlevel.ex = data & 7; flush_irq_acks(); LOG("%s: ex IRQ level = %02x\n", tag(), data); }
+void namco_c148_device::sci_irq_level_w(uint8_t data) { m_irqlevel.sci = data & 7; flush_irq_acks(); LOG("%s: sci IRQ level = %02x\n", tag(), data); }
uint16_t namco_c148_device::vblank_irq_ack_r() { m_hostcpu->set_input_line(m_irqlevel.vblank, CLEAR_LINE); return 0; }
uint16_t namco_c148_device::pos_irq_ack_r() { m_hostcpu->set_input_line(m_irqlevel.pos, CLEAR_LINE); return 0; }
diff --git a/src/mame/namco/namcos21.cpp b/src/mame/namco/namcos21.cpp
index fb4b16b35a5..603548ccde4 100644
--- a/src/mame/namco/namcos21.cpp
+++ b/src/mame/namco/namcos21.cpp
@@ -301,17 +301,19 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_slave(*this, "slave"),
+ m_gpu(*this, "gpu"),
m_c65(*this, "c65mcu"),
m_sci(*this, "sci"),
m_master_intc(*this, "master_intc"),
m_slave_intc(*this, "slave_intc"),
+ m_gpu_intc(*this, "gpu_intc"),
+ m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
m_c140(*this, "c140"),
m_palette(*this, "palette"),
m_screen(*this, "screen"),
m_audiobank(*this, "audiobank"),
m_c140_region(*this, "c140"),
m_dpram(*this, "dpram"),
- m_gpu_intc(*this, "gpu_intc"),
m_namcos21_3d(*this, "namcos21_3d"),
m_namcos21_dsp(*this, "namcos21dsp")
{ }
@@ -327,17 +329,19 @@ private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_slave;
+ required_device<cpu_device> m_gpu;
required_device<namcoc65_device> m_c65;
required_device<namco_c139_device> m_sci;
required_device<namco_c148_device> m_master_intc;
required_device<namco_c148_device> m_slave_intc;
+ required_device<namco_c148_device> m_gpu_intc;
+ memory_share_creator<uint8_t> m_nvram;
required_device<c140_device> m_c140;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
required_memory_bank m_audiobank;
required_region_ptr<u16> m_c140_region;
required_shared_ptr<uint8_t> m_dpram;
- required_device<namco_c148_device> m_gpu_intc;
required_device<namcos21_3d_device> m_namcos21_3d;
required_device<namcos21_dsp_device> m_namcos21_dsp;
@@ -359,8 +363,8 @@ private:
void gpu_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t gpu_videoram_r(offs_t offset);
- void eeprom_w(offs_t offset, uint8_t data);
- uint8_t eeprom_r(offs_t offset);
+ void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset] = data; }
+ uint8_t nvram_r(offs_t offset) { return m_nvram[offset]; }
void sound_bankselect_w(uint8_t data);
@@ -368,8 +372,6 @@ private:
void system_reset_w(uint8_t data);
void reset_all_subcpus(int state);
- std::unique_ptr<uint8_t[]> m_eeprom;
-
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -537,7 +539,7 @@ void namcos21_state::master_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram(); // work RAM
- map(0x180000, 0x183fff).rw(FUNC(namcos21_state::eeprom_r), FUNC(namcos21_state::eeprom_w)).umask16(0x00ff);
+ map(0x180000, 0x183fff).rw(FUNC(namcos21_state::nvram_r), FUNC(namcos21_state::nvram_w)).umask16(0x00ff);
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
// DSP Related
@@ -735,16 +737,6 @@ void namcos21_state::reset_all_subcpus(int state)
m_c65->ext_reset(state);
}
-void namcos21_state::eeprom_w(offs_t offset, uint8_t data)
-{
- m_eeprom[offset] = data;
-}
-
-uint8_t namcos21_state::eeprom_r(offs_t offset)
-{
- return m_eeprom[offset];
-}
-
void namcos21_state::machine_reset()
{
// Initialise the bank select in the sound CPU
@@ -760,9 +752,6 @@ void namcos21_state::machine_reset()
void namcos21_state::machine_start()
{
- m_eeprom = std::make_unique<uint8_t[]>(0x2000);
- subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
-
uint32_t max = memregion("audiocpu")->bytes() / 0x4000;
for (int i = 0; i < 0x10; i++)
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);
@@ -824,8 +813,8 @@ void namcos21_state::winrun(machine_config &config)
NAMCOS21_DSP(config, m_namcos21_dsp, 0);
m_namcos21_dsp->set_renderer_tag("namcos21_3d");
- m68000_device &gpu(M68000(config, "gpu", 49.152_MHz_XTAL / 4)); // graphics coprocessor
- gpu.set_addrmap(AS_PROGRAM, &namcos21_state::gpu_map);
+ M68000(config, m_gpu, 49.152_MHz_XTAL / 4); // graphics coprocessor
+ m_gpu->set_addrmap(AS_PROGRAM, &namcos21_state::gpu_map);
NAMCO_C148(config, m_master_intc, 0, m_maincpu, true);
m_master_intc->link_c148_device(m_slave_intc);
@@ -835,7 +824,7 @@ void namcos21_state::winrun(machine_config &config)
NAMCO_C148(config, m_slave_intc, 0, m_slave, false);
m_slave_intc->link_c148_device(m_master_intc);
- NAMCO_C148(config, m_gpu_intc, 0, "gpu", false);
+ NAMCO_C148(config, m_gpu_intc, 0, m_gpu, false);
NAMCO_C139(config, m_sci, 0);
config.set_maximum_quantum(attotime::from_hz(6000)); // 100 CPU slices per frame
diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp
index 87a594f8e18..689136e5d9a 100644
--- a/src/mame/namco/namcos21_c67.cpp
+++ b/src/mame/namco/namcos21_c67.cpp
@@ -307,6 +307,7 @@ public:
m_sci(*this, "sci"),
m_master_intc(*this, "master_intc"),
m_slave_intc(*this, "slave_intc"),
+ m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
m_c140(*this, "c140"),
m_c355spr(*this, "c355spr"),
m_palette(*this, "palette"),
@@ -338,6 +339,7 @@ private:
required_device<namco_c139_device> m_sci;
required_device<namco_c148_device> m_master_intc;
required_device<namco_c148_device> m_slave_intc;
+ memory_share_creator<u8> m_nvram;
required_device<c140_device> m_c140;
required_device<namco_c355spr_device> m_c355spr;
required_device<palette_device> m_palette;
@@ -359,8 +361,8 @@ private:
u8 dpram_byte_r(offs_t offset);
void dpram_byte_w(offs_t offset, u8 data);
- void eeprom_w(offs_t offset, u8 data);
- u8 eeprom_r(offs_t offset);
+ void nvram_w(offs_t offset, u8 data) { m_nvram[offset] = data; }
+ u8 nvram_r(offs_t offset) { return m_nvram[offset]; }
void sound_bankselect_w(u8 data);
@@ -368,8 +370,6 @@ private:
void system_reset_w(u8 data);
void reset_all_subcpus(int state);
- std::unique_ptr<u8[]> m_eeprom;
-
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
bool sprite_mix_callback(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri);
@@ -530,7 +530,7 @@ void namcos21_c67_state::master_map(address_map &map)
common_map(map);
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram(); // private work RAM
- map(0x180000, 0x183fff).rw(FUNC(namcos21_c67_state::eeprom_r), FUNC(namcos21_c67_state::eeprom_w)).umask16(0x00ff);
+ map(0x180000, 0x183fff).rw(FUNC(namcos21_c67_state::nvram_r), FUNC(namcos21_c67_state::nvram_w)).umask16(0x00ff);
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
map(0x200000, 0x20ffff).rw(m_namcos21_dsp_c67, FUNC(namcos21_dsp_c67_device::dspram16_r), FUNC(namcos21_dsp_c67_device::dspram16_w));
}
@@ -772,16 +772,6 @@ void namcos21_c67_state::reset_all_subcpus(int state)
m_namcos21_dsp_c67->reset_dsps(state);
}
-void namcos21_c67_state::eeprom_w(offs_t offset, u8 data)
-{
- m_eeprom[offset] = data;
-}
-
-u8 namcos21_c67_state::eeprom_r(offs_t offset)
-{
- return m_eeprom[offset];
-}
-
void namcos21_c67_state::machine_reset()
{
// Initialise the bank select in the sound CPU
@@ -794,12 +784,8 @@ void namcos21_c67_state::machine_reset()
}
-
void namcos21_c67_state::machine_start()
{
- m_eeprom = std::make_unique<u8[]>(0x2000);
- subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
-
u32 max = memregion("audiocpu")->bytes() / 0x4000;
for (int i = 0; i < 0x10; i++)
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);
diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp
index f2a355aac78..36c66116b24 100644
--- a/src/mame/namco/namcos21_de.cpp
+++ b/src/mame/namco/namcos21_de.cpp
@@ -73,6 +73,7 @@ private:
required_device<namco_c139_device> m_sci;
required_device<namco_c148_device> m_master_intc;
required_device<namco_c148_device> m_slave_intc;
+ memory_share_creator<u8> m_nvram;
required_device<c140_device> m_c140;
required_device<namco_c355spr_device> m_c355spr;
required_device<palette_device> m_palette;
@@ -93,8 +94,8 @@ private:
u8 dpram_byte_r(offs_t offset);
void dpram_byte_w(offs_t offset, u8 data);
- void eeprom_w(offs_t offset, u8 data);
- u8 eeprom_r(offs_t offset);
+ void nvram_w(offs_t offset, u8 data) { m_nvram[offset] = data; }
+ u8 nvram_r(offs_t offset) { return m_nvram[offset]; }
void sound_bankselect_w(u8 data);
@@ -102,8 +103,6 @@ private:
void system_reset_w(u8 data);
void reset_all_subcpus(int state);
- std::unique_ptr<u8[]> m_eeprom;
-
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
bool sprite_mix_callback(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri);
@@ -130,6 +129,7 @@ namco_de_pcbstack_device::namco_de_pcbstack_device(const machine_config &mconfig
m_sci(*this, "sci"),
m_master_intc(*this, "master_intc"),
m_slave_intc(*this, "slave_intc"),
+ m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
m_c140(*this, "c140"),
m_c355spr(*this, "c355spr"),
m_palette(*this, "palette"),
@@ -370,7 +370,7 @@ void namco_de_pcbstack_device::driveyes_master_map(address_map &map)
driveyes_common_map(map);
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram(); // private work RAM
- map(0x180000, 0x183fff).rw(FUNC(namco_de_pcbstack_device::eeprom_r), FUNC(namco_de_pcbstack_device::eeprom_w)).umask16(0x00ff);
+ map(0x180000, 0x183fff).rw(FUNC(namco_de_pcbstack_device::nvram_r), FUNC(namco_de_pcbstack_device::nvram_w)).umask16(0x00ff);
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
// DSP related
@@ -420,16 +420,6 @@ void namco_de_pcbstack_device::reset_all_subcpus(int state)
m_c68->ext_reset(state);
}
-void namco_de_pcbstack_device::eeprom_w(offs_t offset, u8 data)
-{
- m_eeprom[offset] = data;
-}
-
-u8 namco_de_pcbstack_device::eeprom_r(offs_t offset)
-{
- return m_eeprom[offset];
-}
-
TIMER_DEVICE_CALLBACK_MEMBER(namco_de_pcbstack_device::screen_scanline)
{
@@ -445,9 +435,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(namco_de_pcbstack_device::screen_scanline)
void namco_de_pcbstack_device::device_start()
{
- m_eeprom = std::make_unique<u8[]>(0x2000);
- subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
-
u32 max = memregion("audiocpu")->bytes() / 0x4000;
for (int i = 0; i < 0x10; i++)
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);