diff options
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 |
commit | 693764eb9c6848ba5f5ba1bd57bbf25d972085f8 (patch) | |
tree | f2a63fc10494058bc54b8b7b3f4b6b70b14ddc7e /src/mame/drivers | |
parent | e7528a445bb0c0d8594f79c5aceabd26077001a5 (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.cpp | 350 | ||||
-rw-r--r-- | src/mame/drivers/redalert.cpp | 52 |
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 ) |