Partially revert 09466d3382 due to crashes (nw)

This commit is contained in:
AJR 2018-08-02 18:11:28 -04:00
parent 781f17725a
commit 88943f6dfc
12 changed files with 112 additions and 69 deletions

View File

@ -170,18 +170,18 @@ IRQ_CALLBACK_MEMBER(seibu_sound_device::im0_vector_cb)
}
void seibu_sound_device::irq_clear_w(u8)
WRITE8_MEMBER( seibu_sound_device::irq_clear_w )
{
/* Denjin Makai and SD Gundam doesn't like this, it's tied to the rst18 ack ONLY so it could be related to it. */
//update_irq_lines(VECTOR_INIT);
}
void seibu_sound_device::rst10_ack_w(u8)
WRITE8_MEMBER( seibu_sound_device::rst10_ack_w )
{
/* Unused for now */
}
void seibu_sound_device::rst18_ack_w(u8)
WRITE8_MEMBER( seibu_sound_device::rst18_ack_w )
{
update_irq_lines(RST18_CLEAR);
}
@ -191,51 +191,51 @@ WRITE_LINE_MEMBER( seibu_sound_device::fm_irqhandler )
update_irq_lines(state ? RST10_ASSERT : RST10_CLEAR);
}
u8 seibu_sound_device::ym_r(offs_t offset)
READ8_MEMBER( seibu_sound_device::ym_r )
{
return m_ym_read_cb(offset);
}
void seibu_sound_device::ym_w(offs_t offset, u8 data)
WRITE8_MEMBER( seibu_sound_device::ym_w )
{
m_ym_write_cb(offset, data);
}
void seibu_sound_device::bank_w(u8 data)
WRITE8_MEMBER( seibu_sound_device::bank_w )
{
if (m_rom_bank.found())
m_rom_bank->set_entry(data & 1);
}
void seibu_sound_device::coin_w(u8 data)
WRITE8_MEMBER( seibu_sound_device::coin_w )
{
machine().bookkeeping().coin_counter_w(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2);
}
u8 seibu_sound_device::soundlatch_r(offs_t offset)
READ8_MEMBER( seibu_sound_device::soundlatch_r )
{
return m_main2sub[offset];
}
u8 seibu_sound_device::main_data_pending_r()
READ8_MEMBER( seibu_sound_device::main_data_pending_r )
{
return m_sub2main_pending ? 1 : 0;
}
void seibu_sound_device::main_data_w(offs_t offset, u8 data)
WRITE8_MEMBER( seibu_sound_device::main_data_w )
{
m_sub2main[offset] = data;
}
void seibu_sound_device::pending_w(u8)
WRITE8_MEMBER( seibu_sound_device::pending_w )
{
/* just a guess */
m_main2sub_pending = 0;
m_sub2main_pending = 1;
}
u8 seibu_sound_device::main_r(offs_t offset)
READ8_MEMBER( seibu_sound_device::main_r )
{
//logerror("%s: seibu_main_r(%x)\n",machine().describe_context(),offset);
switch (offset)
@ -251,7 +251,7 @@ u8 seibu_sound_device::main_r(offs_t offset)
}
}
void seibu_sound_device::main_w(offs_t offset, u8 data)
WRITE8_MEMBER( seibu_sound_device::main_w )
{
switch (offset)
{
@ -275,7 +275,7 @@ void seibu_sound_device::main_w(offs_t offset, u8 data)
}
// used only by NMK16 bootlegs
void seibu_sound_device::main_mustb_w(offs_t, u16 data, u16 mem_mask)
WRITE16_MEMBER( seibu_sound_device::main_mustb_w )
{
if (ACCESSING_BITS_0_7)
m_main2sub[0] = data & 0xff;
@ -318,7 +318,7 @@ sei80bu_device::sei80bu_device(const machine_config &mconfig, const char *tag, d
{
}
u8 sei80bu_device::data_r(offs_t offset)
READ8_MEMBER(sei80bu_device::data_r)
{
u16 a = offset;
u8 src = read_byte(offset);
@ -335,7 +335,7 @@ u8 sei80bu_device::data_r(offs_t offset)
return src;
}
u8 sei80bu_device::opcode_r(offs_t offset)
READ8_MEMBER(sei80bu_device::opcode_r)
{
u16 a = offset;
u8 src = read_byte(offset);
@ -406,7 +406,7 @@ void seibu_adpcm_device::decrypt()
}
}
void seibu_adpcm_device::adr_w(offs_t offset, u8 data)
WRITE8_MEMBER( seibu_adpcm_device::adr_w )
{
if (m_stream)
m_stream->update();
@ -422,7 +422,7 @@ void seibu_adpcm_device::adr_w(offs_t offset, u8 data)
}
}
void seibu_adpcm_device::ctl_w(u8 data)
WRITE8_MEMBER( seibu_adpcm_device::ctl_w )
{
// sequence is 00 02 01 each time.
if (m_stream)

View File

@ -51,21 +51,21 @@ public:
template<class Object> devcb_base &set_ym_read_callback(Object &&object) { return m_ym_read_cb.set_callback(std::forward<Object>(object)); }
template<class Object> devcb_base &set_ym_write_callback(Object &&object) { return m_ym_write_cb.set_callback(std::forward<Object>(object)); }
u8 main_r(offs_t offset);
void main_w(offs_t offset, u8 data);
void main_mustb_w(offs_t, u16 data, u16 mem_mask);
void irq_clear_w(u8);
void rst10_ack_w(u8);
void rst18_ack_w(u8);
u8 ym_r(offs_t offset);
void ym_w(offs_t offset, u8 data);
void bank_w(u8 data);
void coin_w(u8 data);
DECLARE_READ8_MEMBER( main_r );
DECLARE_WRITE8_MEMBER( main_w );
DECLARE_WRITE16_MEMBER( main_mustb_w );
DECLARE_WRITE8_MEMBER( irq_clear_w );
DECLARE_WRITE8_MEMBER( rst10_ack_w );
DECLARE_WRITE8_MEMBER( rst18_ack_w );
DECLARE_READ8_MEMBER( ym_r );
DECLARE_WRITE8_MEMBER( ym_w );
DECLARE_WRITE8_MEMBER( bank_w );
DECLARE_WRITE8_MEMBER( coin_w );
WRITE_LINE_MEMBER( fm_irqhandler );
u8 soundlatch_r(offs_t offset);
u8 main_data_pending_r();
void main_data_w(offs_t offset, u8 data);
void pending_w(u8);
DECLARE_READ8_MEMBER( soundlatch_r );
DECLARE_READ8_MEMBER( main_data_pending_r );
DECLARE_WRITE8_MEMBER( main_data_w );
DECLARE_WRITE8_MEMBER( pending_w );
IRQ_CALLBACK_MEMBER(im0_vector_cb);
@ -113,8 +113,8 @@ class sei80bu_device : public device_t, public device_rom_interface
public:
sei80bu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
u8 data_r(offs_t offset);
u8 opcode_r(offs_t offset);
DECLARE_READ8_MEMBER(data_r);
DECLARE_READ8_MEMBER(opcode_r);
protected:
// device-level overrides
@ -134,8 +134,8 @@ public:
~seibu_adpcm_device() {}
void decrypt();
void adr_w(offs_t offset, u8 data);
void ctl_w(u8 data);
DECLARE_WRITE8_MEMBER( adr_w );
DECLARE_WRITE8_MEMBER( ctl_w );
protected:
// device-level overrides

View File

@ -184,9 +184,9 @@ void bloodbro_state::skysmash_map(address_map &map)
map(0xc0000, 0xc004f).rw("crtc", FUNC(seibu_crtc_device::read_alt), FUNC(seibu_crtc_device::write_alt));
}
void bloodbro_state::weststry_soundlatch_w(offs_t offset, u8 data)
WRITE8_MEMBER(bloodbro_state::weststry_soundlatch_w)
{
m_seibu_sound->main_w(offset, data);
m_seibu_sound->main_w(space, offset, data, mem_mask);
if (offset == 1)
m_audiocpu->set_input_line(0, ASSERT_LINE);

View File

@ -86,10 +86,10 @@ WRITE16_MEMBER(cabal_state::cabalbl_sndcmd_w)
void cabal_state::sound_irq_trigger_word_w(offs_t, u16 data, u16 mem_mask)
WRITE16_MEMBER(cabal_state::sound_irq_trigger_word_w)
{
if (ACCESSING_BITS_0_7)
m_seibu_sound->main_w(4, data & 0x00ff);
m_seibu_sound->main_w(space, 4, data & 0x00ff);
/* spin for a while to let the Z80 read the command, otherwise coins "stick" */
m_maincpu->spin_until_time(attotime::from_usec(50));

View File

@ -29,13 +29,13 @@
/***************************************************************************/
u8 dcon_state::sdgndmps_sound_comms_r(offs_t offset)
READ8_MEMBER(dcon_state::sdgndmps_sound_comms_r)
{
// Routine at 134C sends no sound commands if lowest bit is 0
if (offset == 5) // ($a000a)
return 1;
return m_seibu_sound->main_r(offset);
return m_seibu_sound->main_r(space, offset);
}
void dcon_state::dcon_map(address_map &map)

View File

@ -94,13 +94,13 @@ Preliminary COP MCU memory map
/*****************************************************************************/
u8 legionna_state::denjinmk_sound_comms_r(offs_t offset)
READ8_MEMBER(legionna_state::denjinmk_sound_comms_r)
{
// Routine at 5FDC spins indefinitely until the lowest bit becomes 1
if (offset == 10) // ($100714)
return 1;
return m_seibu_sound->main_r((offset >> 1) & 7);
return m_seibu_sound->main_r(space, (offset >> 1) & 7);
}
void legionna_state::legionna_cop_map(address_map &map)
@ -189,8 +189,12 @@ void legionna_state::legionna_map(address_map &map)
map(0x100600, 0x10064f).rw(m_crtc, FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
map(0x100680, 0x100681).nopw(); // irq ack?
map(0x100700, 0x10071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100740, 0x100741).portr("DSW1");
map(0x100744, 0x100745).portr("PLAYERS12");
map(0x100748, 0x100749).portr("PLAYERS34");
@ -219,8 +223,12 @@ void legionna_state::heatbrl_map(address_map &map)
map(0x100748, 0x100749).portr("PLAYERS34");
map(0x10074c, 0x10074d).portr("SYSTEM");
map(0x1007c0, 0x1007df).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100800, 0x100fff).ram(); // .w(FUNC(legionna_state::legionna_background_w)).share("back_data");
map(0x101000, 0x1017ff).ram(); // .w(FUNC(legionna_state::legionna_foreground_w).share("fore_data");
map(0x101800, 0x101fff).ram(); // .w(FUNC(legionna_state::legionna_midground_w).share("mid_data");
@ -239,8 +247,12 @@ void legionna_state::godzilla_map(address_map &map)
map(0x100600, 0x10064f).rw(m_crtc, FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
map(0x100680, 0x100681).nopw(); // irq ack?
map(0x100700, 0x10071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100740, 0x100741).portr("DSW1");
map(0x100744, 0x100745).portr("PLAYERS12");
map(0x100748, 0x100749).portr("PLAYERS34");
@ -294,7 +306,10 @@ void legionna_state::denjinmk_map(address_map &map)
map(0x100600, 0x10064f).rw(m_crtc, FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
map(0x100680, 0x100681).nopw(); // irq ack?
map(0x100700, 0x10071f).r(FUNC(legionna_state::denjinmk_sound_comms_r))
.lw8("seibu_sound_w", [this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
.lw8("seibu_sound_w",
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100740, 0x100741).portr("DSW1");
map(0x100744, 0x100745).portr("PLAYERS12");
map(0x100748, 0x100749).portr("PLAYERS34");
@ -322,8 +337,12 @@ void legionna_state::grainbow_map(address_map &map)
map(0x100600, 0x10064f).rw(m_crtc, FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
map(0x100680, 0x100681).nopw(); // irq ack?
map(0x100700, 0x10071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100740, 0x100741).portr("DSW1");
map(0x100744, 0x100745).portr("PLAYERS12");
map(0x100748, 0x100749).portr("PLAYERS34");
@ -349,8 +368,12 @@ void legionna_state::cupsoc_map(address_map &map)
map(0x100600, 0x10064f).rw(m_crtc, FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
map(0x100680, 0x100681).nopw(); // irq ack?
map(0x100700, 0x10071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100740, 0x100741).portr("DSW1");
map(0x100744, 0x100745).portr("PLAYERS12");
map(0x100748, 0x100749).portr("PLAYERS34");
@ -390,8 +413,12 @@ void legionna_state::cupsocs_map(address_map &map)
map(0x10070c, 0x10070d).portr("SYSTEM");
map(0x10071c, 0x10071d).portr("DSW2");
map(0x100740, 0x10075f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x100800, 0x100fff).ram(); // .w(FUNC(legionna_state::legionna_background_w)).share("back_data");
map(0x101000, 0x1017ff).ram(); // .w(FUNC(legionna_state::legionna_foreground_w).share("fore_data");
map(0x101800, 0x101fff).ram(); // .w(FUNC(legionna_state::legionna_midground_w).share("mid_data");

View File

@ -493,8 +493,12 @@ void r2dx_v33_state::nzeroteam_base_map(address_map &map)
// map(0x00762, 0x00763).r(FUNC(r2dx_v33_state::nzerotea_unknown_r));
map(0x00780, 0x0079f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x00800, 0x00fff).ram();
map(0x01000, 0x0bfff).ram();

View File

@ -973,8 +973,12 @@ void raiden2_state::raiden2_mem(address_map &map)
map(0x0068e, 0x0068f).nopw(); //irq ack / sprite buffering?
map(0x00700, 0x0071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x00740, 0x00741).portr("DSW");
map(0x00744, 0x00745).portr("P1_P2");
@ -1018,8 +1022,12 @@ void raiden2_state::zeroteam_mem(address_map &map)
map(0x0068e, 0x0068f).nopw(); // irq ack / sprite buffering?
map(0x00700, 0x0071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x00740, 0x00741).portr("DSW");
map(0x00744, 0x00745).portr("P1_P2");
@ -1052,8 +1060,12 @@ void raiden2_state::xsedae_mem(address_map &map)
map(0x0068e, 0x0068f).nopw(); //irq ack / sprite buffering?
map(0x00700, 0x0071f).lrw8("seibu_sound_rw",
[this](offs_t offset) { return m_seibu_sound->main_r(offset >> 1); },
[this](offs_t offset, u8 data) { m_seibu_sound->main_w(offset >> 1, data); }).umask16(0x00ff);
[this](address_space &space, offs_t offset, u8 mem_mask) {
return m_seibu_sound->main_r(space, offset >> 1, mem_mask);
},
[this](address_space &space, offs_t offset, u8 data, u8 mem_mask) {
m_seibu_sound->main_w(space, offset >> 1, data, mem_mask);
}).umask16(0x00ff);
map(0x00740, 0x00741).portr("DSW");
map(0x00744, 0x00745).portr("P1_P2");

View File

@ -48,7 +48,7 @@ public:
DECLARE_WRITE16_MEMBER(layer_en_w);
DECLARE_WRITE16_MEMBER(layer_scroll_w);
DECLARE_WRITE16_MEMBER(weststry_layer_scroll_w);
void weststry_soundlatch_w(offs_t offset, u8 data);
DECLARE_WRITE8_MEMBER(weststry_soundlatch_w);
DECLARE_WRITE_LINE_MEMBER(weststry_opl_irq_w);
DECLARE_WRITE8_MEMBER(weststry_opl_w);
DECLARE_WRITE8_MEMBER(weststry_soundnmi_ack_w);

View File

@ -47,7 +47,7 @@ public:
DECLARE_WRITE16_MEMBER(text_videoram_w);
// cabal specific
void sound_irq_trigger_word_w(offs_t, u16 data, u16 mem_mask);
DECLARE_WRITE16_MEMBER(sound_irq_trigger_word_w);
// cabalbl specific
DECLARE_WRITE16_MEMBER(cabalbl_sndcmd_w);

View File

@ -44,7 +44,7 @@ private:
uint16_t m_scroll_ram[6];
uint16_t m_layer_en;
u8 sdgndmps_sound_comms_r(offs_t offset);
DECLARE_READ8_MEMBER(sdgndmps_sound_comms_r);
DECLARE_WRITE16_MEMBER(layer_en_w);
DECLARE_WRITE16_MEMBER(layer_scroll_w);

View File

@ -80,7 +80,7 @@ private:
DECLARE_WRITE16_MEMBER(legionna_midground_w);
DECLARE_WRITE16_MEMBER(legionna_foreground_w);
DECLARE_WRITE16_MEMBER(legionna_text_w);
u8 denjinmk_sound_comms_r(offs_t offset);
DECLARE_READ8_MEMBER(denjinmk_sound_comms_r);
DECLARE_WRITE8_MEMBER(godzilla_oki_bank_w);
DECLARE_WRITE16_MEMBER(denjinmk_setgfxbank);
DECLARE_WRITE16_MEMBER(heatbrl_setgfxbank);