diff options
Diffstat (limited to 'src/mame/drivers/bionicc.cpp')
-rw-r--r-- | src/mame/drivers/bionicc.cpp | 996 |
1 files changed, 0 insertions, 996 deletions
diff --git a/src/mame/drivers/bionicc.cpp b/src/mame/drivers/bionicc.cpp deleted file mode 100644 index cf2fac1ef51..00000000000 --- a/src/mame/drivers/bionicc.cpp +++ /dev/null @@ -1,996 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Phil Stroffolino, Paul Leaman, Dirk Best -// thanks-to: Steven Frew (the author of Slutte) -/*************************************************************************** - - Bionic Commando - - © 1987 Capcom - - Hardware: - - Main CPU board: 86612-A-2 - Graphics ROM board: 86612-B-2 - Program ROM board: 86612-C-2 - - Main CPU: 68000CP10 @ 24MHz / 2 = 12MHz - Sound CPU: Z80A @ 14.31818 / 4 = 3.579545MHz - MCU: Intel C8751H-88 @ 24MHz / 4 = 6MHz - Sound Chip: YM2151 & YM3012 - OSC: 24.000 MHz (on the 86612-B-2 PCB) - Custom: CAPCOM DL-010D-103 (on the 86612-B-2 PCB) - - Video timings: - - Horizontal scan rate: 15.606kHz - Vertical scan rate: 60.024Hz - - pixel clock: 6.000MHz, 166ns per pixel - - htotal: 64.076us, 386 pixels - hsync: 5.312us, 32 pixels - back porch + sync: 15.106us, 91 pixels - active video: 42.662us, 257 pixels (first pixel is repeated?) - front porch: 6.308us, 38 pixels - - vtotal: 16.660ms, 260 lines - vsync: 256.304us, 4 lines - back porch + sync: 1.282ms, 20 lines - active video: 14.353ms, 224 lines - front porch: 1.025ms, 16 lines - - Clocks verified on 86612-A-2 and 86612-B-2 boards, serial no. 39646 - ("Bionic Commando", US region) by scope measurement at clock pins. - Timings verified at SYNC pin and BLUE pin (jamma edge), - using an Agilent DSO9404A scope and two N2873A 500MHz probes - - BTANB [MT00209] (verified on real PCB): - - misplaced sprites (see beginning of level 1 or 2 for example) - - sprite / sprite priority (see level 2 the reflectors) - - sprite / background priority (see level 1: birds walk through - branches of different trees) - - see the beginning of level 3: background screwed - - gray tiles around the title in Top Secret - - Notes: - - Protection MCU is labelled "TS" without a number and without a coloured. - Maybe its code is not region dependant. - - The MCU rom contains the string - "<for dealer-location test & USA show. 87/03/10 >" - which indicates it could be from an earlier version, especially with it - coming from a 'Top Secret' bootleg with identical program but unprotected - MCU, however f1dream has a similar string, and is verified as being from - a production board. - - Euro rom labels (IE: "TSE") had a blue stripe, while those labeled - as USA (TSU) had an red stripe on the sticker. The intermixing - of TSE and TSU roms in the parent set is correct and verified. - - Euro set simply states the game cannot be operated in Japan. - - IRQ 4 is control related. On each interrupt, it reads 0xFE4000 - (coin/start), shift the bits around and move the resulting byte into a - dword RAM location. The dword RAM location is rotated by 8 bits each time - this happens. This is probably done to be pedantic about coin insertions - (might be protection related). - - TODO: - - Firing IRQ4 at line 16 causes the game to often miss coin inserts. Set - to 128 currently to compensate. - - The game doesn't set the coin lockout in service mode, so the coin inputs - can't be tested there if you uncomment and enable it. - -***************************************************************************/ - -#include "emu.h" - -#include "cpu/m68000/m68000.h" -#include "cpu/mcs51/mcs51.h" -#include "cpu/z80/z80.h" -#include "machine/timer.h" -#include "video/bufsprite.h" -#include "video/tigeroad_spr.h" -#include "sound/ym2151.h" -#include "emupal.h" -#include "screen.h" -#include "speaker.h" -#include "tilemap.h" - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class bionicc_state : public driver_device -{ -public: - bionicc_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_mcu(*this, "mcu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_spritegen(*this, "spritegen"), - m_spriteram(*this, "spriteram") , - m_txvideoram(*this, "txvideoram"), - m_fgvideoram(*this, "fgvideoram"), - m_bgvideoram(*this, "bgvideoram"), - m_mcu_p3(0xff) - { } - - void bionicc(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - -private: - required_device<cpu_device> m_maincpu; - required_device<cpu_device> m_audiocpu; - required_device<i8751_device> m_mcu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; - required_device<tigeroad_spr_device> m_spritegen; - required_device<buffered_spriteram16_device> m_spriteram; - - required_shared_ptr<uint16_t> m_txvideoram; - required_shared_ptr<uint16_t> m_fgvideoram; - required_shared_ptr<uint16_t> m_bgvideoram; - - void main_map(address_map &map); - void sound_map(address_map &map); - void mcu_io(address_map &map); - - void output_w(u8 data); - - // video - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - TILE_GET_INFO_MEMBER(get_tx_tile_info); - static rgb_t RRRRGGGGBBBBIIII(uint32_t raw); - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(scanline); - - void bgvideoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void fgvideoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void txvideoram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void scroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); - - tilemap_t *m_tx_tilemap; - tilemap_t *m_bg_tilemap; - tilemap_t *m_fg_tilemap; - uint16_t m_scroll[4]; - - // audio - void audiocpu_nmi_w(u8 data); - - // protection mcu - u8 m_audiocpu_to_mcu; // ls374 at 4a - u8 m_mcu_to_audiocpu; // ls374 at 5a - u8 m_mcu_p1; - u8 m_mcu_p3; - - void dmaon_w(u16 data); - u8 mcu_dma_r(offs_t offset); - void mcu_dma_w(offs_t offset, u8 data); - void mcu_p3_w(u8 data); -}; - - -//************************************************************************** -// ADDRESS MAPS -//************************************************************************** - -void bionicc_state::main_map(address_map &map) -{ - map.global_mask(0xfffff); - map(0x00000, 0x3ffff).rom(); - map(0xe0000, 0xe07ff).ram(); /* RAM? */ - map(0xe0800, 0xe0cff).ram().share("spriteram"); - map(0xe0d00, 0xe3fff).ram(); /* RAM? */ - map(0xe4000, 0xe4000).mirror(0x3ffc).w(FUNC(bionicc_state::output_w)); - map(0xe4000, 0xe4001).mirror(0x3ffc).portr("INPUTS"); - map(0xe4002, 0xe4002).mirror(0x3ffc).w(FUNC(bionicc_state::audiocpu_nmi_w)); - map(0xe4002, 0xe4003).mirror(0x3ffc).portr("DSW"); - map(0xe8010, 0xe8017).w(FUNC(bionicc_state::scroll_w)); - map(0xe8018, 0xe8019).nopw(); // vblank irq ack? - map(0xe801a, 0xe801b).w(FUNC(bionicc_state::dmaon_w)); - map(0xec000, 0xecfff).mirror(0x3000).ram().w(FUNC(bionicc_state::txvideoram_w)).share("txvideoram"); - map(0xf0000, 0xf3fff).ram().w(FUNC(bionicc_state::fgvideoram_w)).share("fgvideoram"); - map(0xf4000, 0xf7fff).ram().w(FUNC(bionicc_state::bgvideoram_w)).share("bgvideoram"); - map(0xf8000, 0xf87ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0xfc000, 0xfffff).ram(); // WRAM -} - -void bionicc_state::sound_map(address_map &map) -{ - map(0x0000, 0x7fff).rom(); - map(0x8000, 0x8001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); - map(0xa000, 0xa000).lrw8(NAME([this]() { return m_mcu_to_audiocpu; }), NAME([this](u8 data) { m_audiocpu_to_mcu = data; })); - map(0xc000, 0xc7ff).ram(); -} - -void bionicc_state::mcu_io(address_map &map) -{ - map.global_mask(0x7ff); - map(0x000, 0x7ff).rw(FUNC(bionicc_state::mcu_dma_r), FUNC(bionicc_state::mcu_dma_w)); -} - - -//************************************************************************** -// INPUT PORT DEFINITIONS -//************************************************************************** - -static INPUT_PORTS_START( bionicc ) - PORT_START("INPUTS") - PORT_BIT(0x0001, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_COCKTAIL - PORT_BIT(0x0002, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_COCKTAIL - PORT_BIT(0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_COCKTAIL PORT_8WAY - PORT_BIT(0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_COCKTAIL PORT_8WAY - PORT_BIT(0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_COCKTAIL PORT_8WAY - PORT_BIT(0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_COCKTAIL PORT_8WAY - PORT_BIT(0x0040, IP_ACTIVE_LOW, IPT_BUTTON2) - PORT_BIT(0x0080, IP_ACTIVE_LOW, IPT_BUTTON1) - PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY - PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY - PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_8WAY - PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_8WAY - PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_START2) - PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_START1) - PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_COIN2) - PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_COIN1) - - PORT_START("DSW") - PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB:1,2,3") - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB:4,5,6") - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) ) - PORT_SERVICE_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SWB:7" ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SWB:8") - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA:1,2") - PORT_DIPSETTING( 0x0300, "3" ) - PORT_DIPSETTING( 0x0200, "4" ) - PORT_DIPSETTING( 0x0100, "5" ) - PORT_DIPSETTING( 0x0000, "7" ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA:3") - PORT_DIPSETTING( 0x0400, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA:4,5") /* table at 0x00483a */ - PORT_DIPSETTING( 0x1800, "20k 40k 100k 60k+" ) - PORT_DIPSETTING( 0x1000, "30k 50k 120k 70k+" ) - PORT_DIPSETTING( 0x0800, "20k 60k") - PORT_DIPSETTING( 0x0000, "30k 70k" ) - PORT_DIPNAME( 0x6000, 0x4000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA:6,7") - PORT_DIPSETTING( 0x4000, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( Medium ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x8000, 0x8000, "Freeze" ) PORT_DIPLOCATION("SWA:8") /* Listed as "Unused" */ - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) -INPUT_PORTS_END - - -//************************************************************************** -// PALETTE -//************************************************************************** - -rgb_t bionicc_state::RRRRGGGGBBBBIIII(uint32_t raw) -{ - uint8_t bright = (raw & 0x0f); - - uint8_t r = ((raw >> 12) & 0x0f) * 0x11; - uint8_t g = ((raw >> 8) & 0x0f) * 0x11; - uint8_t b = ((raw >> 4) & 0x0f) * 0x11; - - if ((bright & 0x08) == 0) - { - r = r * (0x07 + bright) / 0x0e; - g = g * (0x07 + bright) / 0x0e; - b = b * (0x07 + bright) / 0x0e; - } - - return rgb_t(r, g, b); -} - - -//************************************************************************** -// VIDEO EMULATION -//************************************************************************** - -/* - - This board handles tile/tile and tile/sprite priority with a PROM. Its - working is complicated and hardcoded in the driver. - - The PROM is a 256x4 chip, with address inputs wired as follows: - - A0 bg opaque - A1 \ - A2 | fg pen - A3 | - A4 / - A5 fg has priority over sprites (bit 5 of tile attribute) - A6 fg has not priority over bg (bits 6 & 7 of tile attribute both set) - A7 sprite opaque - - The output selects the active layer, it can be: - 0 bg - 1 fg - 2 sprite - -*/ - -void bionicc_state::bgvideoram_w(offs_t offset, u16 data, u16 mem_mask) -{ - COMBINE_DATA(&m_bgvideoram[offset]); - m_bg_tilemap->mark_tile_dirty(offset / 2); -} - -void bionicc_state::fgvideoram_w(offs_t offset, u16 data, u16 mem_mask) -{ - COMBINE_DATA(&m_fgvideoram[offset]); - m_fg_tilemap->mark_tile_dirty(offset / 2); -} - -void bionicc_state::txvideoram_w(offs_t offset, u16 data, u16 mem_mask) -{ - COMBINE_DATA(&m_txvideoram[offset]); - m_tx_tilemap->mark_tile_dirty(offset & 0x3ff); -} - -void bionicc_state::scroll_w(offs_t offset, u16 data, u16 mem_mask) -{ - data = COMBINE_DATA(&m_scroll[offset]); - - switch (offset) - { - case 0: - m_fg_tilemap->set_scrollx(0, data); - break; - case 1: - m_fg_tilemap->set_scrolly(0, data); - break; - case 2: - m_bg_tilemap->set_scrollx(0, data); - break; - case 3: - m_bg_tilemap->set_scrolly(0, data); - break; - } -} - -u32 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 */ - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 0); - m_spritegen->draw_sprites(bitmap, cliprect, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), false); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER0, 0); - - // text layer last - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - return 0; -} - -void bionicc_state::video_start() -{ - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bionicc_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bionicc_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bionicc_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); - - m_tx_tilemap->set_transparent_pen(3); - m_fg_tilemap->set_transmask(0, 0xffff, 0x8000); /* split type 0 is completely transparent in front half */ - m_fg_tilemap->set_transmask(1, 0xffc1, 0x803e); /* split type 1 has pens 1-5 opaque in front half */ - m_bg_tilemap->set_transparent_pen(15); -} - - -//************************************************************************** -// DRAWGFX LAYOUTS -//************************************************************************** - -static const gfx_layout vramlayout= -{ - 8,8, /* 8*8 characters */ - RGN_FRAC(1,1), /* 1024 character */ - 2, /* 2 bitplanes */ - { 4,0 }, - { STEP4(0,1), STEP4(4*2,1) }, - { STEP8(0,4*2*2) }, - 128 /* every character takes 128 consecutive bytes */ -}; - -static const gfx_layout scroll2layout= -{ - 8,8, /* 8*8 tiles */ - RGN_FRAC(1,2), /* 2048 tiles */ - 4, /* 4 bits per pixel */ - { RGN_FRAC(1,2)+4,RGN_FRAC(1,2),4,0 }, - { STEP4(0,1), STEP4(4*2,1) }, - { STEP8(0,4*2*2) }, - 128 /* every tile takes 128 consecutive bytes */ -}; - -static const gfx_layout scroll1layout= -{ - 16,16, /* 16*16 tiles */ - RGN_FRAC(1,2), /* 2048 tiles */ - 4, /* 4 bits per pixel */ - { RGN_FRAC(1,2)+4,RGN_FRAC(1,2),4,0 }, - { STEP4(0,1), STEP4(4*2,1), STEP4(4*2*2*16,1), STEP4(4*2*2*16+4*2,1) }, - { STEP16(0,4*2*2) }, - 512 /* each tile takes 512 consecutive bytes */ -}; - -static GFXDECODE_START( gfx_bionicc ) - GFXDECODE_ENTRY( "gfx1", 0, vramlayout, 768, 64 ) /* colors 768-1023 */ - GFXDECODE_ENTRY( "gfx2", 0, scroll2layout, 0, 8 ) /* colors 0- 127 */ - GFXDECODE_ENTRY( "gfx3", 0, scroll1layout, 256, 4 ) /* colors 256- 319 */ -GFXDECODE_END - -TILE_GET_INFO_MEMBER(bionicc_state::get_tx_tile_info) -{ - // 76------ tile code high bits - // --543210 color - - int attr = m_txvideoram[tile_index + 0x400]; - int code = m_txvideoram[tile_index] & 0xff; - - tileinfo.set(0, ((attr & 0xc0) << 2) | code, attr & 0x3f, 0); -} - -TILE_GET_INFO_MEMBER(bionicc_state::get_fg_tile_info) -{ - // 7------- tile flip x - // -6------ tile flip y - // --5----- layer - // ---43--- color - // -----210 tile code high bits - - int attr = m_fgvideoram[2 * tile_index + 1]; - int code = m_fgvideoram[2 * tile_index] & 0xff; - int flag = 0; - - if ((attr & 0xc0) == 0xc0) - { - // drawn to the background if both flip bits are set - tileinfo.category = 1; - tileinfo.group = 0; - } - else - { - tileinfo.category = 0; - tileinfo.group = (attr & 0x20) >> 5; - flag = TILE_FLIPXY((attr & 0xc0) >> 6); - } - - tileinfo.set(2, ((attr & 0x07) << 8) | code, (attr & 0x18) >> 3, flag); -} - -TILE_GET_INFO_MEMBER(bionicc_state::get_bg_tile_info) -{ - // 7------- tile flip x - // -6------ tile flip y - // --543--- color - // -----210 tile code high bits - - int attr = m_bgvideoram[2 * tile_index + 1]; - int code = m_bgvideoram[2 * tile_index] & 0xff; - int flag = TILE_FLIPXY((attr & 0xc0) >> 6); - - tileinfo.set(1, ((attr & 0x07) << 8) | code, (attr & 0x38) >> 3, flag); -} - - -//************************************************************************** -// PROTECTION MCU -//************************************************************************** - -u8 bionicc_state::mcu_dma_r(offs_t offset) -{ - u8 data = 0xff; - - if (BIT(m_mcu_p3, 5) == 0) - { - // various address bits are pulled high because the mcu doesn't drive them - // the 3 upper address bits (p2.0, p2.1, p2.2) are connected to a14 to a16 - offs_t address = 0xe3e01 | ((offset & 0x700) << 6) | ((offset & 0xff) << 1); - data = m_maincpu->space(AS_PROGRAM).read_byte(address); - } - - return data; -} - -void bionicc_state::mcu_dma_w(offs_t offset, u8 data) -{ - if (BIT(m_mcu_p3, 5) == 0) - { - offs_t address = 0xe3e01 | ((offset & 0x700) << 6) | ((offset & 0xff) << 1); - m_maincpu->space(AS_PROGRAM).write_byte(address, data); - } -} - -void bionicc_state::mcu_p3_w(u8 data) -{ - // 7------- read strobe - // -6------ write strobe - // --5----- dma - // ---4---- int1 ack - // ----3--- int1 - // -----2-- int0 - // ------1- int0 flip-flop preset - // -------0 int0 ack - - if (BIT(m_mcu_p3, 0) == 1 && BIT(data, 0) == 0) - { - m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE); - m_maincpu->resume(SUSPEND_REASON_HALT); - } - - if (BIT(m_mcu_p3, 4) == 1 && BIT(data, 4) == 0) - m_mcu->set_input_line(MCS51_INT1_LINE, CLEAR_LINE); - - if (BIT(m_mcu_p3, 6) == 1 && BIT(data, 6) == 0) - m_mcu_to_audiocpu = m_mcu_p1; - - m_mcu_p3 = data; -} - -void bionicc_state::dmaon_w(u16 data) -{ - m_mcu->set_input_line(MCS51_INT0_LINE, ASSERT_LINE); - m_maincpu->suspend(SUSPEND_REASON_HALT, true); -} - - -//************************************************************************** -// AUDIO -//************************************************************************** - -void bionicc_state::audiocpu_nmi_w(u8 data) -{ - m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - - -//************************************************************************** -// MACHINE EMULATION -//************************************************************************** - -void bionicc_state::output_w(u8 data) -{ - // 7------- coin counter 1 - // -6------ coin counter 2 - // --5----- coin lockout 1 - // ---4---- coin lockout 2 - // ----321- unused - // -------0 flip screen - - flip_screen_set(BIT(data, 0)); - - // commented out, else you can't test the coin inputs in service mode -// machine().bookkeeping().coin_lockout_w(1, BIT(~data, 4)); -// machine().bookkeeping().coin_lockout_w(0, BIT(~data, 5)); - machine().bookkeeping().coin_counter_w(1, BIT(data, 6)); - machine().bookkeeping().coin_counter_w(0, BIT(data, 7)); -} - -TIMER_DEVICE_CALLBACK_MEMBER(bionicc_state::scanline) -{ - // vblank-out irq - drives the game (V256) - if (param == 256) - m_maincpu->set_input_line(2, HOLD_LINE); - - // vblank-in irq - processes inputs (!LVBL) - // should be 16? but then often loses coin inserts - if (param == 128) - m_maincpu->set_input_line(4, HOLD_LINE); -} - -void bionicc_state::machine_start() -{ - save_item(NAME(m_scroll)); - save_item(NAME(m_audiocpu_to_mcu)); - save_item(NAME(m_mcu_to_audiocpu)); - save_item(NAME(m_mcu_p1)); - save_item(NAME(m_mcu_p3)); -} - -void bionicc_state::machine_reset() -{ - m_scroll[0] = 0; - m_scroll[1] = 0; - m_scroll[2] = 0; - m_scroll[3] = 0; -} - - -//************************************************************************** -// MACHINE DEFINITIONS -//************************************************************************** - -void bionicc_state::bionicc(machine_config &config) -{ - // Main CPU 68000CP10 @ 12 MHz - M68000(config, m_maincpu, 24_MHz_XTAL / 2); - m_maincpu->set_addrmap(AS_PROGRAM, &bionicc_state::main_map); - - TIMER(config, "scantimer").configure_scanline(FUNC(bionicc_state::scanline), "screen", 0, 1); - - // Audio CPU Z80 @ 3.579545 MHz (EXO3 C,B=GND, A=5V ==> Divisor 2^2) - Z80(config, m_audiocpu, 14.318181_MHz_XTAL / 4); - m_audiocpu->set_addrmap(AS_PROGRAM, &bionicc_state::sound_map); - - // Protection MCU Intel C8751H-88 @ 6 MHz - I8751(config, m_mcu, 24_MHz_XTAL / 4); - m_mcu->set_addrmap(AS_IO, &bionicc_state::mcu_io); - m_mcu->port_in_cb<1>().set([this](){ return m_audiocpu_to_mcu; }); - m_mcu->port_out_cb<1>().set([this](u8 data){ m_mcu_p1 = data; }); - m_mcu->port_out_cb<3>().set(FUNC(bionicc_state::mcu_p3_w)); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - /* FIXME: should be 257 visible horizontal pixels, first visible pixel should be repeated, back porch/front porch should be separated */ - screen.set_raw(24_MHz_XTAL / 4, 386, 0, 256, 260, 16, 240); - screen.set_screen_update(FUNC(bionicc_state::screen_update)); - screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); - screen.set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_bionicc); - - TIGEROAD_SPRITE(config, m_spritegen, 0); - m_spritegen->set_palette(m_palette); - m_spritegen->set_color_base(512); /* colors 512- 767 */ - - PALETTE(config, m_palette).set_format(2, &bionicc_state::RRRRGGGGBBBBIIII, 1024); - - BUFFERED_SPRITERAM16(config, m_spriteram); - - SPEAKER(config, "mono").front_center(); - - YM2151(config, "ymsnd", 14.318181_MHz_XTAL / 4).add_route(0, "mono", 0.60).add_route(1, "mono", 0.60); -} - - -//************************************************************************** -// ROM DEFINITIONS -//************************************************************************** - -ROM_START( bionicc ) /* "Not for use in Japan" */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "tse_02.1a", 0x00000, 0x10000, CRC(e4aeefaa) SHA1(77b6a2d4337bf350239abb50013d030d7c5c8640) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tse_04.1b", 0x00001, 0x10000, CRC(d0c8ec75) SHA1(04138c75ca3939604100b7e9fb451f7fceee67ca) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tse_03.2a", 0x20000, 0x10000, CRC(b2ac0a45) SHA1(d0933e74870efa9ea703251b30a56ef706ac24fe) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tse_05.2b", 0x20001, 0x10000, CRC(a79cb406) SHA1(50eada2f3e80c28dcb5529890d9b279c73f0115a) ) /* 68000 code */ - - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "ts_01b.4e", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "ts.2f", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "tsu_08.8l", 0x00000, 0x8000, CRC(9bf0b7a2) SHA1(1361335c3c2c8a9c6a7d99566048d8aac99e7c8f) ) /* VIDEORAM (text layer) tiles */ - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "tsu_07.5l", 0x00000, 0x8000, CRC(9469efa4) SHA1(53c70361e8d9e54825f61b87a10df42438aaf5b0) ) /* SCROLL2 Layer Tiles */ - ROM_LOAD( "tsu_06.4l", 0x08000, 0x8000, CRC(40bf0eb4) SHA1(fcb186c31747e2c9872de01e34b3e713dc74df82) ) - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "tse_10.13f", 0x00003, 0x8000, CRC(d28eeacc) SHA1(8b4a655a48da276b07f3464c65743b13cec52bcb) ) /* Sprites */ - ROM_LOAD32_BYTE( "tsu_09.11f", 0x20003, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) ) - ROM_LOAD32_BYTE( "tse_15.13g", 0x00002, 0x8000, CRC(9b5593c0) SHA1(73c0acbb01fe69c2bd29dea11b6a223c8efb54a0) ) - ROM_LOAD32_BYTE( "tsu_14.11g", 0x20002, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) ) - ROM_LOAD32_BYTE( "tse_20.13j", 0x00001, 0x8000, CRC(b03db778) SHA1(f72a93e73196c800c1893fd3b523394d702547dd) ) - ROM_LOAD32_BYTE( "tsu_19.11j", 0x20001, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) ) - ROM_LOAD32_BYTE( "tse_22.17j", 0x00000, 0x8000, CRC(d4dedeb3) SHA1(e121057bb541f3f5c755963ca22832c3fe2637c0) ) - ROM_LOAD32_BYTE( "tsu_21.15j", 0x20000, 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 - -ROM_START( bionicc1 ) /* "Not for use outside of USA or Canada" revision B */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_02b.1a", 0x00000, 0x10000, CRC(cf965a0a) SHA1(ab88742a3225a0b82ee2dfef6ed0058d3e11c38c) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_04b.1b", 0x00001, 0x10000, CRC(c9884bfb) SHA1(7d10cedff0a62847f8deb61a9611cc6661efb037) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_03b.2a", 0x20000, 0x10000, CRC(4e157ae2) SHA1(cc02931376d22a7fcfc320e6fd4129e03a461a49) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_05b.2b", 0x20001, 0x10000, CRC(e66ca0f9) SHA1(a503badf2fed38786d38c313d1dc315f3175d6de) ) /* 68000 code */ - - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "ts_01b.4e", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "ts.2f", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "tsu_08.8l", 0x00000, 0x8000, CRC(9bf0b7a2) SHA1(1361335c3c2c8a9c6a7d99566048d8aac99e7c8f) ) /* VIDEORAM (text layer) tiles */ - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "tsu_07.5l", 0x00000, 0x8000, CRC(9469efa4) SHA1(53c70361e8d9e54825f61b87a10df42438aaf5b0) ) /* SCROLL2 Layer Tiles */ - ROM_LOAD( "tsu_06.4l", 0x08000, 0x8000, CRC(40bf0eb4) SHA1(fcb186c31747e2c9872de01e34b3e713dc74df82) ) - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "tsu_10.13f", 0x00003, 0x8000, CRC(f1180d02) SHA1(312626af48235a1f726ab596f296ef4739785ca0) ) /* Sprites */ - ROM_LOAD32_BYTE( "tsu_09.11f", 0x20003, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) ) - ROM_LOAD32_BYTE( "tsu_15.13g", 0x00002, 0x8000, CRC(ea912701) SHA1(106336c63a1c8a0b13236268bc533a8263285cad) ) - ROM_LOAD32_BYTE( "tsu_14.11g", 0x20002, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) ) - ROM_LOAD32_BYTE( "tsu_20.13j", 0x00001, 0x8000, CRC(17857ad2) SHA1(9f45cea6e9ce82bfc9ee6896a30257d20fb38bca) ) - ROM_LOAD32_BYTE( "tsu_19.11j", 0x20001, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) ) - ROM_LOAD32_BYTE( "tsu_22.17j", 0x00000, 0x8000, CRC(5ee1ae6a) SHA1(76ca53d847c940c4176d79ba49b0c10efd6342e8) ) - ROM_LOAD32_BYTE( "tsu_21.15j", 0x20000, 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 - -ROM_START( bionicc2 ) /* "Not for use outside of USA or Canada" 1st release */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_02.1a", 0x00000, 0x10000, CRC(f2528f08) SHA1(04c793837c86d83312fd44b46a6a94378c90113b) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_04.1b", 0x00001, 0x10000, CRC(38b1c7e4) SHA1(14bf743726c214bd00177e7b410c272dd7ab3d3f) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_03.2a", 0x20000, 0x10000, CRC(72c3b76f) SHA1(f7f71eae7617e3348b727775088b496e86d51e38) ) /* 68000 code */ - ROM_LOAD16_BYTE( "tsu_05.2b", 0x20001, 0x10000, CRC(70621f83) SHA1(0a77c2827a5c50457d90ccc62e463508d83d2f20) ) /* 68000 code */ - - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "ts_01b.4e", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "ts.2f", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "tsu_08.8l", 0x00000, 0x8000, CRC(9bf0b7a2) SHA1(1361335c3c2c8a9c6a7d99566048d8aac99e7c8f) ) /* VIDEORAM (text layer) tiles */ - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "tsu_07.5l", 0x00000, 0x8000, CRC(9469efa4) SHA1(53c70361e8d9e54825f61b87a10df42438aaf5b0) ) /* SCROLL2 Layer Tiles */ - ROM_LOAD( "tsu_06.4l", 0x08000, 0x8000, CRC(40bf0eb4) SHA1(fcb186c31747e2c9872de01e34b3e713dc74df82) ) - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "tsu_10.13f", 0x00003, 0x8000, CRC(f1180d02) SHA1(312626af48235a1f726ab596f296ef4739785ca0) ) /* Sprites */ - ROM_LOAD32_BYTE( "tsu_09.11f", 0x20003, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) ) - ROM_LOAD32_BYTE( "tsu_15.13g", 0x00002, 0x8000, CRC(ea912701) SHA1(106336c63a1c8a0b13236268bc533a8263285cad) ) - ROM_LOAD32_BYTE( "tsu_14.11g", 0x20002, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) ) - ROM_LOAD32_BYTE( "tsu_20.13j", 0x00001, 0x8000, CRC(17857ad2) SHA1(9f45cea6e9ce82bfc9ee6896a30257d20fb38bca) ) - ROM_LOAD32_BYTE( "tsu_19.11j", 0x20001, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) ) - ROM_LOAD32_BYTE( "tsu_22.17j", 0x00000, 0x8000, CRC(5ee1ae6a) SHA1(76ca53d847c940c4176d79ba49b0c10efd6342e8) ) - ROM_LOAD32_BYTE( "tsu_21.15j", 0x20000, 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 - -ROM_START( topsecrt2 ) /* "Not for use in any other country but Japan" */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_02b.1a", 0x00000, 0x10000, CRC(0b84497f) SHA1(f7e9412d37a1e4b7a437d3f7bc5dc448c8a22079) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_04b.1b", 0x00001, 0x10000, CRC(9ab6de8d) SHA1(04445bc183364ebb6a8833a147b694234b509634) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_03b.2a", 0x20000, 0x10000, CRC(1b3f8a82) SHA1(2f9cad83b7bd10617bbd5172a1d31f41b194d3ac) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_05b.2b", 0x20001, 0x10000, CRC(962a89d8) SHA1(4aa5b0fd68a59ff74716253b0ba4c1933e92855b) ) /* 68000 code */ - - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "ts_01b.4e", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "ts.2f", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "ts_10.13f", 0x00003, 0x8000, CRC(c3587d05) SHA1(ad0898a5d4cf110783ef092bf8e65b6ef31a8ae0) ) /* Sprites */ - ROM_LOAD32_BYTE( "ts_09.11f", 0x20003, 0x8000, CRC(6b63eef2) SHA1(5d1580db7f49c5994c2a08a36c2d05f3e246930d) ) - ROM_LOAD32_BYTE( "ts_15.13g", 0x00002, 0x8000, CRC(db8cebb0) SHA1(1cc9eac14851cde95fb2d69d6f5ffb08bc9c0d93) ) - ROM_LOAD32_BYTE( "ts_14.11g", 0x20002, 0x8000, CRC(e2e41abf) SHA1(d002d0d8fdbb9ec3e2eac218f6338f733953ca82) ) - ROM_LOAD32_BYTE( "ts_20.13j", 0x00001, 0x8000, CRC(bfd1a695) SHA1(bf93486b96bfa1a1d5015189043b07e6130e6df1) ) - ROM_LOAD32_BYTE( "ts_19.11j", 0x20001, 0x8000, CRC(928b669e) SHA1(98ea9d23a46b0700490fd2fa7ab4fb0988dd5ca6) ) - ROM_LOAD32_BYTE( "ts_22.17j", 0x00000, 0x8000, CRC(3fe05d9a) SHA1(32e28ef03fb82785019d1ae8b3859215b5368c2b) ) - ROM_LOAD32_BYTE( "ts_21.15j", 0x20000, 0x8000, CRC(27a9bb7c) SHA1(bb60332c0ecde4d7797960dec39c1079498175c3) ) - - ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used), Labeled "TSB" */ -ROM_END - -ROM_START( topsecrt ) /* "Not for use in any other country but Japan" */ - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_02.1a", 0x00000, 0x10000, CRC(b2fe1ddb) SHA1(892f19124993add96edabdba3aafeecc6668c5d9) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_04.1b", 0x00001, 0x10000, CRC(427a003d) SHA1(5a379fe2942e5565810939d5eb843003226222cc) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_03.2a", 0x20000, 0x10000, CRC(27f04bb6) SHA1(41d17b84b34dc8b2e5dfa67794a8df3e898b740b) ) /* 68000 code */ - ROM_LOAD16_BYTE( "ts_05.2b", 0x20001, 0x10000, CRC(c01547b1) SHA1(563bf6be4f10f5e6eb5b562266accf168f62bf30) ) /* 68000 code */ - - 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( "ts.2f", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "ts_10.13f", 0x00003, 0x8000, CRC(c3587d05) SHA1(ad0898a5d4cf110783ef092bf8e65b6ef31a8ae0) ) /* Sprites */ - ROM_LOAD32_BYTE( "ts_09.11f", 0x20003, 0x8000, CRC(6b63eef2) SHA1(5d1580db7f49c5994c2a08a36c2d05f3e246930d) ) - ROM_LOAD32_BYTE( "ts_15.13g", 0x00002, 0x8000, CRC(db8cebb0) SHA1(1cc9eac14851cde95fb2d69d6f5ffb08bc9c0d93) ) - ROM_LOAD32_BYTE( "ts_14.11g", 0x20002, 0x8000, CRC(e2e41abf) SHA1(d002d0d8fdbb9ec3e2eac218f6338f733953ca82) ) - ROM_LOAD32_BYTE( "ts_20.13j", 0x00001, 0x8000, CRC(bfd1a695) SHA1(bf93486b96bfa1a1d5015189043b07e6130e6df1) ) - ROM_LOAD32_BYTE( "ts_19.11j", 0x20001, 0x8000, CRC(928b669e) SHA1(98ea9d23a46b0700490fd2fa7ab4fb0988dd5ca6) ) - ROM_LOAD32_BYTE( "ts_22.17j", 0x00000, 0x8000, CRC(3fe05d9a) SHA1(32e28ef03fb82785019d1ae8b3859215b5368c2b) ) - ROM_LOAD32_BYTE( "ts_21.15j", 0x20000, 0x8000, CRC(27a9bb7c) SHA1(bb60332c0ecde4d7797960dec39c1079498175c3) ) - - ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used), Labeled "TSB" */ -ROM_END - -ROM_START( bioniccbl ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ - ROM_LOAD16_BYTE( "02l.bin", 0x00000, 0x10000, CRC(b2fe1ddb) SHA1(892f19124993add96edabdba3aafeecc6668c5d9) ) - ROM_LOAD16_BYTE( "03l.bin", 0x00001, 0x10000, CRC(427a003d) SHA1(5a379fe2942e5565810939d5eb843003226222cc) ) - ROM_LOAD16_BYTE( "02u.bin", 0x20000, 0x10000, CRC(27f04bb6) SHA1(41d17b84b34dc8b2e5dfa67794a8df3e898b740b) ) - ROM_LOAD16_BYTE( "03u.bin", 0x20001, 0x10000, CRC(c01547b1) SHA1(563bf6be4f10f5e6eb5b562266accf168f62bf30) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) - ROM_LOAD( "01.bin", 0x00000, 0x8000, CRC(8ea07917) SHA1(e9ace70d89482fc3669860450a41aacacbee9083) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "d8751h.bin", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD( "06.bin", 0x00000, 0x4000, CRC(4e6b81d9) SHA1(052784d789b0c9193edf218fa1883b6e3b7df988) ) - - ROM_REGION( 0x10000, "gfx2", 0 ) - ROM_LOAD( "05.bin", 0x00000, 0x8000, CRC(9bf8dc7f) SHA1(539a52087ed1f58839b6aa8c0b5ed249f4f4041e) ) - ROM_LOAD( "04.bin", 0x08000, 0x8000, CRC(1b43bf63) SHA1(b80d675a07cebd83daf202d1c3d3f7c2dedf5c30) ) - - ROM_REGION( 0x40000, "gfx3", 0 ) - ROM_LOAD( "ts_12.17f", 0x00000, 0x8000, CRC(e4b4619e) SHA1(3bec8399ffb28fd50ce6ae88d90b091eadf8bda1) ) // 09.bin - ROM_LOAD( "ts_11.15f", 0x08000, 0x8000, CRC(ab30237a) SHA1(ea6c07df992ba48f9eca7daa4ea775faa94358d2) ) // 08.bin - ROM_LOAD( "ts_17.17g", 0x10000, 0x8000, CRC(deb657e4) SHA1(b36b468f9bbb7a4937286230d3f6caa14c61d4dd) ) // 13.bin - ROM_LOAD( "ts_16.15g", 0x18000, 0x8000, CRC(d363b5f9) SHA1(1dd3991d99db2d6bcbdb12879ba50a01fef95004) ) // 12.bin - ROM_LOAD( "ts_13.18f", 0x20000, 0x8000, CRC(a8f5a004) SHA1(36ab0cb8ec9ce0519876f7461ccc5020c9c5b597) ) // 10.bin - ROM_LOAD( "ts_18.18g", 0x28000, 0x8000, CRC(3b36948c) SHA1(d85fcc0265ba1729c587b046cc5a7ba6f25363dd) ) // 14.bin - ROM_LOAD( "ts_23.18j", 0x30000, 0x8000, CRC(bbfbe58a) SHA1(9b1d5672b6f3c5c0952f8dcd0da71acc68a97a5e) ) // 17.bin - ROM_LOAD( "ts_24.18k", 0x38000, 0x8000, CRC(f156e564) SHA1(a6cad05bcc6d9ded6294f9b5aa856d05641aed02) ) // 18.bin - - ROM_REGION( 0x40000, "spritegen", 0 ) - ROM_LOAD32_BYTE( "07.bin", 0x00003, 0x10000, CRC(a0e78996) SHA1(810a54e657c0faaff6a8494acaf803d1d2151893) ) - ROM_LOAD32_BYTE( "11.bin", 0x00002, 0x10000, CRC(37cb11c2) SHA1(af8c2ae4bb6e6c13ea3e8b7c96e5b18f1eb1d5a5) ) - ROM_LOAD32_BYTE( "15.bin", 0x00001, 0x10000, CRC(4e0354ce) SHA1(d3256c891b44c6593b0b44c0d0a3e754ce78c1cb) ) - ROM_LOAD32_BYTE( "16.bin", 0x00000, 0x10000, CRC(ac89e5cc) SHA1(aa7e065ece6d25b7e83fadcd22c09e1f7dc0b86f) ) - - ROM_REGION( 0x0100, "proms", 0 ) - 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( "d8751h.bin", 0x0000, 0x1000, CRC(3ed7f0be) SHA1(db9e972065c8e60b5d74762dc3424271ea9524cb) ) /* from 'topsecrt' bootleg, but appears to be original */ - - 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, "spritegen", 0 ) - ROM_LOAD32_BYTE( "tse_10.13f", 0x00003, 0x8000, CRC(d28eeacc) SHA1(8b4a655a48da276b07f3464c65743b13cec52bcb) ) /* Sprites */ - ROM_LOAD32_BYTE( "tsu_09.11f", 0x20003, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) ) - ROM_LOAD32_BYTE( "tse_15.13g", 0x00002, 0x8000, CRC(9b5593c0) SHA1(73c0acbb01fe69c2bd29dea11b6a223c8efb54a0) ) - ROM_LOAD32_BYTE( "tsu_14.11g", 0x20002, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) ) - ROM_LOAD32_BYTE( "tse_20.13j", 0x00001, 0x8000, CRC(b03db778) SHA1(f72a93e73196c800c1893fd3b523394d702547dd) ) - ROM_LOAD32_BYTE( "tsu_19.11j", 0x20001, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) ) - ROM_LOAD32_BYTE( "tse_22.17j", 0x00000, 0x8000, CRC(d4dedeb3) SHA1(e121057bb541f3f5c755963ca22832c3fe2637c0) ) - ROM_LOAD32_BYTE( "tsu_21.15j", 0x20000, 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 - - -//************************************************************************** -// SYSTEM DRIVERS -//************************************************************************** - -// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS -GAME( 1987, bionicc, 0, bionicc, bionicc, bionicc_state, empty_init, ROT0, "Capcom", "Bionic Commando (Euro)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, bionicc1, bionicc, bionicc, bionicc, bionicc_state, empty_init, ROT0, "Capcom", "Bionic Commando (US set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, bionicc2, bionicc, bionicc, bionicc, bionicc_state, empty_init, ROT0, "Capcom", "Bionic Commando (US set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, topsecrt, bionicc, bionicc, bionicc, bionicc_state, empty_init, ROT0, "Capcom", "Top Secret (Japan, old revision)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, topsecrt2, bionicc, bionicc, bionicc, bionicc_state, empty_init, ROT0, "Capcom", "Top Secret (Japan, revision B)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, bioniccbl, bionicc, bionicc, bionicc, bionicc_state, empty_init, ROT0, "bootleg", "Bionic Commandos (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, bioniccbl2, bionicc, bionicc, bionicc, bionicc_state, empty_init, 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 (possibly topsecrt2 set?) |