firebatl: Fixed music tempo [ShouTime]

This commit is contained in:
Luca Elia 2016-11-01 19:42:55 +01:00
parent 1e7546fae9
commit 1d8cc73090
3 changed files with 122 additions and 37 deletions

View File

@ -16,6 +16,10 @@ Sound Chips : Custom (NAMCO)
XTAL : 18.432 MHz
Notes:
- firebatl video (https://tmblr.co/ZgJvzv2E2C_z-) shows transparency for the
text layer is not correctly emulated.
***************************************************************************/
@ -27,6 +31,7 @@ XTAL : 18.432 MHz
void clshroad_state::machine_reset()
{
flip_screen_set(0);
m_main_irq_mask = m_sound_irq_mask = 0;
}
@ -39,13 +44,32 @@ READ8_MEMBER(clshroad_state::input_r)
}
// irq/reset controls like in wiping.cpp
WRITE8_MEMBER(clshroad_state::subcpu_reset_w)
{
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
}
WRITE8_MEMBER(clshroad_state::main_irq_mask_w)
{
m_main_irq_mask = data & 1;
}
WRITE8_MEMBER(clshroad_state::sound_irq_mask_w)
{
m_sound_irq_mask = data & 1;
}
static ADDRESS_MAP_START( clshroad_map, AS_PROGRAM, 8, clshroad_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x95ff) AM_RAM
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x9800, 0x9dff) AM_RAM
AM_RANGE(0x9e00, 0x9fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xa001, 0xa001) AM_WRITENOP // ? Interrupt related
AM_RANGE(0xa000, 0xa000) AM_WRITE(subcpu_reset_w)
AM_RANGE(0xa001, 0xa001) AM_WRITE(main_irq_mask_w)
AM_RANGE(0xa004, 0xa004) AM_WRITE(flipscreen_w)
AM_RANGE(0xa100, 0xa107) AM_READ(input_r)
AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
@ -57,7 +81,7 @@ static ADDRESS_MAP_START( clshroad_sound_map, AS_PROGRAM, 8, clshroad_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("custom", wiping_sound_device, sound_w)
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0xa003, 0xa003) AM_WRITENOP // ? Interrupt related
AM_RANGE(0xa003, 0xa003) AM_WRITE(sound_irq_mask_w)
ADDRESS_MAP_END
@ -228,17 +252,28 @@ 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);
}
static MACHINE_CONFIG_START( firebatl, clshroad_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 3000000) /* ? */
MCFG_CPU_PROGRAM_MAP(clshroad_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */
MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, vblank_irq)
MCFG_CPU_ADD("audiocpu", Z80, 3000000) /* ? */
MCFG_CPU_PROGRAM_MAP(clshroad_sound_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */
MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -298,50 +333,88 @@ static MACHINE_CONFIG_START( clshroad, clshroad_state )
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)
***************************************************************************/
ROM_START( firebatl )
ROM_REGION( 0x10000, "maincpu", 0 ) /* Main Z80 Code */
ROM_LOAD( "rom01", 0x00000, 0x2000, CRC(10e24ef6) SHA1(b6dae9824eb3cecececbdfdb416a90b1b61ff18d) )
ROM_LOAD( "rom02", 0x02000, 0x2000, CRC(47f79bee) SHA1(23e64ff69ff5112b0413d12a283ca90cf3642389) )
ROM_LOAD( "rom03", 0x04000, 0x2000, CRC(693459b9) SHA1(8bba526960f49c9e6c7bca40eb8fbbfc81588660) )
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_REGION( 0x10000, "audiocpu", 0 ) /* Sound Z80 Code */
ROM_LOAD( "rom04", 0x0000, 0x2000, CRC(5f232d9a) SHA1(d0b9926cb02203f1a1f7fd0d0d7b1fe8eddc6511) )
ROM_LOAD( "rom04.r6", 0x0000, 0x2000, CRC(5f232d9a) SHA1(d0b9926cb02203f1a1f7fd0d0d7b1fe8eddc6511) )
ROM_REGION( 0x08000, "gfx1", ROMREGION_INVERT ) /* Sprites */
ROM_LOAD( "rom14", 0x0000, 0x2000, CRC(36a508a7) SHA1(9b2dede4332d2b8e55e7c5f916d8cf370d7e77fc) )
ROM_LOAD( "rom13", 0x2000, 0x2000, CRC(a2ec508e) SHA1(a6dd7b9729f320ed3a28e0cd8ea7b26c2a639e1a) )
ROM_LOAD( "rom12", 0x4000, 0x2000, CRC(f80ece92) SHA1(2cc4317b2c58be48dc285bb3a667863e2ca8d5b7) )
ROM_LOAD( "rom11", 0x6000, 0x2000, CRC(b293e701) SHA1(9dacaa9897d91dc465f2c1907804fed9bfb7207b) )
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( 0x08000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */
ROM_LOAD( "rom09", 0x0000, 0x2000, CRC(77ea3e39) SHA1(c897664bd4f4b163a557d39d12374dae08a0a0c2) )
ROM_LOAD( "rom08", 0x2000, 0x2000, CRC(1b7585dd) SHA1(e402c879c5651bf0fa21dcf1ff3c4b7bf690cbaa) )
ROM_LOAD( "rom07", 0x4000, 0x2000, CRC(e3ec9825) SHA1(ea266683a48e8515d40ed077fd55d15a1859c942) )
ROM_LOAD( "rom06", 0x6000, 0x2000, CRC(d29fab5f) SHA1(de5f8d57d3dd9090e6c056ff7f1ab0bb59630863) )
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( 0x01000, "gfx3", 0 ) /* Layer 1 */
ROM_LOAD( "rom15", 0x0000, 0x1000, CRC(8b5464d6) SHA1(e65acd280c0d9776cb80073241cf260b76ff0ca6) )
ROM_LOAD( "rom15.m4", 0x0000, 0x1000, CRC(8b5464d6) SHA1(e65acd280c0d9776cb80073241cf260b76ff0ca6) )
ROM_REGION( 0x0a20, "proms", 0 )
ROM_LOAD( "prom6.bpr", 0x0000, 0x0100, CRC(b117d22c) SHA1(357efed6597757907077a7e5130bfa643d5dd197) ) /* palette red? */
ROM_LOAD( "prom7.bpr", 0x0100, 0x0100, CRC(9b6b4f56) SHA1(7fd726a20fce40b8ba4b8ef05fb51a85ad9fd282) ) /* palette green? */
ROM_LOAD( "prom8.bpr", 0x0200, 0x0100, CRC(67cb68ae) SHA1(9b54c7e51d8db0d8699723173709f04dd2fdfa77) ) /* palette blue? */
ROM_LOAD( "prom9.bpr", 0x0300, 0x0100, CRC(dd015b80) SHA1(ce45577204cfbbe623121c1bd99a190464ae7895) ) /* char lookup table msb? */
ROM_LOAD( "prom10.bpr", 0x0400, 0x0100, CRC(71b768c7) SHA1(3d8c106758d279daf8e989d4c1bb72de3419d2d6) ) /* char lookup table lsb? */
ROM_LOAD( "prom4.bpr", 0x0500, 0x0100, CRC(06523b81) SHA1(0042c364fd2fabd6b04cb2d59a71a7e6deb90ab3) ) /* unknown */
ROM_LOAD( "prom5.bpr", 0x0600, 0x0100, CRC(75ea8f70) SHA1(1a2c478e7b87fa7f8725a3d1ff06c5c9422dd524) ) /* unknown */
ROM_LOAD( "prom11.bpr", 0x0700, 0x0100, CRC(ba42a582) SHA1(2e8f3dab82a34078b866e9875978e83fef045f86) ) /* unknown */
ROM_LOAD( "prom12.bpr", 0x0800, 0x0100, CRC(f2540c51) SHA1(126f698eb65e54fa16a1abfa5b40b0161cb66254) ) /* unknown */
ROM_LOAD( "prom13.bpr", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */
ROM_LOAD( "prom1.bpr", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? (on the cpu board) */
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", 0x0000, 0x2000, CRC(21544cd6) SHA1(b9644ab3c4393cd2669d2b5b3c80d7a9f1c91ca6) )
ROM_LOAD( "rom05.f3", 0x0000, 0x2000, CRC(21544cd6) SHA1(b9644ab3c4393cd2669d2b5b3c80d7a9f1c91ca6) )
ROM_REGION( 0x0200, "soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */
ROM_LOAD( "prom3.bpr", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */
ROM_LOAD( "prom2.bpr", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */
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 )
@ -481,7 +554,7 @@ die once, it would be nice to avoid the hack however
ROM[0x05C8] = 0x23;
}
GAME( 1984, firebatl, 0, firebatl, firebatl, clshroad_state, firebatl, ROT90, "Taito", "Fire Battle", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1986, clshroad, 0, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc.", "Clash-Road", MACHINE_SUPPORTS_SAVE )
GAME( 1986, clshroads,clshroad, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc. (Status Game Corp. license)", "Clash-Road (Status license)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, clshroadd,clshroad, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc. (Data East license)", "Clash-Road (Data East license)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, firebatl, 0, firebatl, firebatl, clshroad_state, firebatl, ROT90, "Wood Place Inc. (Taito license)", "Fire Battle", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1986, clshroad, 0, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc.", "Clash-Road", MACHINE_SUPPORTS_SAVE )
GAME( 1986, clshroads,clshroad, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc. (Status Game Corp. license)", "Clash-Road (Status license)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, clshroadd,clshroad, clshroad, clshroad, driver_device, 0, ROT0, "Wood Place Inc. (Data East license)", "Clash-Road (Data East license)", MACHINE_SUPPORTS_SAVE )

View File

@ -62,6 +62,8 @@ READ8_MEMBER(wiping_state::ports_r)
return res;
}
// irq/reset controls like in clshroad.cpp
WRITE8_MEMBER(wiping_state::subcpu_reset_w)
{
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);

View File

@ -6,6 +6,7 @@ public:
clshroad_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_spriteram(*this, "spriteram"),
@ -14,6 +15,7 @@ public:
m_vregs(*this, "vregs") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@ -22,11 +24,17 @@ public:
required_shared_ptr<uint8_t> m_vram_1;
required_shared_ptr<uint8_t> m_vregs;
UINT8 m_main_irq_mask;
UINT8 m_sound_irq_mask;
tilemap_t *m_tilemap_0a;
tilemap_t *m_tilemap_0b;
tilemap_t *m_tilemap_1;
DECLARE_READ8_MEMBER(input_r);
DECLARE_WRITE8_MEMBER(subcpu_reset_w);
DECLARE_WRITE8_MEMBER(main_irq_mask_w);
DECLARE_WRITE8_MEMBER(sound_irq_mask_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(vram_0_w);
DECLARE_WRITE8_MEMBER(vram_1_w);
@ -37,7 +45,6 @@ public:
TILE_GET_INFO_MEMBER(get_tile_info_fb1);
TILE_GET_INFO_MEMBER(get_tile_info_1);
DECLARE_DRIVER_INIT(firebatl);
virtual void machine_reset() override;
DECLARE_VIDEO_START(firebatl);
@ -46,4 +53,7 @@ public:
DECLARE_PALETTE_INIT(clshroad);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
INTERRUPT_GEN_MEMBER(sound_timer_irq);
};