diff options
Diffstat (limited to 'src/mame/drivers/twincobr.c')
-rw-r--r-- | src/mame/drivers/twincobr.c | 1090 |
1 files changed, 1090 insertions, 0 deletions
diff --git a/src/mame/drivers/twincobr.c b/src/mame/drivers/twincobr.c new file mode 100644 index 00000000000..908dab04fc3 --- /dev/null +++ b/src/mame/drivers/twincobr.c @@ -0,0 +1,1090 @@ +/**************************************************************************** + + ToaPlan game hardware from 1987 + ------------------------------- + Driver by: Quench + Flying Shark details: Carl-Henrik Skarstedt & Magnus Danielsson + Flying Shark bootleg info: Ruben Panossian + + +Supported games: + + Toaplan Board Number: TP-007 + Taito game number: B02 + Flying Shark (World) + Sky Shark (USA Romstar license) + Hishou Zame (Flying Shark Japan license) + Flying Shark bootleg (USA Romstar license) + + Toaplan Board Number: TP-011 + Taito game number: B30 + Twin Cobra (World) + Twin Cobra (USA license) + Kyukyoku Tiger (Japan license) + + Comad Board Number: ?????? + Comad game number: ??? + GulfWar II (Game play very similar to Twin cobra) + +Difference between Twin Cobra and Kyukyoko Tiger: + T.C. supports two simultaneous players. + K.T. supports two players, but only one at a time. + for this reason, it also supports Table Top cabinets. + T.C. stores 3 characters for high scores. + K.T. stores 6 characters for high scores. + T.C. heros are Red and Blue for player 1 and 2 respectively. + K.T. heros are grey for both players. + T.C. dead remains of ground tanks are circular. + K.T. dead remains of ground tanks always vary in shape. + T.C. does not use DSW1-1 and DSW2-8. + K.T. uses DSW1-1 for cabinet type, and DSW2-8 for allow game continue. + T.C. continues new hero and continued game at current position. + K.T. continues new hero and continued game at predefined positions. + After dying, and your new hero appears, if you do not travel more + than your helicopter length forward, you are penalised and moved + back further when your next hero appears. + K.T. Due to this difference in continue sequence, Kyukyoko Tiger is MUCH + harder, challenging, and nearly impossible to complete ! + +**************************** Memory & I/O Maps ***************************** +68000: Main CPU + +00000-1ffff ROM for Flying Shark +00000-2ffff ROM for Twin Cobra +30000-33fff RAM shared with TMS320C10NL-14 protection microcontroller +40000-40fff RAM sprite display properties (co-ordinates, character, color - etc) +50000-50dff Palette RAM +7a000-7abff RAM shared with Z80; 16-bit on this side, 8-bit on Z80 side + +read: +78001 DSW1 (Flying Shark) +78003 DSW2 (Flying Shark) + +78005 Player 1 Joystick and Buttons input port +78007 Player 2 Joystick and Buttons input port +78009 bit 7 vblank, coin and control/service inputs (Flying shark) + Flying Shark implements Tilt as 'freeze system' and also has + a reset button, but its not implelemted here (not needed) + +7e000-7e005 read data from video RAM (see below) + +write: +60000-60003 CRT 6845 controller. 0 = register offset , 2 = register data +70000-70001 scroll y for character page (centre normally 0x01c9) +70002-70003 scroll < x > for character page (centre normally 0x00e2) +70004-70005 offset in character page to write character (7e000) + +72000-72001 scroll y for foreground page (starts from 0x03c9) +72002-72003 scroll < x > for foreground page (centre normally 0x002a) +72004-72005 offset in character page to write character (7e002) + +74000-74001 scroll y for background page (starts from 0x03c9) +74002-74003 scroll < x > for background page (centre normally 0x002a) +74004-74005 offset in character page to write character (7e004) + +76000-76003 as above but for another layer maybe ??? (Not used here) +7800a This activates INT line for Flying shark. (Not via 7800C) + 00 Activate INTerrupt line to the TMS320C10 DSP. + 01 Inhibit INTerrupt line to the TMS320C10 DSP. + +7800c Control register (Byte write access). + bits 7-4 always 0 + bits 3-1 select the control signal to drive. + bit 0 is the value passed to the control signal. + + Value (hex): + 00-03 ???? + 04 Clear IPL2 line to 68000 inactive hi (Interrupt priority 4) + 05 Set IPL2 line to 68000 active low (Interrupt priority 4) + 06 Dont flip display + 07 Flip display + 08 Switch to background layer ram bank 0 + 09 Switch to background layer ram bank 1 + 0A Switch to foreground layer rom bank 0 + 0B Switch to foreground layer rom bank 1 + 0C Activate INTerrupt line to the TMS320C10 DSP (Twin Cobra) + 0D Inhibit INTerrupt line to the TMS320C10 DSP (Twin Cobra) + 0E Turn screen off + 0F Turn screen on + +7e000-7e001 data to write in text video RAM (70000) +7e002-7e003 data to write in bg video RAM (72004) +7e004-7e005 data to write in fg video RAM (74004) + +Z80: Sound CPU +0000-7fff ROM +8000-87ff shared with 68000; 8-bit on this side, 16-bit on 68000 side + +in: +00 YM3812 status +10 Coin inputs and control/service inputs (Twin Cobra) +40 DSW1 (Twin Cobra) +50 DSW2 (Twin Cobra) + +out: +00 YM3812 control +01 YM3812 data +20 Coin counters / Coin lockouts + +TMS320C10 DSP: Harvard type architecture. RAM and ROM on seperate data buses. +0000-07ff ROM 16-bit opcodes (word access only). Moved to $8000-8fff for + MAME compatibility. View this ROM in the debugger at $8000h +0000-0090 Internal RAM (words). + + +in: +01 data read from addressed 68K address space (Main RAM/Sprite RAM) + +out: +00 address of 68K to read/write to +01 data to write to addressed 68K address space (Main RAM/Sprite RAM) +03 bit 15 goes to BIO line of TMS320C10. BIO is a polled input line. + + +MCUs used with this hardware: (TMS320C10 in custom Toaplan/Taito disguise) + +Twin Cobra Sky Shark Wardner +D70016U D70012U D70012U +GXC-04 GXC-02 GXC-02 +MCU (delta) 74000 MCU 71400 MCU (delta) 71900 + + + +68K writes the following to $30000 to tell DSP to do the following: +Twin Kyukyoku +Cobra Tiger +00 00 do nothing +01 0C run self test, and report DSP ROM checksum from 68K PC:23CA6 +02 07 control all enemy shots from 68K PC:23BFA +04 0B start the enemy helicopters from 68K PC:23C66 +05 08 check for colision with enemy fire ??? from 68K PC:23C20 +06 09 check for colision with enemy ??? from 68K PC:23C44 +07 01 control enemy helicopter shots from 68K PC:23AB2 +08 02 control all ground enemy shots +0A 04 read hero position and send enemy to it ? from 68K PC:23B58 + +03 0A \ +09 03 \ These functions within the DSP never seem to be called ???? +0B 05 / +0C 06 / + +68K writes the following to $30004 to tell DSP to do the following: +Flying Hishou +Shark Zame +00 00 do nothing +03 0B Write sprite to sprite RAM +05 01 Get angle +06 02 Rotate towards direction +09 05 Check collision between 2 spheres!?? +0A 06 Polar coordinates add +0B 07 run self test, and report DSP ROM checksum + +01 09 \ +02 0A \ +04 08 > These functions within the DSP never seem to be called ???? +07 03 / +08 04 / +*****************************************************************************/ + + +#include "driver.h" +#include "cpu/m68000/m68000.h" +#include "cpu/tms32010/tms32010.h" +#include "twincobr.h" +#include "sound/3812intf.h" + + + + + +/***************************** 68000 Memory Map *****************************/ + +static ADDRESS_MAP_START( main_program_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x02ffff) AM_ROM + AM_RANGE(0x030000, 0x033fff) AM_RAM /* 68K and DSP shared RAM */ + AM_RANGE(0x040000, 0x040fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) + AM_RANGE(0x050000, 0x050dff) AM_READWRITE(paletteram16_word_r, paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x060000, 0x060001) AM_WRITE(twincobr_crtc_reg_sel_w) /* 6845 CRT controller */ + AM_RANGE(0x060002, 0x060003) AM_WRITE(twincobr_crtc_data_w) /* 6845 CRT controller */ + AM_RANGE(0x070000, 0x070003) AM_WRITE(twincobr_txscroll_w) /* text layer scroll */ + AM_RANGE(0x070004, 0x070005) AM_WRITE(twincobr_txoffs_w) /* offset in text video RAM */ + AM_RANGE(0x072000, 0x072003) AM_WRITE(twincobr_bgscroll_w) /* bg layer scroll */ + AM_RANGE(0x072004, 0x072005) AM_WRITE(twincobr_bgoffs_w) /* offset in bg video RAM */ + AM_RANGE(0x074000, 0x074003) AM_WRITE(twincobr_fgscroll_w) /* fg layer scroll */ + AM_RANGE(0x074004, 0x074005) AM_WRITE(twincobr_fgoffs_w) /* offset in fg video RAM */ + AM_RANGE(0x076000, 0x076003) AM_WRITE(twincobr_exscroll_w) /* Spare layer scroll */ + AM_RANGE(0x078000, 0x078001) AM_READ(input_port_3_word_r) /* Flying Shark - DSW A */ + AM_RANGE(0x078002, 0x078003) AM_READ(input_port_4_word_r) /* Flying Shark - DSW B */ + AM_RANGE(0x078004, 0x078005) AM_READ(input_port_1_word_r) /* Player 1 inputs */ + AM_RANGE(0x078006, 0x078007) AM_READ(input_port_2_word_r) /* Player 2 inputs */ + AM_RANGE(0x078008, 0x078009) AM_READ(input_port_0_word_r) /* V-Blank & FShark Coin/Start */ + AM_RANGE(0x07800a, 0x07800b) AM_WRITE(fshark_coin_dsp_w) /* Flying Shark DSP Comms & coin stuff */ + AM_RANGE(0x07800c, 0x07800d) AM_WRITE(twincobr_control_w) /* Twin Cobra DSP Comms & system control */ + AM_RANGE(0x07a000, 0x07afff) AM_READWRITE(twincobr_sharedram_r, twincobr_sharedram_w) /* 16-bit on 68000 side, 8-bit on Z80 side */ + AM_RANGE(0x07e000, 0x07e001) AM_READWRITE(twincobr_txram_r, twincobr_txram_w) /* data for text video RAM */ + AM_RANGE(0x07e002, 0x07e003) AM_READWRITE(twincobr_bgram_r, twincobr_bgram_w) /* data for bg video RAM */ + AM_RANGE(0x07e004, 0x07e005) AM_READWRITE(twincobr_fgram_r, twincobr_fgram_w) /* data for fg video RAM */ +ADDRESS_MAP_END + + +/***************************** Z80 Memory Map *******************************/ + +static ADDRESS_MAP_START( sound_program_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(&twincobr_sharedram) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_READWRITE(YM3812_status_port_0_r, YM3812_control_port_0_w) + AM_RANGE(0x01, 0x01) AM_WRITE(YM3812_write_port_0_w) + AM_RANGE(0x10, 0x10) AM_READ(input_port_5_r) /* Twin Cobra - Coin/Start */ + AM_RANGE(0x20, 0x20) AM_WRITE(twincobr_coin_w) /* Twin Cobra coin count-lockout */ + AM_RANGE(0x40, 0x40) AM_READ(input_port_3_r) /* Twin Cobra - DSW A */ + AM_RANGE(0x50, 0x50) AM_READ(input_port_4_r) /* Twin Cobra - DSW B */ +ADDRESS_MAP_END + + +/***************************** TMS32010 Memory Map **************************/ + +static ADDRESS_MAP_START( DSP_program_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000, 0x7ff) AM_ROM +ADDRESS_MAP_END + + /* $000 - 08F TMS32010 Internal Data RAM in Data Address Space */ + +static ADDRESS_MAP_START( DSP_io_map, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0, 0) AM_WRITE(twincobr_dsp_addrsel_w) + AM_RANGE(1, 1) AM_READWRITE(twincobr_dsp_r, twincobr_dsp_w) + AM_RANGE(2, 2) AM_READWRITE(fsharkbt_dsp_r, fsharkbt_dsp_w) + AM_RANGE(3, 3) AM_WRITE(twincobr_dsp_bio_w) + AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(twincobr_BIO_r) +ADDRESS_MAP_END + + + + +/***************************************************************************** + Input Port definitions +*****************************************************************************/ + +#define TOAPLAN_PLAYER_INPUT( player ) \ + PORT_START \ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) PORT_8WAY \ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) PORT_8WAY \ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) PORT_8WAY \ + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) PORT_8WAY \ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) \ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) \ + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) \ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + +#define TOAPLAN_JAPAN_DSW_A \ + PORT_START /* DSW A */ \ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) \ + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) \ + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) \ + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) \ + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) \ + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) \ + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) \ + PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) \ + PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) \ + PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) \ + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) \ + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) \ + PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) \ + PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) + +#define TWINCOBR_VBLANK_INPUT( active_level ) \ + PORT_START \ + PORT_BIT( 0x7f, active_level, IPT_UNKNOWN ) \ + PORT_BIT( 0x80, active_level, IPT_VBLANK ) + +#define TWINCOBR_SYSTEM_INPUTS \ + PORT_START \ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN3 ) \ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT ) \ + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) \ + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) \ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 ) \ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) \ + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 ) \ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + +#define TWINCOBR_DSW_B /* not KTIGER */ \ + PORT_START /* DSW B */ \ + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) \ + PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) \ + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) \ + PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) ) \ + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) \ + PORT_DIPSETTING( 0x00, "50K, then every 150K" ) \ + PORT_DIPSETTING( 0x04, "70K, then every 200K" ) \ + PORT_DIPSETTING( 0x08, "50000" ) \ + PORT_DIPSETTING( 0x0c, "100000" ) \ + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) \ + PORT_DIPSETTING( 0x30, "2" ) \ + PORT_DIPSETTING( 0x00, "3" ) \ + PORT_DIPSETTING( 0x20, "4" ) \ + PORT_DIPSETTING( 0x10, "5" ) \ + PORT_DIPNAME( 0x40, 0x00, "Show DIP SW Settings" ) \ + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) \ + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) \ + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + +#define FSHARK_SYSTEM_INPUTS /* V-Blank is also here */ \ + PORT_START \ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN3 ) \ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_TILT ) /* tilt causes freeze */ \ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) /* reset button */ \ + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) \ + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN2 ) \ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 ) \ + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 ) \ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) + +#define FSHARK_DSW_B \ + PORT_START /* DSW B */ \ + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) \ + PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) \ + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) \ + PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) ) \ + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) \ + PORT_DIPSETTING( 0x00, "50K, then every 150K" ) \ + PORT_DIPSETTING( 0x04, "70K, then every 200K" ) \ + PORT_DIPSETTING( 0x08, "50000" ) \ + PORT_DIPSETTING( 0x0c, "100000" ) \ + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) \ + PORT_DIPSETTING( 0x20, "1" ) \ + PORT_DIPSETTING( 0x30, "2" ) \ + PORT_DIPSETTING( 0x00, "3" ) \ + PORT_DIPSETTING( 0x10, "5" ) \ + PORT_DIPNAME( 0x40, 0x00, "Show DIP SW Settings" ) \ + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) \ + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) \ + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) \ + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) \ + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + + + +static INPUT_PORTS_START( twincobr ) + TWINCOBR_VBLANK_INPUT( IP_ACTIVE_HIGH ) + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + + PORT_START /* DSW A */ + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) + + TWINCOBR_DSW_B + TWINCOBR_SYSTEM_INPUTS +INPUT_PORTS_END + +static INPUT_PORTS_START( twincobu ) + TWINCOBR_VBLANK_INPUT( IP_ACTIVE_HIGH ) + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + + PORT_START /* DSW A */ + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) + + TWINCOBR_DSW_B + TWINCOBR_SYSTEM_INPUTS +INPUT_PORTS_END + +static INPUT_PORTS_START( ktiger ) + TWINCOBR_VBLANK_INPUT( IP_ACTIVE_HIGH ) + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + TOAPLAN_JAPAN_DSW_A + + PORT_START /* DSW B */ + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) + PORT_DIPSETTING( 0x00, "70K, then every 200K" ) + PORT_DIPSETTING( 0x04, "50K, then every 150K" ) + PORT_DIPSETTING( 0x08, "100000" ) + PORT_DIPSETTING( 0x0c, "No Extend" ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x30, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x20, "4" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPNAME( 0x40, 0x00, "Show DIP SW Settings" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + TWINCOBR_SYSTEM_INPUTS +INPUT_PORTS_END + +static INPUT_PORTS_START( fshark ) + FSHARK_SYSTEM_INPUTS + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + + PORT_START /* DSW A */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) + + FSHARK_DSW_B +INPUT_PORTS_END + +static INPUT_PORTS_START( skyshark ) + FSHARK_SYSTEM_INPUTS + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + + PORT_START /* DSW A */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) +/* PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) Same as previous */ + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) +/* PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) Same as previous */ + + FSHARK_DSW_B +INPUT_PORTS_END + +static INPUT_PORTS_START( hishouza ) + FSHARK_SYSTEM_INPUTS + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + TOAPLAN_JAPAN_DSW_A + FSHARK_DSW_B +INPUT_PORTS_END + +static INPUT_PORTS_START( gulfwar2 ) + TWINCOBR_VBLANK_INPUT( IP_ACTIVE_LOW ) + TOAPLAN_PLAYER_INPUT( 1 ) + TOAPLAN_PLAYER_INPUT( 2 ) + + PORT_START /* DSW A */ + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Cross Hatch Pattern" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) + + TWINCOBR_DSW_B + TWINCOBR_SYSTEM_INPUTS +INPUT_PORTS_END + + + +static const gfx_layout charlayout = +{ + 8,8, /* 8*8 characters */ + RGN_FRAC(1,3), /* 2048 characters */ + 3, /* 3 bits per pixel */ + { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* every char takes 8 consecutive bytes */ +}; + +static const gfx_layout tilelayout = +{ + 8,8, /* 8*8 tiles */ + RGN_FRAC(1,4), /* 4096/8192 tiles */ + 4, /* 4 bits per pixel */ + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* every tile takes 8 consecutive bytes */ +}; + +static const gfx_layout spritelayout = +{ + 16,16, /* 16*16 sprites */ + RGN_FRAC(1,4), /* 2048 sprites */ + 4, /* 4 bits per pixel */ + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, + { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, + 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + 32*8 /* every sprite takes 32 consecutive bytes */ +}; + +static GFXDECODE_START( twincobr ) + GFXDECODE_ENTRY( REGION_GFX1, 0x00000, charlayout, 1536, 32 ) /* colors 1536-1791 */ + GFXDECODE_ENTRY( REGION_GFX2, 0x00000, tilelayout, 1280, 16 ) /* colors 1280-1535 */ + GFXDECODE_ENTRY( REGION_GFX3, 0x00000, tilelayout, 1024, 16 ) /* colors 1024-1079 */ + GFXDECODE_ENTRY( REGION_GFX4, 0x00000, spritelayout, 0, 64 ) /* colors 0-1023 */ +GFXDECODE_END + + + +/* handler called by the 3812 emulator when the internal timers cause an IRQ */ +static void irqhandler(int linestate) +{ + cpunum_set_input_line(1,0,linestate); +} + +static struct YM3812interface ym3812_interface = +{ + irqhandler +}; + + + +static MACHINE_DRIVER_START( twincobr ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000,28000000/4) /* 7.0MHz - Main board Crystal is 28MHz */ + MDRV_CPU_PROGRAM_MAP(main_program_map, 0) + MDRV_CPU_VBLANK_INT(twincobr_interrupt,1) + + MDRV_CPU_ADD(Z80,28000000/8) /* 3.5MHz */ + MDRV_CPU_PROGRAM_MAP(sound_program_map, 0) + MDRV_CPU_IO_MAP(sound_io_map, 0) + + MDRV_CPU_ADD(TMS32010,(28000000/2)/TMS32010_CLOCK_DIVIDER) /* 14MHz CLKin */ + MDRV_CPU_PROGRAM_MAP(DSP_program_map, 0) + /* Data Map is internal to the CPU */ + MDRV_CPU_IO_MAP(DSP_io_map, 0) + + MDRV_SCREEN_REFRESH_RATE( (28000000.0 / 4) / (446 * 286) ) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + MDRV_INTERLEAVE(100) + + MDRV_MACHINE_RESET(twincobr) /* Reset fshark bootleg 8741 MCU data */ + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_UPDATE_BEFORE_VBLANK | VIDEO_BUFFERS_SPRITERAM) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(64*8, 64*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1) + MDRV_GFXDECODE(twincobr) + MDRV_PALETTE_LENGTH(1792) + + MDRV_VIDEO_START(toaplan0) + MDRV_VIDEO_EOF(toaplan0) + MDRV_VIDEO_UPDATE(toaplan0) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM3812, 28000000/8) + MDRV_SOUND_CONFIG(ym3812_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( twincobr ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "tc16", 0x00000, 0x10000, CRC(07f64d13) SHA1(864ce0f9369c40c3ae792fc4ab2444a168214749) ) + ROM_LOAD16_BYTE( "tc14", 0x00001, 0x10000, CRC(41be6978) SHA1(4784804b738a332c7f24a43bcbb7a1e607365735) ) + ROM_LOAD16_BYTE( "tc15", 0x20000, 0x08000, CRC(3a646618) SHA1(fc1ed8f3c491f5cf16a17e5ce08c5d8f3ce03683) ) + ROM_LOAD16_BYTE( "tc13", 0x20001, 0x08000, CRC(d7d1e317) SHA1(57b8433b1677a390a7c7e00a1464bb8ed9cbfc73) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "tc12", 0x00000, 0x08000, CRC(e37b3c44) SHA1(5fed10b29c14e27aee0cd92ecde5c5cb422273b1) ) /* slightly different from the other two sets */ + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) ) + ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) ) +/****** The following are from a bootleg board. ****** + A0 and A1 are swapped between the TMS320C10 and these BPROMs on the board. + ROM_LOAD16_BYTE( "tc1b", 0x0000, 0x0800, CRC(1757cc33) ) + ROM_LOAD16_BYTE( "tc2a", 0x0001, 0x0800, CRC(d6d878c9) ) +*/ + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "tc11", 0x00000, 0x04000, CRC(0a254133) SHA1(17e9cc5e36fb4696012d0f9229fa172034cd843a) ) + ROM_LOAD( "tc03", 0x04000, 0x04000, CRC(e9e2d4b1) SHA1(e0a19dd46a9ba85d95bba7fbf81d8dc36dbfeabd) ) + ROM_LOAD( "tc04", 0x08000, 0x04000, CRC(a599d845) SHA1(732001f2d378d890f148e6b616c287d71fae832a) ) + + ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "tc01", 0x00000, 0x10000, CRC(15b3991d) SHA1(f5e7ed7a7721ed7e6dfd440634160390b7a294e4) ) + ROM_LOAD( "tc02", 0x10000, 0x10000, CRC(d9e2e55d) SHA1(0409e6df836d1d5198b64b21b42192631aa6d096) ) + ROM_LOAD( "tc06", 0x20000, 0x10000, CRC(13daeac8) SHA1(1cb103f434e2ecf193fa936ca7ea9194064c5b39) ) + ROM_LOAD( "tc05", 0x30000, 0x10000, CRC(8cc79357) SHA1(31064df2b796ca85ad3caccf626b684dff1104a1) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "tc07", 0x00000, 0x08000, CRC(b5d48389) SHA1(a00c5b9c231d3d580fa20c7ad3f8b6fd990e6594) ) + ROM_LOAD( "tc08", 0x08000, 0x08000, CRC(97f20fdc) SHA1(7cb3cd0637b0db889a3d552fd7c1a916eee5ca27) ) + ROM_LOAD( "tc09", 0x10000, 0x08000, CRC(170c01db) SHA1(f4c5a1600f6cbb48abbace66c6f7514f79138e8b) ) + ROM_LOAD( "tc10", 0x18000, 0x08000, CRC(44f5accd) SHA1(2f9bdebe71c8be195332356df68992fd38d86994) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "tc20", 0x00000, 0x10000, CRC(cb4092b8) SHA1(35b1d1e04af760fa106124bd5a94174d63ff9705) ) + ROM_LOAD( "tc19", 0x10000, 0x10000, CRC(9cb8675e) SHA1(559c21d505c60401f7368d4ab2b686b15075c5c5) ) + ROM_LOAD( "tc18", 0x20000, 0x10000, CRC(806fb374) SHA1(3eebefadcbdf713bf2a65b438092746b07edd3f0) ) + ROM_LOAD( "tc17", 0x30000, 0x10000, CRC(4264bff8) SHA1(3271b8b23f51346d1928ae01f8b547fed49181e6) ) + + ROM_REGION( 0x260, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "82s129.d3", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "82s129.d4", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "82s123.d2", 0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* sprite control ?? */ + ROM_LOAD( "82s123.e18", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */ + ROM_LOAD( "82s123.b24", 0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) ) /* tile to sprite priority ?? */ +ROM_END + +ROM_START( twincobu ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "tc16", 0x00000, 0x10000, CRC(07f64d13) SHA1(864ce0f9369c40c3ae792fc4ab2444a168214749) ) + ROM_LOAD16_BYTE( "tc14", 0x00001, 0x10000, CRC(41be6978) SHA1(4784804b738a332c7f24a43bcbb7a1e607365735) ) + ROM_LOAD16_BYTE( "tcbra26.bin", 0x20000, 0x08000, CRC(bdd00ba4) SHA1(b76b22f03eb4b821a8c555edd9fcee814f2e66a7) ) + ROM_LOAD16_BYTE( "tcbra27.bin", 0x20001, 0x08000, CRC(ed600907) SHA1(e5964db9eab2c334940795d71cb90f6679490227) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b30-05", 0x00000, 0x08000, CRC(1a8f1e10) SHA1(0c37a7a50b2523506ad77ac03ae752eb94092ff6) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROM_LOAD16_BYTE( "dsp_22.bin", 0x0001, 0x0800, CRC(79389a71) SHA1(14ec4c1c9b06702319e89a7a250d0038393437f4) ) + ROM_LOAD16_BYTE( "dsp_21.bin", 0x0000, 0x0800, CRC(2d135376) SHA1(67a2cc774d272ee1cd6e6bc1c5fc33fc6968837e) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "tc11", 0x00000, 0x04000, CRC(0a254133) SHA1(17e9cc5e36fb4696012d0f9229fa172034cd843a) ) + ROM_LOAD( "tc03", 0x04000, 0x04000, CRC(e9e2d4b1) SHA1(e0a19dd46a9ba85d95bba7fbf81d8dc36dbfeabd) ) + ROM_LOAD( "tc04", 0x08000, 0x04000, CRC(a599d845) SHA1(732001f2d378d890f148e6b616c287d71fae832a) ) + + ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "tc01", 0x00000, 0x10000, CRC(15b3991d) SHA1(f5e7ed7a7721ed7e6dfd440634160390b7a294e4) ) + ROM_LOAD( "tc02", 0x10000, 0x10000, CRC(d9e2e55d) SHA1(0409e6df836d1d5198b64b21b42192631aa6d096) ) + ROM_LOAD( "tc06", 0x20000, 0x10000, CRC(13daeac8) SHA1(1cb103f434e2ecf193fa936ca7ea9194064c5b39) ) + ROM_LOAD( "tc05", 0x30000, 0x10000, CRC(8cc79357) SHA1(31064df2b796ca85ad3caccf626b684dff1104a1) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "tc07", 0x00000, 0x08000, CRC(b5d48389) SHA1(a00c5b9c231d3d580fa20c7ad3f8b6fd990e6594) ) + ROM_LOAD( "tc08", 0x08000, 0x08000, CRC(97f20fdc) SHA1(7cb3cd0637b0db889a3d552fd7c1a916eee5ca27) ) + ROM_LOAD( "tc09", 0x10000, 0x08000, CRC(170c01db) SHA1(f4c5a1600f6cbb48abbace66c6f7514f79138e8b) ) + ROM_LOAD( "tc10", 0x18000, 0x08000, CRC(44f5accd) SHA1(2f9bdebe71c8be195332356df68992fd38d86994) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "tc20", 0x00000, 0x10000, CRC(cb4092b8) SHA1(35b1d1e04af760fa106124bd5a94174d63ff9705) ) + ROM_LOAD( "tc19", 0x10000, 0x10000, CRC(9cb8675e) SHA1(559c21d505c60401f7368d4ab2b686b15075c5c5) ) + ROM_LOAD( "tc18", 0x20000, 0x10000, CRC(806fb374) SHA1(3eebefadcbdf713bf2a65b438092746b07edd3f0) ) + ROM_LOAD( "tc17", 0x30000, 0x10000, CRC(4264bff8) SHA1(3271b8b23f51346d1928ae01f8b547fed49181e6) ) + + ROM_REGION( 0x260, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "82s129.d3", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "82s129.d4", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "82s123.d2", 0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* sprite control ?? */ + ROM_LOAD( "82s123.e18", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */ + ROM_LOAD( "82s123.b24", 0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) ) /* tile to sprite priority ?? */ +ROM_END + +ROM_START( ktiger ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "tc16", 0x00000, 0x10000, CRC(07f64d13) SHA1(864ce0f9369c40c3ae792fc4ab2444a168214749) ) + ROM_LOAD16_BYTE( "tc14", 0x00001, 0x10000, CRC(41be6978) SHA1(4784804b738a332c7f24a43bcbb7a1e607365735) ) + ROM_LOAD16_BYTE( "b30-02", 0x20000, 0x08000, CRC(1d63e9c4) SHA1(bdf013487a6fe8f8cbb03fda5f4fae881064831c) ) + ROM_LOAD16_BYTE( "b30-04", 0x20001, 0x08000, CRC(03957a30) SHA1(d809881a16b05595b6f184e44a36e592f46ba04a) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b30-05", 0x00000, 0x08000, CRC(1a8f1e10) SHA1(0c37a7a50b2523506ad77ac03ae752eb94092ff6) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROM_LOAD16_BYTE( "dsp-22", 0x0001, 0x0800, BAD_DUMP CRC(8a1d48d9) SHA1(f345c95a97adfbe89676f81ac83fbbec25703440) ) + ROM_LOAD16_BYTE( "dsp-21", 0x0000, 0x0800, BAD_DUMP CRC(33d99bc2) SHA1(9372dcfc2313abc4835365ae99842f732329d4e6) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "tc11", 0x00000, 0x04000, CRC(0a254133) SHA1(17e9cc5e36fb4696012d0f9229fa172034cd843a) ) + ROM_LOAD( "tc03", 0x04000, 0x04000, CRC(e9e2d4b1) SHA1(e0a19dd46a9ba85d95bba7fbf81d8dc36dbfeabd) ) + ROM_LOAD( "tc04", 0x08000, 0x04000, CRC(a599d845) SHA1(732001f2d378d890f148e6b616c287d71fae832a) ) + + ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "tc01", 0x00000, 0x10000, CRC(15b3991d) SHA1(f5e7ed7a7721ed7e6dfd440634160390b7a294e4) ) + ROM_LOAD( "tc02", 0x10000, 0x10000, CRC(d9e2e55d) SHA1(0409e6df836d1d5198b64b21b42192631aa6d096) ) + ROM_LOAD( "tc06", 0x20000, 0x10000, CRC(13daeac8) SHA1(1cb103f434e2ecf193fa936ca7ea9194064c5b39) ) + ROM_LOAD( "tc05", 0x30000, 0x10000, CRC(8cc79357) SHA1(31064df2b796ca85ad3caccf626b684dff1104a1) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "tc07", 0x00000, 0x08000, CRC(b5d48389) SHA1(a00c5b9c231d3d580fa20c7ad3f8b6fd990e6594) ) + ROM_LOAD( "tc08", 0x08000, 0x08000, CRC(97f20fdc) SHA1(7cb3cd0637b0db889a3d552fd7c1a916eee5ca27) ) + ROM_LOAD( "tc09", 0x10000, 0x08000, CRC(170c01db) SHA1(f4c5a1600f6cbb48abbace66c6f7514f79138e8b) ) + ROM_LOAD( "tc10", 0x18000, 0x08000, CRC(44f5accd) SHA1(2f9bdebe71c8be195332356df68992fd38d86994) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "tc20", 0x00000, 0x10000, CRC(cb4092b8) SHA1(35b1d1e04af760fa106124bd5a94174d63ff9705) ) + ROM_LOAD( "tc19", 0x10000, 0x10000, CRC(9cb8675e) SHA1(559c21d505c60401f7368d4ab2b686b15075c5c5) ) + ROM_LOAD( "tc18", 0x20000, 0x10000, CRC(806fb374) SHA1(3eebefadcbdf713bf2a65b438092746b07edd3f0) ) + ROM_LOAD( "tc17", 0x30000, 0x10000, CRC(4264bff8) SHA1(3271b8b23f51346d1928ae01f8b547fed49181e6) ) + + ROM_REGION( 0x260, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "82s129.d3", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "82s129.d4", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "82s123.d2", 0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* sprite control ?? */ + ROM_LOAD( "82s123.e18", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */ + ROM_LOAD( "82s123.b24", 0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) ) /* tile to sprite priority ?? */ +ROM_END + +ROM_START( fshark ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "b02_18-1.rom", 0x00000, 0x10000, CRC(04739e02) SHA1(8a14284adb0f0f33adf9affdec081c90de85d594) ) + ROM_LOAD16_BYTE( "b02_17-1.rom", 0x00001, 0x10000, CRC(fd6ef7a8) SHA1(ddbc05ce694ab4d929f5f621d95800b612bc5f66) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b02_16.rom", 0x0000, 0x8000, CRC(cdd1a153) SHA1(de9827a959039cf753ecac6756fb1925c37466d8) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROMX_LOAD( "82s137-1.mcu", 0x0000, 0x0400, CRC(cc5b3f53) SHA1(33589665ac995cc4645b56bbcd6d1c1cd5368f88), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-2.mcu", 0x0000, 0x0400, CRC(47351d55) SHA1(826add3ea3987f2c9ba2d3fc69a4ad2d9b033c89), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-3.mcu", 0x0001, 0x0400, CRC(70b537b9) SHA1(5211ec4605894727747dda66b70c9427652b16b4), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-4.mcu", 0x0001, 0x0400, CRC(6edb2de8) SHA1(48459037c3b865f0c0d63a416fa71ba1119f7a09), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-5.mcu", 0x0800, 0x0400, CRC(f35b978a) SHA1(90da4ab12126727cd9510fdfe4f626452116c543), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-6.mcu", 0x0800, 0x0400, CRC(0459e51b) SHA1(b673f5e1fcf60c0ba668aeb98d545d17b988945d), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-7.mcu", 0x0801, 0x0400, CRC(cbf3184b) SHA1(a3eafadc319183ed688dc081c4dfcbe8d476abea), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-8.mcu", 0x0801, 0x0400, CRC(8246a05c) SHA1(2511fa99fbdd6c75281fa85ecca2a617d36eb360), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "b02_07-1.rom", 0x00000, 0x04000, CRC(e669f80e) SHA1(05c1a4ff9adaa6c8035f38a76c5ee333fafba2bf) ) + ROM_LOAD( "b02_06-1.rom", 0x04000, 0x04000, CRC(5e53ae47) SHA1(55bde4133deebb59a87d9b96c6d0fd7b4bbc0e02) ) + ROM_LOAD( "b02_05-1.rom", 0x08000, 0x04000, CRC(a8b05bd0) SHA1(37317838ea57cb98cf9599cedf8e72bcae913d29) ) + + ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "b02_12.rom", 0x00000, 0x08000, CRC(733b9997) SHA1(75e874a1d148fcc8fa09bb724ce8346565ace4e5) ) + ROM_LOAD( "b02_15.rom", 0x08000, 0x08000, CRC(8b70ef32) SHA1(e1f988d650dce17e3bfbea12e5fddbb671df18d4) ) + ROM_LOAD( "b02_14.rom", 0x10000, 0x08000, CRC(f711ba7d) SHA1(49644a264c09fc2d743e4f801b8b82e980f2def9) ) + ROM_LOAD( "b02_13.rom", 0x18000, 0x08000, CRC(62532cd3) SHA1(df483db7604c0135130f92b08bad3fbffb4f5c47) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "b02_08.rom", 0x00000, 0x08000, CRC(ef0cf49c) SHA1(6fd5727462cd6c5dab4c5d780bd7504e48583894) ) + ROM_LOAD( "b02_11.rom", 0x08000, 0x08000, CRC(f5799422) SHA1(3f79dd849db787695a587f0db19a6782153b5955) ) + ROM_LOAD( "b02_10.rom", 0x10000, 0x08000, CRC(4bd099ff) SHA1(9326075f83549b0a9656f69bd4436fb1be2ac805) ) + ROM_LOAD( "b02_09.rom", 0x18000, 0x08000, CRC(230f1582) SHA1(0fd4156a46ed64cb6e5c59b8836382dd86c229cf) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "b02_01.512", 0x00000, 0x10000, CRC(2234b424) SHA1(bd6242b9dcdb0f582565df588106cd1ce2aad53b) ) + ROM_LOAD( "b02_02.512", 0x10000, 0x10000, CRC(30d4c9a8) SHA1(96ce4f41207c5487e801a8444030ec4dc7b58b23) ) + ROM_LOAD( "b02_03.512", 0x20000, 0x10000, CRC(64f3d88f) SHA1(d0155cfb0a8885d58e34141f9696b9aa208440ca) ) + ROM_LOAD( "b02_04.512", 0x30000, 0x10000, CRC(3b23a9fc) SHA1(2ac34445618e17371b5eed7eb6f43da4dbb99e28) ) + + ROM_REGION( 0x300, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "clr2.bpr", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "clr1.bpr", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "clr3.bpr", 0x200, 0x100, CRC(016fe2f7) SHA1(909f815a61e759fdf998674ee383512ecd8fee65) ) /* ?? */ +ROM_END + +ROM_START( skyshark ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "18-2", 0x00000, 0x10000, CRC(888e90f3) SHA1(3a40d7e7653cc929af8186e48f272989fb332e14) ) + ROM_LOAD16_BYTE( "17-2", 0x00001, 0x10000, CRC(066d67be) SHA1(a66be35b956da2c2ddf97cae66d79c0efd228621) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b02_16.rom", 0x0000, 0x8000, CRC(cdd1a153) SHA1(de9827a959039cf753ecac6756fb1925c37466d8) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROMX_LOAD( "82s137-1.mcu", 0x0000, 0x0400, CRC(cc5b3f53) SHA1(33589665ac995cc4645b56bbcd6d1c1cd5368f88), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-2.mcu", 0x0000, 0x0400, CRC(47351d55) SHA1(826add3ea3987f2c9ba2d3fc69a4ad2d9b033c89), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-3.mcu", 0x0001, 0x0400, CRC(70b537b9) SHA1(5211ec4605894727747dda66b70c9427652b16b4), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-4.mcu", 0x0001, 0x0400, CRC(6edb2de8) SHA1(48459037c3b865f0c0d63a416fa71ba1119f7a09), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-5.mcu", 0x0800, 0x0400, CRC(f35b978a) SHA1(90da4ab12126727cd9510fdfe4f626452116c543), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-6.mcu", 0x0800, 0x0400, CRC(0459e51b) SHA1(b673f5e1fcf60c0ba668aeb98d545d17b988945d), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-7.mcu", 0x0801, 0x0400, CRC(cbf3184b) SHA1(a3eafadc319183ed688dc081c4dfcbe8d476abea), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "82s137-8.mcu", 0x0801, 0x0400, CRC(8246a05c) SHA1(2511fa99fbdd6c75281fa85ecca2a617d36eb360), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "7-2", 0x00000, 0x04000, CRC(af48c4e6) SHA1(07e8bb6cb92f812990112063f87073df9a346ff4) ) + ROM_LOAD( "6-2", 0x04000, 0x04000, CRC(9a29a862) SHA1(5742f1f5a9c8d644d2a48496466039d18f192929) ) + ROM_LOAD( "5-2", 0x08000, 0x04000, CRC(fb7cad55) SHA1(91815a717511cc97477f08f0fed568247c7fd143) ) + + ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "b02_12.rom", 0x00000, 0x08000, CRC(733b9997) SHA1(75e874a1d148fcc8fa09bb724ce8346565ace4e5) ) + ROM_LOAD( "b02_15.rom", 0x08000, 0x08000, CRC(8b70ef32) SHA1(e1f988d650dce17e3bfbea12e5fddbb671df18d4) ) + ROM_LOAD( "b02_14.rom", 0x10000, 0x08000, CRC(f711ba7d) SHA1(49644a264c09fc2d743e4f801b8b82e980f2def9) ) + ROM_LOAD( "b02_13.rom", 0x18000, 0x08000, CRC(62532cd3) SHA1(df483db7604c0135130f92b08bad3fbffb4f5c47) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "b02_08.rom", 0x00000, 0x08000, CRC(ef0cf49c) SHA1(6fd5727462cd6c5dab4c5d780bd7504e48583894) ) + ROM_LOAD( "b02_11.rom", 0x08000, 0x08000, CRC(f5799422) SHA1(3f79dd849db787695a587f0db19a6782153b5955) ) + ROM_LOAD( "b02_10.rom", 0x10000, 0x08000, CRC(4bd099ff) SHA1(9326075f83549b0a9656f69bd4436fb1be2ac805) ) + ROM_LOAD( "b02_09.rom", 0x18000, 0x08000, CRC(230f1582) SHA1(0fd4156a46ed64cb6e5c59b8836382dd86c229cf) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "b02_01.512", 0x00000, 0x10000, CRC(2234b424) SHA1(bd6242b9dcdb0f582565df588106cd1ce2aad53b) ) + ROM_LOAD( "b02_02.512", 0x10000, 0x10000, CRC(30d4c9a8) SHA1(96ce4f41207c5487e801a8444030ec4dc7b58b23) ) + ROM_LOAD( "b02_03.512", 0x20000, 0x10000, CRC(64f3d88f) SHA1(d0155cfb0a8885d58e34141f9696b9aa208440ca) ) + ROM_LOAD( "b02_04.512", 0x30000, 0x10000, CRC(3b23a9fc) SHA1(2ac34445618e17371b5eed7eb6f43da4dbb99e28) ) + + ROM_REGION( 0x300, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "clr2.bpr", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "clr1.bpr", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "clr3.bpr", 0x200, 0x100, CRC(016fe2f7) SHA1(909f815a61e759fdf998674ee383512ecd8fee65) ) /* ?? */ +ROM_END + +ROM_START( hishouza ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "b02-18.rom", 0x00000, 0x10000, CRC(4444bb94) SHA1(5ff955a5190d1b356187de105cfb8ea181fc1282) ) + ROM_LOAD16_BYTE( "b02-17.rom", 0x00001, 0x10000, CRC(cdac7228) SHA1(6b0d67e4b0661a858653d2eabb8936af9148167e) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b02_16.rom", 0x0000, 0x8000, CRC(cdd1a153) SHA1(de9827a959039cf753ecac6756fb1925c37466d8) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROMX_LOAD( "dsp-a1.bpr", 0x0000, 0x0400, CRC(45d4d1b1) SHA1(e776a056f0f72cbeb309c5a23f803330cb8b3763), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-a2.bpr", 0x0000, 0x0400, CRC(edd227fa) SHA1(34aba84b5216ecbe462e7166d0f66785ca049a34), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-a3.bpr", 0x0001, 0x0400, CRC(df88e79b) SHA1(661b057fa2eef37b9d794151381d7d74a7bfa93a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-a4.bpr", 0x0001, 0x0400, CRC(a2094a7f) SHA1(0f1c173643046c76aa89eab66fba6ea51c3f2223), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-b5.bpr", 0x0800, 0x0400, CRC(85ca5d47) SHA1(3c6e21e2897fd35834021ec9f81f57bebfd13ef8), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-b6.bpr", 0x0800, 0x0400, CRC(81816b2c) SHA1(1e58ab7aef2a34f42267debf4cad9558d5e14159), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-b7.bpr", 0x0801, 0x0400, CRC(e87540cd) SHA1(bb6e98c47ed46abbbfa06571806cb2d663880419), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "dsp-b8.bpr", 0x0801, 0x0400, CRC(d3c16c5c) SHA1(a24d9536914734c1875c8a39938a346ff4418dd0), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "b02-07.rom", 0x00000, 0x04000, CRC(c13a775e) SHA1(b60d26126ec6ebc24a7ca87dd0234e4d9d3e78fc) ) + ROM_LOAD( "b02-06.rom", 0x04000, 0x04000, CRC(ad5f1371) SHA1(feae9d7bb75bfab5353be4c5931d78a530bd9bcd) ) + ROM_LOAD( "b02-05.rom", 0x08000, 0x04000, CRC(85a7bff6) SHA1(38cd89aa0800e3796f7ecac657d14119543057c2) ) + + ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "b02_12.rom", 0x00000, 0x08000, CRC(733b9997) SHA1(75e874a1d148fcc8fa09bb724ce8346565ace4e5) ) + ROM_LOAD( "b02_15.rom", 0x08000, 0x08000, CRC(8b70ef32) SHA1(e1f988d650dce17e3bfbea12e5fddbb671df18d4) ) + ROM_LOAD( "b02_14.rom", 0x10000, 0x08000, CRC(f711ba7d) SHA1(49644a264c09fc2d743e4f801b8b82e980f2def9) ) + ROM_LOAD( "b02_13.rom", 0x18000, 0x08000, CRC(62532cd3) SHA1(df483db7604c0135130f92b08bad3fbffb4f5c47) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "b02_08.rom", 0x00000, 0x08000, CRC(ef0cf49c) SHA1(6fd5727462cd6c5dab4c5d780bd7504e48583894) ) + ROM_LOAD( "b02_11.rom", 0x08000, 0x08000, CRC(f5799422) SHA1(3f79dd849db787695a587f0db19a6782153b5955) ) + ROM_LOAD( "b02_10.rom", 0x10000, 0x08000, CRC(4bd099ff) SHA1(9326075f83549b0a9656f69bd4436fb1be2ac805) ) + ROM_LOAD( "b02_09.rom", 0x18000, 0x08000, CRC(230f1582) SHA1(0fd4156a46ed64cb6e5c59b8836382dd86c229cf) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "b02_01.512", 0x00000, 0x10000, CRC(2234b424) SHA1(bd6242b9dcdb0f582565df588106cd1ce2aad53b) ) + ROM_LOAD( "b02_02.512", 0x10000, 0x10000, CRC(30d4c9a8) SHA1(96ce4f41207c5487e801a8444030ec4dc7b58b23) ) + ROM_LOAD( "b02_03.512", 0x20000, 0x10000, CRC(64f3d88f) SHA1(d0155cfb0a8885d58e34141f9696b9aa208440ca) ) + ROM_LOAD( "b02_04.512", 0x30000, 0x10000, CRC(3b23a9fc) SHA1(2ac34445618e17371b5eed7eb6f43da4dbb99e28) ) + + ROM_REGION( 0x300, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "clr2.bpr", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "clr1.bpr", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "clr3.bpr", 0x200, 0x100, CRC(016fe2f7) SHA1(909f815a61e759fdf998674ee383512ecd8fee65) ) /* ?? */ +ROM_END + +ROM_START( fsharkbt ) + ROM_REGION( 0x30000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "r18", 0x00000, 0x10000, CRC(ef30f563) SHA1(755d6ce4c1e631d7c11d3fab99dae300b6a3452e) ) + ROM_LOAD16_BYTE( "r17", 0x00001, 0x10000, CRC(0e18d25f) SHA1(82fc94830b3087c826d07cff699af9a3638e8087) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "b02_16.rom", 0x0000, 0x8000, CRC(cdd1a153) SHA1(de9827a959039cf753ecac6756fb1925c37466d8) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + ROMX_LOAD( "mcu-1.bpr", 0x0000, 0x0400, CRC(45d4d1b1) SHA1(e776a056f0f72cbeb309c5a23f803330cb8b3763), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-2.bpr", 0x0000, 0x0400, CRC(651336d1) SHA1(3c968d5cb58abe35794b7c88520a22fc0b45a449), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-3.bpr", 0x0001, 0x0400, CRC(df88e79b) SHA1(661b057fa2eef37b9d794151381d7d74a7bfa93a), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-4.bpr", 0x0001, 0x0400, CRC(a2094a7f) SHA1(0f1c173643046c76aa89eab66fba6ea51c3f2223), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-5.bpr", 0x0800, 0x0400, CRC(f97a58da) SHA1(77a659943d95d5b859fab50f827f11222c3dbf1f), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-6.bpr", 0x0800, 0x0400, CRC(ffcc422d) SHA1(9b4331e8bb5fe37bb8efcccc500a1d7cd026bf93), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-7.bpr", 0x0801, 0x0400, CRC(0cd30d49) SHA1(65d65a199bfb740b94af19843640e625a5e67f46), ROM_NIBBLE | ROM_SHIFT_NIBBLE_HI | ROM_SKIP(1) ) + ROMX_LOAD( "mcu-8.bpr", 0x0801, 0x0400, CRC(3379bbff) SHA1(2f577b8de6d523087b472691cdde2eb525877878), ROM_NIBBLE | ROM_SHIFT_NIBBLE_LO | ROM_SKIP(1) ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "b02_07-1.rom", 0x00000, 0x04000, CRC(e669f80e) SHA1(05c1a4ff9adaa6c8035f38a76c5ee333fafba2bf) ) + ROM_LOAD( "b02_06-1.rom", 0x04000, 0x04000, CRC(5e53ae47) SHA1(55bde4133deebb59a87d9b96c6d0fd7b4bbc0e02) ) + ROM_LOAD( "b02_05-1.rom", 0x08000, 0x04000, CRC(a8b05bd0) SHA1(37317838ea57cb98cf9599cedf8e72bcae913d29) ) + + ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "b02_12.rom", 0x00000, 0x08000, CRC(733b9997) SHA1(75e874a1d148fcc8fa09bb724ce8346565ace4e5) ) + ROM_LOAD( "b02_15.rom", 0x08000, 0x08000, CRC(8b70ef32) SHA1(e1f988d650dce17e3bfbea12e5fddbb671df18d4) ) + ROM_LOAD( "b02_14.rom", 0x10000, 0x08000, CRC(f711ba7d) SHA1(49644a264c09fc2d743e4f801b8b82e980f2def9) ) + ROM_LOAD( "b02_13.rom", 0x18000, 0x08000, CRC(62532cd3) SHA1(df483db7604c0135130f92b08bad3fbffb4f5c47) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "b02_08.rom", 0x00000, 0x08000, CRC(ef0cf49c) SHA1(6fd5727462cd6c5dab4c5d780bd7504e48583894) ) + ROM_LOAD( "b02_11.rom", 0x08000, 0x08000, CRC(f5799422) SHA1(3f79dd849db787695a587f0db19a6782153b5955) ) + ROM_LOAD( "b02_10.rom", 0x10000, 0x08000, CRC(4bd099ff) SHA1(9326075f83549b0a9656f69bd4436fb1be2ac805) ) + ROM_LOAD( "b02_09.rom", 0x18000, 0x08000, CRC(230f1582) SHA1(0fd4156a46ed64cb6e5c59b8836382dd86c229cf) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "b02_01.512", 0x00000, 0x10000, CRC(2234b424) SHA1(bd6242b9dcdb0f582565df588106cd1ce2aad53b) ) + ROM_LOAD( "b02_02.512", 0x10000, 0x10000, CRC(30d4c9a8) SHA1(96ce4f41207c5487e801a8444030ec4dc7b58b23) ) + ROM_LOAD( "b02_03.512", 0x20000, 0x10000, CRC(64f3d88f) SHA1(d0155cfb0a8885d58e34141f9696b9aa208440ca) ) + ROM_LOAD( "b02_04.512", 0x30000, 0x10000, CRC(3b23a9fc) SHA1(2ac34445618e17371b5eed7eb6f43da4dbb99e28) ) + + ROM_REGION( 0x300, REGION_PROMS, 0 ) /* nibble bproms, lo/hi order to be determined */ + ROM_LOAD( "clr2.bpr", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "clr1.bpr", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "clr3.bpr", 0x200, 0x100, CRC(016fe2f7) SHA1(909f815a61e759fdf998674ee383512ecd8fee65) ) /* ?? */ +ROM_END + +ROM_START( gulfwar2 ) + ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* Main 68K code */ + ROM_LOAD16_BYTE( "08-u119.bin", 0x00000, 0x20000, CRC(41ebf9c0) SHA1(85207dda76abded727ed95717024a2ea2bd85dac) ) + ROM_LOAD16_BYTE( "07-u92.bin", 0x00001, 0x20000, CRC(b73e6b25) SHA1(53cde41e5a2e8f721c3f43abf1fff46479f658d8) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 code */ + ROM_LOAD( "06-u51.bin", 0x00000, 0x08000, CRC(75504f95) SHA1(5bd23e700e1bd4f0fac622dfb7c8cc69ba764956) ) + + ROM_REGION( 0x2000, REGION_CPU3, 0 ) /* Co-Processor TMS320C10 MCU code */ + /* ROMs are duplicated 4 times */ + ROM_LOAD16_BYTE( "01-u2.rom", 0x000, 0x800, CRC(01399b65) SHA1(4867ec815e22c9124c7aa00ebb6089c2611fa31f) ) // Same code as Twin Cobra + ROM_CONTINUE( 0x000, 0x800 ) + ROM_CONTINUE( 0x000, 0x800 ) + ROM_CONTINUE( 0x000, 0x800 ) + ROM_LOAD16_BYTE( "02-u1.rom", 0x001, 0x800, CRC(abefe4ca) SHA1(f05f12a1ff19411f34f4eee98ce9ba450fec38f2) ) // Same code as Twin Cobra + ROM_CONTINUE( 0x001, 0x800 ) + ROM_CONTINUE( 0x001, 0x800 ) + ROM_CONTINUE( 0x001, 0x800 ) + + ROM_REGION( 0x0c000, REGION_GFX1, ROMREGION_DISPOSE ) /* chars */ + ROM_LOAD( "03-u9.bin", 0x00000, 0x04000, CRC(1b7934b3) SHA1(c7f5ac364dec4c7843c30e098fd02e0901bdf4b7) ) + ROM_LOAD( "04-u10.bin", 0x04000, 0x04000, CRC(6f7bfb58) SHA1(4c5602668938a52321b70cd971326fe1a4930889) ) + ROM_LOAD( "05-u11.bin", 0x08000, 0x04000, CRC(31814724) SHA1(bdcf270e6219555a7f776167f6bf971c6ff18a83) ) + + ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE ) /* fg tiles */ + ROM_LOAD( "16-u202.bin", 0x00000, 0x10000, CRC(d815d175) SHA1(917043d0731226d18bcc22dfe27e5a5a18b03c06) ) + ROM_LOAD( "13-u199.bin", 0x10000, 0x10000, CRC(d949b0d9) SHA1(1974d3b54e082baa9084dd619c8a879d954644cd) ) + ROM_LOAD( "14-u200.bin", 0x20000, 0x10000, CRC(c109a6ac) SHA1(3a13ec802e5bafcf599c273a0bb0fd078e01e171) ) + ROM_LOAD( "15-u201.bin", 0x30000, 0x10000, CRC(ad21f2ab) SHA1(0ab6eeb4dc9c2531c6f19479e7f9bc54fc1c1fdf) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "09-u195.bin", 0x00000, 0x08000, CRC(b7be3a6d) SHA1(68b9223fd07e81d443a1ae3ff04b2af105b27548) ) + ROM_LOAD( "12-u198.bin", 0x08000, 0x08000, CRC(fd7032a6) SHA1(8be6315d732b154163a3573e2017fdfc77c92e54) ) + ROM_LOAD( "11-u197.bin", 0x10000, 0x08000, CRC(7b721ed3) SHA1(afd10229414c65a56e184d56a69460ca3a502a27) ) + ROM_LOAD( "10-u196.rom", 0x18000, 0x08000, CRC(160f38ab) SHA1(da310ec387d439b26c8b6b881e5dcc07c2b9bb00) ) + + ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD( "20-u262.bin", 0x00000, 0x10000, CRC(10665ca0) SHA1(0c552c3807e00a7ef4f9fd28c7988a232628a1f5) ) + ROM_LOAD( "19-u261.bin", 0x10000, 0x10000, CRC(cfa6d417) SHA1(f6c17d938b58dc5756ecf617f00fbfaf701602a7) ) + ROM_LOAD( "18-u260.bin", 0x20000, 0x10000, CRC(2e6a0c49) SHA1(0b7ddad8775dcebe240a8246ef7816113f517f87) ) + ROM_LOAD( "17-u259.bin", 0x30000, 0x10000, CRC(66c1b0e6) SHA1(82f3659245913f835c4434131c179b49ee195961) ) + + ROM_REGION( 0x260, REGION_PROMS, 0 ) + ROM_LOAD( "82s129.d3", 0x000, 0x100, CRC(24e7d62f) SHA1(1c06a1ef1b6a722794ca1d5ee2c476ecaa5178a3) ) /* sprite priority control ?? */ + ROM_LOAD( "82s129.d4", 0x100, 0x100, CRC(a50cef09) SHA1(55cafb5b2551b80ae708e9b966cf37c70a16d310) ) /* sprite priority control ?? */ + ROM_LOAD( "82s123.d2", 0x200, 0x020, CRC(f72482db) SHA1(b0cb911f9c81f6088a5aa8760916ddae1f8534d7) ) /* sprite control ?? */ + ROM_LOAD( "82s123.e18", 0x220, 0x020, CRC(bc88cced) SHA1(5055362710c0f58823c05fb4c0e0eec638b91e3d) ) /* sprite attribute (flip/position) ?? */ + ROM_LOAD( "82s123.b24", 0x240, 0x020, CRC(4fb5df2a) SHA1(506ef2c8e4cf45c256d6831a0a5760732f2de422) ) /* tile to sprite priority ?? */ +ROM_END + + +static DRIVER_INIT( twincobr ) +{ + twincobr_driver_savestate(); +} + + +GAME( 1987, twincobr, 0, twincobr, twincobr, twincobr, ROT270, "[Toaplan] Taito Corporation", "Twin Cobra (World)", 0 ) +GAME( 1987, twincobu, twincobr, twincobr, twincobu, twincobr, ROT270, "[Toaplan] Taito America Corporation (Romstar license)", "Twin Cobra (US)", 0 ) +GAME( 1987, ktiger, twincobr, twincobr, ktiger, twincobr, ROT270, "[Toaplan] Taito Corporation", "Kyukyoku Tiger (Japan)", 0 ) +GAME( 1987, fshark, 0, twincobr, fshark, twincobr, ROT270, "[Toaplan] Taito Corporation", "Flying Shark (World)", 0 ) +GAME( 1987, skyshark, fshark, twincobr, skyshark, twincobr, ROT270, "[Toaplan] Taito America Corporation (Romstar license)", "Sky Shark (US)", 0 ) +GAME( 1987, hishouza, fshark, twincobr, hishouza, twincobr, ROT270, "[Toaplan] Taito Corporation", "Hishou Zame (Japan)", 0 ) +GAME( 1987, fsharkbt, fshark, twincobr, skyshark, twincobr, ROT270, "bootleg", "Flying Shark (bootleg)", 0 ) +GAME( 1991, gulfwar2, 0, twincobr, gulfwar2, twincobr, ROT270, "Comad", "Gulf War II", 0 ) |