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
This commit is contained in:
cam900 2018-02-22 22:10:11 +09:00 committed by Vas Crabb
parent 638f84f3db
commit 4457a26752
8 changed files with 234 additions and 232 deletions

View File

@ -13,7 +13,6 @@
- Src B and Src NOTE bits - Src B and Src NOTE bits
- statusreg Busy flag - statusreg Busy flag
- timer register 0x11 - timer register 0x11
- ch2/ch3 (4 speakers)
- PFM (FM using external PCM waveform) - PFM (FM using external PCM waveform)
- detune (should be same as on other Yamaha chips) - detune (should be same as on other Yamaha chips)
- Acc On bit (some sound effects in viprp1?). The documentation says - Acc On bit (some sound effects in viprp1?). The documentation says
@ -25,6 +24,8 @@
#include "emu.h" #include "emu.h"
#include "ymf271.h" #include "ymf271.h"
#include <algorithm>
#define STD_CLOCK (16934400) #define STD_CLOCK (16934400)
#define MAXOUT (+32767) #define MAXOUT (+32767)
@ -452,7 +453,7 @@ void ymf271_device::update_pcm(int slotnum, int32_t *mixp, int length)
int i; int i;
int64_t final_volume; int64_t final_volume;
int16_t sample; 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]; 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) if (slot->bits == 8)
{ {
// 8bit // 8bit
sample = ymf271_read_memory(slot->startaddr + (slot->stepptr>>16))<<8; sample = read_byte(slot->startaddr + (slot->stepptr>>16))<<8;
} }
else else
{ {
// 12bit // 12bit
if (slot->stepptr & 0x10000) 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 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); 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; ch0_vol = (final_volume * m_lut_attenuation[slot->ch0_level]) >> 16;
ch1_vol = (final_volume * m_lut_attenuation[slot->ch1_level]) >> 16; ch1_vol = (final_volume * m_lut_attenuation[slot->ch1_level]) >> 16;
// ch2_vol = (final_volume * m_lut_attenuation[slot->ch2_level]) >> 16; ch2_vol = (final_volume * m_lut_attenuation[slot->ch2_level]) >> 16;
// ch3_vol = (final_volume * m_lut_attenuation[slot->ch3_level]) >> 16; ch3_vol = (final_volume * m_lut_attenuation[slot->ch3_level]) >> 16;
if (ch0_vol > 65536) ch0_vol = 65536; if (ch0_vol > 65536) ch0_vol = 65536;
if (ch1_vol > 65536) ch1_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 * ch0_vol) >> 16;
*mixp++ += (sample * ch1_vol) >> 16; *mixp++ += (sample * ch1_vol) >> 16;
*mixp++ += (sample * ch2_vol) >> 16;
*mixp++ += (sample * ch3_vol) >> 16;
// go to next step // go to next step
slot->stepptr += slot->step; slot->stepptr += slot->step;
@ -567,12 +572,12 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t **
int op; int op;
int32_t *mixp; 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++) for (j = 0; j < 12; j++)
{ {
YMF271Group *slot_group = &m_groups[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) 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 slot2 = j + (1*12);
int slot3 = j + (2*12); int slot3 = j + (2*12);
int slot4 = j + (3*12); int slot4 = j + (3*12);
mixp = m_mix_buffer.get(); mixp = &m_mix_buffer[0];
if (m_slots[slot1].active) 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]) + (output2 * m_lut_attenuation[m_slots[slot2].ch1_level]) +
(output3 * m_lut_attenuation[m_slots[slot3].ch1_level]) + (output3 * m_lut_attenuation[m_slots[slot3].ch1_level]) +
(output4 * m_lut_attenuation[m_slots[slot4].ch1_level])) >> 16; (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; break;
@ -817,7 +830,7 @@ void ymf271_device::sound_stream_update(sound_stream &stream, stream_sample_t **
int slot1 = j + ((op + 0) * 12); int slot1 = j + ((op + 0) * 12);
int slot3 = j + ((op + 2) * 12); int slot3 = j + ((op + 2) * 12);
mixp = m_mix_buffer.get(); mixp = &m_mix_buffer[0];
if (m_slots[slot1].active) if (m_slots[slot1].active)
{ {
for (i = 0; i < samples; i++) 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; (output3 * m_lut_attenuation[m_slots[slot3].ch0_level])) >> 16;
*mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch1_level]) + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch1_level]) +
(output3 * m_lut_attenuation[m_slots[slot3].ch1_level])) >> 16; (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 slot1 = j + (0*12);
int slot2 = j + (1*12); int slot2 = j + (1*12);
int slot3 = j + (2*12); int slot3 = j + (2*12);
mixp = m_mix_buffer.get(); mixp = &m_mix_buffer[0];
if (m_slots[slot1].active) 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]) + *mixp++ += ((output1 * m_lut_attenuation[m_slots[slot1].ch1_level]) +
(output2 * m_lut_attenuation[m_slots[slot2].ch1_level]) + (output2 * m_lut_attenuation[m_slots[slot2].ch1_level]) +
(output3 * m_lut_attenuation[m_slots[slot3].ch1_level])) >> 16; (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); update_pcm(j + (3*12), mixp, samples);
break; 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++) for (i = 0; i < samples; i++)
{ {
outputs[0][i] = (*mixp++)>>2; outputs[0][i] = (*mixp++)>>2;
outputs[1][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) if (slot->active)
{ {
//calculate_status_end(slotnum,true); status changes if keyoff? verify this from real hardware.
slot->env_state = ENV_RELEASE; 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) void ymf271_device::ymf271_write_timer(uint8_t address, uint8_t data)
{ {
if ((address & 0xf0) == 0) if ((address & 0xf0) == 0)
@ -1433,8 +1441,8 @@ void ymf271_device::ymf271_write_timer(uint8_t address, uint8_t data)
case 0x17: case 0x17:
m_ext_address = (m_ext_address + 1) & 0x7fffff; m_ext_address = (m_ext_address + 1) & 0x7fffff;
if (!m_ext_rw && !m_ext_write_handler.isnull()) if (!m_ext_rw)
m_ext_write_handler(m_ext_address, data); space(0).write_byte(m_ext_address, data);
break; break;
case 0x20: case 0x20:
@ -1513,7 +1521,7 @@ READ8_MEMBER( ymf271_device::read )
uint8_t ret = m_ext_readlatch; uint8_t ret = m_ext_readlatch;
m_ext_address = (m_ext_address + 1) & 0x7fffff; 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; return ret;
} }
@ -1721,6 +1729,7 @@ void ymf271_device::init_state()
save_item(NAME(m_ext_address)); save_item(NAME(m_ext_address));
save_item(NAME(m_ext_rw)); save_item(NAME(m_ext_rw));
save_item(NAME(m_ext_readlatch)); 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_timA = timer_alloc(0);
m_timB = timer_alloc(1); m_timB = timer_alloc(1);
m_mem_size = m_mem_base.bytes();
m_irq_handler.resolve(); m_irq_handler.resolve();
m_ext_read_handler.resolve(); m_master_clock = clock();
m_ext_write_handler.resolve();
init_tables(); init_tables();
init_state(); init_state();
m_stream = machine().sound().stream_alloc(*this, 0, 2, clock()/384); m_mix_buffer.resize(m_master_clock/(384/4));
m_mix_buffer = std::make_unique<int32_t[]>(44100*2); 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() 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(); calculate_clock_correction();
} }
void ymf271_device::rom_bank_updated()
{
m_stream->update();
}
DEFINE_DEVICE_TYPE(YMF271, ymf271_device, "ymf271", "Yamaha YMF271 OPX") 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) 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_t(mconfig, YMF271, tag, owner, clock)
, device_sound_interface(mconfig, *this) , device_sound_interface(mconfig, *this)
, device_rom_interface(mconfig, *this, 23)
, m_timerA(0) , m_timerA(0)
, m_timerB(0) , m_timerB(0)
, m_irqstate(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_address(0)
, m_ext_rw(0) , m_ext_rw(0)
, m_ext_readlatch(0) , m_ext_readlatch(0)
, m_mem_base(*this, DEVICE_SELF) , m_master_clock(0)
, m_mem_size(0)
, m_timA(nullptr) , m_timA(nullptr)
, m_timB(nullptr) , m_timB(nullptr)
, m_stream(nullptr) , m_stream(nullptr)
, m_mix_buffer(nullptr)
, m_irq_handler(*this) , m_irq_handler(*this)
, m_ext_read_handler(*this)
, m_ext_write_handler(*this)
{ {
memset(m_slots, 0, sizeof(m_slots)); memset(m_slots, 0, sizeof(m_slots));
memset(m_groups, 0, sizeof(m_groups)); memset(m_groups, 0, sizeof(m_groups));

View File

@ -9,21 +9,15 @@
#define MCFG_YMF271_IRQ_HANDLER(_devcb) \ #define MCFG_YMF271_IRQ_HANDLER(_devcb) \
devcb = &ymf271_device::set_irq_handler(*device, DEVCB_##_devcb); devcb = &ymf271_device::set_irq_handler(*device, DEVCB_##_devcb);
#define MCFG_YMF271_EXT_READ_HANDLER(_devcb) \ class ymf271_device : public device_t, public device_sound_interface, public device_rom_interface
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
{ {
public: 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); ymf271_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// static configuration helpers // static configuration helpers
template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<ymf271_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); } template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<ymf271_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_ext_read_handler(device_t &device, Object &&cb) { return downcast<ymf271_device &>(device).m_ext_read_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_ext_write_handler(device_t &device, Object &&cb) { return downcast<ymf271_device &>(device).m_ext_write_handler.set_callback(std::forward<Object>(cb)); }
DECLARE_READ8_MEMBER( read ); DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( write );
@ -38,6 +32,9 @@ protected:
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; 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: private:
struct YMF271Slot struct YMF271Slot
{ {
@ -113,7 +110,6 @@ private:
void ymf271_write_fm(int bank, uint8_t address, uint8_t data); 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_pcm(uint8_t address, uint8_t data);
void ymf271_write_timer(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_keyscaled_rate(int rate, int keycode, int keyscale);
inline int get_internal_keycode(int block, int fns); inline int get_internal_keycode(int block, int fns);
@ -149,17 +145,14 @@ private:
uint8_t m_ext_rw; uint8_t m_ext_rw;
uint8_t m_ext_readlatch; uint8_t m_ext_readlatch;
optional_region_ptr<uint8_t> m_mem_base; uint32_t m_master_clock;
uint32_t m_mem_size;
emu_timer *m_timA; emu_timer *m_timA;
emu_timer *m_timB; emu_timer *m_timB;
sound_stream *m_stream; sound_stream *m_stream;
std::unique_ptr<int32_t[]> m_mix_buffer; std::vector<int32_t> m_mix_buffer;
devcb_write_line m_irq_handler; devcb_write_line m_irq_handler;
devcb_read8 m_ext_read_handler;
devcb_write8 m_ext_write_handler;
}; };
DECLARE_DEVICE_TYPE(YMF271, ymf271_device) DECLARE_DEVICE_TYPE(YMF271, ymf271_device)

View File

@ -155,7 +155,6 @@ public:
TILE_GET_INFO_MEMBER(get_ms32_bg1_tile_info); TILE_GET_INFO_MEMBER(get_ms32_bg1_tile_info);
TILE_GET_INFO_MEMBER(get_ms32_roz0_tile_info); TILE_GET_INFO_MEMBER(get_ms32_roz0_tile_info);
TILE_GET_INFO_MEMBER(get_ms32_roz1_tile_info); TILE_GET_INFO_MEMBER(get_ms32_roz1_tile_info);
virtual void machine_reset() override;
virtual void video_start() 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_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); 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(0x3f70, 0x3f70) AM_WRITENOP // watchdog? banking? very noisy
AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w) AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w)
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_RANGE(0x4000, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank4") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("z80bank1")
AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank5") AM_RANGE(0xc000, 0xffff) AM_ROMBANK("z80bank2")
ADDRESS_MAP_END 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) 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_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_CPU_PROGRAM_MAP(bnstars_sound_map)
MCFG_QUANTUM_TIME(attotime::from_hz(60000)) MCFG_QUANTUM_TIME(attotime::from_hz(60000))
@ -856,14 +848,19 @@ MACHINE_CONFIG_START(bnstars_state::bnstars)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") 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_ADD("ymf1", YMF271, 16934400)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 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_ADD("ymf2", YMF271, 16934400)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 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_END
@ -937,4 +934,4 @@ DRIVER_INIT_MEMBER(bnstars_state,bnstars)
configure_banks(); 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 )

View File

@ -523,7 +523,6 @@ READ32_MEMBER(ms32_state::ms32_read_inputs3)
WRITE32_MEMBER(ms32_state::ms32_sound_w) WRITE32_MEMBER(ms32_state::ms32_sound_w)
{ {
m_soundlatch->write(space, 0, data & 0xff); m_soundlatch->write(space, 0, data & 0xff);
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
// give the Z80 time to respond // give the Z80 time to respond
m_maincpu->spin_until_time(attotime::from_usec(40)); 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) READ8_MEMBER(ms32_state::latch_r)
{ {
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
return m_soundlatch->read(space,0)^0xff; return m_soundlatch->read(space,0)^0xff;
} }
WRITE8_MEMBER(ms32_state::ms32_snd_bank_w) WRITE8_MEMBER(ms32_state::ms32_snd_bank_w)
{ {
membank("bank4")->set_entry((data >> 0) & 0x0F); m_z80bank[0]->set_entry((data >> 0) & 0x0F);
membank("bank5")->set_entry((data >> 4) & 0x0F); m_z80bank[1]->set_entry((data >> 4) & 0x0F);
} }
WRITE8_MEMBER(ms32_state::to_main_w) 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(0x3f70, 0x3f70) AM_WRITENOP // watchdog? banking? very noisy
AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w) AM_RANGE(0x3f80, 0x3f80) AM_WRITE(ms32_snd_bank_w)
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_RANGE(0x4000, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank4") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("z80bank1")
AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank5") AM_RANGE(0xc000, 0xffff) AM_ROMBANK("z80bank2")
ADDRESS_MAP_END ADDRESS_MAP_END
@ -1691,8 +1689,9 @@ ADDRESS_MAP_END
void ms32_state::machine_reset() void ms32_state::machine_reset()
{ {
membank("bank4")->set_entry(0); for (int bank = 0; bank < 2; bank++)
membank("bank5")->set_entry(1); m_z80bank[bank]->set_entry(bank);
irq_init(); 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_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_CPU_PROGRAM_MAP(ms32_sound_map)
MCFG_QUANTUM_TIME(attotime::from_hz(60000)) MCFG_QUANTUM_TIME(attotime::from_hz(60000))
@ -1726,12 +1725,16 @@ MACHINE_CONFIG_START(ms32_state::ms32)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch") 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_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 MACHINE_CONFIG_END
@ -2496,8 +2499,9 @@ ROM_END
void ms32_state::configure_banks() void ms32_state::configure_banks()
{ {
save_item(NAME(m_to_main)); save_item(NAME(m_to_main));
membank("bank4")->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000); for (int bank = 0; bank < 2; bank++)
membank("bank5")->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000); m_z80bank[bank]->configure_entries(0, 16, memregion("audiocpu")->base() + 0x4000, 0x4000);
} }
DRIVER_INIT_MEMBER(ms32_state,ms32_common) 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, 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 | 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 )
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, 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_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) 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_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_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, 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_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_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, 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_IMPERFECT_SOUND | 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_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_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, 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_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_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( 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_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_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( 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_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_SUPPORTS_SAVE )
/* these boot and show something */ /* 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 ) GAME( 1994, f1superb, 0, f1superb, f1superb, ms32_state, f1superb, ROT0, "Jaleco", "F1 Super Battle", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -878,12 +878,9 @@ Notes:
#include "cpu/i386/i386.h" #include "cpu/i386/i386.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/7200fifo.h"
#include "machine/ds2404.h" #include "machine/ds2404.h"
#include "machine/eepromser.h"
#include "machine/intelfsh.h" #include "machine/intelfsh.h"
#include "machine/seibuspi.h" #include "machine/seibuspi.h"
#include "sound/okim6295.h"
#include "sound/ymf271.h" #include "sound/ymf271.h"
#include "sound/ymz280b.h" #include "sound/ymz280b.h"
#include "video/seibu_crtc.h" #include "video/seibu_crtc.h"
@ -914,8 +911,8 @@ READ8_MEMBER(seibuspi_state::sound_fifo_status_r)
// d0: fifo full flag (z80) // d0: fifo full flag (z80)
// d1: fifo empty flag (main) // d1: fifo empty flag (main)
// other bits: unused? // other bits: unused?
int d1 = (m_soundfifo2 != nullptr) ? m_soundfifo2->ef_r() << 1 : 0; int d1 = (m_soundfifo[1] != nullptr) ? m_soundfifo[1]->ef_r() << 1 : 0;
return d1 | m_soundfifo1->ff_r(); return d1 | m_soundfifo[0]->ff_r();
} }
READ8_MEMBER(seibuspi_state::spi_status_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) 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) 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) // d0: fifo full flag (main)
// d1: fifo empty flag (z80) // d1: fifo empty flag (z80)
// other bits: unused? // other bits: unused?
int d0 = (m_soundfifo2 != nullptr) ? m_soundfifo2->ff_r() : 0; int d0 = (m_soundfifo[1] != nullptr) ? m_soundfifo[1]->ff_r() : 0;
return d0 | m_soundfifo1->ef_r() << 1; return d0 | m_soundfifo[0]->ef_r() << 1;
} }
WRITE8_MEMBER(seibuspi_state::z80_bank_w) WRITE8_MEMBER(seibuspi_state::z80_bank_w)
@ -1135,7 +1132,7 @@ WRITE8_MEMBER(seibuspi_state::z80_bank_w)
if (bank != m_z80_lastbank) if (bank != m_z80_lastbank)
{ {
m_z80_lastbank = bank; m_z80_lastbank = bank;
membank("bank1")->set_entry(bank); m_z80_bank->set_entry(bank);
} }
// d3: watchdog? // d3: watchdog?
@ -1167,7 +1164,7 @@ ADDRESS_MAP_START(seibuspi_state::sxx2e_soundmap)
AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN") AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
AM_RANGE(0x401b, 0x401b) AM_WRITE(z80_bank_w) AM_RANGE(0x401b, 0x401b) AM_WRITE(z80_bank_w)
AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("ymf", ymf271_device, read, write) 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_END
ADDRESS_MAP_START(seibuspi_state::spi_soundmap) ADDRESS_MAP_START(seibuspi_state::spi_soundmap)
@ -1176,27 +1173,15 @@ ADDRESS_MAP_START(seibuspi_state::spi_soundmap)
AM_RANGE(0x400a, 0x400a) AM_READ_PORT("JUMPERS") // TO DO: get these to actually work AM_RANGE(0x400a, 0x400a) AM_READ_PORT("JUMPERS") // TO DO: get these to actually work
ADDRESS_MAP_END 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) WRITE_LINE_MEMBER(seibuspi_state::ymf_irqhandler)
{ {
if (state) if (state)
@ -1829,7 +1814,7 @@ IRQ_CALLBACK_MEMBER(seibuspi_state::spi_irq_callback)
void seibuspi_state::init_spi_common() void seibuspi_state::init_spi_common()
{ {
if (m_z80_rom != nullptr) 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() 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); 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_lastbank = 0;
m_z80_prg_transfer_pos = 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_SOUND_ADD("ymf", YMF271, XTAL(16'934'400))
MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler))
MCFG_YMF271_EXT_READ_HANDLER(READ8(seibuspi_state, flashrom_read)) MCFG_DEVICE_ADDRESS_MAP(0, spi_ymf271_map)
MCFG_YMF271_EXT_WRITE_HANDLER(WRITE8(seibuspi_state, flashrom_write))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 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_END
MACHINE_CONFIG_START(seibuspi_state::ejanhs) MACHINE_CONFIG_START(seibuspi_state::ejanhs)
@ -1931,7 +1917,7 @@ MACHINE_CONFIG_END
MACHINE_RESET_MEMBER(seibuspi_state,sxx2e) MACHINE_RESET_MEMBER(seibuspi_state,sxx2e)
{ {
membank("bank1")->set_entry(0); m_z80_bank->set_entry(0);
m_z80_lastbank = 0; m_z80_lastbank = 0;
m_sb_coin_latch = 0; m_sb_coin_latch = 0;
} }
@ -1952,13 +1938,17 @@ MACHINE_CONFIG_START(seibuspi_state::sxx2e)
MCFG_DEVICE_REMOVE("soundflash2") MCFG_DEVICE_REMOVE("soundflash2")
MCFG_DEVICE_REMOVE("soundfifo2") MCFG_DEVICE_REMOVE("soundfifo2")
/* sound hardware */ /* 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_SOUND_REPLACE("ymf", YMF271, XTAL(16'934'400))
MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
MACHINE_CONFIG_START(seibuspi_state::sxx2f) 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_SOUND_REPLACE("ymf", YMF271, XTAL(16'384'000)) // 16.384MHz(!)
MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler)) MCFG_YMF271_IRQ_HANDLER(WRITELINE(seibuspi_state, ymf_irqhandler))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -2079,11 +2068,11 @@ MACHINE_CONFIG_START(seibuspi_state::sys386f)
MCFG_VIDEO_START_OVERRIDE(seibuspi_state, sys386f) MCFG_VIDEO_START_OVERRIDE(seibuspi_state, sys386f)
/* sound hardware */ /* 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_ADD("ymz", YMZ280B, XTAL(16'384'000))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -3998,68 +3987,68 @@ ROM_END
/*****************************************************************************/ /*****************************************************************************/
/* SPI */ /* 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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 ) /* 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, 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 | 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, 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 | MACHINE_IMPERFECT_SOUND ) // Code is the same as the above Switzerland set, just different region byte 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 | MACHINE_IMPERFECT_SOUND ) 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 | 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 )
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( 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 | MACHINE_IMPERFECT_SOUND ) 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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, 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 | 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 )
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( 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 // 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, 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 | 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 )
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, 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 // 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, 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 | 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 )
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, 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 // 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, 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 | 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 )
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, 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, 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 | 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 )
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, 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 | 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 )
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, rfjett, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
/* SXX2E */ /* 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 */ /* 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 */ /* 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, 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 | MACHINE_IMPERFECT_SOUND ) // maybe test/proto? see notes at romdefs 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 */ /* 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 ) 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 )

View File

@ -201,7 +201,9 @@ public:
void segapcm_map(address_map &map); void segapcm_map(address_map &map);
void soundchips16_map(address_map &map); void soundchips16_map(address_map &map);
void soundchips_map(address_map &map); void soundchips_map(address_map &map);
void ymf271_map(address_map &map);
void ymz280b_map(address_map &map); void ymz280b_map(address_map &map);
private: private:
std::vector<uint8_t> m_file_data; std::vector<uint8_t> m_file_data;
required_device<bitbanger_device> m_file; required_device<bitbanger_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) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, qsound_rom_r)
ADDRESS_MAP_END 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) ADDRESS_MAP_START(vgmplay_state::ymz280b_map)
AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, ymz280b_rom_r) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, ymz280b_rom_r)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -1705,7 +1711,7 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
MCFG_SOUND_ADD("ymf271", YMF271, 16934400) 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(0, "lspeaker", 1)
MCFG_SOUND_ROUTE(1, "rspeaker", 1) MCFG_SOUND_ROUTE(1, "rspeaker", 1)

View File

@ -10,6 +10,12 @@ class ms32_state : public driver_device
public: public:
ms32_state(const machine_config &mconfig, device_type type, const char *tag) ms32_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, 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_mainram(*this, "mainram"),
m_roz_ctrl(*this, "roz_ctrl"), m_roz_ctrl(*this, "roz_ctrl"),
m_tx_scroll(*this, "tx_scroll"), m_tx_scroll(*this, "tx_scroll"),
@ -23,12 +29,14 @@ public:
m_txram(*this, "txram", 32), m_txram(*this, "txram", 32),
m_bgram(*this, "bgram", 32), m_bgram(*this, "bgram", 32),
m_f1superb_extraram(*this, "f1sb_extraram", 32), m_f1superb_extraram(*this, "f1sb_extraram", 32),
m_maincpu(*this, "maincpu"), m_z80bank(*this, "z80bank%u", 1) { }
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"), required_device<cpu_device> m_maincpu;
m_screen(*this, "screen"), required_device<cpu_device> m_audiocpu;
m_palette(*this, "palette"), required_device<gfxdecode_device> m_gfxdecode;
m_soundlatch(*this, "soundlatch") { } optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<generic_latch_8_device> m_soundlatch;
optional_shared_ptr<uint32_t> m_mainram; optional_shared_ptr<uint32_t> m_mainram;
optional_shared_ptr<uint32_t> m_roz_ctrl; optional_shared_ptr<uint32_t> m_roz_ctrl;
@ -43,6 +51,8 @@ public:
optional_shared_ptr<uint16_t> m_txram; optional_shared_ptr<uint16_t> m_txram;
optional_shared_ptr<uint16_t> m_bgram; optional_shared_ptr<uint16_t> m_bgram;
optional_shared_ptr<uint16_t> m_f1superb_extraram; optional_shared_ptr<uint16_t> m_f1superb_extraram;
optional_memory_bank_array<2> m_z80bank;
std::unique_ptr<uint8_t[]> m_nvram_8; std::unique_ptr<uint8_t[]> m_nvram_8;
uint32_t m_to_main; uint32_t m_to_main;
uint16_t m_irqreq; 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_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 draw_roz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect,int priority);
void configure_banks(); void configure_banks();
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
void ms32(machine_config &config); void ms32(machine_config &config);
void f1superb(machine_config &config); void f1superb(machine_config &config);
void f1superb_map(address_map &map); void f1superb_map(address_map &map);
void ms32_map(address_map &map); void ms32_map(address_map &map);
void ms32_sound_map(address_map &map); void ms32_sound_map(address_map &map);
optional_device<generic_latch_8_device> m_soundlatch; //not for bnstars.cpp
}; };

View File

@ -6,7 +6,6 @@
******************************************************************************/ ******************************************************************************/
#include "machine/intelfsh.h"
#include "machine/eepromser.h" #include "machine/eepromser.h"
#include "machine/7200fifo.h" #include "machine/7200fifo.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
@ -15,22 +14,19 @@ class seibuspi_state : public driver_device
{ {
public: public:
seibuspi_state(const machine_config &mconfig, device_type type, const char *tag) seibuspi_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu"), , m_maincpu(*this, "maincpu")
m_audiocpu(*this, "audiocpu"), , m_audiocpu(*this, "audiocpu")
m_mainram(*this, "mainram"), , m_mainram(*this, "mainram")
m_z80_rom(*this, "audiocpu"), , m_z80_rom(*this, "audiocpu")
m_eeprom(*this, "eeprom"), , m_eeprom(*this, "eeprom")
m_soundflash1(*this, "soundflash1"), , m_soundfifo(*this, "soundfifo%u", 1)
m_soundflash2(*this, "soundflash2"), , m_oki(*this, "oki%u", 1)
m_soundfifo1(*this, "soundfifo1"), , m_gfxdecode(*this, "gfxdecode")
m_soundfifo2(*this, "soundfifo2"), , m_palette(*this, "palette")
m_oki1(*this, "oki1"), , m_key(*this, "KEY.%u", 0)
m_oki2(*this, "oki2"), , m_special(*this, "SPECIAL")
m_gfxdecode(*this, "gfxdecode"), , m_z80_bank(*this, "z80_bank")
m_palette(*this, "palette"),
m_key(*this, "KEY.%u", 0),
m_special(*this, "SPECIAL")
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -38,18 +34,16 @@ public:
required_shared_ptr<uint32_t> m_mainram; required_shared_ptr<uint32_t> m_mainram;
optional_memory_region m_z80_rom; optional_memory_region m_z80_rom;
optional_device<eeprom_serial_93cxx_device> m_eeprom; optional_device<eeprom_serial_93cxx_device> m_eeprom;
optional_device<intel_e28f008sa_device> m_soundflash1; optional_device_array<fifo7200_device, 2> m_soundfifo;
optional_device<intel_e28f008sa_device> m_soundflash2; optional_device_array<okim6295_device, 2> m_oki;
optional_device<fifo7200_device> m_soundfifo1;
optional_device<fifo7200_device> m_soundfifo2;
optional_device<okim6295_device> m_oki1;
optional_device<okim6295_device> m_oki2;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
optional_ioport_array<5> m_key; optional_ioport_array<5> m_key;
optional_ioport m_special; optional_ioport m_special;
optional_memory_bank m_z80_bank;
int m_z80_prg_transfer_pos; int m_z80_prg_transfer_pos;
int m_z80_lastbank; int m_z80_lastbank;
uint8_t m_sb_coin_latch; uint8_t m_sb_coin_latch;
@ -106,8 +100,6 @@ public:
DECLARE_WRITE8_MEMBER(eeprom_w); DECLARE_WRITE8_MEMBER(eeprom_w);
DECLARE_WRITE8_MEMBER(spi_layerbanks_eeprom_w); DECLARE_WRITE8_MEMBER(spi_layerbanks_eeprom_w);
DECLARE_WRITE8_MEMBER(oki_bank_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(senkyu_speedup_r);
DECLARE_READ32_MEMBER(senkyua_speedup_r); DECLARE_READ32_MEMBER(senkyua_speedup_r);
@ -178,6 +170,7 @@ public:
void sei252_map(address_map &map); void sei252_map(address_map &map);
void spi_map(address_map &map); void spi_map(address_map &map);
void spi_soundmap(address_map &map); void spi_soundmap(address_map &map);
void spi_ymf271_map(address_map &map);
void sxx2e_map(address_map &map); void sxx2e_map(address_map &map);
void sxx2e_soundmap(address_map &map); void sxx2e_soundmap(address_map &map);
void sxx2f_map(address_map &map); void sxx2f_map(address_map &map);