Skip to content

Commit a55b81d

Browse files
committed
namcos21: use memory_share_creator for the nvram
1 parent 590e5d4 commit a55b81d

4 files changed

Lines changed: 28 additions & 65 deletions

File tree

src/mame/namco/namco_c148.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Interrupt Controller C148 1C0000-1FFFFF R/W D00-D02
4646
#include "namco_c148.h"
4747

4848
#define VERBOSE 0
49+
//#define LOG_OUTPUT_FUNC osd_printf_info
4950
#include "logmacro.h"
5051

5152

@@ -162,11 +163,11 @@ inline void namco_c148_device::flush_irq_acks()
162163
m_hostcpu->set_input_line(i, CLEAR_LINE);
163164
}
164165

165-
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); } }
166-
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); }
167-
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); }
168-
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); }
169-
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); }
166+
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); } }
167+
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); }
168+
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); }
169+
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); }
170+
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); }
170171

171172
uint16_t namco_c148_device::vblank_irq_ack_r() { m_hostcpu->set_input_line(m_irqlevel.vblank, CLEAR_LINE); return 0; }
172173
uint16_t namco_c148_device::pos_irq_ack_r() { m_hostcpu->set_input_line(m_irqlevel.pos, CLEAR_LINE); return 0; }

src/mame/namco/namcos21.cpp

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -301,17 +301,19 @@ class namcos21_state : public driver_device
301301
m_maincpu(*this, "maincpu"),
302302
m_audiocpu(*this, "audiocpu"),
303303
m_slave(*this, "slave"),
304+
m_gpu(*this, "gpu"),
304305
m_c65(*this, "c65mcu"),
305306
m_sci(*this, "sci"),
306307
m_master_intc(*this, "master_intc"),
307308
m_slave_intc(*this, "slave_intc"),
309+
m_gpu_intc(*this, "gpu_intc"),
310+
m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
308311
m_c140(*this, "c140"),
309312
m_palette(*this, "palette"),
310313
m_screen(*this, "screen"),
311314
m_audiobank(*this, "audiobank"),
312315
m_c140_region(*this, "c140"),
313316
m_dpram(*this, "dpram"),
314-
m_gpu_intc(*this, "gpu_intc"),
315317
m_namcos21_3d(*this, "namcos21_3d"),
316318
m_namcos21_dsp(*this, "namcos21dsp")
317319
{ }
@@ -327,17 +329,19 @@ class namcos21_state : public driver_device
327329
required_device<cpu_device> m_maincpu;
328330
required_device<cpu_device> m_audiocpu;
329331
required_device<cpu_device> m_slave;
332+
required_device<cpu_device> m_gpu;
330333
required_device<namcoc65_device> m_c65;
331334
required_device<namco_c139_device> m_sci;
332335
required_device<namco_c148_device> m_master_intc;
333336
required_device<namco_c148_device> m_slave_intc;
337+
required_device<namco_c148_device> m_gpu_intc;
338+
memory_share_creator<uint8_t> m_nvram;
334339
required_device<c140_device> m_c140;
335340
required_device<palette_device> m_palette;
336341
required_device<screen_device> m_screen;
337342
required_memory_bank m_audiobank;
338343
required_region_ptr<u16> m_c140_region;
339344
required_shared_ptr<uint8_t> m_dpram;
340-
required_device<namco_c148_device> m_gpu_intc;
341345
required_device<namcos21_3d_device> m_namcos21_3d;
342346
required_device<namcos21_dsp_device> m_namcos21_dsp;
343347

@@ -359,17 +363,15 @@ class namcos21_state : public driver_device
359363
void gpu_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
360364
uint16_t gpu_videoram_r(offs_t offset);
361365

362-
void eeprom_w(offs_t offset, uint8_t data);
363-
uint8_t eeprom_r(offs_t offset);
366+
void nvram_w(offs_t offset, uint8_t data) { m_nvram[offset] = data; }
367+
uint8_t nvram_r(offs_t offset) { return m_nvram[offset]; }
364368

365369
void sound_bankselect_w(uint8_t data);
366370

367371
void sound_reset_w(uint8_t data);
368372
void system_reset_w(uint8_t data);
369373
void reset_all_subcpus(int state);
370374

371-
std::unique_ptr<uint8_t[]> m_eeprom;
372-
373375
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
374376

375377
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)
537539
{
538540
map(0x000000, 0x03ffff).rom();
539541
map(0x100000, 0x10ffff).ram(); // work RAM
540-
map(0x180000, 0x183fff).rw(FUNC(namcos21_state::eeprom_r), FUNC(namcos21_state::eeprom_w)).umask16(0x00ff);
542+
map(0x180000, 0x183fff).rw(FUNC(namcos21_state::nvram_r), FUNC(namcos21_state::nvram_w)).umask16(0x00ff);
541543
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
542544

543545
// DSP Related
@@ -735,16 +737,6 @@ void namcos21_state::reset_all_subcpus(int state)
735737
m_c65->ext_reset(state);
736738
}
737739

738-
void namcos21_state::eeprom_w(offs_t offset, uint8_t data)
739-
{
740-
m_eeprom[offset] = data;
741-
}
742-
743-
uint8_t namcos21_state::eeprom_r(offs_t offset)
744-
{
745-
return m_eeprom[offset];
746-
}
747-
748740
void namcos21_state::machine_reset()
749741
{
750742
// Initialise the bank select in the sound CPU
@@ -760,9 +752,6 @@ void namcos21_state::machine_reset()
760752

761753
void namcos21_state::machine_start()
762754
{
763-
m_eeprom = std::make_unique<uint8_t[]>(0x2000);
764-
subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
765-
766755
uint32_t max = memregion("audiocpu")->bytes() / 0x4000;
767756
for (int i = 0; i < 0x10; i++)
768757
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);
@@ -824,8 +813,8 @@ void namcos21_state::winrun(machine_config &config)
824813
NAMCOS21_DSP(config, m_namcos21_dsp, 0);
825814
m_namcos21_dsp->set_renderer_tag("namcos21_3d");
826815

827-
m68000_device &gpu(M68000(config, "gpu", 49.152_MHz_XTAL / 4)); // graphics coprocessor
828-
gpu.set_addrmap(AS_PROGRAM, &namcos21_state::gpu_map);
816+
M68000(config, m_gpu, 49.152_MHz_XTAL / 4); // graphics coprocessor
817+
m_gpu->set_addrmap(AS_PROGRAM, &namcos21_state::gpu_map);
829818

830819
NAMCO_C148(config, m_master_intc, 0, m_maincpu, true);
831820
m_master_intc->link_c148_device(m_slave_intc);
@@ -835,7 +824,7 @@ void namcos21_state::winrun(machine_config &config)
835824
NAMCO_C148(config, m_slave_intc, 0, m_slave, false);
836825
m_slave_intc->link_c148_device(m_master_intc);
837826

838-
NAMCO_C148(config, m_gpu_intc, 0, "gpu", false);
827+
NAMCO_C148(config, m_gpu_intc, 0, m_gpu, false);
839828
NAMCO_C139(config, m_sci, 0);
840829

841830
config.set_maximum_quantum(attotime::from_hz(6000)); // 100 CPU slices per frame

src/mame/namco/namcos21_c67.cpp

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ class namcos21_c67_state : public driver_device
307307
m_sci(*this, "sci"),
308308
m_master_intc(*this, "master_intc"),
309309
m_slave_intc(*this, "slave_intc"),
310+
m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
310311
m_c140(*this, "c140"),
311312
m_c355spr(*this, "c355spr"),
312313
m_palette(*this, "palette"),
@@ -338,6 +339,7 @@ class namcos21_c67_state : public driver_device
338339
required_device<namco_c139_device> m_sci;
339340
required_device<namco_c148_device> m_master_intc;
340341
required_device<namco_c148_device> m_slave_intc;
342+
memory_share_creator<u8> m_nvram;
341343
required_device<c140_device> m_c140;
342344
required_device<namco_c355spr_device> m_c355spr;
343345
required_device<palette_device> m_palette;
@@ -359,17 +361,15 @@ class namcos21_c67_state : public driver_device
359361
u8 dpram_byte_r(offs_t offset);
360362
void dpram_byte_w(offs_t offset, u8 data);
361363

362-
void eeprom_w(offs_t offset, u8 data);
363-
u8 eeprom_r(offs_t offset);
364+
void nvram_w(offs_t offset, u8 data) { m_nvram[offset] = data; }
365+
u8 nvram_r(offs_t offset) { return m_nvram[offset]; }
364366

365367
void sound_bankselect_w(u8 data);
366368

367369
void sound_reset_w(u8 data);
368370
void system_reset_w(u8 data);
369371
void reset_all_subcpus(int state);
370372

371-
std::unique_ptr<u8[]> m_eeprom;
372-
373373
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
374374

375375
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)
530530
common_map(map);
531531
map(0x000000, 0x0fffff).rom();
532532
map(0x100000, 0x10ffff).ram(); // private work RAM
533-
map(0x180000, 0x183fff).rw(FUNC(namcos21_c67_state::eeprom_r), FUNC(namcos21_c67_state::eeprom_w)).umask16(0x00ff);
533+
map(0x180000, 0x183fff).rw(FUNC(namcos21_c67_state::nvram_r), FUNC(namcos21_c67_state::nvram_w)).umask16(0x00ff);
534534
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
535535
map(0x200000, 0x20ffff).rw(m_namcos21_dsp_c67, FUNC(namcos21_dsp_c67_device::dspram16_r), FUNC(namcos21_dsp_c67_device::dspram16_w));
536536
}
@@ -772,16 +772,6 @@ void namcos21_c67_state::reset_all_subcpus(int state)
772772
m_namcos21_dsp_c67->reset_dsps(state);
773773
}
774774

775-
void namcos21_c67_state::eeprom_w(offs_t offset, u8 data)
776-
{
777-
m_eeprom[offset] = data;
778-
}
779-
780-
u8 namcos21_c67_state::eeprom_r(offs_t offset)
781-
{
782-
return m_eeprom[offset];
783-
}
784-
785775
void namcos21_c67_state::machine_reset()
786776
{
787777
// Initialise the bank select in the sound CPU
@@ -794,12 +784,8 @@ void namcos21_c67_state::machine_reset()
794784
}
795785

796786

797-
798787
void namcos21_c67_state::machine_start()
799788
{
800-
m_eeprom = std::make_unique<u8[]>(0x2000);
801-
subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
802-
803789
u32 max = memregion("audiocpu")->bytes() / 0x4000;
804790
for (int i = 0; i < 0x10; i++)
805791
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);

src/mame/namco/namcos21_de.cpp

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class namco_de_pcbstack_device : public device_t
7373
required_device<namco_c139_device> m_sci;
7474
required_device<namco_c148_device> m_master_intc;
7575
required_device<namco_c148_device> m_slave_intc;
76+
memory_share_creator<u8> m_nvram;
7677
required_device<c140_device> m_c140;
7778
required_device<namco_c355spr_device> m_c355spr;
7879
required_device<palette_device> m_palette;
@@ -93,17 +94,15 @@ class namco_de_pcbstack_device : public device_t
9394
u8 dpram_byte_r(offs_t offset);
9495
void dpram_byte_w(offs_t offset, u8 data);
9596

96-
void eeprom_w(offs_t offset, u8 data);
97-
u8 eeprom_r(offs_t offset);
97+
void nvram_w(offs_t offset, u8 data) { m_nvram[offset] = data; }
98+
u8 nvram_r(offs_t offset) { return m_nvram[offset]; }
9899

99100
void sound_bankselect_w(u8 data);
100101

101102
void sound_reset_w(u8 data);
102103
void system_reset_w(u8 data);
103104
void reset_all_subcpus(int state);
104105

105-
std::unique_ptr<u8[]> m_eeprom;
106-
107106
TIMER_DEVICE_CALLBACK_MEMBER(screen_scanline);
108107

109108
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
130129
m_sci(*this, "sci"),
131130
m_master_intc(*this, "master_intc"),
132131
m_slave_intc(*this, "slave_intc"),
132+
m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
133133
m_c140(*this, "c140"),
134134
m_c355spr(*this, "c355spr"),
135135
m_palette(*this, "palette"),
@@ -370,7 +370,7 @@ void namco_de_pcbstack_device::driveyes_master_map(address_map &map)
370370
driveyes_common_map(map);
371371
map(0x000000, 0x03ffff).rom();
372372
map(0x100000, 0x10ffff).ram(); // private work RAM
373-
map(0x180000, 0x183fff).rw(FUNC(namco_de_pcbstack_device::eeprom_r), FUNC(namco_de_pcbstack_device::eeprom_w)).umask16(0x00ff);
373+
map(0x180000, 0x183fff).rw(FUNC(namco_de_pcbstack_device::nvram_r), FUNC(namco_de_pcbstack_device::nvram_w)).umask16(0x00ff);
374374
map(0x1c0000, 0x1fffff).m(m_master_intc, FUNC(namco_c148_device::map));
375375

376376
// DSP related
@@ -420,16 +420,6 @@ void namco_de_pcbstack_device::reset_all_subcpus(int state)
420420
m_c68->ext_reset(state);
421421
}
422422

423-
void namco_de_pcbstack_device::eeprom_w(offs_t offset, u8 data)
424-
{
425-
m_eeprom[offset] = data;
426-
}
427-
428-
u8 namco_de_pcbstack_device::eeprom_r(offs_t offset)
429-
{
430-
return m_eeprom[offset];
431-
}
432-
433423

434424
TIMER_DEVICE_CALLBACK_MEMBER(namco_de_pcbstack_device::screen_scanline)
435425
{
@@ -445,9 +435,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(namco_de_pcbstack_device::screen_scanline)
445435

446436
void namco_de_pcbstack_device::device_start()
447437
{
448-
m_eeprom = std::make_unique<u8[]>(0x2000);
449-
subdevice<nvram_device>("nvram")->set_base(m_eeprom.get(), 0x2000);
450-
451438
u32 max = memregion("audiocpu")->bytes() / 0x4000;
452439
for (int i = 0; i < 0x10; i++)
453440
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (i % max) * 0x4000);

0 commit comments

Comments
 (0)