summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2021-09-09 04:12:45 +1000
committer Vas Crabb <vas@vastheman.com>2021-09-09 04:12:45 +1000
commit693764eb9c6848ba5f5ba1bd57bbf25d972085f8 (patch)
treef2a63fc10494058bc54b8b7b3f4b6b70b14ddc7e /src/mame/drivers
parente7528a445bb0c0d8594f79c5aceabd26077001a5 (diff)
Miscellaneous cleanup.
cchasm.cpp: Combined source files, added I/O port finder, reduced audio levels to avoid hitting the limiter. redalert.cpp: Converted sound boards to devices and removed a couple of trampolines, making the driver state class considerably tidier. bus/amiga/keyboard, bus/sunkbd: Put a bunch of implementation classes in anonymous namespaces, getting implementation details out of headers and out of the global namespace.
Diffstat (limited to 'src/mame/drivers')
-rw-r--r--src/mame/drivers/cchasm.cpp350
-rw-r--r--src/mame/drivers/redalert.cpp52
2 files changed, 365 insertions, 37 deletions
diff --git a/src/mame/drivers/cchasm.cpp b/src/mame/drivers/cchasm.cpp
index 48f8214a692..e40fa754d2e 100644
--- a/src/mame/drivers/cchasm.cpp
+++ b/src/mame/drivers/cchasm.cpp
@@ -15,17 +15,102 @@
***************************************************************************/
#include "emu.h"
-#include "includes/cchasm.h"
-#include "machine/z80daisy.h"
#include "cpu/m68000/m68000.h"
+#include "cpu/z80/z80.h"
#include "machine/6840ptm.h"
-#include "machine/z80ctc.h"
+#include "machine/gen_latch.h"
#include "machine/watchdog.h"
+#include "machine/z80ctc.h"
+#include "machine/z80ctc.h"
+#include "machine/z80daisy.h"
#include "sound/ay8910.h"
+#include "sound/dac.h"
+#include "video/vector.h"
+
+#include "screen.h"
#include "speaker.h"
-#define CCHASM_68K_CLOCK (XTAL(8'000'000))
+
+namespace {
+
+class cchasm_state : public driver_device
+{
+public:
+ cchasm_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_ctc(*this, "ctc"),
+ m_audiocpu(*this, "audiocpu"),
+ m_dac1(*this, "dac1"),
+ m_dac2(*this, "dac2"),
+ m_vector(*this, "vector"),
+ m_screen(*this, "screen"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundlatch2(*this, "soundlatch2"),
+ m_soundlatch3(*this, "soundlatch3"),
+ m_soundlatch4(*this, "soundlatch4"),
+ m_ram(*this, "ram"),
+ m_inputs(*this, "IN%u", 1U)
+ {
+ }
+
+ void cchasm(machine_config &config);
+
+ INPUT_CHANGED_MEMBER(set_coin_flag);
+
+protected:
+ enum
+ {
+ TIMER_REFRESH_END
+ };
+
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ virtual void machine_start() override;
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<z80ctc_device> m_ctc;
+ required_device<z80_device> m_audiocpu;
+ required_device<dac_bit_interface> m_dac1;
+ required_device<dac_bit_interface> m_dac2;
+ required_device<vector_device> m_vector;
+ required_device<screen_device> m_screen;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<generic_latch_8_device> m_soundlatch2;
+ required_device<generic_latch_8_device> m_soundlatch3;
+ required_device<generic_latch_8_device> m_soundlatch4;
+
+ required_shared_ptr<uint16_t> m_ram;
+
+ required_ioport_array<3> m_inputs;
+
+ int m_sound_flags;
+ int m_coin_flag;
+ int m_output[2];
+ int m_xcenter;
+ int m_ycenter;
+ emu_timer *m_refresh_end_timer;
+
+ void led_w(offs_t offset, uint16_t data);
+ void refresh_control_w(offs_t offset, uint8_t data);
+ void reset_coin_flag_w(uint8_t data);
+ uint8_t coin_sound_r();
+ uint8_t soundlatch2_r();
+ void soundlatch4_w(uint8_t data);
+ void io_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ uint16_t io_r(offs_t offset);
+ DECLARE_WRITE_LINE_MEMBER(ctc_timer_1_w);
+ DECLARE_WRITE_LINE_MEMBER(ctc_timer_2_w);
+
+ void refresh();
+
+ void memmap(address_map &map);
+ void sound_memmap(address_map &map);
+ void sound_portmap(address_map &map);
+};
+
/*************************************
*
@@ -37,11 +122,11 @@ void cchasm_state::memmap(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x040000, 0x04000f).rw("6840ptm", FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff);
- map(0x050000, 0x050001).w(FUNC(cchasm_state::refresh_control_w));
+ map(0x050000, 0x050000).w(FUNC(cchasm_state::refresh_control_w));
map(0x060000, 0x060001).portr("DSW").w(FUNC(cchasm_state::led_w));
map(0x070000, 0x070001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0xf80000, 0xf800ff).rw(FUNC(cchasm_state::io_r), FUNC(cchasm_state::io_w));
- map(0xffb000, 0xffffff).ram().share("ram");
+ map(0xffb000, 0xffffff).ram().share(m_ram);
}
/*************************************
@@ -125,6 +210,248 @@ static INPUT_PORTS_START( cchasm )
INPUT_PORTS_END
+
+void cchasm_state::led_w(offs_t offset, uint16_t data)
+{
+ /*logerror("LED write %x to %x\n", data, offset);*/
+}
+
+
+void cchasm_state::reset_coin_flag_w(uint8_t data)
+{
+ if (m_coin_flag)
+ {
+ m_coin_flag = 0;
+ m_ctc->trg0(m_coin_flag);
+ }
+}
+
+INPUT_CHANGED_MEMBER(cchasm_state::set_coin_flag )
+{
+ if (!newval && !m_coin_flag)
+ {
+ m_coin_flag = 1;
+ m_ctc->trg0(m_coin_flag);
+ }
+}
+
+uint8_t cchasm_state::coin_sound_r()
+{
+ uint8_t coin = (m_inputs[2]->read() >> 4) & 0x7;
+ return m_sound_flags | (m_coin_flag << 3) | coin;
+}
+
+uint8_t cchasm_state::soundlatch2_r()
+{
+ m_sound_flags &= ~0x80;
+ m_ctc->trg2(0);
+ return m_soundlatch2->read();
+}
+
+void cchasm_state::soundlatch4_w(uint8_t data)
+{
+ m_sound_flags |= 0x40;
+ m_soundlatch4->write(data);
+ m_maincpu->set_input_line(1, HOLD_LINE);
+}
+
+void cchasm_state::io_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ //static int led;
+
+ if (ACCESSING_BITS_8_15)
+ {
+ data >>= 8;
+ switch (offset & 0xf)
+ {
+ case 0:
+ m_soundlatch->write(data);
+ break;
+ case 1:
+ m_sound_flags |= 0x80;
+ m_soundlatch2->write(data);
+ m_ctc->trg2(1);
+ m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
+ break;
+ case 2:
+ //led = data;
+ break;
+ }
+ }
+}
+
+uint16_t cchasm_state::io_r(offs_t offset)
+{
+ switch (offset & 0xf)
+ {
+ case 0x0:
+ return m_soundlatch3->read() << 8;
+ case 0x1:
+ m_sound_flags &= ~0x40;
+ return m_soundlatch4->read() << 8;
+ case 0x2:
+ return (m_sound_flags| (ioport("IN3")->read() & 0x07) | 0x08) << 8;
+ case 0x5:
+ return m_inputs[1]->read() << 8;
+ case 0x8:
+ return m_inputs[0]->read() << 8;
+ default:
+ return 0xff << 8;
+ }
+}
+
+
+WRITE_LINE_MEMBER(cchasm_state::ctc_timer_1_w)
+{
+ if (state) /* rising edge */
+ {
+ m_output[0] = !m_output[0];
+ m_dac1->write(m_output[0]);
+ }
+}
+
+WRITE_LINE_MEMBER(cchasm_state::ctc_timer_2_w)
+{
+ if (state) /* rising edge */
+ {
+ m_output[1] = !m_output[1];
+ m_dac2->write(m_output[1]);
+ }
+}
+
+
+void cchasm_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_REFRESH_END:
+ m_maincpu->set_input_line(2, ASSERT_LINE);
+ break;
+ default:
+ throw emu_fatalerror("Unknown id in cchasm_state::device_timer");
+ }
+}
+
+
+void cchasm_state::refresh()
+{
+ constexpr int HALT = 0;
+ constexpr int JUMP = 1;
+ constexpr int COLOR = 2;
+ constexpr int SCALEY = 3;
+ constexpr int POSY = 4;
+ constexpr int SCALEX = 5;
+ constexpr int POSX = 6;
+ constexpr int LENGTH = 7;
+
+ int pc = 0;
+ int done = 0;
+ int currentx = 0, currenty = 0;
+ int scalex = 0, scaley = 0;
+ int color = 0;
+ int total_length = 1; /* length of all lines drawn in a frame */
+ int move = 0;
+
+ m_vector->clear_list();
+
+ while (!done)
+ {
+ int data = m_ram[pc];
+ const int opcode = data >> 12;
+ data &= 0xfff;
+ if ((opcode > COLOR) && (data & 0x800))
+ data |= 0xfffff000;
+
+ pc++;
+
+ switch (opcode)
+ {
+ case HALT:
+ done=1;
+ break;
+ case JUMP:
+ pc = data - 0xb00;
+ logerror("JUMP to %x\n", data);
+ break;
+ case COLOR:
+ color = vector_device::color444(data ^ 0xfff);
+ break;
+ case SCALEY:
+ scaley = data << 5;
+ break;
+ case POSY:
+ move = 1;
+ currenty = m_ycenter + (data << 16);
+ break;
+ case SCALEX:
+ scalex = data << 5;
+ break;
+ case POSX:
+ move = 1;
+ currentx = m_xcenter - (data << 16);
+ break;
+ case LENGTH:
+ if (move)
+ {
+ m_vector->add_point (currentx, currenty, 0, 0);
+ move = 0;
+ }
+
+ currentx -= data * scalex;
+ currenty += data * scaley;
+
+ total_length += abs(data);
+
+ if (color)
+ m_vector->add_point (currentx, currenty, color, 0xff);
+ else
+ move = 1;
+ break;
+ default:
+ logerror("Unknown refresh proc opcode %x with data %x at pc = %x\n", opcode, data, pc-2);
+ done = 1;
+ break;
+ }
+ }
+ /* Refresh processor runs with 6 MHz */
+ m_refresh_end_timer->adjust(attotime::from_hz(6000000) * total_length);
+}
+
+
+void cchasm_state::refresh_control_w(offs_t offset, uint8_t data)
+{
+ switch (data)
+ {
+ case 0x37:
+ refresh();
+ break;
+ case 0xf7:
+ m_maincpu->set_input_line(2, CLEAR_LINE);
+ break;
+ }
+}
+
+void cchasm_state::machine_start()
+{
+ const rectangle &visarea = m_screen->visible_area();
+
+ m_xcenter = visarea.xcenter() << 16;
+ m_ycenter = visarea.ycenter() << 16;
+
+ m_refresh_end_timer = timer_alloc(TIMER_REFRESH_END);
+
+ m_coin_flag = 0;
+ m_sound_flags = 0;
+ m_output[0] = 0;
+ m_output[1] = 0;
+
+ save_item(NAME(m_sound_flags));
+ save_item(NAME(m_coin_flag));
+ save_item(NAME(m_output));
+}
+
+
+
/*************************************
*
* CPU config
@@ -147,6 +474,8 @@ static const z80_daisy_config daisy_chain[] =
void cchasm_state::cchasm(machine_config &config)
{
+ constexpr XTAL CCHASM_68K_CLOCK(8'000'000);
+
/* basic machine hardware */
M68000(config, m_maincpu, CCHASM_68K_CLOCK); /* 8 MHz (from schematics) */
m_maincpu->set_addrmap(AS_PROGRAM, &cchasm_state::memmap);
@@ -179,12 +508,12 @@ void cchasm_state::cchasm(machine_config &config)
GENERIC_LATCH_8(config, m_soundlatch3);
GENERIC_LATCH_8(config, m_soundlatch4);
- AY8910(config, "ay1", 1818182).add_route(ALL_OUTPUTS, "speaker", 0.2);
+ AY8910(config, "ay1", 1818182).add_route(ALL_OUTPUTS, "speaker", 0.15);
- AY8910(config, "ay2", 1818182).add_route(ALL_OUTPUTS, "speaker", 0.2);
+ AY8910(config, "ay2", 1818182).add_route(ALL_OUTPUTS, "speaker", 0.15);
- DAC_1BIT(config, m_dac1, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
- DAC_1BIT(config, m_dac2, 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
+ DAC_1BIT(config, m_dac1, 0).add_route(ALL_OUTPUTS, "speaker", 0.375);
+ DAC_1BIT(config, m_dac2, 0).add_route(ALL_OUTPUTS, "speaker", 0.375);
/* 6840 PTM */
ptm6840_device &ptm(PTM6840(config, "6840ptm", CCHASM_68K_CLOCK/10));
@@ -250,6 +579,7 @@ ROM_START( cchasm1 )
ROM_LOAD( "2732.bin", 0x0000, 0x1000, CRC(715adc4a) SHA1(426be4f3334ef7f2e8eb4d533e64276c30812aa3) )
ROM_END
+} // anonymous namespace
diff --git a/src/mame/drivers/redalert.cpp b/src/mame/drivers/redalert.cpp
index 01771bcae83..249d7cb7427 100644
--- a/src/mame/drivers/redalert.cpp
+++ b/src/mame/drivers/redalert.cpp
@@ -113,8 +113,10 @@
****************************************************************************/
#include "emu.h"
-#include "cpu/m6502/m6502.h"
#include "includes/redalert.h"
+#include "audio/redalert.h"
+
+#include "cpu/m6502/m6502.h"
#define MAIN_PCB_CLOCK (XTAL(12'500'000))
@@ -180,10 +182,10 @@ void redalert_state::redalert_main_map(address_map &map)
map(0xc000, 0xc000).mirror(0x0f8f).portr("DSW").nopw();
map(0xc010, 0xc010).mirror(0x0f8f).portr("KEY1").nopw();
map(0xc020, 0xc020).mirror(0x0f8f).portr("KEY2").nopw();
- map(0xc030, 0xc030).mirror(0x0f8f).nopr().w(FUNC(redalert_state::redalert_audio_command_w));
+ map(0xc030, 0xc030).mirror(0x0f8f).nopr().w("soundboard", FUNC(irem_m37b_ue17b_audio_device::audio_command_w));
map(0xc040, 0xc040).mirror(0x0f8f).nopr().writeonly().share("video_control");
map(0xc050, 0xc050).mirror(0x0f8f).nopr().writeonly().share("bitmap_color");
- map(0xc060, 0xc060).mirror(0x0f8f).nopr().w(FUNC(redalert_state::redalert_voice_command_w));
+ map(0xc060, 0xc060).mirror(0x0f8f).nopr().w("soundboard", FUNC(irem_m37b_ue17b_audio_device::voice_command_w));
map(0xc070, 0xc070).mirror(0x0f8f).rw(FUNC(redalert_state::redalert_interrupt_clear_r), FUNC(redalert_state::redalert_interrupt_clear_w));
map(0xf000, 0xffff).rom().region("maincpu", 0x8000);
}
@@ -197,7 +199,7 @@ void redalert_state::ww3_main_map(address_map &map)
map(0xc000, 0xc000).mirror(0x0f8f).portr("DSW").nopw();
map(0xc010, 0xc010).mirror(0x0f8f).portr("KEY1").nopw();
map(0xc020, 0xc020).mirror(0x0f8f).portr("KEY2").nopw();
- map(0xc030, 0xc030).mirror(0x0f8f).nopr().w(FUNC(redalert_state::redalert_audio_command_w));
+ map(0xc030, 0xc030).mirror(0x0f8f).nopr().w("soundboard", FUNC(irem_m37b_ue17b_audio_device::audio_command_w));
map(0xc040, 0xc040).mirror(0x0f8f).nopr().writeonly().share("video_control");
map(0xc050, 0xc050).mirror(0x0f8f).nopr().writeonly().share("bitmap_color");
map(0xc070, 0xc070).mirror(0x0f8f).rw(FUNC(redalert_state::redalert_interrupt_clear_r), FUNC(redalert_state::redalert_interrupt_clear_w));
@@ -213,7 +215,7 @@ void redalert_state::panther_main_map(address_map &map)
map(0xc000, 0xc000).mirror(0x0f8f).portr("DSW").nopw();
map(0xc010, 0xc010).mirror(0x0f8f).portr("KEY1").nopw();
map(0xc020, 0xc020).mirror(0x0f8f).portr("KEY2").nopw();
- map(0xc030, 0xc030).mirror(0x0f8f).nopr().w(FUNC(redalert_state::redalert_audio_command_w));
+ map(0xc030, 0xc030).mirror(0x0f8f).nopr().w("soundboard", FUNC(panther_audio_device::audio_command_w));
map(0xc040, 0xc040).mirror(0x0f8f).nopr().writeonly().share("video_control");
map(0xc050, 0xc050).mirror(0x0f8f).nopr().writeonly().share("bitmap_color");
map(0xc070, 0xc070).mirror(0x0f8f).rw(FUNC(redalert_state::panther_interrupt_clear_r), FUNC(redalert_state::redalert_interrupt_clear_w));
@@ -229,7 +231,7 @@ void redalert_state::demoneye_main_map(address_map &map)
map(0xc000, 0xc000).mirror(0x0f8f).portr("DSW").nopw();
map(0xc010, 0xc010).mirror(0x0f8f).portr("KEY1").nopw();
map(0xc020, 0xc020).mirror(0x0f8f).portr("KEY2").nopw();
- map(0xc030, 0xc030).mirror(0x0f8f).nopr().w(FUNC(redalert_state::demoneye_audio_command_w));
+ map(0xc030, 0xc030).mirror(0x0f8f).nopr().w("soundboard", FUNC(demoneye_audio_device::audio_command_w));
map(0xc040, 0xc040).mirror(0x0f8f).nopr().writeonly().share("video_control");
map(0xc050, 0xc050).mirror(0x0f8f).nopr().writeonly().share("bitmap_color");
map(0xc060, 0xc063).mirror(0x0f80).w(FUNC(redalert_state::demoneye_bitmap_layer_w));
@@ -251,13 +253,6 @@ INPUT_CHANGED_MEMBER(redalert_state::coin_inserted)
m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
}
-CUSTOM_INPUT_MEMBER(redalert_state::sound_status_r)
-{
- // communication handshake between host and sound CPU
- // at least Panther uses it, unconfirmed for Red Alert and Demoneye-X
- return m_sound_hs;
-}
-
static INPUT_PORTS_START( m27_base )
// port names comes from Panther input test
PORT_START("COIN")
@@ -278,7 +273,7 @@ static INPUT_PORTS_START( m27_base )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Meter */
PORT_START("KEY2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(redalert_state, sound_status_r)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_DEVICE_MEMBER("soundboard", irem_m37b_audio_device, sound_status_r)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Meter */
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
// TODO: 2-way/4-way ...?
@@ -358,6 +353,9 @@ INPUT_PORTS_END
static INPUT_PORTS_START( demoneye )
PORT_INCLUDE( m27_base )
+ PORT_MODIFY("KEY2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // audio status for panther
+
PORT_START("DSW")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x00, "3" )
@@ -402,7 +400,7 @@ void redalert_state::redalert(machine_config &config)
redalert_video(config);
/* audio hardware */
- redalert_audio(config);
+ IREM_M37B_UE17B_AUDIO(config, "soundboard");
}
void redalert_state::ww3(machine_config &config)
@@ -416,7 +414,7 @@ void redalert_state::ww3(machine_config &config)
ww3_video(config);
/* audio hardware */
- ww3_audio(config);
+ IREM_M37B_AUDIO(config, "soundboard");
}
void redalert_state::panther(machine_config &config)
@@ -430,7 +428,7 @@ void redalert_state::panther(machine_config &config)
panther_video(config);
/* audio hardware */
- panther_audio(config);
+ PANTHER_AUDIO(config, "soundboard");
}
void redalert_state::demoneye(machine_config &config)
@@ -444,7 +442,7 @@ void redalert_state::demoneye(machine_config &config)
demoneye_video(config);
/* audio hardware */
- demoneye_audio(config);
+ DEMONEYE_AUDIO(config, "soundboard");
}
@@ -467,7 +465,7 @@ ROM_START( panther )
ROM_LOAD( "qr-6.bin", 0xa800, 0x0800, BAD_DUMP CRC(02fbd9d9) SHA1(65b5875c78886b51c9bdfc75e730b9f67ce72cfc) )
ROM_LOAD( "qr-7.bin", 0xb000, 0x0800, BAD_DUMP CRC(b3e2d6cc) SHA1(7bb18f17d635196e617e8f68bf8d866134c362d1) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "soundboard:audiocpu", 0 )
ROM_LOAD( "q7a.bin", 0x7000, 0x0800, CRC(febd1674) SHA1(e122d0855ab6a352d741f9013c20ec31e0068248) )
ROM_REGION( 0x0200, "proms", 0 ) /* color PROM */
@@ -485,7 +483,7 @@ ROM_START( ww3 )
ROM_LOAD( "w3ia.3c", 0xa000, 0x1000, CRC(dccb8605) SHA1(f4c5e1a5de0828c5e39f37e2bf10f4f60bef856a) )
ROM_LOAD( "w3ib.3a", 0xb000, 0x1000, CRC(3658e465) SHA1(2c910b2e9d689cb577d8a63bc4d07d0770a6de68) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "soundboard:audiocpu", 0 )
ROM_LOAD( "w3s1", 0x7000, 0x0800, CRC(4af956a5) SHA1(25368a40d7ebc60316fd2d78ec4c686e701b96dc) )
ROM_REGION( 0x0200, "proms", 0 ) /* color PROM */
@@ -502,10 +500,10 @@ ROM_START( redalert )
ROM_LOAD( "ragab", 0xa000, 0x1000, CRC(ab99f5ed) SHA1(a93713bb03d61cce64adc89b874b67adea7c53cd) )
ROM_LOAD( "ragb", 0xb000, 0x1000, CRC(8e0d1661) SHA1(bff4ddca761ddd70113490f50777e62c66813685) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "soundboard:audiocpu", 0 )
ROM_LOAD( "w3s1", 0x7000, 0x0800, CRC(4af956a5) SHA1(25368a40d7ebc60316fd2d78ec4c686e701b96dc) )
- ROM_REGION( 0x10000, "voice", 0 )
+ ROM_REGION( 0x10000, "soundboard:voice", 0 )
ROM_LOAD( "ras1b", 0x0000, 0x1000, CRC(ec690845) SHA1(26a84738bd45ed21dac6c8383ebd9c3b9831024a) )
ROM_LOAD( "ras2", 0x1000, 0x1000, CRC(fae94cfc) SHA1(2fd798706bb3afda3fb55bc877e597cc4e5d0c15) )
ROM_LOAD( "ras3", 0x2000, 0x1000, CRC(20d56f3e) SHA1(5c32ee3365407e6d3f7ab5662e9ecbac437ed4cb) )
@@ -525,7 +523,7 @@ ROM_START( demoneye )
ROM_LOAD( "demoneye.a", 0xa000, 0x1000, CRC(a27d08aa) SHA1(659ad22778e852fc58f3951d62bc01151c973d36) )
ROM_LOAD( "demoneye.b", 0xb000, 0x1000, CRC(1fd3585b) SHA1(b1697b7b21b739499fda1e155530dbfab89f3358) )
- ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_REGION( 0x10000, "soundboard:audiocpu", 0 )
ROM_LOAD( "demoneye.7s", 0x2000, 0x1000, CRC(8fdc9364) SHA1(3fccb5b22f08d6a0cde85863c1ce5399c84f233e) )
ROM_LOAD( "demoneye.6s", 0x3000, 0x1000, CRC(0a23def9) SHA1(b52f52be312ec7810e3c9cbd3913e887f983b1ee) )
@@ -544,7 +542,7 @@ ROM_END
*
*************************************/
-GAME( 1981, panther, 0, panther, panther, redalert_state, empty_init, ROT270, "Irem", "Panther (bootleg?)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, redalert, 0, redalert, redalert, redalert_state, empty_init, ROT270, "Irem (GDI license)", "Red Alert", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ww3, redalert, ww3, redalert, redalert_state, empty_init, ROT270, "Irem", "WW III", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, demoneye, 0, demoneye, demoneye, redalert_state, empty_init, ROT270, "Irem", "Demoneye-X", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1981, panther, 0, panther, panther, redalert_state, empty_init, ROT270, "Irem", "Panther (bootleg?)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, redalert, 0, redalert, redalert, redalert_state, empty_init, ROT270, "Irem (GDI license)", "Red Alert", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ww3, redalert, ww3, redalert, redalert_state, empty_init, ROT270, "Irem", "WW III", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, demoneye, 0, demoneye, demoneye, redalert_state, empty_init, ROT270, "Irem", "Demoneye-X", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )