diff --git a/src/mame/drivers/expro02.c b/src/mame/drivers/expro02.c index fd9db8c09c8..bcad2ffe480 100644 --- a/src/mame/drivers/expro02.c +++ b/src/mame/drivers/expro02.c @@ -1,9 +1,11 @@ -/* Kaneko EXPRO-02 board - - used by the newer revisions of Gals Panic +/* + + Kaneko EXPRO-02 board + + Used by the newer revisions of Gals Panic Notes: - Tile GFX seem to be encrypted / scrambled? I can't decode them - Dipswitches are wrong for these sets + - In gfx data banking function, some strange gfx are shown. Timing issue? Gals Panic @@ -136,28 +138,62 @@ U78 (22CV10) #include "sound/okim6295.h" static INPUT_PORTS_START( galsnew ) - PORT_START("DSW1/P1") + PORT_START("DSW1") + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x000C, 0x000C, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0004, "2" ) + PORT_DIPSETTING( 0x000C, "3" ) + PORT_DIPSETTING( 0x0008, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW2") PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) /* flip screen? */ + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) /* flip screen? */ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_SERVICE( 0x0004, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Test ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Coin B-1" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Coin B-2" ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - /* Coinage - World (0x03ffff.b = 03) */ - PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) - PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) - PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) /* Coinage - Japan (0x03ffff.b = 01) and US (0x03ffff.b = 02) PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) @@ -170,49 +206,16 @@ static INPUT_PORTS_START( galsnew ) PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) */ - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* "Shot2" in "test mode" */ - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("DSW2/P2") - PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0010, "2" ) - PORT_DIPSETTING( 0x0030, "3" ) - PORT_DIPSETTING( 0x0020, "4" ) - PORT_DIPSETTING( 0x0000, "5" ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) /* demo sounds? - see notes */ - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, "Character Test" ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* "Shot2" in "test mode" */ + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* "Shot2" in "test mode" */ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("SYSTEM") + PORT_START("DSW3") PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) @@ -225,6 +228,88 @@ static INPUT_PORTS_START( galsnew ) INPUT_PORTS_END +static INPUT_PORTS_START( galsnewa ) + PORT_START("DSW1") + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_BIT( 0x000C, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0010, "2" ) + PORT_DIPSETTING( 0x0030, "3" ) + PORT_DIPSETTING( 0x0020, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0xC000, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("DSW2") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) /* flip screen? */ + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Test ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0028, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Coin B-1" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, "Coin B-2" ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + /* Coinage - Japan (0x03ffff.b = 01) and US (0x03ffff.b = 02) + PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) ) + */ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) /* "Shot2" in "test mode" */ + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW3") + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + static WRITE16_HANDLER( galsnew_paletteram_w ) { data = COMBINE_DATA(&paletteram16[offset]); @@ -240,6 +325,40 @@ static WRITE16_HANDLER( galsnew_6295_bankswitch_w ) } } +static UINT16 vram_0_bank_num = 0, vram_1_bank_num = 0; + +WRITE16_HANDLER(galsnew_vram_0_bank_w) +{ + int i; + if(vram_0_bank_num != data) + { + for(i = 0; i < 0x1000 / 2; i += 2) + { + if(kaneko16_vram_0[i]) + { + kaneko16_vram_0_w(machine, i+1, data << 8, 0xFF00); + } + } + vram_0_bank_num = data; + } +} + +WRITE16_HANDLER(galsnew_vram_1_bank_w) +{ + int i; + if(vram_1_bank_num != data) + { + for(i = 0; i < 0x1000 / 2; i += 2) + { + if(kaneko16_vram_1[i]) + { + kaneko16_vram_1_w(machine, i+1, data << 8, 0xFF00); + } + } + vram_1_bank_num = data; + } +} + static ADDRESS_MAP_START( galsnew, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM // main program AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("user2",0) // other data @@ -261,23 +380,23 @@ static ADDRESS_MAP_START( galsnew, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x700000, 0x700fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) // sprites? 0x72f words tested - AM_RANGE(0x780000, 0x78001f) AM_READWRITE(SMH_RAM,kaneko16_sprites_regs_w) AM_BASE(&kaneko16_sprites_regs ) // sprite regs? tileregs? + AM_RANGE(0x780000, 0x78001f) AM_READWRITE(SMH_RAM,kaneko16_sprites_regs_w) AM_BASE(&kaneko16_sprites_regs) // sprite regs? tileregs? - AM_RANGE(0x800000, 0x800001) AM_READ_PORT("DSW1/P1") - AM_RANGE(0x800002, 0x800003) AM_READ_PORT("DSW2/P2") - AM_RANGE(0x800004, 0x800005) AM_READ_PORT("SYSTEM") + AM_RANGE(0x800000, 0x800001) AM_READ_PORT("DSW1") + AM_RANGE(0x800002, 0x800003) AM_READ_PORT("DSW2") + AM_RANGE(0x800004, 0x800005) AM_READ_PORT("DSW3") AM_RANGE(0x900000, 0x900001) AM_WRITE(galsnew_6295_bankswitch_w) - AM_RANGE(0xa00000, 0xa00001) AM_WRITE(SMH_NOP) /* ??? */ + AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ??? */ AM_RANGE(0xc80000, 0xc8ffff) AM_RAM - AM_RANGE(0xd80000, 0xd80001) AM_WRITE(SMH_NOP) /* ??? */ + AM_RANGE(0xd80000, 0xd80001) AM_WRITE(galsnew_vram_1_bank_w) /* ??? */ AM_RANGE(0xe00000, 0xe00015) AM_READWRITE(galpanib_calc_r,galpanib_calc_w) /* CALC1 MCU interaction (simulated) */ - AM_RANGE(0xe80000, 0xe80001) AM_WRITE(SMH_NOP) /* ??? */ + AM_RANGE(0xe80000, 0xe80001) AM_WRITE(galsnew_vram_0_bank_w) /* ??? */ ADDRESS_MAP_END @@ -314,7 +433,7 @@ static const gfx_layout layout_16x16x4 = static GFXDECODE_START( 1x4bit_1x4bit ) GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x100, 0x40 ) // [0] Sprites - GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0, 0x40 ) // [0] bg tiles + GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x400, 0x40 ) // [0] bg tiles GFXDECODE_END static MACHINE_DRIVER_START( galsnew ) @@ -354,25 +473,68 @@ static MACHINE_DRIVER_START( galsnew ) MACHINE_DRIVER_END /* the tile roms seem lineswapped.. but I don't know how to descramble them yet */ -static DRIVER_INIT(galsnew) +DRIVER_INIT(galsnew) { - UINT8 *src = memory_region ( machine, "gfx3" ); - UINT8 *dst = memory_region ( machine, "gfx2" ); - int x; + UINT32 *src = (UINT32 *)memory_region(machine, "gfx3" ); + UINT32 *dst = (UINT32 *)memory_region(machine, "gfx2" ); + int x, source, offset,inv; - for (x=0; x<0x200000;x++) + for (x=0; x<0x80000;x++) { - UINT32 y; - - y = BITSWAP24(x, 23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 ); - y = x ^ 12; - dst[y] = src[x]; + inv = ~x; + offset = x ^ (0xC30 | (inv >> 1 & 0x10200)); + offset = (offset & ~0x07) | ((0x02 - (offset & 0x07)) & 0x07); + if(x&0x0010) + offset = (offset & ~0x60) | (((offset & 0x60) + 0x20) & 0x60); + if((x&((inv >> 1 & 0x10000) | 0x2000)) == 0x02000) + offset ^= 0x1000; + if(!(x&(0x1000 | (x >> 4 & 0x2000)))) + { + offset ^= 0x100; + if(!(x&0x20000) && (x&0x12000) == 0x02000) + { + offset = (offset & ~0x180) | (((offset & 0x180) + 0x180) & 0x180); + if((x&0x180) == 0x100) + { + offset ^= 0x400; + if((x&0x480) == 0x400) + offset ^= 0x200; + } + } + } + else + { + offset = (offset & ~0x180) | (((offset & 0x180) + 0x80) & 0x180); + if((x&0x180) == 0x100) + { + offset ^= 0x400; + if((x&0x480) == 0x400) + offset ^= 0x200; + } + } + if((x&0x7) < 0x03) + { + if(!(x&0x800)) + { + offset ^= 0x4000; + if(x&0x4000) + { + offset ^= 0x08; + if(x&0x08) + offset = (offset & ~0x70) | (((offset & 0x70) + 0x10) & 0x70); + } + } + offset ^= 0x800; + } + if((x & 0x30000) == 0x10000) + source = x; + else + source = x ^ 0x2000; + dst[source] = (src[offset] << 4 & 0xF0F0F0F0) | (src[offset] >> 4 & 0x0F0F0F0F); } - } - ROM_START( galsnew ) /* EXPRO-02 PCB */ ROM_REGION( 0x40000, "main", 0 ) /* 68000 code */ ROM_LOAD16_BYTE( "pm110u_u87-01.u87", 0x000000, 0x20000, CRC(b793a57d) SHA1(12d57b2b4add532f0d0453c25b30d34b3449d717) ) /* US region */ @@ -398,11 +560,11 @@ ROM_START( galsnew ) /* EXPRO-02 PCB */ ROM_REGION( 0x200000, "gfx2", ROMREGION_DISPOSE ) /* sprites */ - ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* sprites - encrypted? */ - ROM_LOAD( "pm013e.u89", 0x180000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) - ROM_LOAD( "pm014e.u90", 0x100000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) - ROM_LOAD( "pm015e.u91", 0x080000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) - ROM_LOAD( "pm016e.u92", 0x000000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) + ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* sprites - encrypted */ + ROM_LOAD( "pm013e.u89", 0x000000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) + ROM_LOAD( "pm014e.u90", 0x080000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) + ROM_LOAD( "pm015e.u91", 0x100000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) + ROM_LOAD( "pm016e.u92", 0x180000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) ROM_REGION( 0x140000, "oki", 0 ) /* OKIM6295 samples */ @@ -438,11 +600,11 @@ ROM_START( galsnewa ) /* EXPRO-02 PCB */ ROM_REGION( 0x200000, "gfx2", ROMREGION_DISPOSE ) /* sprites */ - ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* tiles - encrypted? */ - ROM_LOAD( "pm013e.u89", 0x180000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) - ROM_LOAD( "pm014e.u90", 0x100000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) - ROM_LOAD( "pm015e.u91", 0x080000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) - ROM_LOAD( "pm016e.u92", 0x000000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) + ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* tiles - encrypted */ + ROM_LOAD( "pm013e.u89", 0x000000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) + ROM_LOAD( "pm014e.u90", 0x080000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) + ROM_LOAD( "pm015e.u91", 0x100000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) + ROM_LOAD( "pm016e.u92", 0x180000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) ROM_REGION( 0x140000, "oki", 0 ) /* OKIM6295 samples */ /* 00000-2ffff is fixed, 30000-3ffff is bank switched from all the ROMs */ @@ -477,11 +639,11 @@ ROM_START( galsnewj ) /* EXPRO-02 PCB */ ROM_REGION( 0x200000, "gfx2", ROMREGION_DISPOSE ) /* sprites */ - ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* tiles - encrypted? */ - ROM_LOAD( "pm013e.u89", 0x180000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) - ROM_LOAD( "pm014e.u90", 0x100000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) - ROM_LOAD( "pm015e.u91", 0x080000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) - ROM_LOAD( "pm016e.u92", 0x000000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) + ROM_REGION( 0x200000, "gfx3", ROMREGION_DISPOSE ) /* tiles - encrypted */ + ROM_LOAD( "pm013e.u89", 0x000000, 0x080000, CRC(10f27b05) SHA1(0f8ade713f6b430b5a23370a17326d53229951de) ) + ROM_LOAD( "pm014e.u90", 0x080000, 0x080000, CRC(2f367106) SHA1(1cd16e286e77e8e1b7668bbb6f2978101656b720) ) + ROM_LOAD( "pm015e.u91", 0x100000, 0x080000, CRC(a563f8ef) SHA1(6e4171746e4d401992bf3a7619d5bed0063d57e5) ) + ROM_LOAD( "pm016e.u92", 0x180000, 0x080000, CRC(c0b9494c) SHA1(f0b066dd78eb9fcf947da90ddb6c7b62299c5743) ) ROM_REGION( 0x140000, "oki", 0 ) /* OKIM6295 samples */ /* 00000-2ffff is fixed, 30000-3ffff is bank switched from all the ROMs */ @@ -491,6 +653,6 @@ ROM_START( galsnewj ) /* EXPRO-02 PCB */ ROM_END -GAME( 1990, galsnew, 0, galsnew, galsnew, galsnew, ROT90, "Kaneko", "Gals Panic (US, EXPRO-02 PCB)", GAME_NOT_WORKING ) -GAME( 1990, galsnewa, galsnew, galsnew, galsnew, galsnew, ROT90, "Kaneko", "Gals Panic (Export, EXPRO-02 PCB)", GAME_NOT_WORKING ) -GAME( 1990, galsnewj, galsnew, galsnew, galsnew, galsnew, ROT90, "Kaneko (Taito license)", "Gals Panic (Japan, EXPRO-02 PCB)", GAME_NOT_WORKING ) +GAME( 1990, galsnew, 0, galsnew, galsnew, galsnew, ROT90, "Kaneko", "Gals Panic (US, EXPRO-02 PCB)", 0 ) +GAME( 1990, galsnewa, galsnew, galsnew, galsnewa, galsnew, ROT90, "Kaneko", "Gals Panic (Export, EXPRO-02 PCB)", 0 ) +GAME( 1990, galsnewj, galsnew, galsnew, galsnewa, galsnew, ROT90, "Kaneko (Taito license)", "Gals Panic (Japan, EXPRO-02 PCB)", 0 ) diff --git a/src/mame/video/kaneko16.c b/src/mame/video/kaneko16.c index fd92acafd19..aa9c2418d12 100644 --- a/src/mame/video/kaneko16.c +++ b/src/mame/video/kaneko16.c @@ -290,7 +290,37 @@ VIDEO_START( berlwall ) VIDEO_START( galsnew ) { - VIDEO_START_CALL(kaneko16_1xVIEW2); + VIDEO_START_CALL(kaneko16_sprites); + + kaneko16_tmap_0 = tilemap_create( get_tile_info_0, tilemap_scan_rows, + 16,16, 0x20,0x20 ); + kaneko16_tmap_1 = tilemap_create( get_tile_info_1, tilemap_scan_rows, + 16,16, 0x20,0x20 ); + + kaneko16_tmap_2 = 0; + + kaneko16_tmap_3 = 0; + + sprites_bitmap = video_screen_auto_bitmap_alloc(machine->primary_screen); + + { + int dx = 0x5b, dy = 8; + + int xdim = video_screen_get_width(machine->primary_screen); + int ydim = video_screen_get_height(machine->primary_screen); + + tilemap_set_scrolldx( kaneko16_tmap_0, -dx, xdim + dx -1 ); + tilemap_set_scrolldx( kaneko16_tmap_1, -(dx+2), xdim + (dx + 2) - 1 ); + + tilemap_set_scrolldy( kaneko16_tmap_0, -dy, ydim + dy -1 ); + tilemap_set_scrolldy( kaneko16_tmap_1, -dy, ydim + dy -1 ); + + tilemap_set_transparent_pen(kaneko16_tmap_0, 0); + tilemap_set_transparent_pen(kaneko16_tmap_1, 0); + + tilemap_set_scroll_rows(kaneko16_tmap_0, 0x200); // Line Scroll + tilemap_set_scroll_rows(kaneko16_tmap_1, 0x200); + } } /***************************************************************************