diff options
| author | 2026-04-24 21:33:25 +0200 | |
|---|---|---|
| committer | 2026-04-24 21:38:16 +0200 | |
| commit | a55b81d19a254894b9662eed3c2c0e07b4dd5b09 (patch) | |
| tree | cdeed7c84624e5248e6e4c3b4421f871450ed516 | |
| parent | 590e5d4b7f38f4784b7b9539f7c61268509ced47 (diff) | |
namcos21: use memory_share_creator for the nvram
| -rw-r--r-- | src/mame/namco/namco_c148.cpp | 11 | ||||
| -rw-r--r-- | src/mame/namco/namcos21.cpp | 35 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_c67.cpp | 24 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_de.cpp | 23 |
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); |
