/***************************************************************************
tecmo.c
driver by Nicola Salmoria
Silkworm memory map (preliminary)
0000-bfff ROM
c000-c1ff Background video RAM #2
c200-c3ff Background color RAM #2
c400-c5ff Background video RAM #1
c600-c7ff Background color RAM #1
c800-cbff Video RAM
cc00-cfff Color RAM
d000-dfff RAM
e000-e7ff Sprites
e800-efff Palette RAM, groups of 2 bytes, 4 bits per gun: xB RG
e800-e9ff sprites
ea00-ebff characters
ec00-edff bg #1
ee00-efff bg #2
f000-f7ff window for banked ROM
read:
f800 IN0 (heli) bit 0-3
f801 IN0 bit 4-7
f802 IN1 (jeep) bit 0-3
f803 IN1 bit 4-7
f806 DSWA bit 0-3
f807 DSWA bit 4-7
f808 DSWB bit 0-3
f809 DSWB bit 4-7
f80f COIN
write:
f800-f801 bg #1 x scroll
f802 bg #1 y scroll
f803-f804 bg #2 x scroll
f805 bg #2 y scroll
f806 ????
f808 ROM bank selector
f809 ????
f80b ????
***************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "sound/3812intf.h"
#include "sound/msm5205.h"
#include "includes/tecmo.h"
static WRITE8_HANDLER( tecmo_bankswitch_w )
{
int bankaddress;
UINT8 *RAM = space->machine().region("maincpu")->base();
bankaddress = 0x10000 + ((data & 0xf8) << 8);
memory_set_bankptr(space->machine(), "bank1", &RAM[bankaddress]);
}
static WRITE8_HANDLER( tecmo_sound_command_w )
{
soundlatch_w(space, offset, data);
cputag_set_input_line(space->machine(), "soundcpu",INPUT_LINE_NMI,PULSE_LINE);
}
static WRITE8_DEVICE_HANDLER( tecmo_adpcm_start_w )
{
tecmo_state *state = device->machine().driver_data<tecmo_state>();
state->m_adpcm_pos = data << 8;
msm5205_reset_w(device, 0);
}
static WRITE8_HANDLER( tecmo_adpcm_end_w )
{
tecmo_state *state = space->machine().driver_data<tecmo_state>();
state->m_adpcm_end = (data + 1) << 8;
}
static WRITE8_DEVICE_HANDLER( tecmo_adpcm_vol_w )
{
msm5205_set_volume(device,(data & 0x0f) * 100 / 15);
}
static void tecmo_adpcm_int(device_t *device)
{
tecmo_state *state = device->machine().driver_data<tecmo_state>();
if (state->m_adpcm_pos >= state->m_adpcm_end ||
state->m_adpcm_pos >= device->machine().region("adpcm")->bytes())
msm5205_reset_w(device,1);
else if (state->m_adpcm_data != -1)
{
msm5205_data_w(device,state->m_adpcm_data & 0x0f);
state->m_adpcm_data = -1;
}
else
{
UINT8 *ROM = device->machine().region("adpcm")->base();
state->m_adpcm_data = ROM[state->m_adpcm_pos++];
msm5205_data_w(device,state->m_adpcm_data >> 4);
}
}
/* the 8-bit dipswitches are split across addresses */
static READ8_HANDLER( tecmo_dswa_l_r )
{
UINT8 port = input_port_read(space->machine(), "DSWA");
port &= 0x0f;
return port;
}
static READ8_HANDLER( tecmo_dswa_h_r )
{
UINT8 port = input_port_read(space->machine(), "DSWA");
port &= 0xf0;
return port>>4;
}
static READ8_HANDLER( tecmo_dswb_l_r )
{
UINT8 port = input_port_read(space->machine(), "DSWB");
port &= 0x0f;
return port;
}
static READ8_HANDLER( tecmo_dswb_h_r )
{
UINT8 port = input_port_read(space->machine(), "DSWB");
port &= 0xf0;
return port>>4;
}
static ADDRESS_MAP_START( rygar_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_BASE_MEMBER(tecmo_state, m_txvideoram)
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_fgvideoram)
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_bgvideoram)
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_SIZE_MEMBER(tecmo_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(paletteram_xxxxBBBBRRRRGGGG_be_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("JOY1")
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("BUTTONS1")
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("JOY2")
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ( tecmo_dswa_l_r )
AM_RANGE(0xf807, 0xf807) AM_READ( tecmo_dswa_h_r )
AM_RANGE(0xf808, 0xf808) AM_READ( tecmo_dswb_l_r )
AM_RANGE(0xf809, 0xf809) AM_READ( tecmo_dswb_h_r )
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( gemini_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_BASE_MEMBER(tecmo_state, m_txvideoram)
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_fgvideoram)
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_bgvideoram)
AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(paletteram_xxxxBBBBRRRRGGGG_be_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE_SIZE_MEMBER(tecmo_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("JOY1")
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("BUTTONS1")
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("JOY2")
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ( tecmo_dswa_l_r )
AM_RANGE(0xf807, 0xf807) AM_READ( tecmo_dswa_h_r )
AM_RANGE(0xf808, 0xf808) AM_READ( tecmo_dswb_l_r )
AM_RANGE(0xf809, 0xf809) AM_READ( tecmo_dswb_h_r )
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf80b, 0xf80b) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( silkworm_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(tecmo_bgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_bgvideoram)
AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(tecmo_fgvideoram_w) AM_BASE_MEMBER(tecmo_state, m_fgvideoram)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(tecmo_txvideoram_w) AM_BASE_MEMBER(tecmo_state, m_txvideoram)
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_SIZE_MEMBER(tecmo_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(paletteram_xxxxBBBBRRRRGGGG_be_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank1")
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("JOY1")
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("BUTTONS1")
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("JOY2")
AM_RANGE(0xf803, 0xf803) AM_READ_PORT("BUTTONS2")
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("SYS_0")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("SYS_1")
AM_RANGE(0xf806, 0xf806) AM_READ( tecmo_dswa_l_r )
AM_RANGE(0xf807, 0xf807) AM_READ( tecmo_dswa_h_r )
AM_RANGE(0xf808, 0xf808) AM_READ( tecmo_dswb_l_r )
AM_RANGE(0xf809, 0xf809) AM_READ( tecmo_dswb_h_r )
AM_RANGE(0xf80f, 0xf80f) AM_READ_PORT("SYS_2")
AM_RANGE(0xf800, 0xf802) AM_WRITE(tecmo_fgscroll_w)
AM_RANGE(0xf803, 0xf805) AM_WRITE(tecmo_bgscroll_w)
AM_RANGE(0xf806, 0xf806) AM_WRITE(tecmo_sound_command_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(tecmo_flipscreen_w)
AM_RANGE(0xf808, 0xf808) AM_WRITE(tecmo_bankswitch_w)
AM_RANGE(0xf809, 0xf809) AM_WRITENOP /* ? */
AM_RANGE(0xf80b, 0xf80b) AM_WRITENOP /* ? if mapped to watchdog like in the others, causes reset */
ADDRESS_MAP_END
static ADDRESS_MAP_START( rygar_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x47ff) AM_RAM
AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ymsnd", ym3812_w)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_r) AM_DEVWRITE("msm", tecmo_adpcm_start_w)
AM_RANGE(0xd000, 0xd000) AM_WRITE(tecmo_adpcm_end_w)
AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("msm", tecmo_adpcm_vol_w)
AM_RANGE(0xf000, 0xf000) AM_WRITENOP /* NMI acknowledge */
ADDRESS_MAP_END
static ADDRESS_MAP_START( tecmo_sound_map, AS_PROGRAM, 8 )
AM_RANGE(0x2000, 0x207f) AM_RAM /* Silkworm set #2 has a custom CPU which */
/* writes code to this area */
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ymsnd", ym3812_w)
AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_r) AM_DEVWRITE("msm", tecmo_adpcm_start_w)
AM_RANGE(0xc400, 0xc400) AM_WRITE(tecmo_adpcm_end_w)
AM_RANGE(0xc800, 0xc800) AM_DEVWRITE("msm", tecmo_adpcm_vol_w)
AM_RANGE(0xcc00, 0xcc00) AM_WRITENOP /* NMI acknowledge */
ADDRESS_MAP_END
static INPUT_PORTS_START( tecmo_default )
PORT_START("JOY1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_START("BUTTONS1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("JOY2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_START("BUTTONS2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("SYS_0")
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("SYS_1")
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("SYS_2")
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("DSWA")
PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_HIGH, "SW1:!1" )
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_HIGH, "SW1:!2" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_HIGH, "SW1:!3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_HIGH, "SW1:!4" )
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_HIGH, "SW1:!5" )
PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_HIGH, "SW1:!6" )
PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "SW1:!7" )
PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW1:!8" )
PORT_START("DSWB")
PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_HIGH, "SW2:!1" )
PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_HIGH, "SW2:!2" )
PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_HIGH, "SW2:!3" )
PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_HIGH, "SW2:!4" )
PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_HIGH, "SW2:!5" )
PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_HIGH, "SW2:!6" )
PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "SW2:!7" )
PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW2:!8" )
INPUT_PORTS_END
static INPUT_PORTS_START( rygar )
PORT_INCLUDE(tecmo_default)
PORT_MODIFY("BUTTONS1")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_MODIFY("SYS_0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2")
PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x0C, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!3,!4")
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0C, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6")
PORT_DIPSETTING( 0x30, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x20, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!7")
PORT_DIPSETTING( 0x40, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_MODIFY("DSWB")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!1,!2")
PORT_DIPSETTING( 0x00, "50000 200000 500000" )
PORT_DIPSETTING( 0x01, "100000 300000 600000" )
PORT_DIPSETTING( 0x02, "200000 500000" )
PORT_DIPSETTING( 0x03, "100000" )
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!5,!6")
PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x10, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x30, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x40, 0x00, "2P Can Start Anytime" ) PORT_DIPLOCATION("SW2:!7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:!8")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
INPUT_PORTS_END
static INPUT_PORTS_START( gemini )
PORT_INCLUDE(tecmo_default)
PORT_MODIFY("SYS_1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2,!3")
PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x08, 0x00, "Final Round Continuation" ) PORT_DIPLOCATION("SW1:!4")
PORT_DIPSETTING( 0x00, "Round 6" )
PORT_DIPSETTING( 0x08, "Round 7" )
PORT_DIPNAME( 0x70, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!5,!6,!7")
PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x50, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x80, 0x00, "Buy in During Final Round" ) PORT_DIPLOCATION("SW1:!8")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
PORT_MODIFY("DSWB")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:!1,!2")
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!3,!4")
PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x04, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0c, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x70, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!5,!6,!7")
PORT_DIPSETTING( 0x00, "50000 200000" )
PORT_DIPSETTING( 0x10, "50000 300000" )
PORT_DIPSETTING( 0x20, "100000 500000" )
PORT_DIPSETTING( 0x30, "50000" )
PORT_DIPSETTING( 0x40, "100000" )
PORT_DIPSETTING( 0x50, "200000" )
PORT_DIPSETTING( 0x60, "300000" )
PORT_DIPSETTING( 0x70, DEF_STR( None ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:!8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( backfirt )
PORT_INCLUDE(tecmo_default)
PORT_MODIFY("BUTTONS1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_MODIFY("BUTTONS2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_MODIFY("SYS_1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2")
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_6C ) ) // limit of 9?
PORT_DIPNAME( 0x0C, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!3,!4")
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0C, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!6")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:!8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_MODIFY("DSWB")
PORT_DIPNAME( 0x07, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!1,!2,!3")
PORT_DIPSETTING( 0x00, "50000 200000 500000" )
PORT_DIPSETTING( 0x01, "100000 300000 800000" )
PORT_DIPSETTING( 0x02, "50000 200000" )
PORT_DIPSETTING( 0x03, "100000 300000" )
PORT_DIPSETTING( 0x04, "50000" )
PORT_DIPSETTING( 0x05, "100000" )
PORT_DIPSETTING( 0x06, "200000" )
PORT_DIPSETTING( 0x07, DEF_STR( None ) )
PORT_DIPNAME( 0x38, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!4,!5,!6")
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x08, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x18, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPSETTING( 0x28, "5" )
PORT_DIPSETTING( 0x30, "6" )
PORT_DIPSETTING( 0x38, "7" )
PORT_DIPNAME( 0x40, 0x40, "Continue" ) PORT_DIPLOCATION("SW2:!7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Invulnerability" ) PORT_DIPLOCATION("SW2:!8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( silkworm )
PORT_INCLUDE(tecmo_default)
PORT_MODIFY("BUTTONS1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_MODIFY("JOY2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_MODIFY("BUTTONS2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_MODIFY("SYS_2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2")
PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x0C, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!3,!4")
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0C, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6")
PORT_DIPSETTING( 0x30, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x20, "5" )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_MODIFY("DSWB")
PORT_DIPNAME( 0x07, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!1,!2,!3")
PORT_DIPSETTING( 0x00, "50000 200000 500000" )
PORT_DIPSETTING( 0x01, "100000 300000 800000" )
PORT_DIPSETTING( 0x02, "50000 200000" )
PORT_DIPSETTING( 0x03, "100000 300000" )
PORT_DIPSETTING( 0x04, "50000" )
PORT_DIPSETTING( 0x05, "100000" )
PORT_DIPSETTING( 0x06, "200000" )
PORT_DIPSETTING( 0x07, DEF_STR( None ) )
PORT_DIPNAME( 0x70, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:!5,!6,!7")
// PORT_DIPSETTING( 0x60, "0" ) /* Not listed in manual */
// PORT_DIPSETTING( 0x70, "0" ) /* Not listed in manual */
// PORT_DIPSETTING( 0x00, "0" ) /* Not listed in manual */
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x40, "4" )
PORT_DIPSETTING( 0x50, "5" )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:!8") /* Listed as "NC" in manual */
PORT_DIPSETTING( 0x80, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8
};
static const gfx_layout tilelayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4,
32*8+0*4, 32*8+1*4, 32*8+2*4, 32*8+3*4, 32*8+4*4, 32*8+5*4, 32*8+6*4, 32*8+7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
128*8
};
static const gfx_layout spritelayout =
{
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8
};
static GFXDECODE_START( tecmo )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 256, 16 ) /* colors 256 - 511 */
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 ) /* colors 0 - 255 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 512, 16 ) /* colors 512 - 767 */
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 768, 16 ) /* colors 768 - 1023 */
GFXDECODE_END
static void irqhandler(device_t *device, int linestate)
{
cputag_set_input_line(device->machine(), "soundcpu", 0, linestate);
}
static const ym3812_interface ym3812_config =
{
irqhandler
};
static const msm5205_interface msm5205_config =
{
tecmo_adpcm_int, /* interrupt function */
MSM5205_S48_4B /* 8KHz */
};
static MACHINE_RESET( rygar )
{
tecmo_state *state = machine.driver_data<tecmo_state>();
state->m_adpcm_pos = 0;
state->m_adpcm_end = 0;
state->m_adpcm_data = -1;
}
static MACHINE_CONFIG_START( rygar, tecmo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_24MHz/4) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(rygar_map)
MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
MCFG_CPU_ADD("soundcpu", Z80, XTAL_4MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(rygar_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */)
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE(tecmo)
MCFG_GFXDECODE(tecmo)
MCFG_PALETTE_LENGTH(1024)
MCFG_VIDEO_START(tecmo)
MCFG_MACHINE_RESET( rygar )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* verified on pcb */
MCFG_SOUND_CONFIG(ym3812_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb, even if schematics shows a 384khz resonator */
MCFG_SOUND_CONFIG(msm5205_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( gemini, rygar )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_CLOCK(6000000)
MCFG_CPU_PROGRAM_MAP(gemini_map)
MCFG_CPU_MODIFY("soundcpu")
MCFG_CPU_PROGRAM_MAP(tecmo_sound_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( silkworm, gemini )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_CLOCK(6000000)
MCFG_CPU_PROGRAM_MAP(silkworm_map)
MACHINE_CONFIG_END
#ifdef UNUSED_CODE
static MACHINE_CONFIG_START( backfirt, tecmo_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_24MHz/4)
MCFG_CPU_PROGRAM_MAP(rygar_map)
MCFG_CPU_VBLANK_INT("screen", irq0_line_hold)
MCFG_CPU_ADD("soundcpu", Z80, XTAL_8MHz/2)
MCFG_CPU_PROGRAM_MAP(rygar_sound_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */)
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE(tecmo)
MCFG_GFXDECODE(tecmo)
MCFG_PALETTE_LENGTH(1024)
MCFG_VIDEO_START(tecmo)
MCFG_MACHINE_RESET( rygar )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_4MHz) /* verified on pcb */
MCFG_SOUND_CONFIG(ym3812_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* no MSM on this PCB */
MACHINE_CONFIG_END
#endif
/***************************************************************************
Game driver(s)
***************************************************************************/
/* Rygar
Tecmo 1986
PCB Layouts
-----------
6002-A
|-----------------------------------------------------------------|
|DSW2 4MHz 24MHz |
|DSW1 M4069 |
| |-|
| Z80B MN50005XTA | |
|1 5.5P | |
|8 | |
|W 4.5M | |
|A MA7053 6116 |-|
|Y DIP28 6264 |
| Z80A 6.7K |
| 3.5J |
| 2.4H |
| |-|
| 6116 | |
| 1.1E | |
| M5205 YM3526 | |
| 400kHz | |
| VOL M4066 MBM2148 |-|
| M5224 MBM2148 |
|M51516 M5224 YM3014 MBM2148 CN4 |
|-----------------------------------------------------------------|
Notes:
Z80B - clock 6.000MHz [24/4]
Z80A - clock 4.000MHz
M5205 - clock 400kHz
YM3526 - clock 4.000MHz
CN4 - RGB/Sync connector for video output to monitor
MN50005XTA - Mitsubishi DIP28 custom chip. On the bootleg this chip
is replaced by a plug-in daughterboard containing a
few logic chips
MA7053 - Mitsubishi SIL28 custom ceramic module
M5224 - Equivalent to LM324 OP AMP
DIP28 - unpopulated socket
DSW1/2 - 8-position Dip Switches
6116 - 2kx8 SRAM
6264 - 8kx8 SRAM
2148 - 1kx4 SRAM
Measurements -
OSC1 - 23.99999MHz
XTAL1 - 3.999187MHz
VSync - 59.1856Hz
HSync - 15.1436kHz
6002B
|-----------------------------------------------------------------|
| 6116 |
| 18.6R |
| 17.6P |-|
| 16.6N | |
|4164 4164 4164 4164 15.6M | |
|4164 4164 4164 4164 14.6L | |
|4164 4164 4164 4164 13.6K | |
|4164 4164 4164 4164 |-|
|4164 4164 4164 4164 12.6J |
| |
| 11.6H |
| |
| 10.6E |-|
| | |
| 9.6D | |
| | |
| 8.6C | |
| M60002-0118P |-|
| 6116 7.6B |
| 6116 |
|-----------------------------------------------------------------|
Notes:
M60002-0118P - Mitsubishi DIP42 custom chip. On the bootleg this chip
is replaced by a plug-in daughterboard containing a
few logic chips
4164 - 64kx1 DRAM
6116 - 2kx8 SRAM
*/
ROM_START( rygar )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "5.5p", 0x00000, 0x08000, CRC(062cd55d) SHA1(656e29c890f5de964920b7841b3e11469cd20051) ) /* code */
ROM_LOAD( "cpu_5m.bin", 0x08000, 0x04000, CRC(7ac5191b) SHA1(305f39d974f906f9bc24e9fe2ca58e647925ab63) ) /* code */
ROM_LOAD( "cpu_5j.bin", 0x10000, 0x08000, CRC(ed76d606) SHA1(39c8a07e9a1f218ad088d00a2c9dfc993efafb6b) ) /* banked at f000-f7ff */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "cpu_4h.bin", 0x0000, 0x2000, CRC(e4a2fa87) SHA1(ed58187dbbcf59358496a98ffd6c227a87d6c433) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "cpu_8k.bin", 0x00000, 0x08000, CRC(4d482fb6) SHA1(57ad838b6d30b49dbd2d0ec425f33cfb15a67918) ) /* characters */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "vid_6k.bin", 0x00000, 0x08000, CRC(aba6db9e) SHA1(43eb6f4f92afb5fbc11adc7e2ab04878ab56cb17) ) /* sprites */
ROM_LOAD( "vid_6j.bin", 0x08000, 0x08000, CRC(ae1f2ed6) SHA1(6e6a33e665ba0884b7f57e9ad69d3f51e41d9e7b) ) /* sprites */
ROM_LOAD( "vid_6h.bin", 0x10000, 0x08000, CRC(46d9e7df) SHA1(a24e0bea310a03636af704a0ad3f1a9cc4aafe12) ) /* sprites */
ROM_LOAD( "vid_6g.bin", 0x18000, 0x08000, CRC(45839c9a) SHA1(eaee5767d8b0b62b991c089ef51b922e89850b79) ) /* sprites */
ROM_REGION( 0x20000, "gfx3", 0 )
ROM_LOAD( "vid_6p.bin", 0x00000, 0x08000, CRC(9eae5f8e) SHA1(ed83b608ca57b9bf69fa866d9b8f55d16b7cff63) )
ROM_LOAD( "vid_6o.bin", 0x08000, 0x08000, CRC(5a10a396) SHA1(12ebed3952ff35a2c275cb27c915f82183048cd4) )
ROM_LOAD( "vid_6n.bin", 0x10000, 0x08000, CRC(7b12cf3f) SHA1(6b9d8cad6e15317df01bab0591fab09199ca6d40) )
ROM_LOAD( "vid_6l.bin", 0x18000, 0x08000, CRC(3cea7eaa) SHA1(1dd194d5672dfe71c2b27d2d7b76f5a611cff76f) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_LOAD( "vid_6f.bin", 0x00000, 0x08000, CRC(9840edd8) SHA1(f19a1a1d932214037144c533ad07ed81256c34e7) )
ROM_LOAD( "vid_6e.bin", 0x08000, 0x08000, CRC(ff65e074) SHA1(513c1bad336ef5d871f15d6ba8943020f98d1f4a) )
ROM_LOAD( "vid_6c.bin", 0x10000, 0x08000, CRC(89868c85) SHA1(f21550f40e7a177e95c40f2726c651f85ca8edce) )
ROM_LOAD( "vid_6b.bin", 0x18000, 0x08000, CRC(35389a7b) SHA1(a887a89f9bbb5979bb589468d80efba1f243690b) )
ROM_REGION( 0x4000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "cpu_1f.bin", 0x0000, 0x4000, CRC(3cc98c5a) SHA1(ea1035be939ed1a994f3273b33412c85dda0973e) )
ROM_END
ROM_START( rygar2 )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "5p.bin", 0x00000, 0x08000, CRC(151ffc0b) SHA1(0eb877f2c68d3d1f52d7b12d0a8ad08c9932c054) ) /* code */
ROM_LOAD( "cpu_5m.bin", 0x08000, 0x04000, CRC(7ac5191b) SHA1(305f39d974f906f9bc24e9fe2ca58e647925ab63) ) /* code */
ROM_LOAD( "cpu_5j.bin", 0x10000, 0x08000, CRC(ed76d606) SHA1(39c8a07e9a1f218ad088d00a2c9dfc993efafb6b) ) /* banked at f000-f7ff */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "cpu_4h.bin", 0x0000, 0x2000, CRC(e4a2fa87) SHA1(ed58187dbbcf59358496a98ffd6c227a87d6c433) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "cpu_8k.bin", 0x00000, 0x08000, CRC(4d482fb6) SHA1(57ad838b6d30b49dbd2d0ec425f33cfb15a67918) ) /* characters */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "vid_6k.bin", 0x00000, 0x08000, CRC(aba6db9e) SHA1(43eb6f4f92afb5fbc11adc7e2ab04878ab56cb17) ) /* sprites */
ROM_LOAD( "vid_6j.bin", 0x08000, 0x08000, CRC(ae1f2ed6) SHA1(6e6a33e665ba0884b7f57e9ad69d3f51e41d9e7b) ) /* sprites */
ROM_LOAD( "vid_6h.bin", 0x10000, 0x08000, CRC(46d9e7df) SHA1(a24e0bea310a03636af704a0ad3f1a9cc4aafe12) ) /* sprites */
ROM_LOAD( "vid_6g.bin", 0x18000, 0x08000, CRC(45839c9a) SHA1(eaee5767d8b0b62b991c089ef51b922e89850b79) ) /* sprites */
ROM_REGION( 0x20000, "gfx3", 0 )
ROM_LOAD( "vid_6p.bin", 0x00000, 0x08000, CRC(9eae5f8e) SHA1(ed83b608ca57b9bf69fa866d9b8f55d16b7cff63) )
ROM_LOAD( "vid_6o.bin", 0x08000, 0x08000, CRC(5a10a396) SHA1(12ebed3952ff35a2c275cb27c915f82183048cd4) )
ROM_LOAD( "vid_6n.bin", 0x10000, 0x08000, CRC(7b12cf3f) SHA1(6b9d8cad6e15317df01bab0591fab09199ca6d40) )
ROM_LOAD( "vid_6l.bin", 0x18000, 0x08000, CRC(3cea7eaa) SHA1(1dd194d5672dfe71c2b27d2d7b76f5a611cff76f) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_LOAD( "vid_6f.bin", 0x00000, 0x08000, CRC(9840edd8) SHA1(f19a1a1d932214037144c533ad07ed81256c34e7) )
ROM_LOAD( "vid_6e.bin", 0x08000, 0x08000, CRC(ff65e074) SHA1(513c1bad336ef5d871f15d6ba8943020f98d1f4a) )
ROM_LOAD( "vid_6c.bin", 0x10000, 0x08000, CRC(89868c85) SHA1(f21550f40e7a177e95c40f2726c651f85ca8edce) )
ROM_LOAD( "vid_6b.bin", 0x18000, 0x08000, CRC(35389a7b) SHA1(a887a89f9bbb5979bb589468d80efba1f243690b) )
ROM_REGION( 0x4000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "cpu_1f.bin", 0x0000, 0x4000, CRC(3cc98c5a) SHA1(ea1035be939ed1a994f3273b33412c85dda0973e) )
ROM_END
ROM_START( rygar3 )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "cpu_5p.bin", 0x00000, 0x08000, CRC(e79c054a) SHA1(1aaffa53d121d5c55899bf18e85c42333fe0df54) ) /* code */
ROM_LOAD( "cpu_5m.bin", 0x08000, 0x04000, CRC(7ac5191b) SHA1(305f39d974f906f9bc24e9fe2ca58e647925ab63) ) /* code */
ROM_LOAD( "cpu_5j.bin", 0x10000, 0x08000, CRC(ed76d606) SHA1(39c8a07e9a1f218ad088d00a2c9dfc993efafb6b) ) /* banked at f000-f7ff */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "cpu_4h.bin", 0x0000, 0x2000, CRC(e4a2fa87) SHA1(ed58187dbbcf59358496a98ffd6c227a87d6c433) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "cpu_8k.bin", 0x00000, 0x08000, CRC(4d482fb6) SHA1(57ad838b6d30b49dbd2d0ec425f33cfb15a67918) ) /* characters */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "vid_6k.bin", 0x00000, 0x08000, CRC(aba6db9e) SHA1(43eb6f4f92afb5fbc11adc7e2ab04878ab56cb17) ) /* sprites */
ROM_LOAD( "vid_6j.bin", 0x08000, 0x08000, CRC(ae1f2ed6) SHA1(6e6a33e665ba0884b7f57e9ad69d3f51e41d9e7b) ) /* sprites */
ROM_LOAD( "vid_6h.bin", 0x10000, 0x08000, CRC(46d9e7df) SHA1(a24e0bea310a03636af704a0ad3f1a9cc4aafe12) ) /* sprites */
ROM_LOAD( "vid_6g.bin", 0x18000, 0x08000, CRC(45839c9a) SHA1(eaee5767d8b0b62b991c089ef51b922e89850b79) ) /* sprites */
ROM_REGION( 0x20000, "gfx3", 0 )
ROM_LOAD( "vid_6p.bin", 0x00000, 0x08000, CRC(9eae5f8e) SHA1(ed83b608ca57b9bf69fa866d9b8f55d16b7cff63) )
ROM_LOAD( "vid_6o.bin", 0x08000, 0x08000, CRC(5a10a396) SHA1(12ebed3952ff35a2c275cb27c915f82183048cd4) )
ROM_LOAD( "vid_6n.bin", 0x10000, 0x08000, CRC(7b12cf3f) SHA1(6b9d8cad6e15317df01bab0591fab09199ca6d40) )
ROM_LOAD( "vid_6l.bin", 0x18000, 0x08000, CRC(3cea7eaa) SHA1(1dd194d5672dfe71c2b27d2d7b76f5a611cff76f) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_LOAD( "vid_6f.bin", 0x00000, 0x08000, CRC(9840edd8) SHA1(f19a1a1d932214037144c533ad07ed81256c34e7) )
ROM_LOAD( "vid_6e.bin", 0x08000, 0x08000, CRC(ff65e074) SHA1(513c1bad336ef5d871f15d6ba8943020f98d1f4a) )
ROM_LOAD( "vid_6c.bin", 0x10000, 0x08000, CRC(89868c85) SHA1(f21550f40e7a177e95c40f2726c651f85ca8edce) )
ROM_LOAD( "vid_6b.bin", 0x18000, 0x08000, CRC(35389a7b) SHA1(a887a89f9bbb5979bb589468d80efba1f243690b) )
ROM_REGION( 0x4000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "cpu_1f.bin", 0x0000, 0x4000, CRC(3cc98c5a) SHA1(ea1035be939ed1a994f3273b33412c85dda0973e) )
ROM_END
ROM_START( rygarj )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "cpuj_5p.bin", 0x00000, 0x08000, CRC(b39698ba) SHA1(01a5a12a71973ad117b0bbd763e470f89c439e45) ) /* code */
ROM_LOAD( "cpuj_5m.bin", 0x08000, 0x04000, CRC(3f180979) SHA1(c4c2e9f83b06b8677978800bfcc39f4ba3b344ab) ) /* code */
ROM_LOAD( "cpuj_5j.bin", 0x10000, 0x08000, CRC(69e44e8f) SHA1(e979760a3582e64788c043adf7e475f0e1b75033) ) /* banked at f000-f7ff */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "cpu_4h.bin", 0x0000, 0x2000, CRC(e4a2fa87) SHA1(ed58187dbbcf59358496a98ffd6c227a87d6c433) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "cpuj_8k.bin", 0x00000, 0x08000, CRC(45047707) SHA1(deb47f5ec4b22e55e0393d8108e4ffb67dd68e12) ) /* characters */
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "vid_6k.bin", 0x00000, 0x08000, CRC(aba6db9e) SHA1(43eb6f4f92afb5fbc11adc7e2ab04878ab56cb17) ) /* sprites */
ROM_LOAD( "vid_6j.bin", 0x08000, 0x08000, CRC(ae1f2ed6) SHA1(6e6a33e665ba0884b7f57e9ad69d3f51e41d9e7b) ) /* sprites */
ROM_LOAD( "vid_6h.bin", 0x10000, 0x08000, CRC(46d9e7df) SHA1(a24e0bea310a03636af704a0ad3f1a9cc4aafe12) ) /* sprites */
ROM_LOAD( "vid_6g.bin", 0x18000, 0x08000, CRC(45839c9a) SHA1(eaee5767d8b0b62b991c089ef51b922e89850b79) ) /* sprites */
ROM_REGION( 0x20000, "gfx3", 0 )
ROM_LOAD( "vid_6p.bin", 0x00000, 0x08000, CRC(9eae5f8e) SHA1(ed83b608ca57b9bf69fa866d9b8f55d16b7cff63) )
ROM_LOAD( "vid_6o.bin", 0x08000, 0x08000, CRC(5a10a396) SHA1(12ebed3952ff35a2c275cb27c915f82183048cd4) )
ROM_LOAD( "vid_6n.bin", 0x10000, 0x08000, CRC(7b12cf3f) SHA1(6b9d8cad6e15317df01bab0591fab09199ca6d40) )
ROM_LOAD( "vid_6l.bin", 0x18000, 0x08000, CRC(3cea7eaa) SHA1(1dd194d5672dfe71c2b27d2d7b76f5a611cff76f) )
ROM_REGION( 0x20000, "gfx4", 0 )
ROM_LOAD( "vid_6f.bin", 0x00000, 0x08000, CRC(9840edd8) SHA1(f19a1a1d932214037144c533ad07ed81256c34e7) )
ROM_LOAD( "vid_6e.bin", 0x08000, 0x08000, CRC(ff65e074) SHA1(513c1bad336ef5d871f15d6ba8943020f98d1f4a) )
ROM_LOAD( "vid_6c.bin", 0x10000, 0x08000, CRC(89868c85) SHA1(f21550f40e7a177e95c40f2726c651f85ca8edce) )
ROM_LOAD( "vid_6b.bin", 0x18000, 0x08000, CRC(35389a7b) SHA1(a887a89f9bbb5979bb589468d80efba1f243690b) )
ROM_REGION( 0x4000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "cpu_1f.bin", 0x0000, 0x4000, CRC(3cc98c5a) SHA1(ea1035be939ed1a994f3273b33412c85dda0973e) )
ROM_END
ROM_START( silkworm )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "silkworm.4", 0x00000, 0x10000, CRC(a5277cce) SHA1(3886a3f3d1230d49d541f884c5b29938e13f98c8) ) /* c000-ffff is not used */
ROM_LOAD( "silkworm.5", 0x10000, 0x10000, CRC(a6c7bb51) SHA1(75f6625459ab65f2d47a282c1295d4db38f5fe51) ) /* banked at f000-f7ff */
ROM_REGION( 0x20000, "soundcpu", 0 )
ROM_LOAD( "silkworm.3", 0x0000, 0x8000, CRC(b589f587) SHA1(0be5e2bf3daf3e28d63fdc8c89bb6fe7c48c6c3f) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "silkworm.2", 0x00000, 0x08000, CRC(e80a1cd9) SHA1(ef16feb1113acc7401f8951158b25f6f201196f2) ) /* characters */
ROM_REGION( 0x40000, "gfx2", 0 )
ROM_LOAD( "silkworm.6", 0x00000, 0x10000, CRC(1138d159) SHA1(3b938606d448c4effdfe414bbf495b50cc3bc1c1) ) /* sprites */
ROM_LOAD( "silkworm.7", 0x10000, 0x10000, CRC(d96214f7) SHA1(a5b2be3ae6a6eb8afef2c18c865a998fbf4adf93) ) /* sprites */
ROM_LOAD( "silkworm.8", 0x20000, 0x10000, CRC(0494b38e) SHA1(03255f153824056e430a0b8595103f3b58b1fd97) ) /* sprites */
ROM_LOAD( "silkworm.9", 0x30000, 0x10000, CRC(8ce3cdf5) SHA1(635248514c4e1e5aab7a2ed4d620a5b970d4a43a) ) /* sprites */
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "silkworm.10", 0x00000, 0x10000, CRC(8c7138bb) SHA1(0cfd69fa77d5b546f7dad80537d8d2497ae758bc) ) /* tiles #1 */
ROM_LOAD( "silkworm.11", 0x10000, 0x10000, CRC(6c03c476) SHA1(79ad800a2f4ba6d44ba5a31210cbd8566bb357b6) ) /* tiles #1 */
ROM_LOAD( "silkworm.12", 0x20000, 0x10000, CRC(bb0f568f) SHA1(b66c6d0407ed0b068c6bf07987f1b923d4a6e4f8) ) /* tiles #1 */
ROM_LOAD( "silkworm.13", 0x30000, 0x10000, CRC(773ad0a4) SHA1(f7576e1ac8c779b33d7ec393555fd097a34257fa) ) /* tiles #1 */
ROM_REGION( 0x40000, "gfx4", 0 )
ROM_LOAD( "silkworm.14", 0x00000, 0x10000, CRC(409df64b) SHA1(cada970bf9cc8f6522e7a71e00fe873568852873) ) /* tiles #2 */
ROM_LOAD( "silkworm.15", 0x10000, 0x10000, CRC(6e4052c9) SHA1(e2e3d7221b75cb044449a25a076a93c3def1f11b) ) /* tiles #2 */
ROM_LOAD( "silkworm.16", 0x20000, 0x10000, CRC(9292ed63) SHA1(70aa46fcc187b8200c5d246870e2e2dc4b2985cb) ) /* tiles #2 */
ROM_LOAD( "silkworm.17", 0x30000, 0x10000, CRC(3fa4563d) SHA1(46e3cc41491d63efcdda43c84c7ac1385a1926d0) ) /* tiles #2 */
ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "silkworm.1", 0x0000, 0x8000, CRC(5b553644) SHA1(5d39d2251094c17f7b732b4861401b3516fce9b1) )
ROM_END
ROM_START( silkwormj )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "silkwormj.4", 0x00000, 0x10000, CRC(6df3df22) SHA1(9d6201c2df014bdb6877dfff936dddde1fe6fbd0) ) /* c000-ffff is not used */
ROM_LOAD( "silkworm.5", 0x10000, 0x10000, CRC(a6c7bb51) SHA1(75f6625459ab65f2d47a282c1295d4db38f5fe51) ) /* banked at f000-f7ff */
ROM_REGION( 0x20000, "soundcpu", 0 )
ROM_LOAD( "silkwormj.3", 0x0000, 0x8000, CRC(b79848d0) SHA1(d8162ab847bd0768572454d9775b0e9ed92b9519) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "silkworm.2", 0x00000, 0x08000, CRC(e80a1cd9) SHA1(ef16feb1113acc7401f8951158b25f6f201196f2) ) /* characters */
ROM_REGION( 0x40000, "gfx2", 0 )
ROM_LOAD( "silkworm.6", 0x00000, 0x10000, CRC(1138d159) SHA1(3b938606d448c4effdfe414bbf495b50cc3bc1c1) ) /* sprites */
ROM_LOAD( "silkworm.7", 0x10000, 0x10000, CRC(d96214f7) SHA1(a5b2be3ae6a6eb8afef2c18c865a998fbf4adf93) ) /* sprites */
ROM_LOAD( "silkworm.8", 0x20000, 0x10000, CRC(0494b38e) SHA1(03255f153824056e430a0b8595103f3b58b1fd97) ) /* sprites */
ROM_LOAD( "silkworm.9", 0x30000, 0x10000, CRC(8ce3cdf5) SHA1(635248514c4e1e5aab7a2ed4d620a5b970d4a43a) ) /* sprites */
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "silkworm.10", 0x00000, 0x10000, CRC(8c7138bb) SHA1(0cfd69fa77d5b546f7dad80537d8d2497ae758bc) ) /* tiles #1 */
ROM_LOAD( "silkworm.11", 0x10000, 0x10000, CRC(6c03c476) SHA1(79ad800a2f4ba6d44ba5a31210cbd8566bb357b6) ) /* tiles #1 */
ROM_LOAD( "silkworm.12", 0x20000, 0x10000, CRC(bb0f568f) SHA1(b66c6d0407ed0b068c6bf07987f1b923d4a6e4f8) ) /* tiles #1 */
ROM_LOAD( "silkworm.13", 0x30000, 0x10000, CRC(773ad0a4) SHA1(f7576e1ac8c779b33d7ec393555fd097a34257fa) ) /* tiles #1 */
ROM_REGION( 0x40000, "gfx4", 0 )
ROM_LOAD( "silkworm.14", 0x00000, 0x10000, CRC(409df64b) SHA1(cada970bf9cc8f6522e7a71e00fe873568852873) ) /* tiles #2 */
ROM_LOAD( "silkworm.15", 0x10000, 0x10000, CRC(6e4052c9) SHA1(e2e3d7221b75cb044449a25a076a93c3def1f11b) ) /* tiles #2 */
ROM_LOAD( "silkworm.16", 0x20000, 0x10000, CRC(9292ed63) SHA1(70aa46fcc187b8200c5d246870e2e2dc4b2985cb) ) /* tiles #2 */
ROM_LOAD( "silkworm.17", 0x30000, 0x10000, CRC(3fa4563d) SHA1(46e3cc41491d63efcdda43c84c7ac1385a1926d0) ) /* tiles #2 */
ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "silkworm.1", 0x0000, 0x8000, CRC(5b553644) SHA1(5d39d2251094c17f7b732b4861401b3516fce9b1) )
ROM_END
/*
main cpu Z80A
sound cpu Z80A* see note
sound ic ym3812 + 3014
Osc 8Mhz and 24Mhz
*Note:The sound cpu was protected inside a epoxy block fit on a 40 pin socket in reverse of cpu board (solder side).
By dissolving resin the small sub pcb contains Z80A (identified by pins),76c28 (6116),a 74ls00 and 74ls138.
ROMs B4,B5 main program
B2 sound program
B3 character gfx
B6 to B9 object gfx
B10 to B13 foreground gfx
B14 to B17 background gfx
All eprom/rom are 27256,27512
RAMs:
-ram (cpu board):
6264 main/work
6116 (sub pcb*),6116, 2114 x3 sound
6116 character
-ram (video board):
6116 scroll
6116 foreground
6116 background
4164 x20 object/sprites
*/
ROM_START( backfirt )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "b5-e3.bin", 0x00000, 0x10000, CRC(0ab3bd4d) SHA1(2653d099c894304d3f9c2b2de9a7fed67be7b6dc) ) /* c000-ffff is not used */
ROM_LOAD( "b4-f3.bin", 0x10000, 0x10000, CRC(150b6949) SHA1(31870a2f471b71d79a4daa0b5baca0d941de12e4) ) /* banked at f000-f7ff */
ROM_REGION( 0x20000, "soundcpu", 0 )
ROM_LOAD( "b2-e10.bin", 0x00000, 0x08000, CRC(9b2ac54f) SHA1(7c10e00235dc2668dee5c97ea5c6dc7722f35f03) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "b3-c10.bin", 0x00000, 0x08000, CRC(08ce729f) SHA1(8e426251b20edfb10f0837b3106b4f333bc114a4) ) /* characters */
ROM_REGION( 0x40000, "gfx2", 0 )
ROM_LOAD( "b6-c2.bin", 0x00000, 0x10000, CRC(c8c25e45) SHA1(d771d5e7d2d8082680f73b778ef2d88f2e9b8591) ) /* sprites */
ROM_LOAD( "b7-d2.bin", 0x10000, 0x10000, CRC(25fb6a57) SHA1(7f411af7417fa901d65194c348ecec58c61b7cf7) ) /* sprites */
ROM_LOAD( "b8-e2.bin", 0x20000, 0x10000, CRC(6bccac4e) SHA1(e042d049761affe4d3d0eac3c7a24f428643a9cf) ) /* sprites */
ROM_LOAD( "b9-h2.bin", 0x30000, 0x10000, CRC(566a99b8) SHA1(a78825f0a85235399e66906cffafda98445a89a2) ) /* sprites */
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "b13-p1.bin", 0x00000, 0x10000, CRC(8c7138bb) SHA1(0cfd69fa77d5b546f7dad80537d8d2497ae758bc) ) /* tiles #1 */
ROM_LOAD( "b12-p2.bin", 0x10000, 0x10000, CRC(6c03c476) SHA1(79ad800a2f4ba6d44ba5a31210cbd8566bb357b6) ) /* tiles #1 */
ROM_LOAD( "b11-p2.bin", 0x20000, 0x10000, CRC(0bc84b4b) SHA1(599041108d09fd61aab2b0aeac0e07715887476c) ) /* tiles #1 */
ROM_LOAD( "b10-p3.bin", 0x30000, 0x10000, CRC(ec149ec3) SHA1(7817dc2659fe4ba3bb810df278378d51d97065b3) ) /* tiles #1 */
ROM_REGION( 0x40000, "gfx4", 0 )
ROM_LOAD( "b17-s1.bin", 0x00000, 0x10000, CRC(409df64b) SHA1(cada970bf9cc8f6522e7a71e00fe873568852873) ) /* tiles #2 */
ROM_LOAD( "b16-s2.bin", 0x10000, 0x10000, CRC(6e4052c9) SHA1(e2e3d7221b75cb044449a25a076a93c3def1f11b) ) /* tiles #2 */
ROM_LOAD( "b15-s2.bin", 0x20000, 0x10000, CRC(2b6cc20e) SHA1(4815819288753400935836cc1b0b69f4c4b43ddc) ) /* tiles #2 */
ROM_LOAD( "b14-s3.bin", 0x30000, 0x08000, CRC(4d29637a) SHA1(28e85925138256b8ce5a1c4a5df5b219b1b6b197) ) /* tiles #2 */ // half size is correct, rom type 27256
ROM_END
ROM_START( gemini )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "gw04-5s.rom", 0x00000, 0x10000, CRC(ff9de855) SHA1(34167af8456a081f68b338f10d4319ce1e703fd4) ) /* c000-ffff is not used */
ROM_LOAD( "gw05-6s.rom", 0x10000, 0x10000, CRC(5a6947a9) SHA1(18b7aeb0f0e2c396bc759118dd7c45fd6070b804) ) /* banked at f000-f7ff */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "gw03-5h.rom", 0x0000, 0x8000, CRC(9bc79596) SHA1(61de9ddd45140e8ed88173294bd26147e2abfa21) )
ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "gw02-3h.rom", 0x00000, 0x08000, CRC(7acc8d35) SHA1(05056e9f077e7571b314390b508c72d56ad0f43b) ) /* characters */
ROM_REGION( 0x40000, "gfx2", 0 )
ROM_LOAD( "gw06-1c.rom", 0x00000, 0x10000, CRC(4ea51631) SHA1(9aee0f1ba210ac953dc193cfc739322966b6de8a) ) /* sprites */
ROM_LOAD( "gw07-1d.rom", 0x10000, 0x10000, CRC(da42637e) SHA1(9885c52823279f26871092c77bdbe027df08268f) ) /* sprites */
ROM_LOAD( "gw08-1f.rom", 0x20000, 0x10000, CRC(0b4e8d70) SHA1(55069f3df1c8db83f306d46b8262fd23585e6013) ) /* sprites */
ROM_LOAD( "gw09-1h.rom", 0x30000, 0x10000, CRC(b65c5e4c) SHA1(699e1a9e72b8d94edae7382ba119fe5da113514d) ) /* sprites */
ROM_REGION( 0x40000, "gfx3", 0 )
ROM_LOAD( "gw10-1n.rom", 0x00000, 0x10000, CRC(5e84cd4f) SHA1(e85320291027a16619c87fc2365448367bda454a) ) /* tiles #1 */
ROM_LOAD( "gw11-2na.rom", 0x10000, 0x10000, CRC(08b458e1) SHA1(b3426faa57dca51dc053db44fa4968425d8bf3ee) ) /* tiles #1 */
ROM_LOAD( "gw12-2nb.rom", 0x20000, 0x10000, CRC(229c9714) SHA1(f4f47d6b379c973c22f9ae7d7bec7041cdf3f737) ) /* tiles #1 */
ROM_LOAD( "gw13-3n.rom", 0x30000, 0x10000, CRC(c5dfaf47) SHA1(c3202ca8c7f3c5c7dc9acdc09c1c894e168ef9fe) ) /* tiles #1 */
ROM_REGION( 0x40000, "gfx4", 0 )
ROM_LOAD( "gw14-1r.rom", 0x00000, 0x10000, CRC(9c10e5b5) SHA1(a81399b85d8f3ddca26883ec3535cb9044c35ada) ) /* tiles #2 */
ROM_LOAD( "gw15-2ra.rom", 0x10000, 0x10000, CRC(4cd18cfa) SHA1(c197a098a7c1e5220aad039383a40702fe7c4f21) ) /* tiles #2 */
ROM_LOAD( "gw16-2rb.rom", 0x20000, 0x10000, CRC(f911c7be) SHA1(3f49f6c4734f2b644d93c4a54249aae6ff080e1d) ) /* tiles #2 */
ROM_LOAD( "gw17-3r.rom", 0x30000, 0x10000, CRC(79a9ce25) SHA1(74e3917b8e7a920ceb2135d7ef8fb2f2c5176b21) ) /* tiles #2 */
ROM_REGION( 0x8000, "adpcm", 0 ) /* ADPCM samples */
ROM_LOAD( "gw01-6a.rom", 0x0000, 0x8000, CRC(d78afa05) SHA1(b02a739b045f5cddf943ce59226ef234463eeebe) )
ROM_END
/*
video_type is used to distinguish Rygar, Silkworm and Gemini Wing.
This is needed because there is a difference in the tile and sprite indexing.
*/
static DRIVER_INIT( rygar )
{
tecmo_state *state = machine.driver_data<tecmo_state>();
state->m_video_type = 0;
}
static DRIVER_INIT( silkworm )
{
tecmo_state *state = machine.driver_data<tecmo_state>();
state->m_video_type = 1;
}
static DRIVER_INIT( gemini )
{
tecmo_state *state = machine.driver_data<tecmo_state>();
state->m_video_type = 2;
}
static DRIVER_INIT( backfirt )
{
tecmo_state *state = machine.driver_data<tecmo_state>();
state->m_video_type = 2;
/* no MSM */
machine.device("soundcpu")->memory().space(AS_PROGRAM)->nop_write(0xc000, 0xc000);
machine.device("soundcpu")->memory().space(AS_PROGRAM)->nop_write(0xd000, 0xd000);
machine.device("soundcpu")->memory().space(AS_PROGRAM)->nop_write(0xe000, 0xe000);
}
GAME( 1986, rygar, 0, rygar, rygar, rygar, ROT0, "Tecmo", "Rygar (US set 1)", 0 )
GAME( 1986, rygar2, rygar, rygar, rygar, rygar, ROT0, "Tecmo", "Rygar (US set 2)", 0 )
GAME( 1986, rygar3, rygar, rygar, rygar, rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", 0 )
GAME( 1986, rygarj, rygar, rygar, rygar, rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", 0 )
GAME( 1987, gemini, 0, gemini, gemini, gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", 0 ) /* Japan regional warning screen */
GAME( 1988, silkworm, 0, silkworm, silkworm, silkworm, ROT0, "Tecmo", "Silk Worm (World)", 0 ) /* No regional "Warning, if you are playing ..." screen */
GAME( 1988, silkwormj, silkworm, silkworm, silkworm, silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", 0 ) /* Japan regional warning screen */
GAME( 1988, backfirt, 0, gemini, backfirt, backfirt, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", 0 )