From 4457a26752fd95f79f27d8475a51033cd1a43822 Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 22 Feb 2018 22:10:11 +0900 Subject: Allow YMF271 4 Channel Output, Move Imperfect_sound tags into ymf271.h (#3229) * ymf271 : Allow 4 channel output, Add notes, Convert external memory handler to address space, Add notes, Move global imperfect_sound tags to device imperfect_features ms32, bnstars, seibuspi : Minor bankswitching cleanup, Add notes ms32 : Real mobo can output stereo sound (ex: http: //www.nicovideo.jp/watch/sm23743949) And mobo has a second stereo sound connector, Accurate this seibuspi : Single PCBs only output mono sound(sxx2e PCB : unverified), Accurate this * seibuspi : Fix unneeded * seibuspi.h : REAL remove unneeded * seibuspi.cpp : Remove duplicates * seibuspi.h : Minor cleanup --- src/devices/sound/ymf271.cpp | 116 ++++++++++++++++------------ src/devices/sound/ymf271.h | 23 ++---- src/mame/drivers/bnstars.cpp | 21 +++-- src/mame/drivers/ms32.cpp | 62 ++++++++------- src/mame/drivers/seibuspi.cpp | 173 ++++++++++++++++++++---------------------- src/mame/drivers/vgmplay.cpp | 8 +- src/mame/includes/ms32.h | 28 ++++--- src/mame/includes/seibuspi.h | 43 +++++------ 8 files changed, 238 insertions(+), 236 deletions(-) diff --git a/src/devices/sound/ymf271.cpp b/src/devices/sound/ymf271.cpp index 601e4d16c45..5df9075a090 100644 --- a/src/devices/sound/ymf271.cpp +++ b/src/devices/sound/ymf271.cpp @@ -13,7 +13,6 @@ - Src B and Src NOTE bits - statusreg Busy flag - timer register 0x11 - - ch2/ch3 (4 speakers) - PFM (FM using external PCM waveform) - detune (should be same as on other Yamaha chips) - Acc On bit (some sound effects in viprp1?). The documentation says @@ -25,6 +24,8 @@ #include "emu.h" #include "ymf271.h" +#include + #define STD_CLOCK (16934400) #define MAXOUT (+32767) @@ -452,7 +453,7 @@ void ymf271_device::update_pcm(int slotnum, int32_t *mixp, int length) int i; int64_t final_volume; int16_t sample; - int64_t ch0_vol, ch1_vol; //, ch2_vol, ch3_vol; + int64_t ch0_vol, ch1_vol, ch2_vol, ch3_vol; YMF271Slot *slot = &m_slots[slotnum]; @@ -490,15 +491,15 @@ void ymf271_device::update_pcm(int slotnum, int32_t *mixp, int length) if (slot->bits == 8) { // 8bit - sample = ymf271_read_memory(slot->startaddr + (slot->stepptr>>16))<<8; + sample = read_byte(slot->startaddr + (slot->stepptr>>16))<<8; } else { // 12bit if (slot->stepptr & 0x10000) - sample = ymf271_read_memory(slot->startaddr + (slot->stepptr>>17)*3 + 2)<<8 | ((ymf271_read_memory(slot->startaddr + (slot->stepptr>>17)*3 + 1) << 4) & 0xf0); + sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3 + 2)<<8 | ((read_byte(slot->startaddr + (slot->stepptr>>17)*3 + 1) << 4) & 0xf0); else - sample = ymf271_read_memory(slot->startaddr + (slot->stepptr>>17)*3)<<8 | (ymf271_read_memory(slot->startaddr + (slot->stepptr>>17)*3 + 1) & 0xf0); + sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 | (read_byte(slot->startaddr + (slot->stepptr>>17)*3 + 1) & 0xf0); } update_envelope(slot); @@ -508,14 +509,18 @@ void ymf271_device::update_pcm(int slotnum, int32_t *mixp, int length) ch0_vol = (final_volume * m_lut_attenuation[slot->ch0_level]) >> 16; ch1_vol = (final_volume * m_lut_attenuation[slot->ch1_level]) >> 16; -// ch2_vol = (final_volume * m_lut_attenuation[slot->ch2_level]) >> 16; -// ch3_vol = (final_volume * m_lut_attenuation[slot->ch3_level]) >> 16; + ch2_vol = (final_volume * m_lut_attenuation[slot->ch2_level]) >> 16; + ch3_vol = (final_volume * m_lut_attenuation[slot->ch3_level]) >> 16; if (ch0_vol > 65536) ch0_vol = 65536; if (ch1_vol > 65536) ch1_vol = 65536; - + if (ch2_vol > 65536) ch2_vol = 65536; + if (ch3_vol > 65536) ch3_vol = 65536; + *mixp++ += (sample * ch0_vol) >> 16; *mixp++ += (sample * ch1_vol) >> 16; + *mixp++ += (sample * ch2_vol) >> 16; + *mixp++ += (sample * ch3_vol) >> 16; // go to next step slot->stepptr += slot->step; @@ -567,12 +572,12 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** int op; int32_t *mixp; - memset(m_mix_buffer.get(), 0, sizeof(m_mix_buffer[0])*samples*2); + std::fill(m_mix_buffer.begin(), m_mix_buffer.end(), 0); for (j = 0; j < 12; j++) { YMF271Group *slot_group = &m_groups[j]; - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; if (slot_group->pfm && slot_group->sync != 3) { @@ -590,7 +595,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** int slot2 = j + (1*12); int slot3 = j + (2*12); int slot4 = j + (3*12); - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; if (m_slots[slot1].active) { @@ -804,6 +809,14 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** (output2 * m_lut_attenuation[m_slots[slot2].ch1_level]) + (output3 * m_lut_attenuation[m_slots[slot3].ch1_level]) + (output4 * m_lut_attenuation[m_slots[slot4].ch1_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch2_level]) + + (output2 * m_lut_attenuation[m_slots[slot2].ch2_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch2_level]) + + (output4 * m_lut_attenuation[m_slots[slot4].ch2_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch3_level]) + + (output2 * m_lut_attenuation[m_slots[slot2].ch3_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch3_level]) + + (output4 * m_lut_attenuation[m_slots[slot4].ch3_level])) >> 16; } } break; @@ -817,7 +830,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** int slot1 = j + ((op + 0) * 12); int slot3 = j + ((op + 2) * 12); - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; if (m_slots[slot1].active) { for (i = 0; i < samples; i++) @@ -867,6 +880,10 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** (output3 * m_lut_attenuation[m_slots[slot3].ch0_level])) >> 16; *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch1_level]) + (output3 * m_lut_attenuation[m_slots[slot3].ch1_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch2_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch2_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch3_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch3_level])) >> 16; } } } @@ -879,7 +896,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** int slot1 = j + (0*12); int slot2 = j + (1*12); int slot3 = j + (2*12); - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; if (m_slots[slot1].active) { @@ -979,10 +996,16 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch1_level]) + (output2 * m_lut_attenuation[m_slots[slot2].ch1_level]) + (output3 * m_lut_attenuation[m_slots[slot3].ch1_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch2_level]) + + (output2 * m_lut_attenuation[m_slots[slot2].ch2_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch2_level])) >> 16; + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch3_level]) + + (output2 * m_lut_attenuation[m_slots[slot2].ch3_level]) + + (output3 * m_lut_attenuation[m_slots[slot3].ch3_level])) >> 16; } } - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; update_pcm(j + (3*12), mixp, samples); break; } @@ -999,11 +1022,13 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t ** } } - mixp = m_mix_buffer.get(); + mixp = &m_mix_buffer[0]; for (i = 0; i < samples; i++) { outputs[0][i] = (*mixp++)>>2; outputs[1][i] = (*mixp++)>>2; + outputs[2][i] = (*mixp++)>>2; + outputs[3][i] = (*mixp++)>>2; } } @@ -1036,6 +1061,7 @@ void ymf271_device::write_register(int slotnum, int reg, uint8_t data) { if (slot->active) { + //calculate_status_end(slotnum,true); status changes if keyoff? verify this from real hardware. slot->env_state = ENV_RELEASE; } } @@ -1325,24 +1351,6 @@ void ymf271_device::device_timer(emu_timer &timer, device_timer_id id, int param } } -uint8_t ymf271_device::ymf271_read_memory(uint32_t offset) -{ - if (m_ext_read_handler.isnull()) - { - if (offset < m_mem_size) - return m_mem_base[offset]; - - /* 8MB chip limit (shouldn't happen) */ - else if (offset > 0x7fffff) - return ymf271_read_memory(offset & 0x7fffff); - - else - return 0; - } - else - return m_ext_read_handler(offset); -} - void ymf271_device::ymf271_write_timer(uint8_t address, uint8_t data) { if ((address & 0xf0) == 0) @@ -1433,8 +1441,8 @@ void ymf271_device::ymf271_write_timer(uint8_t address, uint8_t data) case 0x17: m_ext_address = (m_ext_address + 1) & 0x7fffff; - if (!m_ext_rw && !m_ext_write_handler.isnull()) - m_ext_write_handler(m_ext_address, data); + if (!m_ext_rw) + space(0).write_byte(m_ext_address, data); break; case 0x20: @@ -1513,7 +1521,7 @@ READ8_MEMBER( ymf271_device::read ) uint8_t ret = m_ext_readlatch; m_ext_address = (m_ext_address + 1) & 0x7fffff; - m_ext_readlatch = ymf271_read_memory(m_ext_address); + m_ext_readlatch = read_byte(m_ext_address); return ret; } @@ -1721,6 +1729,7 @@ void ymf271_device::init_state() save_item(NAME(m_ext_address)); save_item(NAME(m_ext_rw)); save_item(NAME(m_ext_readlatch)); + save_item(NAME(m_master_clock)); } //------------------------------------------------- @@ -1732,18 +1741,14 @@ void ymf271_device::device_start() m_timA = timer_alloc(0); m_timB = timer_alloc(1); - m_mem_size = m_mem_base.bytes(); - m_irq_handler.resolve(); - m_ext_read_handler.resolve(); - m_ext_write_handler.resolve(); - + m_master_clock = clock(); init_tables(); init_state(); - - m_stream = machine().sound().stream_alloc(*this, 0, 2, clock()/384); - m_mix_buffer = std::make_unique(44100*2); + + m_mix_buffer.resize(m_master_clock/(384/4)); + m_stream = machine().sound().stream_alloc(*this, 0, 4, m_master_clock/384); } //------------------------------------------------- @@ -1777,15 +1782,30 @@ void ymf271_device::device_reset() void ymf271_device::device_clock_changed() { - m_stream->set_sample_rate(clock() / 384); + uint32_t old_clock = m_master_clock; + m_master_clock = clock(); + + if (m_master_clock != old_clock) + { + if (old_clock < m_master_clock) + m_mix_buffer.resize(m_master_clock/(384/4)); + + m_stream->set_sample_rate(m_master_clock / 384); + } calculate_clock_correction(); } +void ymf271_device::rom_bank_updated() +{ + m_stream->update(); +} + DEFINE_DEVICE_TYPE(YMF271, ymf271_device, "ymf271", "Yamaha YMF271 OPX") ymf271_device::ymf271_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, YMF271, tag, owner, clock) , device_sound_interface(mconfig, *this) + , device_rom_interface(mconfig, *this, 23) , m_timerA(0) , m_timerB(0) , m_irqstate(0) @@ -1794,15 +1814,11 @@ ymf271_device::ymf271_device(const machine_config &mconfig, const char *tag, dev , m_ext_address(0) , m_ext_rw(0) , m_ext_readlatch(0) - , m_mem_base(*this, DEVICE_SELF) - , m_mem_size(0) + , m_master_clock(0) , m_timA(nullptr) , m_timB(nullptr) , m_stream(nullptr) - , m_mix_buffer(nullptr) , m_irq_handler(*this) - , m_ext_read_handler(*this) - , m_ext_write_handler(*this) { memset(m_slots, 0, sizeof(m_slots)); memset(m_groups, 0, sizeof(m_groups)); diff --git a/src/devices/sound/ymf271.h b/src/devices/sound/ymf271.h index a93df6fcdcb..f49b08cec2d 100644 --- a/src/devices/sound/ymf271.h +++ b/src/devices/sound/ymf271.h @@ -9,21 +9,15 @@ #define MCFG_YMF271_IRQ_HANDLER(_devcb) \ devcb = &ymf271_device::set_irq_handler(*device, DEVCB_##_devcb); -#define MCFG_YMF271_EXT_READ_HANDLER(_devcb) \ - devcb = &ymf271_device::set_ext_read_handler(*device, DEVCB_##_devcb); - -#define MCFG_YMF271_EXT_WRITE_HANDLER(_devcb) \ - devcb = &ymf271_device::set_ext_write_handler(*device, DEVCB_##_devcb); - -class ymf271_device : public device_t, public device_sound_interface +class ymf271_device : public device_t, public device_sound_interface, public device_rom_interface { public: + static constexpr feature_type imperfect_features() { return feature::SOUND; } + ymf271_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // static configuration helpers template static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast(device).m_irq_handler.set_callback(std::forward(cb)); } - template static devcb_base &set_ext_read_handler(device_t &device, Object &&cb) { return downcast(device).m_ext_read_handler.set_callback(std::forward(cb)); } - template static devcb_base &set_ext_write_handler(device_t &device, Object &&cb) { return downcast(device).m_ext_write_handler.set_callback(std::forward(cb)); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -38,6 +32,9 @@ protected: // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; + // device_rom_interface overrides + virtual void rom_bank_updated() override; + private: struct YMF271Slot { @@ -113,7 +110,6 @@ private: void ymf271_write_fm(int bank, uint8_t address, uint8_t data); void ymf271_write_pcm(uint8_t address, uint8_t data); void ymf271_write_timer(uint8_t address, uint8_t data); - uint8_t ymf271_read_memory(uint32_t offset); inline int get_keyscaled_rate(int rate, int keycode, int keyscale); inline int get_internal_keycode(int block, int fns); @@ -149,17 +145,14 @@ private: uint8_t m_ext_rw; uint8_t m_ext_readlatch; - optional_region_ptr m_mem_base; - uint32_t m_mem_size; + uint32_t m_master_clock; emu_timer *m_timA; emu_timer *m_timB; sound_stream *m_stream; - std::unique_ptr m_mix_buffer; + std::vector m_mix_buffer; devcb_write_line m_irq_handler; - devcb_read8 m_ext_read_handler; - devcb_write8 m_ext_write_handler; }; DECLARE_DEVICE_TYPE(YMF271, ymf271_device) diff --git a/src/mame/drivers/bnstars.cpp b/src/mame/drivers/bnstars.cpp index 97f2d7a05d1..822d8f44982 100644 --- a/src/mame/drivers/bnstars.cpp +++ b/src/mame/drivers/bnstars.cpp @@ -155,7 +155,6 @@ public: TILE_GET_INFO_MEMBER(get_ms32_bg1_tile_info); TILE_GET_INFO_MEMBER(get_ms32_roz0_tile_info); TILE_GET_INFO_MEMBER(get_ms32_roz1_tile_info); - virtual void machine_reset() override; virtual void video_start() override; uint32_t screen_update_bnstars_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_bnstars_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -797,17 +796,10 @@ ADDRESS_MAP_START(bnstars_state::bnstars_sound_map) AM_RANGE(0x3f70, 0x3f70) AM_WRITENOP // watchdog? banking? very noisy AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w) AM_RANGE(0x4000, 0x7fff) AM_RAM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank4") - AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank5") + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("z80bank1") + AM_RANGE(0xc000, 0xffff) AM_ROMBANK("z80bank2") ADDRESS_MAP_END -void bnstars_state::machine_reset() -{ - irq_init(); - membank("bank4")->set_entry(0); - membank("bank5")->set_entry(1); -} - MACHINE_CONFIG_START(bnstars_state::bnstars) @@ -818,7 +810,7 @@ MACHINE_CONFIG_START(bnstars_state::bnstars) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bnstars_state, ms32_interrupt, "lscreen", 0, 1) - MCFG_CPU_ADD("audiocpu", Z80, 4000000) + MCFG_CPU_ADD("audiocpu", Z80, 4000000) // Unverified; it's possibly higher than 4MHz MCFG_CPU_PROGRAM_MAP(bnstars_sound_map) MCFG_QUANTUM_TIME(attotime::from_hz(60000)) @@ -856,14 +848,19 @@ MACHINE_CONFIG_START(bnstars_state::bnstars) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ymf1", YMF271, 16934400) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? +// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) MCFG_SOUND_ADD("ymf2", YMF271, 16934400) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? +// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) MACHINE_CONFIG_END @@ -937,4 +934,4 @@ DRIVER_INIT_MEMBER(bnstars_state,bnstars) configure_banks(); } -GAME( 1997, bnstars1, 0, bnstars, bnstars, bnstars_state, bnstars, ROT0, "Jaleco", "Vs. Janshi Brandnew Stars", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1997, bnstars1, 0, bnstars, bnstars, bnstars_state, bnstars, ROT0, "Jaleco", "Vs. Janshi Brandnew Stars", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/ms32.cpp b/src/mame/drivers/ms32.cpp index bb0f9507bbf..32439a510bb 100644 --- a/src/mame/drivers/ms32.cpp +++ b/src/mame/drivers/ms32.cpp @@ -523,7 +523,6 @@ READ32_MEMBER(ms32_state::ms32_read_inputs3) WRITE32_MEMBER(ms32_state::ms32_sound_w) { m_soundlatch->write(space, 0, data & 0xff); - m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); // give the Z80 time to respond m_maincpu->spin_until_time(attotime::from_usec(40)); @@ -1656,14 +1655,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(ms32_state::ms32_interrupt) READ8_MEMBER(ms32_state::latch_r) { - m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); return m_soundlatch->read(space,0)^0xff; } WRITE8_MEMBER(ms32_state::ms32_snd_bank_w) { - membank("bank4")->set_entry((data >> 0) & 0x0F); - membank("bank5")->set_entry((data >> 4) & 0x0F); + m_z80bank[0]->set_entry((data >> 0) & 0x0F); + m_z80bank[1]->set_entry((data >> 4) & 0x0F); } WRITE8_MEMBER(ms32_state::to_main_w) @@ -1682,8 +1680,8 @@ ADDRESS_MAP_START(ms32_state::ms32_sound_map) AM_RANGE(0x3f70, 0x3f70) AM_WRITENOP // watchdog? banking? very noisy AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w) AM_RANGE(0x4000, 0x7fff) AM_RAM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank4") - AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank5") + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("z80bank1") + AM_RANGE(0xc000, 0xffff) AM_ROMBANK("z80bank2") ADDRESS_MAP_END @@ -1691,8 +1689,9 @@ ADDRESS_MAP_END void ms32_state::machine_reset() { - membank("bank4")->set_entry(0); - membank("bank5")->set_entry(1); + for (int bank = 0; bank < 2; bank++) + m_z80bank[bank]->set_entry(bank); + irq_init(); } @@ -1707,7 +1706,7 @@ MACHINE_CONFIG_START(ms32_state::ms32) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ms32_state, ms32_interrupt, "screen", 0, 1) - MCFG_CPU_ADD("audiocpu", Z80, 4000000) + MCFG_CPU_ADD("audiocpu", Z80, 4000000) // Unverified; it's possibly higher than 4MHz MCFG_CPU_PROGRAM_MAP(ms32_sound_map) MCFG_QUANTUM_TIME(attotime::from_hz(60000)) @@ -1726,12 +1725,16 @@ MACHINE_CONFIG_START(ms32_state::ms32) /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) MCFG_SOUND_ADD("ymf", YMF271, 16934400) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? +// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) MACHINE_CONFIG_END @@ -2496,8 +2499,9 @@ ROM_END void ms32_state::configure_banks() { save_item(NAME(m_to_main)); - membank("bank4")->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000); - membank("bank5")->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000); + for (int bank = 0; bank < 2; bank++) + m_z80bank[bank]->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000); + } DRIVER_INIT_MEMBER(ms32_state,ms32_common) @@ -2570,22 +2574,22 @@ DRIVER_INIT_MEMBER(ms32_state,bnstars) -GAME( 1994, hayaosi2, 0, ms32, hayaosi2, ms32_state, ss92046_01, ROT0, "Jaleco", "Hayaoshi Quiz Grand Champion Taikai", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1994, hayaosi3, 0, ms32, hayaosi3, ms32_state, ss92046_01, ROT0, "Jaleco", "Hayaoshi Quiz Nettou Namahousou (ver 1.5)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1994, bbbxing, 0, ms32, bbbxing, ms32_state, ss92046_01, ROT0, "Jaleco", "Best Bout Boxing (ver 1.3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1994, suchie2, 0, ms32, suchie2, ms32_state, suchie2, ROT0, "Jaleco", "Idol Janshi Suchie-Pai II (ver 1.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1994, suchie2o, suchie2, ms32, suchie2, ms32_state, suchie2, ROT0, "Jaleco", "Idol Janshi Suchie-Pai II (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1995, desertwr, 0, ms32, desertwr, ms32_state, ss91022_10, ROT270, "Jaleco", "Desert War / Wangan Sensou (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1995, gametngk, 0, ms32, gametngk, ms32_state, ss91022_10, ROT270, "Jaleco", "The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1995, tetrisp, 0, ms32, tetrisp, ms32_state, ss92046_01, ROT0, "Jaleco / BPS", "Tetris Plus (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1995, p47aces, 0, ms32, p47aces, ms32_state, ss92048_01, ROT0, "Jaleco", "P-47 Aces", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1995, akiss, 0, ms32, suchie2, ms32_state, kirarast, ROT0, "Jaleco", "Mahjong Angel Kiss (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, gratia, 0, ms32, gratia, ms32_state, ss92047_01, ROT0, "Jaleco", "Gratia - Second Earth (ver 1.0, 92047-01 version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, gratiaa, gratia, ms32, gratia, ms32_state, ss91022_10, ROT0, "Jaleco", "Gratia - Second Earth (ver 1.0, 91022-10 version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, kirarast, 0, ms32, kirarast, ms32_state, kirarast, ROT0, "Jaleco", "Ryuusei Janshi Kirara Star", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1997, tp2m32, tetrisp2, ms32, tp2m32, ms32_state, ss91022_10, ROT0, "Jaleco", "Tetris Plus 2 (ver 1.0, MegaSystem 32 Version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1997, bnstars, bnstars1, ms32, suchie2, ms32_state, bnstars, ROT0, "Jaleco", "Vs. Janshi Brandnew Stars (Ver 1.1, MegaSystem32 Version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, wpksocv2, 0, ms32, wpksocv2, ms32_state, ss92046_01, ROT0, "Jaleco", "World PK Soccer V2 (ver 1.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1994, hayaosi2, 0, ms32, hayaosi2, ms32_state, ss92046_01, ROT0, "Jaleco", "Hayaoshi Quiz Grand Champion Taikai", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, hayaosi3, 0, ms32, hayaosi3, ms32_state, ss92046_01, ROT0, "Jaleco", "Hayaoshi Quiz Nettou Namahousou (ver 1.5)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, bbbxing, 0, ms32, bbbxing, ms32_state, ss92046_01, ROT0, "Jaleco", "Best Bout Boxing (ver 1.3)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, suchie2, 0, ms32, suchie2, ms32_state, suchie2, ROT0, "Jaleco", "Idol Janshi Suchie-Pai II (ver 1.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1994, suchie2o, suchie2, ms32, suchie2, ms32_state, suchie2, ROT0, "Jaleco", "Idol Janshi Suchie-Pai II (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, desertwr, 0, ms32, desertwr, ms32_state, ss91022_10, ROT270, "Jaleco", "Desert War / Wangan Sensou (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, gametngk, 0, ms32, gametngk, ms32_state, ss91022_10, ROT270, "Jaleco", "The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, tetrisp, 0, ms32, tetrisp, ms32_state, ss92046_01, ROT0, "Jaleco / BPS", "Tetris Plus (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, p47aces, 0, ms32, p47aces, ms32_state, ss92048_01, ROT0, "Jaleco", "P-47 Aces", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, akiss, 0, ms32, suchie2, ms32_state, kirarast, ROT0, "Jaleco", "Mahjong Angel Kiss (ver 1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, gratia, 0, ms32, gratia, ms32_state, ss92047_01, ROT0, "Jaleco", "Gratia - Second Earth (ver 1.0, 92047-01 version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, gratiaa, gratia, ms32, gratia, ms32_state, ss91022_10, ROT0, "Jaleco", "Gratia - Second Earth (ver 1.0, 91022-10 version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, kirarast, 0, ms32, kirarast, ms32_state, kirarast, ROT0, "Jaleco", "Ryuusei Janshi Kirara Star", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1997, tp2m32, tetrisp2, ms32, tp2m32, ms32_state, ss91022_10, ROT0, "Jaleco", "Tetris Plus 2 (ver 1.0, MegaSystem 32 Version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1997, bnstars, bnstars1, ms32, suchie2, ms32_state, bnstars, ROT0, "Jaleco", "Vs. Janshi Brandnew Stars (Ver 1.1, MegaSystem32 Version)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, wpksocv2, 0, ms32, wpksocv2, ms32_state, ss92046_01, ROT0, "Jaleco", "World PK Soccer V2 (ver 1.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) /* these boot and show something */ GAME( 1994, f1superb, 0, f1superb, f1superb, ms32_state, f1superb, ROT0, "Jaleco", "F1 Super Battle", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/seibuspi.cpp b/src/mame/drivers/seibuspi.cpp index 1380841965c..41f54dabfd4 100644 --- a/src/mame/drivers/seibuspi.cpp +++ b/src/mame/drivers/seibuspi.cpp @@ -878,12 +878,9 @@ Notes: #include "cpu/i386/i386.h" #include "cpu/z80/z80.h" -#include "machine/7200fifo.h" #include "machine/ds2404.h" -#include "machine/eepromser.h" #include "machine/intelfsh.h" #include "machine/seibuspi.h" -#include "sound/okim6295.h" #include "sound/ymf271.h" #include "sound/ymz280b.h" #include "video/seibu_crtc.h" @@ -914,8 +911,8 @@ READ8_MEMBER(seibuspi_state::sound_fifo_status_r) // d0: fifo full flag (z80) // d1: fifo empty flag (main) // other bits: unused? - int d1 = (m_soundfifo2 != nullptr) ? m_soundfifo2->ef_r() << 1 : 0; - return d1 | m_soundfifo1->ff_r(); + int d1 = (m_soundfifo[1] != nullptr) ? m_soundfifo[1]->ef_r() << 1 : 0; + return d1 | m_soundfifo[0]->ff_r(); } READ8_MEMBER(seibuspi_state::spi_status_r) @@ -949,7 +946,7 @@ WRITE8_MEMBER(seibuspi_state::spi_layerbanks_eeprom_w) WRITE8_MEMBER(seibuspi_state::oki_bank_w) { - m_oki2->set_rom_bank((data >> 2) & 1); + m_oki[1]->set_rom_bank((data >> 2) & 1); } WRITE8_MEMBER(seibuspi_state::z80_prg_transfer_w) @@ -1123,8 +1120,8 @@ READ8_MEMBER(seibuspi_state::z80_soundfifo_status_r) // d0: fifo full flag (main) // d1: fifo empty flag (z80) // other bits: unused? - int d0 = (m_soundfifo2 != nullptr) ? m_soundfifo2->ff_r() : 0; - return d0 | m_soundfifo1->ef_r() << 1; + int d0 = (m_soundfifo[1] != nullptr) ? m_soundfifo[1]->ff_r() : 0; + return d0 | m_soundfifo[0]->ef_r() << 1; } WRITE8_MEMBER(seibuspi_state::z80_bank_w) @@ -1135,7 +1132,7 @@ WRITE8_MEMBER(seibuspi_state::z80_bank_w) if (bank != m_z80_lastbank) { m_z80_lastbank = bank; - membank("bank1")->set_entry(bank); + m_z80_bank->set_entry(bank); } // d3: watchdog? @@ -1167,7 +1164,7 @@ ADDRESS_MAP_START(seibuspi_state::sxx2e_soundmap) AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN") AM_RANGE(0x401b, 0x401b) AM_WRITE(z80_bank_w) AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("ymf", ymf271_device, read, write) - AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") + AM_RANGE(0x8000, 0xffff) AM_ROMBANK("z80_bank") ADDRESS_MAP_END ADDRESS_MAP_START(seibuspi_state::spi_soundmap) @@ -1176,26 +1173,14 @@ ADDRESS_MAP_START(seibuspi_state::spi_soundmap) AM_RANGE(0x400a, 0x400a) AM_READ_PORT("JUMPERS") // TO DO: get these to actually work ADDRESS_MAP_END +ADDRESS_MAP_START(seibuspi_state::spi_ymf271_map) + ADDRESS_MAP_GLOBAL_MASK(0x1fffff) + AM_RANGE(0x000000, 0x0fffff) AM_DEVREADWRITE("soundflash1", intel_e28f008sa_device, read, write) + AM_RANGE(0x100000, 0x1fffff) AM_DEVREADWRITE("soundflash2", intel_e28f008sa_device, read, write) +ADDRESS_MAP_END -/*****************************************************************************/ - -READ8_MEMBER(seibuspi_state::flashrom_read) -{ - offset &= 0x1fffff; - if (offset < 0x100000) - return m_soundflash1->read(offset); - else - return m_soundflash2->read(offset & 0x0fffff); -} -WRITE8_MEMBER(seibuspi_state::flashrom_write) -{ - offset &= 0x1fffff; - if (offset < 0x100000) - m_soundflash1->write(offset, data); - else - m_soundflash2->write(offset & 0x0fffff, data); -} +/*****************************************************************************/ WRITE_LINE_MEMBER(seibuspi_state::ymf_irqhandler) { @@ -1829,7 +1814,7 @@ IRQ_CALLBACK_MEMBER(seibuspi_state::spi_irq_callback) void seibuspi_state::init_spi_common() { if (m_z80_rom != nullptr) - membank("bank1")->configure_entries(0, 8, m_z80_rom->base(), 0x8000); + m_z80_bank->configure_entries(0, 8, m_z80_rom->base(), 0x8000); } void seibuspi_state::init_sei252() @@ -1858,7 +1843,7 @@ MACHINE_RESET_MEMBER(seibuspi_state,spi) { m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - membank("bank1")->set_entry(0); + m_z80_bank->set_entry(0); m_z80_lastbank = 0; m_z80_prg_transfer_pos = 0; } @@ -1906,11 +1891,12 @@ MACHINE_CONFIG_START(seibuspi_state::spi) MCFG_SOUND_ADD("ymf", YMF271, XTAL(16'934'400)) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) - MCFG_YMF271_EXT_READ_HANDLER(READ8(seibuspi_state, flashrom_read)) - MCFG_YMF271_EXT_WRITE_HANDLER(WRITE8(seibuspi_state, flashrom_write)) + MCFG_DEVICE_ADDRESS_MAP(0, spi_ymf271_map) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +// MCFG_SOUND_ROUTE(2, "lspeaker", 1.0) Output 2/3 not used? +// MCFG_SOUND_ROUTE(3, "rspeaker", 1.0) MACHINE_CONFIG_END MACHINE_CONFIG_START(seibuspi_state::ejanhs) @@ -1931,7 +1917,7 @@ MACHINE_CONFIG_END MACHINE_RESET_MEMBER(seibuspi_state,sxx2e) { - membank("bank1")->set_entry(0); + m_z80_bank->set_entry(0); m_z80_lastbank = 0; m_sb_coin_latch = 0; } @@ -1952,13 +1938,17 @@ MACHINE_CONFIG_START(seibuspi_state::sxx2e) MCFG_DEVICE_REMOVE("soundflash2") MCFG_DEVICE_REMOVE("soundfifo2") - + /* sound hardware */ + // Single PCBs only output mono sound, SXX2E : unverified + MCFG_DEVICE_REMOVE("lspeaker") + MCFG_DEVICE_REMOVE("rspeaker") + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_REPLACE("ymf", YMF271, XTAL(16'934'400)) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END MACHINE_CONFIG_START(seibuspi_state::sxx2f) @@ -1990,8 +1980,7 @@ MACHINE_CONFIG_START(seibuspi_state::sxx2g) // clocks differ, but otherwise same MCFG_SOUND_REPLACE("ymf", YMF271, XTAL(16'384'000)) // 16.384MHz(!) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -2079,11 +2068,11 @@ MACHINE_CONFIG_START(seibuspi_state::sys386f) MCFG_VIDEO_START_OVERRIDE(seibuspi_state, sys386f) /* sound hardware */ - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + // Single PCBs only output mono sound + MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ymz", YMZ280B, XTAL(16'384'000)) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END @@ -3998,68 +3987,68 @@ ROM_END /*****************************************************************************/ /* SPI */ -GAME( 1995, senkyu, 0, spi, spi_3button, seibuspi_state, senkyu, ROT0, "Seibu Kaihatsu", "Senkyu (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, senkyua, senkyu, spi, spi_3button, seibuspi_state, senkyua, ROT0, "Seibu Kaihatsu", "Senkyu (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, batlball, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Tuning license)", "Battle Balls (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, batlballu, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Fabtek license)", "Battle Balls (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, batlballa, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Metrotainment license)", "Battle Balls (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, batlballe, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Metrotainment license)", "Battle Balls (Hong Kong, earlier)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) - -GAME( 1995, viprp1, 0, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, viprp1k, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Dream Island license)", "Viper Phase 1 (New Version, Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, viprp1u, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu (Fabtek license)", "Viper Phase 1 (New Version, US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) /* New version, "=U.S.A=" seems part of title */ -GAME( 1995, viprp1ua, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu (Fabtek license)", "Viper Phase 1 (New Version, US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) /* New version, "=U.S.A=" seems part of title */ -GAME( 1995, viprp1j, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, viprp1s, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Switzerland)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // counterintuitively this seems to be the oldest set of the game despite playing with the 'new version' rules, it has various typos not present in other sets eg. 'UPDATEING' -GAME( 1995, viprp1h, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Holland)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Code is the same as the above Switzerland set, just different region byte - -GAME( 1995, viprp1ot, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Tuning license)", "Viper Phase 1 (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, viprp1oj, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1995, viprp1hk, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Viper Phase 1 (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) /* "=HONG KONG=" seems part of title */ - -GAME( 1996, ejanhs, 0, ejanhs, spi_ejanhs, seibuspi_state, ejanhs, ROT0, "Seibu Kaihatsu", "E Jong High School (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) - -GAME( 1996, rdft, 0, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftj, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftja, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftjb, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftu, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftam, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Raiden Fighters (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftadi, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftau, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Australia)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftauge, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters (Evaluation Software For Show, Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftit, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdfta, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Austria)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1996, rdftgb, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Great Britain)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1995, senkyu, 0, spi, spi_3button, seibuspi_state, senkyu, ROT0, "Seibu Kaihatsu", "Senkyu (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, senkyua, senkyu, spi, spi_3button, seibuspi_state, senkyua, ROT0, "Seibu Kaihatsu", "Senkyu (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, batlball, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Tuning license)", "Battle Balls (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, batlballu, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Fabtek license)", "Battle Balls (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, batlballa, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Metrotainment license)", "Battle Balls (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, batlballe, senkyu, spi, spi_3button, seibuspi_state, batlball, ROT0, "Seibu Kaihatsu (Metrotainment license)", "Battle Balls (Hong Kong, earlier)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) + +GAME( 1995, viprp1, 0, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, viprp1k, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Dream Island license)", "Viper Phase 1 (New Version, Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, viprp1u, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu (Fabtek license)", "Viper Phase 1 (New Version, US set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) /* New version, "=U.S.A=" seems part of title */ +GAME( 1995, viprp1ua, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu (Fabtek license)", "Viper Phase 1 (New Version, US set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) /* New version, "=U.S.A=" seems part of title */ +GAME( 1995, viprp1j, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, viprp1s, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Switzerland)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // counterintuitively this seems to be the oldest set of the game despite playing with the 'new version' rules, it has various typos not present in other sets eg. 'UPDATEING' +GAME( 1995, viprp1h, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (New Version, Holland)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // Code is the same as the above Switzerland set, just different region byte + +GAME( 1995, viprp1ot, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Tuning license)", "Viper Phase 1 (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, viprp1oj, viprp1, spi, spi_3button, seibuspi_state, viprp1o, ROT270, "Seibu Kaihatsu", "Viper Phase 1 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, viprp1hk, viprp1, spi, spi_3button, seibuspi_state, viprp1, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Viper Phase 1 (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) /* "=HONG KONG=" seems part of title */ + +GAME( 1996, ejanhs, 0, ejanhs, spi_ejanhs, seibuspi_state, ejanhs, ROT0, "Seibu Kaihatsu", "E Jong High School (Japan)", MACHINE_SUPPORTS_SAVE ) + +GAME( 1996, rdft, 0, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftj, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftja, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftjb, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Japan set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftu, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftam, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Raiden Fighters (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftadi, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftau, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Australia)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftauge, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters (Evaluation Software For Show, Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftit, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdfta, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Austria)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, rdftgb, rdft, spi, spi_3button, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu", "Raiden Fighters (Great Britain)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // this is one revision -GAME( 1997, rdft2, 0, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters 2 - Operation Hell Dive (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2j, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2a, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Raiden Fighters 2 - Operation Hell Dive (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1997, rdft2, 0, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters 2 - Operation Hell Dive (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2j, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2a, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Metrotainment license)", "Raiden Fighters 2 - Operation Hell Dive (Hong Kong)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // this is another -GAME( 1997, rdft2ja, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2aa, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters 2 - Operation Hell Dive (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2it, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1997, rdft2ja, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2aa, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters 2 - Operation Hell Dive (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2it, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // these are unique -GAME( 1997, rdft2jb, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2t, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1997, rdft2u, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters 2 - Operation Hell Dive (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1997, rdft2jb, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Japan set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2t, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, rdft2u, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters 2 - Operation Hell Dive (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1998, rfjet, 0, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters Jet (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1998, rfjetu, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters Jet (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1998, rfjetj, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1998, rfjeta, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters Jet (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1998, rfjett, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1998, rfjet, 0, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters Jet (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, rfjetu, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters Jet (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, rfjetj, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, rfjeta, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Dream Island license)", "Raiden Fighters Jet (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1998, rfjett, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) /* SXX2E */ -GAME( 1996, rdfts, rdft, sxx2e, sxx2e, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Explorer System Corp. license)", "Raiden Fighters (Taiwan, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1996, rdfts, rdft, sxx2e, sxx2e, seibuspi_state, rdft, ROT270, "Seibu Kaihatsu (Explorer System Corp. license)", "Raiden Fighters (Taiwan, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) /* SXX2F */ -GAME( 1997, rdft2us, rdft2, sxx2f, sxx2f, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters 2 - Operation Hell Dive (US, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // title screen shows small '.1' +GAME( 1997, rdft2us, rdft2, sxx2f, sxx2f, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters 2 - Operation Hell Dive (US, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // title screen shows small '.1' /* SXX2G */ -GAME( 1999, rfjets, rfjet, sxx2g, sxx2f, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (US, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has 1998-99 copyright + planes unlocked -GAME( 1999, rfjetsa, rfjet, sxx2g, sxx2f, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (US, single board, test version?)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // maybe test/proto? see notes at romdefs +GAME( 1999, rfjets, rfjet, sxx2g, sxx2f, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (US, single board)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // has 1998-99 copyright + planes unlocked +GAME( 1999, rfjetsa, rfjet, sxx2g, sxx2f, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (US, single board, test version?)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // maybe test/proto? see notes at romdefs /* SYS386I */ GAME( 2000, rdft22kc, rdft2, sys386i, sys386i, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive 2000 (China, SYS386I)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 2d3991b0563..d4f4f767c39 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -201,7 +201,9 @@ public: void segapcm_map(address_map &map); void soundchips16_map(address_map &map); void soundchips_map(address_map &map); + void ymf271_map(address_map &map); void ymz280b_map(address_map &map); + private: std::vector m_file_data; required_device m_file; @@ -1570,6 +1572,10 @@ ADDRESS_MAP_START(vgmplay_state::qsound_map) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, qsound_rom_r) ADDRESS_MAP_END +ADDRESS_MAP_START(vgmplay_state::ymf271_map) + AM_RANGE(0, 0x7fffff) AM_DEVREAD("vgmplay", vgmplay_device, ymf271_rom_r) +ADDRESS_MAP_END + ADDRESS_MAP_START(vgmplay_state::ymz280b_map) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, ymz280b_rom_r) ADDRESS_MAP_END @@ -1705,7 +1711,7 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) MCFG_SOUND_ADD("ymf271", YMF271, 16934400) - MCFG_YMF271_EXT_READ_HANDLER(DEVREAD8("vgmplay", vgmplay_device, ymf271_rom_r)) + MCFG_DEVICE_ADDRESS_MAP(0, ymf271_map) MCFG_SOUND_ROUTE(0, "lspeaker", 1) MCFG_SOUND_ROUTE(1, "rspeaker", 1) diff --git a/src/mame/includes/ms32.h b/src/mame/includes/ms32.h index bcba83e5184..b4c9f517d3c 100644 --- a/src/mame/includes/ms32.h +++ b/src/mame/includes/ms32.h @@ -10,6 +10,12 @@ class ms32_state : public driver_device public: ms32_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), m_mainram(*this, "mainram"), m_roz_ctrl(*this, "roz_ctrl"), m_tx_scroll(*this, "tx_scroll"), @@ -23,12 +29,14 @@ public: m_txram(*this, "txram", 32), m_bgram(*this, "bgram", 32), m_f1superb_extraram(*this, "f1sb_extraram", 32), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") { } + m_z80bank(*this, "z80bank%u", 1) { } + + required_device m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + optional_device m_screen; + required_device m_palette; + optional_device m_soundlatch; optional_shared_ptr m_mainram; optional_shared_ptr m_roz_ctrl; @@ -43,6 +51,8 @@ public: optional_shared_ptr m_txram; optional_shared_ptr m_bgram; optional_shared_ptr m_f1superb_extraram; + + optional_memory_bank_array<2> m_z80bank; std::unique_ptr m_nvram_8; uint32_t m_to_main; uint16_t m_irqreq; @@ -118,15 +128,9 @@ public: void draw_sprites(bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_pri, const rectangle &cliprect, uint16_t *sprram_top, size_t sprram_size, int gfxnum, int reverseorder); void draw_roz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect,int priority); void configure_banks(); - required_device m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - optional_device m_screen; - required_device m_palette; void ms32(machine_config &config); void f1superb(machine_config &config); void f1superb_map(address_map &map); void ms32_map(address_map &map); void ms32_sound_map(address_map &map); - optional_device m_soundlatch; //not for bnstars.cpp }; diff --git a/src/mame/includes/seibuspi.h b/src/mame/includes/seibuspi.h index 7ec3a258100..ae6f38100a6 100644 --- a/src/mame/includes/seibuspi.h +++ b/src/mame/includes/seibuspi.h @@ -6,7 +6,6 @@ ******************************************************************************/ -#include "machine/intelfsh.h" #include "machine/eepromser.h" #include "machine/7200fifo.h" #include "sound/okim6295.h" @@ -15,22 +14,19 @@ class seibuspi_state : public driver_device { public: seibuspi_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_mainram(*this, "mainram"), - m_z80_rom(*this, "audiocpu"), - m_eeprom(*this, "eeprom"), - m_soundflash1(*this, "soundflash1"), - m_soundflash2(*this, "soundflash2"), - m_soundfifo1(*this, "soundfifo1"), - m_soundfifo2(*this, "soundfifo2"), - m_oki1(*this, "oki1"), - m_oki2(*this, "oki2"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_key(*this, "KEY.%u", 0), - m_special(*this, "SPECIAL") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_mainram(*this, "mainram") + , m_z80_rom(*this, "audiocpu") + , m_eeprom(*this, "eeprom") + , m_soundfifo(*this, "soundfifo%u", 1) + , m_oki(*this, "oki%u", 1) + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_key(*this, "KEY.%u", 0) + , m_special(*this, "SPECIAL") + , m_z80_bank(*this, "z80_bank") { } required_device m_maincpu; @@ -38,18 +34,16 @@ public: required_shared_ptr m_mainram; optional_memory_region m_z80_rom; optional_device m_eeprom; - optional_device m_soundflash1; - optional_device m_soundflash2; - optional_device m_soundfifo1; - optional_device m_soundfifo2; - optional_device m_oki1; - optional_device m_oki2; + optional_device_array m_soundfifo; + optional_device_array m_oki; required_device m_gfxdecode; required_device m_palette; optional_ioport_array<5> m_key; optional_ioport m_special; + optional_memory_bank m_z80_bank; + int m_z80_prg_transfer_pos; int m_z80_lastbank; uint8_t m_sb_coin_latch; @@ -106,8 +100,6 @@ public: DECLARE_WRITE8_MEMBER(eeprom_w); DECLARE_WRITE8_MEMBER(spi_layerbanks_eeprom_w); DECLARE_WRITE8_MEMBER(oki_bank_w); - DECLARE_READ8_MEMBER(flashrom_read); - DECLARE_WRITE8_MEMBER(flashrom_write); DECLARE_READ32_MEMBER(senkyu_speedup_r); DECLARE_READ32_MEMBER(senkyua_speedup_r); @@ -178,6 +170,7 @@ public: void sei252_map(address_map &map); void spi_map(address_map &map); void spi_soundmap(address_map &map); + void spi_ymf271_map(address_map &map); void sxx2e_map(address_map &map); void sxx2e_soundmap(address_map &map); void sxx2f_map(address_map &map); -- cgit v1.2.3