// license:BSD-3-Clause // copyright-holders:Luca Elia /*************************************************************************** -= Clash Road =- driver by Luca Elia (l.elia@tin.it) Main CPU : Z80A (LH0080A) Video Chips : ? Sound CPU : Z80A (LH0080A) Sound Chips : Custom (NAMCO) XTAL : 18.432 MHz TODO: - few unused video registers (2 and 3); - clshroad: erratic gameplay speed; - firebatl: video (https://tmblr.co/ZgJvzv2E2C_z-) shows transparency for the text layer is not correctly emulated, fixed by initializing VRAM to 0xf0? (that layer seems unused by this game); - firebatl: bad sprite colors; - firebatl: remove ROM patch; ***************************************************************************/ #include "emu.h" #include "includes/clshroad.h" #include "audio/wiping.h" #include "cpu/z80/z80.h" #include "machine/74259.h" #include "screen.h" #include "speaker.h" /* unknown divider, assume /5 */ #define MAIN_CLOCK XTAL(18'432'000)/5 void clshroad_state::machine_reset() { flip_screen_set(0); m_main_irq_mask = m_sound_irq_mask = 0; // not initialized by HW, matches grey background on first title screen for(int i = 0;i<0x800;i++) m_vram_0[i] = 0xf0; } READ8_MEMBER(clshroad_state::input_r) { return ((~ioport("P1")->read() & (1 << offset)) ? 1 : 0) | ((~ioport("P2")->read() & (1 << offset)) ? 2 : 0) | ((~ioport("DSW1")->read() & (1 << offset)) ? 4 : 0) | ((~ioport("DSW2")->read() & (1 << offset)) ? 8 : 0) ; } // irq/reset controls like in wiping.cpp WRITE_LINE_MEMBER(clshroad_state::main_irq_mask_w) { m_main_irq_mask = state; } WRITE_LINE_MEMBER(clshroad_state::sound_irq_mask_w) { m_sound_irq_mask = state; } void clshroad_state::clshroad_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x95ff).ram(); map(0x9600, 0x97ff).ram().share("share1"); map(0x9800, 0x9dff).ram(); map(0x9e00, 0x9fff).ram().share("spriteram"); map(0xa000, 0xa007).w("mainlatch", FUNC(ls259_device::write_d0)); map(0xa100, 0xa107).r(this, FUNC(clshroad_state::input_r)); map(0xa800, 0xafff).ram().w(this, FUNC(clshroad_state::vram_1_w)).share("vram_1"); // Layer 1 map(0xb000, 0xb003).writeonly().share("vregs"); // Scroll map(0xc000, 0xc7ff).ram().w(this, FUNC(clshroad_state::vram_0_w)).share("vram_0"); // Layer 0 } void clshroad_state::clshroad_sound_map(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x4000, 0x7fff).w("custom", FUNC(wiping_sound_device::sound_w)); map(0x9600, 0x97ff).ram().share("share1"); map(0xa000, 0xa007).w("mainlatch", FUNC(ls259_device::write_d0)); } static INPUT_PORTS_START( clshroad ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5") // Damage when falling PORT_DIPSETTING( 0x18, DEF_STR( Normal ) ) // 8 PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) // A PORT_DIPSETTING( 0x08, DEF_STR( Harder ) ) // C PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // E PORT_DIPNAME( 0x20, 0x20, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" ) /* Listed as "Unused" */ /* DSW2 is listed as "Unused" */ PORT_START("DSW2") /* first bit OFF is: 0 0 <- value 1 1 2 2 3 3 4 4 5 5 6 6 else FF But the values seems unused then. */ PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW2:2" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */ PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */ INPUT_PORTS_END static INPUT_PORTS_START( firebatl ) PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("DSW1") PORT_DIPNAME( 0x7f, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2,3,4,5,6,7") PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x01, "2" ) PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x07, "4" ) PORT_DIPSETTING( 0x0f, "5" ) PORT_DIPSETTING( 0x1f, "6" ) PORT_DIPSETTING( 0x3f, "7" ) PORT_DIPSETTING( 0x7f, "Infinite Lives" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" ) PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x10, "10K 30K+" ) PORT_DIPSETTING( 0x00, "20K 30K+" ) PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW2:6" ) PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) INPUT_PORTS_END static const gfx_layout layout_8x8x2 = { 8,8, RGN_FRAC(1,1), 2, { 0, 4 }, { STEP4(0,1), STEP4(8,1) }, { STEP8(0,8*2) }, 8*8*2 }; static const gfx_layout layout_8x8x4 = { 8,8, RGN_FRAC(1,2), 4, { RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4, 0, 4 }, { STEP4(0,1), STEP4(8,1) }, { STEP8(0,8*2) }, 8*8*2 }; static const gfx_layout layout_16x16x4 = { 16,16, RGN_FRAC(1,2), 4, { RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4, 0, 4 }, { STEP4(0,1), STEP4(8,1), STEP4(8*8*2+0,1), STEP4(8*8*2+8,1) }, { STEP8(0,8*2), STEP8(8*8*2*2,8*2) }, 16*16*2 }; static GFXDECODE_START( gfx_firebatl ) GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 16 ) // [0] Sprites GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 16, 1 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x2, 512, 64 ) // [2] Layer 1 GFXDECODE_END static GFXDECODE_START( gfx_clshroad ) GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 16 ) // [0] Sprites GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x90, 1 ) // [1] Layer 0 GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4, 0, 16 ) // [2] Layer 1 GFXDECODE_END INTERRUPT_GEN_MEMBER(clshroad_state::vblank_irq) { if(m_main_irq_mask) device.execute().set_input_line(0, HOLD_LINE); } INTERRUPT_GEN_MEMBER(clshroad_state::sound_timer_irq) { if(m_sound_irq_mask) device.execute().set_input_line(0, HOLD_LINE); } MACHINE_CONFIG_START(clshroad_state::firebatl) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? */ MCFG_DEVICE_PROGRAM_MAP(clshroad_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq) MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */ MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map) MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ MCFG_DEVICE_ADD("mainlatch", LS259, 0) MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, clshroad_state, main_irq_mask_w)) MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, clshroad_state, sound_irq_mask_w)) MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, clshroad_state, flipscreen_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(0x120, 0x100) MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1) MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_firebatl) MCFG_PALETTE_ADD("palette", 512+64*4) MCFG_PALETTE_INDIRECT_ENTRIES(256) MCFG_PALETTE_INIT_OWNER(clshroad_state,firebatl) MCFG_VIDEO_START_OVERRIDE(clshroad_state,firebatl) /* sound hardware */ SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END MACHINE_CONFIG_START(clshroad_state::clshroad) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", Z80, MAIN_CLOCK) /* ? real speed unknown. 3MHz is too low and causes problems */ MCFG_DEVICE_PROGRAM_MAP(clshroad_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq) MCFG_DEVICE_ADD("audiocpu", Z80, MAIN_CLOCK) /* ? */ MCFG_DEVICE_PROGRAM_MAP(clshroad_sound_map) //MCFG_DEVICE_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */ MCFG_DEVICE_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */ MCFG_DEVICE_ADD("mainlatch", LS259, 0) MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // never writes here? MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, clshroad_state, main_irq_mask_w)) MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, clshroad_state, sound_irq_mask_w)) MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, clshroad_state, flipscreen_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(0x120, 0x100) MCFG_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1) MCFG_SCREEN_UPDATE_DRIVER(clshroad_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_clshroad) MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_INIT_OWNER(clshroad_state,clshroad) MCFG_VIDEO_START_OVERRIDE(clshroad_state,clshroad) /* sound hardware */ SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("custom", WIPING_CUSTOM, 96000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END /*************************************************************************** Fire Battle by TAITO/GRAPHIC RESEARCH (1984) Location Device File ID Checksum ------------------------------------------------ CPU E8 2764 ROM01 4683 [ main program ] CPU D8 2764 ROM02 6903 [ main program ] CPU C8 2764 ROM03 767F [ main program ] CPU R6 2764 ROM04 B4AE [ SND program ] CPU F3 2764 ROM05 E853 [ sound Data ] VID U4 2764 ROM06 F507 [ GFX ] VID S4 2764 ROM07 4D76 [ GFX ] VID P4 2764 ROM08 B79F [ GFX ] VID N4 2764 ROM09 333B [ GFX ] VID K4 2764 ROM11 D60D [ GFX ] VID J4 2764 ROM12 E22A [ GFX ] VID H4 2764 ROM13 4ABB [ GFX ] VID F4 2764 ROM14 FCA6 [ GFX ] VID M4 2732 ROM15 D8B9 [ GFX ] CPU N2 TBP18S030 PROM1.BPR 1614 CPU K2 TBP24S10 PROM2.BPR 075C CPU J4 TBP24S10 PROM3.BPR 0680 VID S1 TBP24S10 PROM4.BPR 03C0 VID P1 TBP24S10 PROM5.BPR 0780 VID H1 TBP24S10 PROM6.BPR 048B VID F1 TBP24S10 PROM7.BPR 0439 VID E1 TBP24S10 PROM8.BPR 045D VID P2 TBP24S10 PROM9.BPR 0A13 VID N2 TBP24S10 PROM10.BPR 060B VID M2 TBP24S10 PROM11.BPR 03B8 VID H2 TBP24S10 PROM12.BPR 0A90 VID W8 TBP24S10 PROM13.BPR 0E7E Notes: CPU - Top PCB (SCO-102A 1983 GRC) * VID - Lower PCB (GRP-109C 1984) ** * 2 x NEC D780C ** 18.??? MHz clock ***************************************************************************/ ROM_START( firebatl ) ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "rom01.e8", 0x00000, 0x2000, CRC(10e24ef6) SHA1(b6dae9824eb3cecececbdfdb416a90b1b61ff18d) ) ROM_LOAD( "rom02.d8", 0x02000, 0x2000, CRC(47f79bee) SHA1(23e64ff69ff5112b0413d12a283ca90cf3642389) ) ROM_LOAD( "rom03.c8", 0x04000, 0x2000, CRC(693459b9) SHA1(8bba526960f49c9e6c7bca40eb8fbbfc81588660) ) ROM_FILL( 0x06000, 0x2000, 0x00 ) // Accessed, could this range map to the Z4 device at A8 ?! ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "rom04.r6", 0x0000, 0x2000, CRC(5f232d9a) SHA1(d0b9926cb02203f1a1f7fd0d0d7b1fe8eddc6511) ) ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "rom14.f4", 0x0000, 0x2000, CRC(36a508a7) SHA1(9b2dede4332d2b8e55e7c5f916d8cf370d7e77fc) ) ROM_LOAD( "rom13.h4", 0x2000, 0x2000, CRC(a2ec508e) SHA1(a6dd7b9729f320ed3a28e0cd8ea7b26c2a639e1a) ) ROM_LOAD( "rom12.j4", 0x4000, 0x2000, CRC(f80ece92) SHA1(2cc4317b2c58be48dc285bb3a667863e2ca8d5b7) ) ROM_LOAD( "rom11.k4", 0x6000, 0x2000, CRC(b293e701) SHA1(9dacaa9897d91dc465f2c1907804fed9bfb7207b) ) ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */ ROM_LOAD( "rom09.n4", 0x0000, 0x2000, CRC(77ea3e39) SHA1(c897664bd4f4b163a557d39d12374dae08a0a0c2) ) ROM_LOAD( "rom08.p4", 0x2000, 0x2000, CRC(1b7585dd) SHA1(e402c879c5651bf0fa21dcf1ff3c4b7bf690cbaa) ) ROM_LOAD( "rom07.s4", 0x4000, 0x2000, CRC(e3ec9825) SHA1(ea266683a48e8515d40ed077fd55d15a1859c942) ) ROM_LOAD( "rom06.u4", 0x6000, 0x2000, CRC(d29fab5f) SHA1(de5f8d57d3dd9090e6c056ff7f1ab0bb59630863) ) ROM_REGION( 0x1000, "gfx3", 0 ) /* Layer 1 */ ROM_LOAD( "rom15.m4", 0x0000, 0x1000, CRC(8b5464d6) SHA1(e65acd280c0d9776cb80073241cf260b76ff0ca6) ) ROM_REGION( 0x0a20, "proms", 0 ) ROM_LOAD( "prom6.h1", 0x0000, 0x0100, CRC(b117d22c) SHA1(357efed6597757907077a7e5130bfa643d5dd197) ) /* palette red */ ROM_LOAD( "prom7.f1", 0x0100, 0x0100, CRC(9b6b4f56) SHA1(7fd726a20fce40b8ba4b8ef05fb51a85ad9fd282) ) /* palette green */ ROM_LOAD( "prom8.e1", 0x0200, 0x0100, CRC(67cb68ae) SHA1(9b54c7e51d8db0d8699723173709f04dd2fdfa77) ) /* palette blue */ ROM_LOAD( "prom9.p2", 0x0300, 0x0100, CRC(dd015b80) SHA1(ce45577204cfbbe623121c1bd99a190464ae7895) ) /* char lookup table msb */ ROM_LOAD( "prom10.n2", 0x0400, 0x0100, CRC(71b768c7) SHA1(3d8c106758d279daf8e989d4c1bb72de3419d2d6) ) /* char lookup table lsb */ ROM_LOAD( "prom4.s1", 0x0500, 0x0100, CRC(06523b81) SHA1(0042c364fd2fabd6b04cb2d59a71a7e6deb90ab3) ) /* unknown */ ROM_LOAD( "prom5.p1", 0x0600, 0x0100, CRC(75ea8f70) SHA1(1a2c478e7b87fa7f8725a3d1ff06c5c9422dd524) ) /* unknown */ ROM_LOAD( "prom11.m2", 0x0700, 0x0100, CRC(ba42a582) SHA1(2e8f3dab82a34078b866e9875978e83fef045f86) ) /* unknown */ ROM_LOAD( "prom12.h2", 0x0800, 0x0100, CRC(f2540c51) SHA1(126f698eb65e54fa16a1abfa5b40b0161cb66254) ) /* unknown */ ROM_LOAD( "prom13.w8", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */ ROM_LOAD( "prom1.n2", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? (on the cpu board) */ ROM_REGION( 0x2000, "samples", 0 ) /* samples */ ROM_LOAD( "rom05.f3", 0x0000, 0x2000, CRC(21544cd6) SHA1(b9644ab3c4393cd2669d2b5b3c80d7a9f1c91ca6) ) ROM_REGION( 0x0200, "soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */ ROM_LOAD( "prom3.j4", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */ ROM_LOAD( "prom2.k2", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */ ROM_END ROM_START( clshroad ) ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "clashr3.bin", 0x0000, 0x8000, CRC(865c32ae) SHA1(e5cdd2d624fe6dc8bd6bebf2bd1c79d287408c63) ) ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) ) ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "clashr5.bin", 0x0000, 0x4000, CRC(094858b8) SHA1(a19f79cb665bbb1e25a94e9dd09a9e99f553afe8) ) ROM_LOAD( "clashr6.bin", 0x4000, 0x4000, CRC(daa1daf3) SHA1(cc24c97c9950adc0041f68832774e40c87d1d4b2) ) ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */ ROM_LOAD( "clashr8.bin", 0x0000, 0x4000, CRC(cbb66719) SHA1(2497575f84a956bc2b9e4c3f2c71ae42d036355e) ) ROM_LOAD( "clashr9.bin", 0x4000, 0x4000, CRC(c15e8eed) SHA1(3b1e7fa014d176a01d5f9214051b0c8cc5556684) ) ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */ ROM_LOAD( "clashr4.bin", 0x0000, 0x2000, CRC(664201d9) SHA1(4eb85306f0c9683d0e0cf787f6389df8fe4a3d9d) ) ROM_LOAD( "clashr7.bin", 0x2000, 0x2000, CRC(97973030) SHA1(cca7a9d2751add7f6dd9bac83f7f63ece8021dbc) ) ROM_REGION( 0x0b40, "proms", 0 ) ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */ ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */ ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */ /* all other proms that firebatl has are missing */ ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */ ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */ ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */ ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */ ROM_REGION( 0x2000, "samples", 0 ) /* samples */ ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) ) ROM_REGION( 0x0200, "soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */ ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */ ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */ ROM_END ROM_START( clshroads ) ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "cr-3", 0x0000, 0x8000, CRC(23559df2) SHA1(41a08a4fbad3da1898226e2ca1956a9f7c8f94b0) ) ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) ) ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "cr-12", 0x0000, 0x2000, CRC(e5aa4c46) SHA1(c0ed717e263aca2d0ec8a078f0aa3377357b9e3d) ) ROM_LOAD( "cr-11", 0x2000, 0x2000, CRC(7fc11c7c) SHA1(e798c4abe87fd701f250625ae6545ab00bcfbef5) ) ROM_LOAD( "cr-10", 0x4000, 0x2000, CRC(6b1293b7) SHA1(3219c03e87be0f53d4556a45d82278fc712f4d0b) ) ROM_LOAD( "cr-9", 0x6000, 0x2000, CRC(d219722c) SHA1(e68a0883113db43a878a5529fa8deb7816573e35) ) ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */ ROM_LOAD( "cr-7", 0x0000, 0x2000, CRC(e8aa7ac3) SHA1(12f4f1041001ce6e77e9b0c691663f4a20969eaa) ) ROM_LOAD( "cr-6", 0x2000, 0x2000, CRC(037be475) SHA1(72a8c1da210239ecac96ea22e54a5d193f32ad83) ) ROM_LOAD( "cr-5", 0x4000, 0x2000, CRC(a4151734) SHA1(1ccf68270bbfd557cd8cca3f7f36e9e2de7e94e6) ) ROM_LOAD( "cr-4", 0x6000, 0x2000, CRC(5ef24757) SHA1(4c6a06fdadb0b52f62148642e0416c4f60c8048b) ) ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */ ROM_LOAD( "cr-13", 0x0000, 0x2000, CRC(012a6412) SHA1(ae9757e56f896e4158e6af7dc12eb6c2a3755f4d) ) ROM_LOAD( "cr-8", 0x2000, 0x2000, CRC(3c2b816c) SHA1(3df3d9f49475ccfbb0792d98c3d12c8fd15034bc) ) ROM_REGION( 0x0b40, "proms", 0 ) ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */ ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */ ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */ /* all other proms that firebatl has are missing */ ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */ ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */ ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */ ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */ ROM_REGION( 0x2000, "samples", 0 ) /* samples */ ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) ) ROM_REGION( 0x0200, "soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */ ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */ ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */ ROM_END // this set came from a bootleg board, but I believe it to be original for the following reason: // the ONLY difference between this and the parent set is the Wood Place string, however, in the parent // set the Wood Place string is padded with several 0x20 (Space) characters to fit the same number of bytes // in which the Data East Corporation string fits, suggesting that they always planned to put it there. ROM_START( clshroadd ) ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */ ROM_LOAD( "crdeco-3.bin", 0x0000, 0x8000, CRC(1d54195c) SHA1(4b1d7d333707b5ebd57572742eb74df5abe8a70d) ) ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */ ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) ) ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */ ROM_LOAD( "clashr5.bin", 0x0000, 0x4000, CRC(094858b8) SHA1(a19f79cb665bbb1e25a94e9dd09a9e99f553afe8) ) ROM_LOAD( "clashr6.bin", 0x4000, 0x4000, CRC(daa1daf3) SHA1(cc24c97c9950adc0041f68832774e40c87d1d4b2) ) ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */ ROM_LOAD( "clashr8.bin", 0x0000, 0x4000, CRC(cbb66719) SHA1(2497575f84a956bc2b9e4c3f2c71ae42d036355e) ) ROM_LOAD( "clashr9.bin", 0x4000, 0x4000, CRC(c15e8eed) SHA1(3b1e7fa014d176a01d5f9214051b0c8cc5556684) ) ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */ ROM_LOAD( "clashr4.bin", 0x0000, 0x2000, CRC(664201d9) SHA1(4eb85306f0c9683d0e0cf787f6389df8fe4a3d9d) ) ROM_LOAD( "clashr7.bin", 0x2000, 0x2000, CRC(97973030) SHA1(cca7a9d2751add7f6dd9bac83f7f63ece8021dbc) ) ROM_REGION( 0x0b40, "proms", 0 ) ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */ ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */ ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */ /* all other proms that firebatl has are missing */ ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */ ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */ ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */ ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */ ROM_REGION( 0x2000, "samples", 0 ) /* samples */ ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) ) ROM_REGION( 0x0200, "soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */ ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */ ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */ ROM_END void clshroad_state::init_firebatl() { // applying HACK to fix the game // without this the death sequence never ends so the game is unplayable after you // die once, it would be nice to avoid the hack however uint8_t *ROM = memregion("maincpu")->base(); ROM[0x05C6] = 0xc3; ROM[0x05C7] = 0x8d; ROM[0x05C8] = 0x23; } GAME( 1984, firebatl, 0, firebatl, firebatl, clshroad_state, init_firebatl, ROT90, "Wood Place Inc. (Taito license)", "Fire Battle", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1986, clshroad, 0, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Wood Place Inc.", "Clash-Road", MACHINE_SUPPORTS_SAVE ) GAME( 1986, clshroads, clshroad, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Wood Place Inc. (Status Game Corp. license)", "Clash-Road (Status license)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, clshroadd, clshroad, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Wood Place Inc. (Data East license)", "Clash-Road (Data East license)", MACHINE_SUPPORTS_SAVE )