mirror of
https://github.com/holub/mame
synced 2025-04-17 22:13:04 +03:00
shared/seibusound.cpp: Read coin inputs through sound device. (#13450)
Coin inputs are read through the sound MCU, so this documents the connections better and allows fake I/O ports to be removed. Also cleaned up code and improved tags.
This commit is contained in:
parent
515a8c31e8
commit
e7ae0c266c
@ -1795,9 +1795,6 @@ static INPUT_PORTS_START( mustang )
|
||||
PORT_DIPSETTING( 0xc000, "3" )
|
||||
PORT_DIPSETTING( 0x8000, "4" )
|
||||
PORT_DIPSETTING( 0x0000, "5" )
|
||||
|
||||
PORT_START("COIN") // referenced by Seibu sound board
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( hachamf_prot )
|
||||
@ -2092,13 +2089,6 @@ static INPUT_PORTS_START( strahl )
|
||||
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( strahljbl )
|
||||
PORT_INCLUDE(strahl)
|
||||
|
||||
PORT_START("COIN") // referenced by Seibu sound board
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( acrobatm )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
@ -2205,9 +2195,6 @@ static INPUT_PORTS_START( acrobatmbl )
|
||||
PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( 1C_4C ) )
|
||||
|
||||
PORT_START("COIN") // referenced by Seibu sound board
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( bioship )
|
||||
@ -2471,9 +2458,6 @@ static INPUT_PORTS_START( tdragonb )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8") // The manual states this dip is "Unused"
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("COIN") // referenced by Seibu sound board
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( tdragonb2 )
|
||||
@ -4669,8 +4653,9 @@ void nmk16_state::mustangb(machine_config &config)
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
|
||||
seibu_sound.coin_io_callback().set_constant(0xff); // unused
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -4888,8 +4873,9 @@ void nmk16_state::acrobatmbl(machine_config &config)
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
|
||||
seibu_sound.coin_io_callback().set_constant(0xff); // unused
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -4925,8 +4911,9 @@ void nmk16_state::tdragonb(machine_config &config) // bootleg using Raiden so
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
|
||||
seibu_sound.coin_io_callback().set_constant(0xff); // unused
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -5201,8 +5188,9 @@ void nmk16_state::strahljbl(machine_config &config)
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.int_callback().set_inputline(m_audiocpu, 0);
|
||||
seibu_sound.coin_io_callback().set_constant(0xff); // unused
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -10632,7 +10620,7 @@ GAME( 1990, mustangb2, mustang, mustangb, mustang, nmk16_state, empty
|
||||
GAME( 1991, acrobatmbl, acrobatm, acrobatmbl, acrobatmbl, nmk16_state, init_acrobatmbl, ROT270, "bootleg", "Acrobat Mission (bootleg with Raiden sounds)", 0 )
|
||||
GAME( 1991, tdragonb, tdragon, tdragonb, tdragonb, nmk16_state, init_tdragonb, ROT270, "bootleg", "Thunder Dragon (bootleg with Raiden sounds, encrypted)", 0 )
|
||||
GAME( 1991, tdragonb3, tdragon, tdragonb3, tdragonb, nmk16_state, empty_init, ROT270, "bootleg", "Thunder Dragon (bootleg with Raiden sounds, unencrypted)", 0 )
|
||||
GAME( 1992, strahljbl, strahl, strahljbl, strahljbl, nmk16_state, empty_init, ROT0, "bootleg", "Koutetsu Yousai Strahl (Japan, bootleg)", 0 )
|
||||
GAME( 1992, strahljbl, strahl, strahljbl, strahl, nmk16_state, empty_init, ROT0, "bootleg", "Koutetsu Yousai Strahl (Japan, bootleg)", 0 )
|
||||
|
||||
// these are bootlegs with tharrier like sound hw
|
||||
GAME( 1990, mustangb3, mustang, mustangb3, mustang, nmk16_state, empty_init, ROT0, "bootleg (Lettering)", "US AAF Mustang (Lettering bootleg)", 0 )
|
||||
|
@ -284,7 +284,7 @@ void airraid_state::sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x8000, 0xffff).rom();
|
||||
@ -449,6 +449,7 @@ void airraid_state::airraid(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
|
@ -880,8 +880,9 @@ void bloodbro_state::bloodbro(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set(m_ymsnd, FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set(m_ymsnd, FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -532,7 +532,7 @@ void cabal_state::sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w(m_adpcm[0], FUNC(seibu_adpcm_device::ctl_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
@ -574,7 +574,7 @@ void cabal_state::cabalbl2_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w(m_adpcm[0], FUNC(seibu_adpcm_device::ctl_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
@ -870,6 +870,7 @@ void cabal_state::cabal(machine_config &config)
|
||||
// sound hardware
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
|
@ -573,8 +573,9 @@ void dcon_state::dcon(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -622,8 +623,9 @@ void dcon_state::sdgndmps(machine_config &config) // PCB number is PB91008
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
}
|
||||
|
@ -562,14 +562,14 @@ void deadang_state::sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w(m_adpcm[0], FUNC(seibu_adpcm_device::ctl_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6005, 0x6006).w(m_adpcm[1], FUNC(seibu_adpcm_device::adr_w));
|
||||
map(0x6008, 0x6009).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
|
||||
map(0x601a, 0x601a).w(m_adpcm[1], FUNC(seibu_adpcm_device::ctl_w));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
// Air Raid sound config with extra ROM bank
|
||||
@ -585,16 +585,16 @@ void popnrun_state::sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
void deadang_state::sound_decrypted_opcodes_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).r("sei80bu", FUNC(sei80bu_device::opcode_r));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
|
||||
@ -822,8 +822,9 @@ void deadang_state::deadang(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ym1", FUNC(ym2203_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ym1", FUNC(ym2203_device::write));
|
||||
|
||||
|
@ -437,7 +437,7 @@ void dynduke_state::sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
@ -451,7 +451,7 @@ void dynduke_state::sound_decrypted_opcodes_map(address_map &map)
|
||||
void dynduke_state::sei80bu_encrypted_full_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom().region("audiocpu", 0);
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
|
||||
@ -671,8 +671,9 @@ void dynduke_state::dynduke(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -614,9 +614,10 @@ void goodejan_state::goodejan(machine_config &config)
|
||||
oki.add_route(ALL_OUTPUTS, "mono", 0.40);
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.coin_io_callback().set_ioport("COIN");
|
||||
seibu_sound.int_callback().set_inputline("audiocpu", 0);
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -1228,8 +1228,9 @@ void legionna_state::legionna(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -1284,8 +1285,9 @@ void legionna_state::heatbrl(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
@ -1345,8 +1347,9 @@ void legionna_state::godzilla(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
}
|
||||
@ -1403,8 +1406,9 @@ void legionna_state::denjinmk(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
}
|
||||
@ -1461,8 +1465,9 @@ void legionna_state::grainbow(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
}
|
||||
@ -1521,8 +1526,9 @@ void legionna_state::cupsoc(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -798,8 +798,9 @@ void r2dx_v33_state::nzerotea(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -561,7 +561,7 @@ void raiden_state::raiden_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
@ -575,7 +575,7 @@ void raiden_state::raiden_sound_decrypted_opcodes_map(address_map &map)
|
||||
void raiden_state::sei80bu_encrypted_full_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom().region("audiocpu", 0);
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
|
||||
@ -753,8 +753,9 @@ void raiden_state::raiden(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -698,13 +698,13 @@ void raiden2_state::raiden2_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w(m_seibu_sound, FUNC(seibu_sound_device::bank_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x6002, 0x6002).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
void raiden2_state::zeroteam_sound_map(address_map &map)
|
||||
@ -718,12 +718,12 @@ void raiden2_state::zeroteam_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w(m_seibu_sound, FUNC(seibu_sound_device::bank_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
|
||||
@ -1083,8 +1083,9 @@ void raiden2_state::raiden2(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym2151_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym2151_device::write));
|
||||
}
|
||||
@ -1143,8 +1144,9 @@ void raiden2_state::zeroteam(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline("audiocpu", 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag("audiocpu");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -603,9 +603,10 @@ void sengokmj_state::sengokmj(machine_config &config)
|
||||
oki.add_route(ALL_OUTPUTS, "mono", 0.40);
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.coin_io_callback().set_ioport("COIN");
|
||||
seibu_sound.int_callback().set_inputline("audiocpu", 0);
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -584,17 +584,17 @@ void toki_state::toki_audio_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
void toki_state::toki_audio_opcodes_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).r("sei80bu", FUNC(sei80bu_device::opcode_r));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
void toki_state::jujuba_audio_map(address_map &map)
|
||||
@ -609,17 +609,17 @@ void toki_state::jujuba_audio_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r(m_seibu_sound, FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
void toki_state::jujuba_audio_opcodes_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).rom().region("audiocpu", 0);
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
uint8_t toki_state::jujuba_z80_data_decrypt(offs_t offset)
|
||||
@ -919,8 +919,9 @@ void toki_state::toki(machine_config &config)
|
||||
|
||||
SEIBU_SOUND(config, m_seibu_sound, 0);
|
||||
m_seibu_sound->int_callback().set_inputline(m_audiocpu, 0);
|
||||
m_seibu_sound->coin_io_callback().set_ioport("COIN");
|
||||
m_seibu_sound->set_rom_tag(m_audiocpu_rom);
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank1");
|
||||
m_seibu_sound->set_rombank_tag("seibu_bank");
|
||||
m_seibu_sound->ym_read_callback().set("ymsnd", FUNC(ym3812_device::read));
|
||||
m_seibu_sound->ym_write_callback().set("ymsnd", FUNC(ym3812_device::write));
|
||||
}
|
||||
|
@ -74,15 +74,16 @@
|
||||
|
||||
DEFINE_DEVICE_TYPE(SEIBU_SOUND, seibu_sound_device, "seibu_sound", "Seibu Sound System")
|
||||
|
||||
seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
seibu_sound_device::seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, SEIBU_SOUND, tag, owner, clock),
|
||||
m_int_cb(*this),
|
||||
m_coin_io_cb(*this, 0),
|
||||
m_ym_read_cb(*this, 0),
|
||||
m_ym_write_cb(*this),
|
||||
m_sound_rom(*this, finder_base::DUMMY_TAG),
|
||||
m_rom_bank(*this, finder_base::DUMMY_TAG),
|
||||
m_main2sub_pending(0),
|
||||
m_sub2main_pending(0),
|
||||
m_main2sub_pending(false),
|
||||
m_sub2main_pending(false),
|
||||
m_rst10_irq(false),
|
||||
m_rst18_irq(false),
|
||||
m_rst10_service(false),
|
||||
@ -181,17 +182,20 @@ IRQ_CALLBACK_MEMBER(seibu_sound_device::im0_vector_cb)
|
||||
{
|
||||
if (m_rst18_irq && !m_rst18_service)
|
||||
{
|
||||
update_irq_lines(RST18_ACKNOWLEDGE);
|
||||
if (!machine().side_effects_disabled())
|
||||
update_irq_lines(RST18_ACKNOWLEDGE);
|
||||
return 0xdf;
|
||||
}
|
||||
else if (m_rst10_irq && !m_rst10_service)
|
||||
{
|
||||
update_irq_lines(RST10_ACKNOWLEDGE);
|
||||
if (!machine().side_effects_disabled())
|
||||
update_irq_lines(RST10_ACKNOWLEDGE);
|
||||
return 0xd7;
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("Spurious interrupt taken\n");
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("Spurious interrupt taken\n");
|
||||
return 0x00;
|
||||
}
|
||||
}
|
||||
@ -233,13 +237,18 @@ void seibu_sound_device::ym_w(offs_t offset, u8 data)
|
||||
void seibu_sound_device::bank_w(u8 data)
|
||||
{
|
||||
if (m_rom_bank.found())
|
||||
m_rom_bank->set_entry(data & 1);
|
||||
m_rom_bank->set_entry(BIT(data, 0));
|
||||
}
|
||||
|
||||
u8 seibu_sound_device::coin_r(offs_t offset)
|
||||
{
|
||||
return m_coin_io_cb(offset);
|
||||
}
|
||||
|
||||
void seibu_sound_device::coin_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 1);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 2);
|
||||
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
|
||||
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
|
||||
}
|
||||
|
||||
u8 seibu_sound_device::soundlatch_r(offs_t offset)
|
||||
@ -260,8 +269,8 @@ void seibu_sound_device::main_data_w(offs_t offset, u8 data)
|
||||
void seibu_sound_device::pending_w(u8)
|
||||
{
|
||||
/* just a guess */
|
||||
m_main2sub_pending = 0;
|
||||
m_sub2main_pending = 1;
|
||||
m_main2sub_pending = false;
|
||||
m_sub2main_pending = true;
|
||||
}
|
||||
|
||||
u8 seibu_sound_device::main_r(offs_t offset)
|
||||
@ -271,7 +280,7 @@ u8 seibu_sound_device::main_r(offs_t offset)
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
return m_sub2main[offset-2];
|
||||
return m_sub2main[offset - 2];
|
||||
case 5:
|
||||
return m_main2sub_pending ? 1 : 0;
|
||||
default:
|
||||
@ -294,8 +303,8 @@ void seibu_sound_device::main_w(offs_t offset, u8 data)
|
||||
case 2: //Sengoku Mahjong writes here
|
||||
case 6:
|
||||
/* just a guess */
|
||||
m_sub2main_pending = 0;
|
||||
m_main2sub_pending = 1;
|
||||
m_sub2main_pending = false;
|
||||
m_main2sub_pending = true;
|
||||
break;
|
||||
default:
|
||||
//logerror("%s: seibu_main_w(%x,%02x)\n",machine().describe_context(),offset,data);
|
||||
@ -330,18 +339,18 @@ void seibu_sound_common::seibu_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw("seibu_sound", FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r("seibu_sound", FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r("seibu_sound", FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r("seibu_sound", FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w("seibu_sound", FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401b, 0x401b).w("seibu_sound", FUNC(seibu_sound_device::coin_w));
|
||||
map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
DEFINE_DEVICE_TYPE(SEI80BU, sei80bu_device, "sei80bu", "SEI80BU Encrypted Z80 Interface")
|
||||
|
||||
sei80bu_device::sei80bu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
sei80bu_device::sei80bu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, SEI80BU, tag, owner, clock),
|
||||
device_rom_interface(mconfig, *this)
|
||||
{
|
||||
@ -349,7 +358,7 @@ sei80bu_device::sei80bu_device(const machine_config &mconfig, const char *tag, d
|
||||
|
||||
u8 sei80bu_device::data_r(offs_t offset)
|
||||
{
|
||||
u16 a = offset;
|
||||
u16 const a = offset;
|
||||
u8 src = read_byte(offset);
|
||||
|
||||
if ( BIT(a,9) & BIT(a,8)) src ^= 0x80;
|
||||
@ -366,7 +375,7 @@ u8 sei80bu_device::data_r(offs_t offset)
|
||||
|
||||
u8 sei80bu_device::opcode_r(offs_t offset)
|
||||
{
|
||||
u16 a = offset;
|
||||
u16 const a = offset;
|
||||
u8 src = read_byte(offset);
|
||||
|
||||
if ( BIT(a,9) & BIT(a,8)) src ^= 0x80;
|
||||
@ -393,13 +402,13 @@ u8 sei80bu_device::opcode_r(offs_t offset)
|
||||
|
||||
DEFINE_DEVICE_TYPE(SEIBU_ADPCM, seibu_adpcm_device, "seibu_adpcm", "Seibu ADPCM interface")
|
||||
|
||||
seibu_adpcm_device::seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
seibu_adpcm_device::seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, SEIBU_ADPCM, tag, owner, clock)
|
||||
, m_msm(*this, finder_base::DUMMY_TAG)
|
||||
, m_current(0)
|
||||
, m_end(0)
|
||||
, m_nibble(0)
|
||||
, m_playing(0)
|
||||
, m_playing(false)
|
||||
, m_base(*this, DEVICE_SELF)
|
||||
{
|
||||
}
|
||||
@ -418,7 +427,7 @@ void seibu_adpcm_device::device_start()
|
||||
|
||||
void seibu_adpcm_device::device_reset()
|
||||
{
|
||||
m_playing = 0;
|
||||
m_playing = false;
|
||||
m_msm->reset_w(1);
|
||||
}
|
||||
|
||||
@ -438,11 +447,11 @@ void seibu_adpcm_device::adr_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (offset)
|
||||
{
|
||||
m_end = data<<8;
|
||||
m_end = data << 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_current = data<<8;
|
||||
m_current = data << 8;
|
||||
m_nibble = 4;
|
||||
}
|
||||
}
|
||||
@ -454,13 +463,13 @@ void seibu_adpcm_device::ctl_w(u8 data)
|
||||
{
|
||||
case 0:
|
||||
m_msm->reset_w(1);
|
||||
m_playing = 0;
|
||||
m_playing = false;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 1:
|
||||
m_msm->reset_w(0);
|
||||
m_playing = 1;
|
||||
m_playing = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -470,7 +479,7 @@ void seibu_adpcm_device::msm_int(int state)
|
||||
if (!state || !m_playing)
|
||||
return;
|
||||
|
||||
int val = (m_base[m_current] >> m_nibble) & 15;
|
||||
u8 const val = (m_base[m_current] >> m_nibble) & 15;
|
||||
m_msm->data_w(val);
|
||||
|
||||
m_nibble ^= 4;
|
||||
@ -480,7 +489,7 @@ void seibu_adpcm_device::msm_int(int state)
|
||||
if (m_current >= m_end)
|
||||
{
|
||||
m_msm->reset_w(1);
|
||||
m_playing = 0;
|
||||
m_playing = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,13 +46,14 @@ protected:
|
||||
class seibu_sound_device : public device_t
|
||||
{
|
||||
public:
|
||||
seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
seibu_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
~seibu_sound_device() { }
|
||||
|
||||
// configuration
|
||||
template <typename T> void set_rom_tag(T &&tag) { m_sound_rom.set_tag(std::forward<T>(tag)); }
|
||||
template <typename T> void set_rombank_tag(T &&tag) { m_rom_bank.set_tag(std::forward<T>(tag)); }
|
||||
auto int_callback() { return m_int_cb.bind(); }
|
||||
auto coin_io_callback() { return m_coin_io_cb.bind(); }
|
||||
auto ym_read_callback() { return m_ym_read_cb.bind(); }
|
||||
auto ym_write_callback() { return m_ym_write_cb.bind(); }
|
||||
|
||||
@ -65,6 +66,7 @@ public:
|
||||
u8 ym_r(offs_t offset);
|
||||
void ym_w(offs_t offset, u8 data);
|
||||
void bank_w(u8 data);
|
||||
u8 coin_r(offs_t offset);
|
||||
void coin_w(u8 data);
|
||||
void fm_irqhandler(int state);
|
||||
u8 soundlatch_r(offs_t offset);
|
||||
@ -85,16 +87,17 @@ private:
|
||||
|
||||
// device callbacks
|
||||
devcb_write_line m_int_cb;
|
||||
devcb_read8 m_coin_io_cb;
|
||||
devcb_read8 m_ym_read_cb;
|
||||
devcb_write8 m_ym_write_cb;
|
||||
|
||||
// internal state
|
||||
optional_region_ptr<uint8_t> m_sound_rom;
|
||||
optional_region_ptr<u8> m_sound_rom;
|
||||
optional_memory_bank m_rom_bank;
|
||||
uint8_t m_main2sub[2];
|
||||
uint8_t m_sub2main[2];
|
||||
int m_main2sub_pending;
|
||||
int m_sub2main_pending;
|
||||
u8 m_main2sub[2];
|
||||
u8 m_sub2main[2];
|
||||
bool m_main2sub_pending;
|
||||
bool m_sub2main_pending;
|
||||
bool m_rst10_irq;
|
||||
bool m_rst18_irq;
|
||||
bool m_rst10_service;
|
||||
@ -121,7 +124,7 @@ DECLARE_DEVICE_TYPE(SEIBU_SOUND, seibu_sound_device)
|
||||
class sei80bu_device : public device_t, public device_rom_interface<16>
|
||||
{
|
||||
public:
|
||||
sei80bu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
sei80bu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
u8 data_r(offs_t offset);
|
||||
u8 opcode_r(offs_t offset);
|
||||
@ -138,12 +141,12 @@ DECLARE_DEVICE_TYPE(SEI80BU, sei80bu_device)
|
||||
class seibu_adpcm_device : public device_t
|
||||
{
|
||||
public:
|
||||
template <typename T> seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&msm5205_tag)
|
||||
template <typename T> seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&msm5205_tag)
|
||||
: seibu_adpcm_device(mconfig, tag, owner, clock)
|
||||
{
|
||||
m_msm.set_tag(std::forward<T>(msm5205_tag));
|
||||
}
|
||||
seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
seibu_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
~seibu_adpcm_device() { }
|
||||
|
||||
void decrypt();
|
||||
@ -159,11 +162,11 @@ protected:
|
||||
private:
|
||||
// internal state
|
||||
required_device<msm5205_device> m_msm;
|
||||
uint32_t m_current;
|
||||
uint32_t m_end;
|
||||
uint8_t m_nibble;
|
||||
uint8_t m_playing;
|
||||
required_region_ptr<uint8_t> m_base;
|
||||
u32 m_current;
|
||||
u32 m_end;
|
||||
u8 m_nibble;
|
||||
bool m_playing;
|
||||
required_region_ptr<u8> m_base;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(SEIBU_ADPCM, seibu_adpcm_device)
|
||||
|
@ -173,11 +173,11 @@ void shanghai_state::kothello_sound_map(address_map &map)
|
||||
map(0x4008, 0x4009).rw("seibu_sound", FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
|
||||
map(0x4010, 0x4011).r("seibu_sound", FUNC(seibu_sound_device::soundlatch_r));
|
||||
map(0x4012, 0x4012).r("seibu_sound", FUNC(seibu_sound_device::main_data_pending_r));
|
||||
map(0x4013, 0x4013).portr("COIN");
|
||||
map(0x4013, 0x4013).r("seibu_sound", FUNC(seibu_sound_device::coin_r));
|
||||
map(0x4018, 0x4019).w("seibu_sound", FUNC(seibu_sound_device::main_data_w));
|
||||
map(0x401a, 0x401a).w("adpcm", FUNC(seibu_adpcm_device::ctl_w));
|
||||
map(0x401b, 0x401b).w("seibu_sound", FUNC(seibu_sound_device::coin_w));
|
||||
map(0x8000, 0xffff).bankr("seibu_bank1");
|
||||
map(0x8000, 0xffff).bankr("seibu_bank");
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( kothello )
|
||||
@ -510,9 +510,10 @@ void shanghai_state::kothello(machine_config &config)
|
||||
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.15);
|
||||
|
||||
seibu_sound_device &seibu_sound(SEIBU_SOUND(config, "seibu_sound", 0));
|
||||
seibu_sound.coin_io_callback().set_ioport("COIN");
|
||||
seibu_sound.int_callback().set_inputline("audiocpu", 0);
|
||||
seibu_sound.set_rom_tag("audiocpu");
|
||||
seibu_sound.set_rombank_tag("seibu_bank1");
|
||||
seibu_sound.set_rombank_tag("seibu_bank");
|
||||
seibu_sound.ym_read_callback().set("ymsnd", FUNC(ym2203_device::read));
|
||||
seibu_sound.ym_write_callback().set("ymsnd", FUNC(ym2203_device::write));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user