mirror of
https://github.com/holub/mame
synced 2025-05-10 08:12:13 +03:00
New working clone
------------------------------ Bionic Commandos (bootleg, set 2) [Team Europe]
This commit is contained in:
parent
bc9a22fe47
commit
699673f892
@ -64,7 +64,7 @@
|
||||
0xFFFFFD (player 2)
|
||||
0xFFFFFF (player 1)
|
||||
|
||||
This is probably done by the Intel C8751H MCU on the board (whose interal ROM
|
||||
This is probably done by the Intel C8751H MCU on the board (whose internal ROM
|
||||
is not yet available).
|
||||
|
||||
The MCU also takes care of the commands for the sound CPU, which are stored
|
||||
@ -108,7 +108,7 @@ READ16_MEMBER(bionicc_state::hacked_controls_r)
|
||||
return m_inp[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_mpu_trigger_w)
|
||||
WRITE16_MEMBER(bionicc_state::mpu_trigger_w)
|
||||
{
|
||||
data = ioport("SYSTEM")->read() >> 12;
|
||||
m_inp[0] = data ^ 0x0f;
|
||||
@ -144,7 +144,7 @@ READ16_MEMBER(bionicc_state::hacked_soundcommand_r)
|
||||
|
||||
********************************************************************/
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(bionicc_state::bionicc_scanline)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(bionicc_state::scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -167,14 +167,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, bionicc_state )
|
||||
AM_RANGE(0xfe0000, 0xfe07ff) AM_RAM /* RAM? */
|
||||
AM_RANGE(0xfe0800, 0xfe0cff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xfe0d00, 0xfe3fff) AM_RAM /* RAM? */
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_WRITE(bionicc_gfxctrl_w) /* + coin counters */
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_WRITE(gfxctrl_w) /* + coin counters */
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xfe8010, 0xfe8017) AM_WRITE(bionicc_scroll_w)
|
||||
AM_RANGE(0xfe801a, 0xfe801b) AM_WRITE(bionicc_mpu_trigger_w) /* ??? not sure, but looks like it */
|
||||
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(bionicc_txvideoram_w) AM_SHARE("txvideoram")
|
||||
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(bionicc_fgvideoram_w) AM_SHARE("fgvideoram")
|
||||
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(bionicc_bgvideoram_w) AM_SHARE("bgvideoram")
|
||||
AM_RANGE(0xfe8010, 0xfe8017) AM_WRITE(scroll_w)
|
||||
AM_RANGE(0xfe801a, 0xfe801b) AM_WRITE(mpu_trigger_w) /* ??? not sure, but looks like it */
|
||||
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram")
|
||||
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
|
||||
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
|
||||
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xffc000, 0xfffff7) AM_RAM /* working RAM */
|
||||
AM_RANGE(0xfffff8, 0xfffff9) AM_READWRITE(hacked_soundcommand_r, hacked_soundcommand_w) /* hack */
|
||||
@ -373,7 +373,7 @@ static MACHINE_CONFIG_START( bionicc, bionicc_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2) /* 12 MHz - verified in schematics */
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bionicc_state, bionicc_scanline, "screen", 0, 1)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bionicc_state, scanline, "screen", 0, 1)
|
||||
|
||||
/* Protection MCU Intel C8751H-88 runs at 24MHz / 4 = 6MHz */
|
||||
|
||||
@ -390,7 +390,7 @@ static MACHINE_CONFIG_START( bionicc, bionicc_state )
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
/* FIXME: should be 257 visible horizontal pixels, first visible pixel should be repeated, back porch/front porch should be separated */
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_24MHz / 4, 386, 0, 256, 260, 0, 224)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(bionicc_state, screen_update_bionicc)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(bionicc_state, screen_update)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(DEVWRITELINE("spriteram", buffered_spriteram16_device, vblank_copy_rising))
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
@ -637,6 +637,49 @@ ROM_START( bioniccbl )
|
||||
ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used), Labeled "TSB" */
|
||||
ROM_END
|
||||
|
||||
ROM_START( bioniccbl2 ) // only the 4 maincpu ROMs differ, they came from an original, not working, Capcom board, but the title screen is Bionic Commandos like a bootleg? The other ROMs match topsecrt
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
|
||||
ROM_LOAD16_BYTE( "tsu_02.1a", 0x00000, 0x10000, CRC(c03d3424) SHA1(1d47185e10813c2792bda31c7dfbb40e88fd46ee) ) //sldc
|
||||
ROM_LOAD16_BYTE( "tsu_04.1b", 0x00001, 0x10000, CRC(9f13eb9d) SHA1(b9c8cfc22a1d2adcc6a93e3e382b2126446c05aa) ) //sldc
|
||||
ROM_LOAD16_BYTE( "3", 0x20000, 0x10000, CRC(a909ec2c) SHA1(7979480b5d82704f7d15546bda6af78316505f85) ) // the only ROM without an original sticker
|
||||
ROM_LOAD16_BYTE( "tsu_05.1d", 0x20001, 0x10000, CRC(4e6b75ce) SHA1(44c3900b8dc9f375a7d6ed57c4025bc35771e29c) ) //sldc
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "ts_01.4e", 0x00000, 0x8000, CRC(8ea07917) SHA1(e9ace70d89482fc3669860450a41aacacbee9083) )
|
||||
|
||||
ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */
|
||||
ROM_LOAD( "c8751h-88", 0x0000, 0x1000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x08000, "gfx1", 0 )
|
||||
ROM_LOAD( "ts_08.8l", 0x00000, 0x8000, CRC(96ad379e) SHA1(accd3a560b259c186bc28cdc004ed8de0b12f9d5) ) /* VIDEORAM (text layer) tiles */
|
||||
|
||||
ROM_REGION( 0x10000, "gfx2", 0 )
|
||||
ROM_LOAD( "ts_07.5l", 0x00000, 0x8000, CRC(25cdf8b2) SHA1(316f6acc46878682dabeab12722e6a64504d23bd) ) /* SCROLL2 Layer Tiles */
|
||||
ROM_LOAD( "ts_06.4l", 0x08000, 0x8000, CRC(314fb12d) SHA1(dab0519a49b64fe7a837b3c6383f6147e1ab6ffd) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx3", 0 )
|
||||
ROM_LOAD( "ts_12.17f", 0x00000, 0x8000, CRC(e4b4619e) SHA1(3bec8399ffb28fd50ce6ae88d90b091eadf8bda1) ) /* SCROLL1 Layer Tiles */
|
||||
ROM_LOAD( "ts_11.15f", 0x08000, 0x8000, CRC(ab30237a) SHA1(ea6c07df992ba48f9eca7daa4ea775faa94358d2) )
|
||||
ROM_LOAD( "ts_17.17g", 0x10000, 0x8000, CRC(deb657e4) SHA1(b36b468f9bbb7a4937286230d3f6caa14c61d4dd) )
|
||||
ROM_LOAD( "ts_16.15g", 0x18000, 0x8000, CRC(d363b5f9) SHA1(1dd3991d99db2d6bcbdb12879ba50a01fef95004) )
|
||||
ROM_LOAD( "ts_13.18f", 0x20000, 0x8000, CRC(a8f5a004) SHA1(36ab0cb8ec9ce0519876f7461ccc5020c9c5b597) )
|
||||
ROM_LOAD( "ts_18.18g", 0x28000, 0x8000, CRC(3b36948c) SHA1(d85fcc0265ba1729c587b046cc5a7ba6f25363dd) )
|
||||
ROM_LOAD( "ts_23.18j", 0x30000, 0x8000, CRC(bbfbe58a) SHA1(9b1d5672b6f3c5c0952f8dcd0da71acc68a97a5e) )
|
||||
ROM_LOAD( "ts_24.18k", 0x38000, 0x8000, CRC(f156e564) SHA1(a6cad05bcc6d9ded6294f9b5aa856d05641aed02) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx4", 0 )
|
||||
ROM_LOAD( "tse_10.13f", 0x00000, 0x8000, CRC(d28eeacc) SHA1(8b4a655a48da276b07f3464c65743b13cec52bcb) ) /* Sprites */
|
||||
ROM_LOAD( "tsu_09.11f", 0x08000, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) )
|
||||
ROM_LOAD( "tse_15.13g", 0x10000, 0x8000, CRC(9b5593c0) SHA1(73c0acbb01fe69c2bd29dea11b6a223c8efb54a0) )
|
||||
ROM_LOAD( "tsu_14.11g", 0x18000, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) )
|
||||
ROM_LOAD( "tse_20.13j", 0x20000, 0x8000, CRC(b03db778) SHA1(f72a93e73196c800c1893fd3b523394d702547dd) )
|
||||
ROM_LOAD( "tsu_19.11j", 0x28000, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) )
|
||||
ROM_LOAD( "tse_22.17j", 0x30000, 0x8000, CRC(d4dedeb3) SHA1(e121057bb541f3f5c755963ca22832c3fe2637c0) )
|
||||
ROM_LOAD( "tsu_21.15j", 0x38000, 0x8000, CRC(98777006) SHA1(bcc2058b639e9b71d16af05f63df298bcce91fdc) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 )
|
||||
ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used), Labeled "TSB" */
|
||||
ROM_END
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -649,6 +692,7 @@ GAME( 1987, bionicc, 0, bionicc, bionicc, driver_device, 0, ROT0, "Capcom
|
||||
GAME( 1987, bionicc1, bionicc, bionicc, bionicc, driver_device, 0, ROT0, "Capcom", "Bionic Commando (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, bionicc2, bionicc, bionicc, bionicc, driver_device, 0, ROT0, "Capcom", "Bionic Commando (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, topsecrt, bionicc, bionicc, bionicc, driver_device, 0, ROT0, "Capcom", "Top Secret (Japan, old revision)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, bioniccbl,bionicc, bionicc, bionicc, driver_device, 0, ROT0, "bootleg", "Bionic Commandos (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, bioniccbl, bionicc, bionicc, bionicc, driver_device, 0, ROT0, "bootleg", "Bionic Commandos (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, bioniccbl2,bionicc, bionicc, bionicc, driver_device, 0, ROT0, "bootleg", "Bionic Commandos (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// there's also an undumped JP new revision on which there are no extra lives after 1 million points, plus other bug-fixes / changes
|
||||
|
@ -44,14 +44,14 @@ public:
|
||||
|
||||
DECLARE_WRITE16_MEMBER(hacked_controls_w);
|
||||
DECLARE_READ16_MEMBER(hacked_controls_r);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_mpu_trigger_w);
|
||||
DECLARE_WRITE16_MEMBER(mpu_trigger_w);
|
||||
DECLARE_WRITE16_MEMBER(hacked_soundcommand_w);
|
||||
DECLARE_READ16_MEMBER(hacked_soundcommand_r);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_bgvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_fgvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_txvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_scroll_w);
|
||||
DECLARE_WRITE16_MEMBER(bionicc_gfxctrl_w);
|
||||
DECLARE_WRITE16_MEMBER(bgvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(fgvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(txvideoram_w);
|
||||
DECLARE_WRITE16_MEMBER(scroll_w);
|
||||
DECLARE_WRITE16_MEMBER(gfxctrl_w);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
@ -59,8 +59,8 @@ public:
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
DECLARE_PALETTE_DECODER(RRRRGGGGBBBBIIII);
|
||||
uint32_t screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(bionicc_scanline);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
@ -8613,6 +8613,7 @@ bionicc // 3/1987 (c) 1987 (Euro)
|
||||
bionicc1 // 3/1987 (c) 1987 (US)
|
||||
bionicc2 // 3/1987 (c) 1987 (US)
|
||||
bioniccbl // bootleg
|
||||
bioniccbl2 // bootleg
|
||||
topsecrt // 3/1987 (c) 1987 (Japan)
|
||||
|
||||
@source:bishi.cpp
|
||||
|
@ -124,25 +124,25 @@ PALETTE_DECODER_MEMBER( bionicc_state, RRRRGGGGBBBBIIII )
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_bgvideoram_w)
|
||||
WRITE16_MEMBER(bionicc_state::bgvideoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_bgvideoram[offset]);
|
||||
m_bg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_fgvideoram_w)
|
||||
WRITE16_MEMBER(bionicc_state::fgvideoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_fgvideoram[offset]);
|
||||
m_fg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_txvideoram_w)
|
||||
WRITE16_MEMBER(bionicc_state::txvideoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_txvideoram[offset]);
|
||||
m_tx_tilemap->mark_tile_dirty(offset & 0x3ff);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_scroll_w)
|
||||
WRITE16_MEMBER(bionicc_state::scroll_w)
|
||||
{
|
||||
data = COMBINE_DATA(&m_scroll[offset]);
|
||||
|
||||
@ -163,7 +163,7 @@ WRITE16_MEMBER(bionicc_state::bionicc_scroll_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(bionicc_state::bionicc_gfxctrl_w)
|
||||
WRITE16_MEMBER(bionicc_state::gfxctrl_w)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
@ -187,7 +187,7 @@ WRITE16_MEMBER(bionicc_state::bionicc_gfxctrl_w)
|
||||
|
||||
|
||||
|
||||
uint32_t bionicc_state::screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t bionicc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||
m_fg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 0); /* nothing in FRONT */
|
||||
|
Loading…
Reference in New Issue
Block a user