mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
avengers: dumped protection mcu [Caps0ff, Phil Bennett]
This commit is contained in:
parent
e269dd80e5
commit
74a67618f4
@ -424,8 +424,9 @@ private:
|
||||
u8 trampoline_r(offs_t offset);
|
||||
void trampoline_w(offs_t offset, uint8_t data);
|
||||
|
||||
void missilea_map(address_map &map);
|
||||
void base_map(address_map &map);
|
||||
void missile_map(address_map &map);
|
||||
void missilea_map(address_map &map);
|
||||
void mcombat_map(address_map &map);
|
||||
|
||||
required_device<m6502_device> m_maincpu;
|
||||
@ -810,7 +811,7 @@ void missile_state::trampoline_map(address_map &map)
|
||||
map(0x0000, 0xffff).rw(FUNC(missile_state::trampoline_r), FUNC(missile_state::trampoline_w));
|
||||
}
|
||||
|
||||
void missile_state::missilea_map(address_map &map)
|
||||
void missile_state::base_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x7fff);
|
||||
@ -826,10 +827,16 @@ void missile_state::missilea_map(address_map &map)
|
||||
|
||||
void missile_state::missile_map(address_map &map)
|
||||
{
|
||||
missilea_map(map);
|
||||
base_map(map);
|
||||
map(0x4000, 0x400f).mirror(0x07f0).rw(m_pokey, FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
}
|
||||
|
||||
void missile_state::missilea_map(address_map &map)
|
||||
{
|
||||
base_map(map);
|
||||
map(0x4000, 0x4000).mirror(0x00ff).portr("R8"); // also sound
|
||||
}
|
||||
|
||||
void missile_state::mcombat_map(address_map &map)
|
||||
{
|
||||
missilea_map(map);
|
||||
@ -1104,7 +1111,7 @@ ROM_START( missilem )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) // banked, decrypted rom goes here
|
||||
|
||||
ROM_REGION( 0x10000, "user1", 0 )
|
||||
ROM_LOAD("mcm001d.512", 0x00000, 0x10000, CRC(0a5845b5) SHA1(4828866018a984e7cd7f55a33613f43ece5d8d63) )
|
||||
ROM_LOAD( "mcm001d.512", 0x00000, 0x10000, CRC(0a5845b5) SHA1(4828866018a984e7cd7f55a33613f43ece5d8d63) )
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 )
|
||||
ROM_LOAD( "035826-01.l6", 0x0000, 0x0020, CRC(86a22140) SHA1(2beebf7855e29849ada1823eae031fc98220bc43) )
|
||||
@ -1198,7 +1205,7 @@ ROM_START( missilea )
|
||||
ROM_LOAD( "5.1n", 0x7000, 0x0800, CRC(df8c58f4) SHA1(44a0cdb0e5222e14e3e91547c35e73b2cf2df174) )
|
||||
ROM_LOAD( "6.1r", 0x7800, 0x0800, CRC(96a21c1f) SHA1(6e43ce8d53aa6d38cef920e7fa2e0683ce42cdb4) )
|
||||
|
||||
ROM_REGION( 0x800, "unknown", 0 )
|
||||
ROM_REGION( 0x800, "samples", 0 )
|
||||
ROM_LOAD( "2708.10c", 0x0000, 0x0400, CRC(9f6978c4) SHA1(34b356fddd86b8b73ee1415b3ad6b00dc4be60e2) )
|
||||
ROM_LOAD( "2708.10e", 0x0400, 0x0400, CRC(90eb28c8) SHA1(c82bc0a00d9e54004b0210f95343c8d7dc1f2050) )
|
||||
|
||||
|
@ -14,7 +14,7 @@ To Do:
|
||||
increment twice per coin.
|
||||
- clean up Avengers protection; it currently checks against hard-coded program
|
||||
counter rather than behaving as a memory-mapped black box.
|
||||
- Avengers had a protection chip underneath the sound module. Needs dumping.
|
||||
- Avengers had a protection chip underneath the sound module. Needs to be hooked up.
|
||||
The protection is extensive: palette data, calculates player movement,
|
||||
even a hand in the sound. The angle/movement stuff isn't 100% accurate either.
|
||||
- accurate music tempo (audiocpu irq freq)
|
||||
@ -293,7 +293,7 @@ void lwings_state::msm5205_w(uint8_t data)
|
||||
m_msm->vclk_w(0);
|
||||
}
|
||||
|
||||
void lwings_state::avengers_map(address_map &map)
|
||||
void lwings_state::buraikenb_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0xbfff).bankr("bank1");
|
||||
@ -309,15 +309,24 @@ void lwings_state::avengers_map(address_map &map)
|
||||
map(0xf804, 0xf804).w(FUNC(lwings_state::trojan_bg2_scrollx_w));
|
||||
map(0xf805, 0xf805).w(FUNC(lwings_state::trojan_bg2_image_w));
|
||||
|
||||
map(0xf808, 0xf808).portr("SERVICE").nopw(); /* ? */
|
||||
map(0xf809, 0xf809).portr("P1").w(FUNC(lwings_state::avengers_protection_w));
|
||||
map(0xf808, 0xf808).portr("SERVICE").nopw(); // ?
|
||||
map(0xf809, 0xf809).portr("P1");
|
||||
map(0xf80a, 0xf80a).portr("P2");
|
||||
map(0xf80b, 0xf80b).portr("DSWB");
|
||||
map(0xf80c, 0xf80c).portr("DSWA").w(FUNC(lwings_state::avengers_prot_bank_w));
|
||||
map(0xf80d, 0xf80d).rw(FUNC(lwings_state::avengers_protection_r), FUNC(lwings_state::avengers_adpcm_w));
|
||||
map(0xf80c, 0xf80c).portr("DSWA").w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||
map(0xf80d, 0xf80d).w(FUNC(lwings_state::avengers_adpcm_w));
|
||||
map(0xf80e, 0xf80e).w(FUNC(lwings_state::lwings_bankswitch_w));
|
||||
}
|
||||
|
||||
void lwings_state::avengers_map(address_map &map)
|
||||
{
|
||||
buraikenb_map(map);
|
||||
|
||||
map(0xf809, 0xf809).w(FUNC(lwings_state::avengers_protection_w));
|
||||
map(0xf80c, 0xf80c).w(FUNC(lwings_state::avengers_prot_bank_w));
|
||||
map(0xf80d, 0xf80d).r(FUNC(lwings_state::avengers_protection_r));
|
||||
}
|
||||
|
||||
void lwings_state::lwings_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
@ -377,7 +386,6 @@ void lwings_state::lwings_sound_map(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
|
||||
void lwings_state::fball_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).bankr("bank2");
|
||||
@ -403,8 +411,6 @@ void lwings_state::fball_map(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void lwings_state::fball_oki_bank_w(uint8_t data)
|
||||
{
|
||||
//printf("fball_oki_bank_w %02x\n", data);
|
||||
@ -421,13 +427,9 @@ void lwings_state::fball_oki_map(address_map &map)
|
||||
void lwings_state::fball_sound_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).rom();
|
||||
|
||||
map(0x8000, 0x8000).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||
|
||||
map(0xA000, 0xA000).w(FUNC(lwings_state::fball_oki_bank_w));
|
||||
|
||||
map(0xa000, 0xa000).w(FUNC(lwings_state::fball_oki_bank_w));
|
||||
map(0xc000, 0xc7ff).ram();
|
||||
|
||||
map(0xe000, 0xe000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
}
|
||||
|
||||
@ -451,6 +453,7 @@ void lwings_state::trojan_adpcm_io_map(address_map &map)
|
||||
map(0x01, 0x01).w(FUNC(lwings_state::msm5205_w));
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Generic port definitions
|
||||
@ -489,6 +492,7 @@ static INPUT_PORTS_START( lwings_generic )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Game-specific port definitions
|
||||
@ -619,7 +623,6 @@ static INPUT_PORTS_START( fball )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START4 )
|
||||
|
||||
|
||||
PORT_START("DSWA") // only one set of dipswitches
|
||||
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA:1")
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
|
||||
@ -784,6 +787,7 @@ static INPUT_PORTS_START( avengers )
|
||||
PORT_DIPSETTING( 0x00, "6" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Graphics definitions
|
||||
@ -854,6 +858,7 @@ static GFXDECODE_START( gfx_trojan )
|
||||
GFXDECODE_ENTRY( "gfx4", 0, bg2_tilelayout, 0, 8 ) /* colors 0-127 */
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Machine driver
|
||||
@ -936,18 +941,18 @@ void lwings_state::machine_reset()
|
||||
|
||||
void lwings_state::lwings(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, XTAL(12'000'000)/2); /* verified on PCB */
|
||||
// basic machine hardware
|
||||
Z80(config, m_maincpu, 12_MHz_XTAL/2); // verified on PCB
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::lwings_map);
|
||||
|
||||
Z80(config, m_soundcpu, XTAL(12'000'000)/4); /* verified on PCB */
|
||||
Z80(config, m_soundcpu, 12_MHz_XTAL/4); // verified on PCB
|
||||
m_soundcpu->set_addrmap(AS_PROGRAM, &lwings_state::lwings_sound_map);
|
||||
m_soundcpu->set_periodic_int(FUNC(lwings_state::irq0_line_hold), attotime::from_hz(222));
|
||||
// above frequency is an approximation from PCB music recording - where is the frequency actually derived from?
|
||||
|
||||
WATCHDOG_TIMER(config, "watchdog");
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
BUFFERED_SPRITERAM8(config, m_spriteram);
|
||||
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
@ -963,18 +968,18 @@ void lwings_state::lwings(machine_config &config)
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lwings);
|
||||
PALETTE(config, m_palette).set_format(palette_device::RGBx_444, 1024);
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
GENERIC_LATCH_8(config, m_soundlatch);
|
||||
|
||||
ym2203_device &ym2203a(YM2203(config, "2203a", XTAL(12'000'000)/8)); /* verified on PCB */
|
||||
ym2203_device &ym2203a(YM2203(config, "2203a", 12_MHz_XTAL/8)); // verified on PCB
|
||||
ym2203a.add_route(0, "mono", 0.20);
|
||||
ym2203a.add_route(1, "mono", 0.20);
|
||||
ym2203a.add_route(2, "mono", 0.20);
|
||||
ym2203a.add_route(3, "mono", 0.10);
|
||||
|
||||
ym2203_device &ym2203b(YM2203(config, "2203b", XTAL(12'000'000)/8)); /* verified on PCB */
|
||||
ym2203_device &ym2203b(YM2203(config, "2203b", 12_MHz_XTAL/8)); // verified on PCB
|
||||
ym2203b.add_route(0, "mono", 0.20);
|
||||
ym2203b.add_route(1, "mono", 0.20);
|
||||
ym2203b.add_route(2, "mono", 0.20);
|
||||
@ -985,24 +990,24 @@ void lwings_state::sectionz(machine_config &config)
|
||||
{
|
||||
lwings(config);
|
||||
|
||||
m_maincpu->set_clock(XTAL(12'000'000)/4); // XTAL and clock verified on an original PCB and on a bootleg with ROMs matching those of sectionza
|
||||
m_maincpu->set_clock(12_MHz_XTAL/4); // XTAL and clock verified on an original PCB and on a bootleg with ROMs matching those of sectionza
|
||||
|
||||
subdevice<screen_device>("screen")->set_refresh_hz(55.37); // verified on an original PCB
|
||||
}
|
||||
|
||||
void lwings_state::fball(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, XTAL(12'000'000)/2);
|
||||
// basic machine hardware
|
||||
Z80(config, m_maincpu, 12_MHz_XTAL/2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::fball_map);
|
||||
|
||||
Z80(config, m_soundcpu, XTAL(12'000'000)/4); // ?
|
||||
Z80(config, m_soundcpu, 12_MHz_XTAL/4); // ?
|
||||
m_soundcpu->set_addrmap(AS_PROGRAM, &lwings_state::fball_sound_map);
|
||||
// m_soundcpu->set_periodic_int(FUNC(lwings_state::irq0_line_hold), attotime::from_hz(222));
|
||||
//m_soundcpu->set_periodic_int(FUNC(lwings_state::irq0_line_hold), attotime::from_hz(222));
|
||||
|
||||
WATCHDOG_TIMER(config, "watchdog");
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
BUFFERED_SPRITERAM8(config, m_spriteram);
|
||||
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
@ -1018,12 +1023,12 @@ void lwings_state::fball(machine_config &config)
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_lwings);
|
||||
PALETTE(config, m_palette).set_format(palette_device::RGBx_444, 1024);
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
GENERIC_LATCH_8(config, m_soundlatch);
|
||||
|
||||
okim6295_device &oki(OKIM6295(config, "oki", XTAL(12'000'000)/12, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
|
||||
okim6295_device &oki(OKIM6295(config, "oki", 12_MHz_XTAL/12, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
|
||||
oki.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
oki.set_addrmap(0, &lwings_state::fball_oki_map);
|
||||
}
|
||||
@ -1032,28 +1037,28 @@ void lwings_state::trojan(machine_config &config)
|
||||
{
|
||||
lwings(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_clock(XTAL(12'000'000)/4); /* verified on PCB */
|
||||
// basic machine hardware
|
||||
m_maincpu->set_clock(12_MHz_XTAL/4); // verified on PCB
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::trojan_map);
|
||||
|
||||
m_soundcpu->set_clock(XTAL(12'000'000)/4); /* verified on PCB */
|
||||
m_soundcpu->set_clock(12_MHz_XTAL/4); // verified on PCB
|
||||
|
||||
z80_device &adpcm(Z80(config, "adpcm", XTAL(12'000'000)/4)); /* verified on PCB */
|
||||
adpcm.set_addrmap(AS_PROGRAM, &lwings_state::trojan_adpcm_map);
|
||||
adpcm.set_addrmap(AS_IO, &lwings_state::trojan_adpcm_io_map);
|
||||
adpcm.set_periodic_int(FUNC(lwings_state::irq0_line_hold), attotime::from_hz(4000));
|
||||
Z80(config, m_adpcmcpu, 12_MHz_XTAL/4); // verified on PCB
|
||||
m_adpcmcpu->set_addrmap(AS_PROGRAM, &lwings_state::trojan_adpcm_map);
|
||||
m_adpcmcpu->set_addrmap(AS_IO, &lwings_state::trojan_adpcm_io_map);
|
||||
m_adpcmcpu->set_periodic_int(FUNC(lwings_state::irq0_line_hold), attotime::from_hz(4000));
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
m_gfxdecode->set_info(gfx_trojan);
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(lwings_state,trojan)
|
||||
subdevice<screen_device>("screen")->set_screen_update(FUNC(lwings_state::screen_update_trojan));
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
GENERIC_LATCH_8(config, "soundlatch2");
|
||||
|
||||
MSM5205(config, m_msm, XTAL(384'000)); /* verified on PCB */
|
||||
m_msm->set_prescaler_selector(msm5205_device::SEX_4B); /* slave mode */
|
||||
MSM5205(config, m_msm, 384_kHz_XTAL); // verified on PCB
|
||||
m_msm->set_prescaler_selector(msm5205_device::SEX_4B); // slave mode
|
||||
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
@ -1061,24 +1066,31 @@ void lwings_state::avengers(machine_config &config)
|
||||
{
|
||||
trojan(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::avengers_map);
|
||||
|
||||
I8751(config, m_mcu, 12_MHz_XTAL/2);
|
||||
|
||||
screen_device &screen(*subdevice<screen_device>("screen"));
|
||||
screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
|
||||
screen.screen_vblank().append(FUNC(lwings_state::avengers_interrupt)); // RST 38h triggered by software
|
||||
|
||||
subdevice<cpu_device>("adpcm")->set_addrmap(AS_IO, &lwings_state::avengers_adpcm_io_map);
|
||||
m_adpcmcpu->set_addrmap(AS_IO, &lwings_state::avengers_adpcm_io_map);
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
MCFG_VIDEO_START_OVERRIDE(lwings_state,avengers)
|
||||
}
|
||||
|
||||
void lwings_state::avengersb(machine_config &config)
|
||||
void lwings_state::buraikenb(machine_config &config)
|
||||
{
|
||||
avengers(config);
|
||||
/* video hardware */
|
||||
MCFG_VIDEO_START_OVERRIDE(lwings_state,avengersb)
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lwings_state::buraikenb_map);
|
||||
config.device_remove("mcu");
|
||||
|
||||
// video hardware
|
||||
MCFG_VIDEO_START_OVERRIDE(lwings_state,buraikenb)
|
||||
}
|
||||
|
||||
|
||||
@ -1360,7 +1372,7 @@ ROM_START( trojan )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "tb02.15h", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "tb01.6d", 0x0000, 0x4000, CRC(1c0f91b2) SHA1(163bf6aa1936994659661653eabdc368199b0070) )
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1407,7 +1419,7 @@ ROM_START( trojana )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "tb02.15h", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "tb01.6d", 0x0000, 0x4000, CRC(1c0f91b2) SHA1(163bf6aa1936994659661653eabdc368199b0070) )
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1454,7 +1466,7 @@ ROM_START( trojanr )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "tb02.15h", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "tb01.6d", 0x0000, 0x4000, CRC(1c0f91b2) SHA1(163bf6aa1936994659661653eabdc368199b0070) )
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1501,7 +1513,7 @@ ROM_START( trojanj )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "tb02.15h", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "tb01.6d", 0x0000, 0x4000, CRC(1c0f91b2) SHA1(163bf6aa1936994659661653eabdc368199b0070) )
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1548,7 +1560,7 @@ ROM_START( trojanlt ) // titled Trojan but only shows Capcom like the Japanese v
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "tb02.15h", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "tb01.3f", 0x0000, 0x8000, CRC(83c715b2) SHA1(0c69c086657f91828a639ff7c72c703a27ade710) ) // 1xxxxxxxxxxxxxx = 0xFF
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1595,7 +1607,7 @@ ROM_START( trojanb )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "2.6q", 0x0000, 0x8000, CRC(21154797) SHA1(e1a3006746cc2d692ecd4369cc0a77c596abd60b) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* 64k for ADPCM CPU */
|
||||
ROM_LOAD( "1.3f", 0x0000, 0x8000, CRC(83c715b2) SHA1(0c69c086657f91828a639ff7c72c703a27ade710) ) // different
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
@ -1653,11 +1665,11 @@ ROM_START( avengers )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "av_02.15h", 0x0000, 0x8000, CRC(107a2e17) SHA1(5aae2f4ac9f15ccb4122f3ba9fba588438d62f4f) ) /* ?? */
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) // Intel C8751H-88
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, NO_DUMP )
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, CRC(505a0987) SHA1(ea1d855a9870d79d0e00eaa88a23038355a1203a) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "av_03.8k", 0x00000, 0x8000, CRC(efb5883e) SHA1(08aebf579f2c5ff472db66597cde1c6871d7d757) ) /* characters */
|
||||
@ -1703,11 +1715,11 @@ ROM_START( avengersa )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "av_02.15h", 0x0000, 0x8000, CRC(107a2e17) SHA1(5aae2f4ac9f15ccb4122f3ba9fba588438d62f4f) ) /* ?? */
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) // Intel C8751H-88
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, NO_DUMP )
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, CRC(505a0987) SHA1(ea1d855a9870d79d0e00eaa88a23038355a1203a) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "av_03.8k", 0x00000, 0x8000, CRC(efb5883e) SHA1(08aebf579f2c5ff472db66597cde1c6871d7d757) ) /* characters */
|
||||
@ -1753,11 +1765,11 @@ ROM_START( avengersb )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "av_02.15h", 0x0000, 0x8000, CRC(107a2e17) SHA1(5aae2f4ac9f15ccb4122f3ba9fba588438d62f4f) ) /* ?? */
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) // Intel C8751H-88
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, NO_DUMP )
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, CRC(505a0987) SHA1(ea1d855a9870d79d0e00eaa88a23038355a1203a) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "av_03.8k", 0x00000, 0x8000, CRC(efb5883e) SHA1(08aebf579f2c5ff472db66597cde1c6871d7d757) ) /* characters */
|
||||
@ -1803,11 +1815,11 @@ ROM_START( avengersc )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "av_02.15h", 0x0000, 0x8000, CRC(107a2e17) SHA1(5aae2f4ac9f15ccb4122f3ba9fba588438d62f4f) ) /* ?? */
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) // Intel C8751H-88
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, NO_DUMP )
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, CRC(505a0987) SHA1(ea1d855a9870d79d0e00eaa88a23038355a1203a) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "av_03.8k", 0x00000, 0x8000, CRC(efb5883e) SHA1(08aebf579f2c5ff472db66597cde1c6871d7d757) ) /* characters */
|
||||
@ -1853,11 +1865,11 @@ ROM_START( buraiken )
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "av_02.15h", 0x0000, 0x8000, CRC(107a2e17) SHA1(5aae2f4ac9f15ccb4122f3ba9fba588438d62f4f) ) /* ?? */
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) // Intel C8751H-88
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, NO_DUMP )
|
||||
ROM_LOAD( "av.13k", 0x0000, 0x1000, CRC(505a0987) SHA1(ea1d855a9870d79d0e00eaa88a23038355a1203a) )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "av_03.8k", 0x00000, 0x8000, CRC(efb5883e) SHA1(08aebf579f2c5ff472db66597cde1c6871d7d757) ) /* characters */
|
||||
@ -1896,14 +1908,14 @@ ROM_END
|
||||
|
||||
ROM_START( buraikenb )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 3*16k for the banked ROMs images */
|
||||
ROM_LOAD( "a4", 0x00000, 0x8000, CRC(b4ac7928) SHA1(4a525532f634dd9e800dc3dbd1230a5c431f869a) )
|
||||
ROM_LOAD( "a6", 0x10000, 0x8000, CRC(b1c6d40d) SHA1(d150adace829130ebf99b8beeedde0e673124984) )
|
||||
ROM_LOAD( "av_05.12n", 0x18000, 0x8000, CRC(9a214b42) SHA1(e13d47dcf9fa055fef467a10751badffcc3b8734) )
|
||||
ROM_LOAD( "a4", 0x00000, 0x8000, CRC(b4ac7928) SHA1(4a525532f634dd9e800dc3dbd1230a5c431f869a) )
|
||||
ROM_LOAD( "a6", 0x10000, 0x8000, CRC(b1c6d40d) SHA1(d150adace829130ebf99b8beeedde0e673124984) )
|
||||
ROM_LOAD( "av_05.12n", 0x18000, 0x8000, CRC(9a214b42) SHA1(e13d47dcf9fa055fef467a10751badffcc3b8734) )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "a2", 0x0000, 0x8000, CRC(5e991c96) SHA1(1866f38043f61244b65213544fa5ec5d6d82f96f) )
|
||||
|
||||
ROM_REGION( 0x10000, "adpcm", 0 ) /* ADPCM CPU */
|
||||
ROM_REGION( 0x10000, "adpcmcpu", 0 ) /* ADPCM CPU */
|
||||
ROM_LOAD( "av_01.6d", 0x0000, 0x8000, CRC(c1e5d258) SHA1(88ed978e6df72ce22f9371930360aa9cde73abe9) ) /* adpcm player - "Talker" ROM */
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
@ -1942,41 +1954,34 @@ ROM_START( buraikenb )
|
||||
ROM_END
|
||||
|
||||
|
||||
void lwings_state::init_avengersb()
|
||||
{
|
||||
// set up protection handlers
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xf80c, 0xf80c, write8smo_delegate(*m_soundlatch, FUNC(generic_latch_8_device::write)));
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Game driver(s)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1985, sectionz, 0, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, sectionza, sectionz, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, sectionz, 0, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, sectionza, sectionz, sectionz, sectionz, lwings_state, empty_init, ROT0, "Capcom", "Section Z (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1986, lwings, 0, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwings2, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsj, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Ares no Tsubasa (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsja, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Ares no Tsubasa (Japan, rev. A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsb, lwings, lwings, lwingsb, lwings_state, empty_init, ROT90, "bootleg", "Legendary Wings (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwings, 0, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwings2, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Legendary Wings (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsj, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Ares no Tsubasa (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsja, lwings, lwings, lwings, lwings_state, empty_init, ROT90, "Capcom", "Ares no Tsubasa (Japan, rev. A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, lwingsb, lwings, lwings, lwingsb, lwings_state, empty_init, ROT90, "bootleg", "Legendary Wings (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1986, trojan, 0, trojan, trojanls, lwings_state, empty_init, ROT0, "Capcom", "Trojan (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojana, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Trojan (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanr, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom (Romstar license)", "Trojan (Romstar)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanj, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Tatakai no Banka (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanb, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "bootleg", "Trojan (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanlt, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Trojan (location test)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojan, 0, trojan, trojanls, lwings_state, empty_init, ROT0, "Capcom", "Trojan (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojana, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Trojan (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanr, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom (Romstar license)", "Trojan (Romstar)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanj, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Tatakai no Banka (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanb, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "bootleg", "Trojan (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, trojanlt, trojan, trojan, trojan, lwings_state, empty_init, ROT0, "Capcom", "Trojan (location test)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1987, avengers, 0, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, revision C)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersa, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, revision A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersb, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersc, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, unknown revision)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, buraiken, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Hissatsu Buraiken (Japan, revision A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, buraikenb, avengers, avengersb, avengers, lwings_state, init_avengersb, ROT90, "Capcom", "Hissatsu Buraiken (Japan, bootleg?)", MACHINE_SUPPORTS_SAVE ) // unprotected at least
|
||||
GAME( 1987, avengers, 0, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, revision C)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersa, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, revision A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersb, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, avengersc, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Avengers (US, unknown revision)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, buraiken, avengers, avengers, avengers, lwings_state, empty_init, ROT90, "Capcom", "Hissatsu Buraiken (Japan, revision A)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, buraikenb, avengers, buraikenb, avengers, lwings_state, empty_init, ROT90, "Capcom", "Hissatsu Buraiken (Japan, unprotected)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// cloned lwings hardware
|
||||
GAME( 1992, fball, 0, fball, fball, lwings_state, empty_init, ROT0, "FM Work", "Fire Ball (FM Work)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1992, fball, 0, fball, fball, lwings_state, empty_init, ROT0, "FM Work", "Fire Ball (FM Work)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,37 +1,39 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Paul Leaman
|
||||
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
#include "video/bufsprite.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/msm5205.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
class lwings_state : public driver_device
|
||||
{
|
||||
public:
|
||||
lwings_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_fgvideoram(*this, "fgvideoram"),
|
||||
m_bg1videoram(*this, "bg1videoram"),
|
||||
m_soundlatch2(*this, "soundlatch_2"),
|
||||
m_nmi_mask(0),
|
||||
lwings_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_soundcpu(*this, "soundcpu"),
|
||||
m_adpcmcpu(*this, "adpcmcpu"),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_msm(*this, "5205"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_soundlatch(*this, "soundlatch") { }
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_fgvideoram(*this, "fgvideoram"),
|
||||
m_bg1videoram(*this, "bg1videoram"),
|
||||
m_soundlatch2(*this, "soundlatch_2")
|
||||
{ }
|
||||
|
||||
void lwings(machine_config &config);
|
||||
void sectionz(machine_config &config);
|
||||
void trojan(machine_config &config);
|
||||
void fball(machine_config &config);
|
||||
void avengers(machine_config &config);
|
||||
void avengersb(machine_config &config);
|
||||
|
||||
void init_avengersb();
|
||||
void buraikenb(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -39,29 +41,39 @@ protected:
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
optional_device<cpu_device> m_adpcmcpu;
|
||||
optional_device<i8751_device> m_mcu;
|
||||
optional_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
|
||||
// memory pointers
|
||||
required_device<buffered_spriteram8_device> m_spriteram;
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bg1videoram;
|
||||
optional_shared_ptr<uint8_t> m_soundlatch2;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_fg_tilemap = nullptr;
|
||||
tilemap_t *m_bg1_tilemap = nullptr;
|
||||
tilemap_t *m_bg2_tilemap = nullptr;
|
||||
uint8_t m_bg2_image = 0U;
|
||||
int m_bg2_avenger_hw = 0;
|
||||
int m_spr_avenger_hw = 0;
|
||||
uint8_t m_scroll_x[2]{};
|
||||
uint8_t m_scroll_y[2]{};
|
||||
// video-related
|
||||
tilemap_t *m_fg_tilemap = nullptr;
|
||||
tilemap_t *m_bg1_tilemap = nullptr;
|
||||
tilemap_t *m_bg2_tilemap = nullptr;
|
||||
uint8_t m_bg2_image = 0U;
|
||||
int m_bg2_avenger_hw = 0;
|
||||
int m_spr_avenger_hw = 0;
|
||||
uint8_t m_scroll_x[2]{};
|
||||
uint8_t m_scroll_y[2]{};
|
||||
|
||||
/* misc */
|
||||
uint8_t m_param[4]{};
|
||||
int m_palette_pen = 0;
|
||||
uint8_t m_soundstate = 0U;
|
||||
uint8_t m_adpcm = 0U;
|
||||
uint8_t m_nmi_mask = 0U;
|
||||
int m_sprbank = 0;
|
||||
// misc
|
||||
uint8_t m_param[4]{};
|
||||
int m_palette_pen = 0;
|
||||
uint8_t m_soundstate = 0U;
|
||||
uint8_t m_adpcm = 0U;
|
||||
uint8_t m_nmi_mask = 0U;
|
||||
int m_sprbank = 0;
|
||||
|
||||
void avengers_adpcm_w(uint8_t data);
|
||||
uint8_t avengers_adpcm_r();
|
||||
@ -86,7 +98,7 @@ private:
|
||||
TILE_GET_INFO_MEMBER(get_bg2_tile_info);
|
||||
DECLARE_VIDEO_START(trojan);
|
||||
DECLARE_VIDEO_START(avengers);
|
||||
DECLARE_VIDEO_START(avengersb);
|
||||
DECLARE_VIDEO_START(buraikenb);
|
||||
uint32_t screen_update_lwings(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_trojan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void lwings_interrupt(int state);
|
||||
@ -94,15 +106,11 @@ private:
|
||||
inline int is_sprite_on( uint8_t *buffered_spriteram, int offs );
|
||||
void lwings_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void trojan_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
int avengers_fetch_paldata( );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
optional_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
int avengers_fetch_paldata();
|
||||
|
||||
void avengers_adpcm_io_map(address_map &map);
|
||||
void avengers_map(address_map &map);
|
||||
void buraikenb_map(address_map &map);
|
||||
void fball_map(address_map &map);
|
||||
void fball_oki_map(address_map &map);
|
||||
void fball_sound_map(address_map &map);
|
||||
|
@ -105,7 +105,7 @@ VIDEO_START_MEMBER(lwings_state,avengers)
|
||||
m_spr_avenger_hw = 1;
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(lwings_state,avengersb)
|
||||
VIDEO_START_MEMBER(lwings_state,buraikenb)
|
||||
{
|
||||
VIDEO_START_CALL_MEMBER(trojan);
|
||||
m_bg2_avenger_hw = 0;
|
||||
|
@ -6,9 +6,6 @@ Toki
|
||||
|
||||
driver by Jarek Parchanski
|
||||
|
||||
Coin inputs are handled by the sound CPU, so they don't work with sound
|
||||
disabled. Use the service switch instead.
|
||||
|
||||
Mametesters bug tokiu056gre - "tokiu: "0000000" is always displayed as the top hiscore during gameplay,
|
||||
regardless of what it actually is. This does not happen in the other Toki sets."
|
||||
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
rollrace_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this, "videoram"),
|
||||
@ -50,7 +51,7 @@ public:
|
||||
{ }
|
||||
|
||||
void rollace2(machine_config &config);
|
||||
void rollrace(machine_config &config);
|
||||
void rollace(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -58,6 +59,7 @@ protected:
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
@ -280,7 +282,7 @@ uint32_t rollrace_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
|
||||
}
|
||||
|
||||
// sprites
|
||||
for (int offs = 0x80-4; offs >=0x0; offs -= 4)
|
||||
for (int offs = 0x80-4; offs >= 0x0; offs -= 4)
|
||||
{
|
||||
int s_flipy = 0;
|
||||
|
||||
@ -362,7 +364,7 @@ void rollrace_state::coin_counter_w(int state)
|
||||
void rollrace_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0x9fff).rom(); // only rollace2
|
||||
map(0x8000, 0x9fff).rom(); // only rollace2
|
||||
map(0xc000, 0xcfff).ram();
|
||||
map(0xd806, 0xd806).nopr(); // looks like a watchdog, bit 4 checked
|
||||
map(0xd900, 0xd900).rw(FUNC(rollrace_state::fake_d900_r), FUNC(rollrace_state::fake_d900_w)); // protection ??
|
||||
@ -393,7 +395,7 @@ void rollrace_state::sound_map(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( rollrace )
|
||||
static INPUT_PORTS_START( rollace )
|
||||
PORT_START("P1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
|
||||
@ -519,7 +521,7 @@ static const gfx_layout spritelayout =
|
||||
32*32 // every sprite takes 128 consecutive bytes
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_rollrace )
|
||||
static GFXDECODE_START( gfx_rollace )
|
||||
GFXDECODE_ENTRY( "chars", 0x0000, charlayout, 0, 32 )
|
||||
GFXDECODE_ENTRY( "chars", 0x0800, charlayout, 0, 32 )
|
||||
GFXDECODE_ENTRY( "chars", 0x1000, charlayout, 0, 32 )
|
||||
@ -542,15 +544,15 @@ INTERRUPT_GEN_MEMBER(rollrace_state::sound_timer_irq)
|
||||
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||
}
|
||||
|
||||
void rollrace_state::rollrace(machine_config &config)
|
||||
void rollrace_state::rollace(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
Z80(config, m_maincpu, XTAL(24'000'000) / 8); // verified on PCB
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &rollrace_state::main_map);
|
||||
|
||||
z80_device &audiocpu(Z80(config, "audiocpu", XTAL(24'000'000) / 16)); // verified on PCB
|
||||
audiocpu.set_addrmap(AS_PROGRAM, &rollrace_state::sound_map);
|
||||
audiocpu.set_periodic_int(FUNC(rollrace_state::sound_timer_irq), attotime::from_hz(4 * 60));
|
||||
Z80(config, m_audiocpu, XTAL(24'000'000) / 16); // verified on PCB
|
||||
m_audiocpu->set_addrmap(AS_PROGRAM, &rollrace_state::sound_map);
|
||||
m_audiocpu->set_periodic_int(FUNC(rollrace_state::sound_timer_irq), attotime::from_hz(4 * 60));
|
||||
|
||||
ls259_device &mainlatch(LS259(config, "mainlatch"));
|
||||
mainlatch.q_out_cb<0>().set(FUNC(rollrace_state::flipx_w));
|
||||
@ -571,7 +573,7 @@ void rollrace_state::rollrace(machine_config &config)
|
||||
screen.set_palette(m_palette);
|
||||
screen.screen_vblank().set(FUNC(rollrace_state::vblank_irq));
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rollrace);
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rollace);
|
||||
PALETTE(config, m_palette, FUNC(rollrace_state::palette), 256);
|
||||
|
||||
// sound hardware
|
||||
@ -581,15 +583,13 @@ void rollrace_state::rollrace(machine_config &config)
|
||||
GENERIC_LATCH_8(config, "soundlatch");
|
||||
|
||||
AY8910(config, "ay1", XTAL(24'000'000) / 16).add_route(ALL_OUTPUTS, "rspeaker", 0.10); // verified on PCB
|
||||
|
||||
AY8910(config, "ay2", XTAL(24'000'000) / 16).add_route(ALL_OUTPUTS, "rspeaker", 0.10); // verified on PCB
|
||||
|
||||
AY8910(config, "ay3", XTAL(24'000'000) / 16).add_route(ALL_OUTPUTS, "lspeaker", 0.10); // verified on PCB
|
||||
}
|
||||
|
||||
void rollrace_state::rollace2(machine_config &config)
|
||||
{
|
||||
rollrace(config);
|
||||
rollace(config);
|
||||
|
||||
// basic machine hardware
|
||||
|
||||
@ -642,9 +642,9 @@ ROM_START( fightrol )
|
||||
ROM_LOAD ( "4.18d", 0x6000, 0x2000, CRC(3d9e16ab) SHA1(e99628ffc54e3ff4818313a287ca111617120910) )
|
||||
|
||||
ROM_REGION( 0x300, "proms", 0 ) // colour
|
||||
ROM_LOAD("tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD("tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD("tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
ROM_LOAD( "tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD( "tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD( "tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
|
||||
ROM_REGION( 0x1000, "audiocpu", 0 )
|
||||
ROM_LOAD( "8.6f", 0x0000, 0x1000, CRC(6ec3c545) SHA1(1a2477b9e1563734195b0743f5dbbb005e06022e) )
|
||||
@ -689,9 +689,9 @@ ROM_START( rollace )
|
||||
ROM_LOAD ( "4.18d", 0x6000, 0x2000, CRC(3d9e16ab) SHA1(e99628ffc54e3ff4818313a287ca111617120910) )
|
||||
|
||||
ROM_REGION( 0x300, "proms", 0 ) // colour
|
||||
ROM_LOAD("tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD("tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD("tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
ROM_LOAD( "tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD( "tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD( "tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
|
||||
ROM_REGION( 0x1000, "audiocpu", 0 )
|
||||
ROM_LOAD( "8.6f", 0x0000, 0x1000, CRC(6ec3c545) SHA1(1a2477b9e1563734195b0743f5dbbb005e06022e) )
|
||||
@ -737,9 +737,9 @@ ROM_START( rollace2 )
|
||||
ROM_LOAD ( "4.18d", 0x6000, 0x2000, CRC(3d9e16ab) SHA1(e99628ffc54e3ff4818313a287ca111617120910) )
|
||||
|
||||
ROM_REGION( 0x300, "proms", 0 ) // colour
|
||||
ROM_LOAD("tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD("tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD("tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
ROM_LOAD( "tbp24s10.7u", 0x0000, 0x0100, CRC(9d199d33) SHA1(b8982f7da2b85f10d117177e4e73cbb486931cf5) )
|
||||
ROM_LOAD( "tbp24s10.7t", 0x0100, 0x0100, CRC(c0426582) SHA1(8e3e4d1e76243cce272aa099d2d6ad4fa6c99f7c) )
|
||||
ROM_LOAD( "tbp24s10.6t", 0x0200, 0x0100, CRC(c096e05c) SHA1(cb5b509e6124453f381a683ba446f8f4493d4610) )
|
||||
|
||||
ROM_REGION( 0x1000, "audiocpu", 0 )
|
||||
ROM_LOAD( "8.6f", 0x0000, 0x1000, CRC(6ec3c545) SHA1(1a2477b9e1563734195b0743f5dbbb005e06022e) )
|
||||
@ -747,7 +747,7 @@ ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 1983, fightrol, 0, rollrace, rollrace, rollrace_state, empty_init, ROT270, "Kaneko (Taito license)", "Fighting Roller", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, rollace, fightrol, rollrace, rollrace, rollrace_state, empty_init, ROT270, "Kaneko (Williams license)", "Roller Aces (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, rollace2, fightrol, rollace2, rollrace, rollrace_state, empty_init, ROT90, "Kaneko (Williams license)", "Roller Aces (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
// YEAR NAME PARENT MACHINE INPUT CLASS INIT SCREEN COMPANY, FULLNAME, FLAGS
|
||||
GAME( 1983, fightrol, 0, rollace, rollace, rollrace_state, empty_init, ROT270, "Kaneko (Taito license)", "Fighting Roller", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, rollace, fightrol, rollace, rollace, rollrace_state, empty_init, ROT270, "Kaneko (Williams license)", "Roller Aces (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, rollace2, fightrol, rollace2, rollace, rollrace_state, empty_init, ROT90, "Kaneko (Williams license)", "Roller Aces (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user