avengers: dumped protection mcu [Caps0ff, Phil Bennett]

This commit is contained in:
hap 2023-06-09 19:04:54 +02:00
parent e269dd80e5
commit 74a67618f4
6 changed files with 182 additions and 165 deletions

View File

@ -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) )

View File

@ -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 )

View File

@ -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);

View File

@ -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;

View File

@ -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."

View File

@ -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 )