From 33ae3be81cda81b581142299ffd123421a872cf7 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 28 Dec 2020 18:48:14 +0100 Subject: [PATCH 1/9] gaelco_gae1_device: fix channels init, fixes random crashes and possibly audio issues in surf planet --- src/devices/sound/gaelco.cpp | 5 +++++ src/devices/sound/gaelco.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/devices/sound/gaelco.cpp b/src/devices/sound/gaelco.cpp index 7da4ab16f76..31d294ee948 100644 --- a/src/devices/sound/gaelco.cpp +++ b/src/devices/sound/gaelco.cpp @@ -265,6 +265,11 @@ void gaelco_gae1_device::device_start() wavraw = util::wav_open("gae1_snd.wav", rate, 2); } +void gaelco_gae1_device::device_reset() +{ + for (int ch = 0; ch < NUM_CHANNELS; ch++) + m_channel[ch].active = 0; +} void gaelco_gae1_device::device_stop() { diff --git a/src/devices/sound/gaelco.h b/src/devices/sound/gaelco.h index a598c64345d..76a77c0bb40 100644 --- a/src/devices/sound/gaelco.h +++ b/src/devices/sound/gaelco.h @@ -38,6 +38,7 @@ protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; virtual void device_stop() override; virtual void device_post_load() override; virtual void device_clock_changed() override; From 4832a94494d5304fb09a3ece9ab3fd5c050bc577 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 28 Dec 2020 19:00:35 +0100 Subject: [PATCH 2/9] storming: fix videoram oob access --- src/mame/video/lsasquad.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mame/video/lsasquad.cpp b/src/mame/video/lsasquad.cpp index d4e9a2b551e..5b3db462ba7 100644 --- a/src/mame/video/lsasquad.cpp +++ b/src/mame/video/lsasquad.cpp @@ -30,8 +30,8 @@ void lsasquad_state::draw_layer( bitmap_ind16 &bitmap, const rectangle &cliprect sy = 248 - sy; sy &= 0xff; - attr = m_videoram[base + 2 * y + 1]; - code = m_videoram[base + 2 * y] + ((attr & 0x0f) << 8); + attr = m_videoram[(base + 2 * y + 1) & 0x1fff]; + code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8); color = attr >> 4; m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, @@ -115,8 +115,8 @@ int lsasquad_state::draw_layer_daikaiju( bitmap_ind16 &bitmap, const rectangle & sy = 248 - sy; sy &= 0xff; - attr = m_videoram[base + 2 * y + 1]; - code = m_videoram[base + 2 * y] + ((attr & 0x0f) << 8); + attr = m_videoram[(base + 2 * y + 1) & 0x1fff]; + code = m_videoram[(base + 2 * y) & 0x1fff] + ((attr & 0x0f) << 8); color = attr >> 4; if ((type == 0 && color != 0x0d) || (type != 0 && color == 0x0d)) From e107ddf142f79e21f90dad6ab6c5b0722a2d6537 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 28 Dec 2020 19:35:44 +0100 Subject: [PATCH 3/9] tms57002: clear some forgotten registers --- src/devices/cpu/tms57002/tms57002.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/devices/cpu/tms57002/tms57002.cpp b/src/devices/cpu/tms57002/tms57002.cpp index da29f23fbcd..51c18781ef5 100644 --- a/src/devices/cpu/tms57002/tms57002.cpp +++ b/src/devices/cpu/tms57002/tms57002.cpp @@ -83,6 +83,9 @@ void tms57002_device::device_reset() id = 0; ba0 = 0; ba1 = 0; + sa = 0; + rptc = 0; + rptc_next = 0; update_counter_tail = 0; update_counter_head = 0; st0 &= ~(ST0_INCS | ST0_DIRI | ST0_FI | ST0_SIM | ST0_PLRI | From 1e4d229d987a105d2bdb3efdea6355d3a5cf9f10 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 28 Dec 2020 19:36:01 +0100 Subject: [PATCH 4/9] k053247: put the real memory size. Fixes the soccerss crashes, if not the memory test itself. --- src/mame/drivers/konamigx.cpp | 8 +++----- src/mame/video/k053246_k053247_k055673.cpp | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/konamigx.cpp b/src/mame/drivers/konamigx.cpp index b76d73a0ffa..8a5c7fbd5cd 100644 --- a/src/mame/drivers/konamigx.cpp +++ b/src/mame/drivers/konamigx.cpp @@ -1028,9 +1028,7 @@ void konamigx_state::gx_base_memmap(address_map &map) map(0x400000, 0x7fffff).rom(); // data ROM map(0xc00000, 0xc1ffff).ram().share("workram"); map(0xd00000, 0xd01fff).r(m_k056832, FUNC(k056832_device::k_5bpp_rom_long_r)); - map(0xd20000, 0xd20fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); - map(0xd21000, 0xd21fff).ram(); // second bank of sprite RAM, accessed thru ESC - map(0xd22000, 0xd23fff).ram(); // extra bank checked at least by sexyparo, pending further investigation. + map(0xd20000, 0xd23fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); map(0xd40000, 0xd4003f).w(m_k056832, FUNC(k056832_device::word_w)); map(0xd44000, 0xd4400f).w(FUNC(konamigx_state::konamigx_tilebank_w)); map(0xd48000, 0xd48007).w(m_k055673, FUNC(k055673_device::k053246_w)); @@ -1085,7 +1083,7 @@ void konamigx_state::gx_type2_map(address_map &map) void konamigx_state::gx_type3_map(address_map &map) { gx_base_memmap(map); - map(0xd20000, 0xd21fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); + map(0xd20000, 0xd23fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); map(0xd90000, 0xd97fff).ram(); //map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); @@ -1102,7 +1100,7 @@ void konamigx_state::gx_type4_map(address_map &map) { gx_base_memmap(map); map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); - map(0xd20000, 0xd21fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); + map(0xd20000, 0xd23fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); map(0xd90000, 0xd97fff).ram(); map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); map(0xe20000, 0xe20003).nopw(); diff --git a/src/mame/video/k053246_k053247_k055673.cpp b/src/mame/video/k053246_k053247_k055673.cpp index 389c6de42a2..f54f0cd8e5b 100644 --- a/src/mame/video/k053246_k053247_k055673.cpp +++ b/src/mame/video/k053246_k053247_k055673.cpp @@ -1026,13 +1026,13 @@ void k055673_device::device_start() m_z_rejection = -1; m_gfx = gfx(gfx_index); m_objcha_line = CLEAR_LINE; - m_ram = std::make_unique(0x1000/2); + m_ram = std::make_unique(0x4000/2); - memset(m_ram.get(), 0, 0x1000); + memset(m_ram.get(), 0, 0x4000); std::fill(std::begin(m_kx46_regs), std::end(m_kx46_regs), 0); std::fill(std::begin(m_kx47_regs), std::end(m_kx47_regs), 0); - save_pointer(NAME(m_ram), 0x800); + save_pointer(NAME(m_ram), 0x2000); save_item(NAME(m_kx46_regs)); save_item(NAME(m_kx47_regs)); save_item(NAME(m_objcha_line)); From 819888565dcf035b9ea070ec88672e139c5cdc0f Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 28 Dec 2020 20:09:36 +0100 Subject: [PATCH 5/9] konamigx: missing part of the patch --- src/mame/drivers/konamigx.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mame/drivers/konamigx.cpp b/src/mame/drivers/konamigx.cpp index 8a5c7fbd5cd..bf432147a74 100644 --- a/src/mame/drivers/konamigx.cpp +++ b/src/mame/drivers/konamigx.cpp @@ -1083,7 +1083,6 @@ void konamigx_state::gx_type2_map(address_map &map) void konamigx_state::gx_type3_map(address_map &map) { gx_base_memmap(map); - map(0xd20000, 0xd23fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); map(0xd90000, 0xd97fff).ram(); //map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); @@ -1100,7 +1099,6 @@ void konamigx_state::gx_type4_map(address_map &map) { gx_base_memmap(map); map(0xcc0000, 0xcc0007).w(FUNC(konamigx_state::type4_prot_w)); - map(0xd20000, 0xd23fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); map(0xd90000, 0xd97fff).ram(); map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); map(0xe20000, 0xe20003).nopw(); From 8bc60a4880d0e1408c35b7357be5efef83935d37 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 28 Dec 2020 13:53:36 -0500 Subject: [PATCH 6/9] hitpoker.cpp: Fix mistake in allocation size --- src/mame/drivers/hitpoker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/hitpoker.cpp b/src/mame/drivers/hitpoker.cpp index bc22a8888b7..ddab3fe1dec 100644 --- a/src/mame/drivers/hitpoker.cpp +++ b/src/mame/drivers/hitpoker.cpp @@ -100,7 +100,7 @@ private: void hitpoker_state::video_start() { - m_videoram = std::make_unique(0x35ff); + m_videoram = std::make_unique(0x3600); m_paletteram = std::make_unique(0x1000); m_colorram = std::make_unique(0x2000); } From 5bfe80fe66bdb6bfc458e4e8204f07d6f327b005 Mon Sep 17 00:00:00 2001 From: arbee Date: Mon, 28 Dec 2020 14:36:13 -0500 Subject: [PATCH 7/9] Temporary hack so most DRC games work on the M1/Apple Silicon. [R. Belmont, balr0g, Vas Crabb] --- src/osd/modules/lib/osdlib_macosx.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/modules/lib/osdlib_macosx.cpp b/src/osd/modules/lib/osdlib_macosx.cpp index 6f7f5f4c3e6..c1f0520fa9b 100644 --- a/src/osd/modules/lib/osdlib_macosx.cpp +++ b/src/osd/modules/lib/osdlib_macosx.cpp @@ -66,7 +66,12 @@ void osd_process_kill() void *osd_alloc_executable(size_t size) { #if defined(SDLMAME_BSD) || defined(SDLMAME_MACOSX) + #ifdef __aarch64__ + // $$$$HACK! This assumes no DRC on Apple Silicon; making that work will be much more involved. + return (void *)mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0); + #else return (void *)mmap(0, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0); + #endif #elif defined(SDLMAME_UNIX) return (void *)mmap(0, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, 0, 0); #endif From c2b96ba7c7b0c2225c55d568e87cdf3151c1a54f Mon Sep 17 00:00:00 2001 From: arbee Date: Mon, 28 Dec 2020 20:44:43 -0500 Subject: [PATCH 8/9] ncr5380n: fix MAME lockup introduced in the previous change [R. Belmont] --- src/devices/machine/ncr5380n.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/machine/ncr5380n.cpp b/src/devices/machine/ncr5380n.cpp index 3f107db84cd..926970b7e3e 100644 --- a/src/devices/machine/ncr5380n.cpp +++ b/src/devices/machine/ncr5380n.cpp @@ -525,6 +525,7 @@ int ncr5380n_device::state_step() scsi_bus->ctrl_w(scsi_refid, S_ACK, S_ACK); } } + delay = 5; break; case DMA_OUT_ACK: if (!(ctrl & S_REQ)) From f429695d4f007c1670d5920c91690fc09ea186f6 Mon Sep 17 00:00:00 2001 From: DavidHaywood <28625134+DavidHaywood@users.noreply.github.com> Date: Tue, 29 Dec 2020 13:09:15 +0000 Subject: [PATCH 9/9] rebalance sound after ymz280b change --- src/mame/drivers/firebeat.cpp | 8 ++++---- src/mame/drivers/gunpey.cpp | 4 ++-- src/mame/drivers/konamim2.cpp | 4 ++-- src/mame/drivers/realbrk.cpp | 4 ++-- src/mame/drivers/tecmosys.cpp | 12 ++++++------ src/mame/drivers/vgmplay.cpp | 8 ++++---- src/mame/drivers/zn.cpp | 16 ++++++++++------ src/mame/includes/zn.h | 2 ++ 8 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/firebeat.cpp b/src/mame/drivers/firebeat.cpp index 8eae995e066..6cd311428d3 100644 --- a/src/mame/drivers/firebeat.cpp +++ b/src/mame/drivers/firebeat.cpp @@ -1069,8 +1069,8 @@ WRITE_LINE_MEMBER( firebeat_state::ata_interrupt ) void firebeat_state::cdrom_config(device_t *device) { - device->subdevice("cdda")->add_route(0, "^^lspeaker", 1.0); - device->subdevice("cdda")->add_route(1, "^^rspeaker", 1.0); + device->subdevice("cdda")->add_route(0, "^^lspeaker", 0.5); + device->subdevice("cdda")->add_route(1, "^^rspeaker", 0.5); device = device->subdevice("cdda"); } @@ -1212,8 +1212,8 @@ void firebeat_state::firebeat_spu(machine_config &config) TIMER(config, "sputimer").configure_periodic(FUNC(firebeat_state::spu_timer_callback), attotime::from_hz(1000)); rf5c400_device &rf5c400(RF5C400(config, "rf5c400", XTAL(16'934'400))); - rf5c400.add_route(0, "lspeaker", 1.0); - rf5c400.add_route(1, "rspeaker", 1.0); + rf5c400.add_route(0, "lspeaker", 0.5); + rf5c400.add_route(1, "rspeaker", 0.5); ATA_INTERFACE(config, m_spuata).options(firebeat_ata_devices, "cdrom", nullptr, true); m_spuata->irq_handler().set(FUNC(firebeat_state::spu_ata_interrupt)); diff --git a/src/mame/drivers/gunpey.cpp b/src/mame/drivers/gunpey.cpp index 46890dff81e..b28aabf3e36 100644 --- a/src/mame/drivers/gunpey.cpp +++ b/src/mame/drivers/gunpey.cpp @@ -1218,8 +1218,8 @@ void gunpey_state::gunpey(machine_config &config) SPEAKER(config, "rspeaker").front_right(); OKIM6295(config, m_oki, XTAL(16'934'400) / 8, okim6295_device::PIN7_LOW); - m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.25); - m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.25); + m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.125); + m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.125); ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400))); ymz.add_route(0, "lspeaker", 0.25); diff --git a/src/mame/drivers/konamim2.cpp b/src/mame/drivers/konamim2.cpp index 2ee90e0832a..6d5e97aa30a 100644 --- a/src/mame/drivers/konamim2.cpp +++ b/src/mame/drivers/konamim2.cpp @@ -1106,8 +1106,8 @@ INPUT_PORTS_END void konamim2_state::cr589_config(device_t *device) { - device->subdevice("cdda")->add_route(0, ":lspeaker", 1.0); - device->subdevice("cdda")->add_route(1, ":rspeaker", 1.0); + device->subdevice("cdda")->add_route(0, ":lspeaker", 0.5); + device->subdevice("cdda")->add_route(1, ":rspeaker", 0.5); device = device->subdevice("cdda"); } diff --git a/src/mame/drivers/realbrk.cpp b/src/mame/drivers/realbrk.cpp index 0179940110c..27320615147 100644 --- a/src/mame/drivers/realbrk.cpp +++ b/src/mame/drivers/realbrk.cpp @@ -795,8 +795,8 @@ void realbrk_state::realbrk(machine_config &config) ymz.add_route(1, "rspeaker", 0.50); ym2413_device &ymsnd(YM2413(config, "ymsnd", XTAL(3'579'545))); - ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.50); - ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.50); + ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.25); + ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.25); } void realbrk_state::pkgnsh(machine_config &config) diff --git a/src/mame/drivers/tecmosys.cpp b/src/mame/drivers/tecmosys.cpp index 58442dc95d2..5c7498e532c 100644 --- a/src/mame/drivers/tecmosys.cpp +++ b/src/mame/drivers/tecmosys.cpp @@ -480,14 +480,14 @@ void tecmosys_state::tecmosys(machine_config &config) ymf262_device &ymf(YMF262(config, "ymf", XTAL(14'318'181))); ymf.irq_handler().set_inputline("audiocpu", 0); - ymf.add_route(0, "lspeaker", 1.00); - ymf.add_route(1, "rspeaker", 1.00); - ymf.add_route(2, "lspeaker", 1.00); - ymf.add_route(3, "rspeaker", 1.00); + ymf.add_route(0, "lspeaker", 0.50); + ymf.add_route(1, "rspeaker", 0.50); + ymf.add_route(2, "lspeaker", 0.50); + ymf.add_route(3, "rspeaker", 0.50); okim6295_device &oki(OKIM6295(config, "oki", XTAL(16'000'000)/8, okim6295_device::PIN7_HIGH)); - oki.add_route(ALL_OUTPUTS, "lspeaker", 0.50); - oki.add_route(ALL_OUTPUTS, "rspeaker", 0.50); + oki.add_route(ALL_OUTPUTS, "lspeaker", 0.25); + oki.add_route(ALL_OUTPUTS, "rspeaker", 0.25); oki.set_addrmap(0, &tecmosys_state::oki_map); ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400))); diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 7ab2ecf66ca..137ae602237 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -3751,13 +3751,13 @@ void vgmplay_state::vgmplay(machine_config &config) // TODO: prevent error.log spew YMZ280B(config, m_ymz280b[0], 0); m_ymz280b[0]->set_addrmap(0, &vgmplay_state::ymz280b_map<0>); - m_ymz280b[0]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ymz280b[0]->add_route(1, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ymz280b[0]->add_route(0, m_mixer, 0.50, AUTO_ALLOC_INPUT, 0); + m_ymz280b[0]->add_route(1, m_mixer, 0.50, AUTO_ALLOC_INPUT, 1); YMZ280B(config, m_ymz280b[1], 0); m_ymz280b[1]->set_addrmap(0, &vgmplay_state::ymz280b_map<1>); - m_ymz280b[1]->add_route(0, m_mixer, 0.25, AUTO_ALLOC_INPUT, 0); - m_ymz280b[1]->add_route(1, m_mixer, 0.25, AUTO_ALLOC_INPUT, 1); + m_ymz280b[1]->add_route(0, m_mixer, 0.50, AUTO_ALLOC_INPUT, 0); + m_ymz280b[1]->add_route(1, m_mixer, 0.50, AUTO_ALLOC_INPUT, 1); RF5C164(config, m_rf5c164, 0); m_rf5c164->set_addrmap(0, &vgmplay_state::rf5c164_map<0>); diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp index 1ce0084ef7e..0614db68fe1 100644 --- a/src/mame/drivers/zn.cpp +++ b/src/mame/drivers/zn.cpp @@ -187,9 +187,9 @@ void zn_state::zn_1mb_vram(machine_config &config) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - spu_device &spu(SPU(config, "spu", XTAL(67'737'600)/2, subdevice("maincpu"))); - spu.add_route(0, "lspeaker", 0.35); - spu.add_route(1, "rspeaker", 0.35); + SPU(config, m_spu, XTAL(67'737'600)/2, subdevice("maincpu")); + m_spu->add_route(0, "lspeaker", 0.35); + m_spu->add_route(1, "rspeaker", 0.35); AT28C16(config, "at28c16", 0); } @@ -232,9 +232,9 @@ void zn_state::zn2(machine_config &config) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - spu_device &spu(SPU(config, "spu", XTAL(67'737'600)/2, subdevice("maincpu"))); - spu.add_route(0, "lspeaker", 0.35); - spu.add_route(1, "rspeaker", 0.35); + SPU(config, m_spu, XTAL(67'737'600)/2, subdevice("maincpu")); + m_spu->add_route(0, "lspeaker", 0.35); + m_spu->add_route(1, "rspeaker", 0.35); AT28C16(config, "at28c16", 0); } @@ -2149,6 +2149,10 @@ void atlus_zn_state::coh1001l(machine_config &config) GENERIC_LATCH_16(config, m_soundlatch16); m_soundlatch16->data_pending_callback().set_inputline(m_audiocpu, 3); + m_spu->reset_routes(); + m_spu->add_route(0, "lspeaker", 0.175); + m_spu->add_route(1, "rspeaker", 0.175); + ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400))); ymz.irq_handler().set_inputline(m_audiocpu, 2); ymz.add_route(0, "lspeaker", 0.35); diff --git a/src/mame/includes/zn.h b/src/mame/includes/zn.h index 633a6f7538e..3b164e7f7cd 100644 --- a/src/mame/includes/zn.h +++ b/src/mame/includes/zn.h @@ -51,6 +51,7 @@ public: m_cat702(*this, "cat702_%u", 1), m_znmcu(*this, "znmcu"), m_maincpu(*this, "maincpu"), + m_spu(*this, "spu"), m_ram(*this, "maincpu:ram"), m_znmcu_dataout(1) { @@ -88,6 +89,7 @@ protected: required_device_array m_cat702; required_device m_znmcu; required_device m_maincpu; + required_device m_spu; required_device m_ram; int m_cat702_dataout[2];