summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Tomasz Slanina <tomaszsl@mamedev.org>2010-11-07 19:21:47 +0000
committer Tomasz Slanina <tomaszsl@mamedev.org>2010-11-07 19:21:47 +0000
commitc9b82055c5da37843812066ddc3ce1159c8ddba7 (patch)
tree3d0614224d48160db8b8309c3714706560163bb7
parent50dcbb622211a10dd5d07672ba4864c48c2c403c (diff)
New games added or promoted from NOT_WORKING status
--------------------------------------------------- Bygone [Cananas, Mr. Do, S. Brown, J. Bijl,ranger_lennier, F. Xerri, Gor, Kevin Eshbach, Smitdogg, Tormod, Guru, Tomasz Slanina , The Dumping Union]
-rw-r--r--src/mame/drivers/lkage.c302
-rw-r--r--src/mame/includes/lkage.h4
-rw-r--r--src/mame/mamedriv.c1
-rw-r--r--src/mame/video/lkage.c18
4 files changed, 304 insertions, 21 deletions
diff --git a/src/mame/drivers/lkage.c b/src/mame/drivers/lkage.c
index 0d490fa9bc4..22c4208686a 100644
--- a/src/mame/drivers/lkage.c
+++ b/src/mame/drivers/lkage.c
@@ -57,6 +57,11 @@ Stephh's notes (based on the games Z80 code and some tests) :
- Hi-scores, scores, and as a consequence bonus lives, have been divided by 10,
but it's only a cosmetical effect as data from 0xe200 to 0xe22f is unchanged.
+4) 'bygone'
+
+ - is it prototype ?
+ - MCU (same code as lkage) is not used
+ - No music ? (could be emulation bug) (the 2nd YM is not used...)
TODO:
@@ -84,6 +89,11 @@ TODO:
#include "sound/2203intf.h"
#include "includes/lkage.h"
+#define MAIN_CPU_CLOCK (XTAL_12MHz/2)
+#define SOUND_CPU_CLOCK (XTAL_8MHz/2)
+#define AUDIO_CLOCK (XTAL_8MHz/2)
+#define MCU_CLOCK (XTAL_12MHz/4)
+
static TIMER_CALLBACK( nmi_callback )
{
@@ -119,13 +129,18 @@ static WRITE8_HANDLER( lkage_sh_nmi_enable_w )
}
}
+static READ8_HANDLER(sound_status_r)
+{
+ return 0xff;
+}
+
static ADDRESS_MAP_START( lkage_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xdfff) AM_ROM
AM_RANGE(0xe000, 0xe7ff) AM_RAM /* work ram */
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(paletteram_xxxxRRRRGGGGBBBB_le_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xf000, 0xf003) AM_RAM AM_BASE_MEMBER(lkage_state, vreg) /* video registers */
AM_RANGE(0xf060, 0xf060) AM_WRITE(lkage_sound_command_w)
- AM_RANGE(0xf061, 0xf061) AM_WRITENOP
+ AM_RANGE(0xf061, 0xf061) AM_WRITENOP AM_READ(sound_status_r)
AM_RANGE(0xf062, 0xf062) AM_READWRITE(lkage_mcu_r,lkage_mcu_w)
AM_RANGE(0xf063, 0xf063) AM_WRITENOP /* pulsed; nmi on sound cpu? */
AM_RANGE(0xf080, 0xf080) AM_READ_PORT("DSW1")
@@ -139,9 +154,11 @@ static ADDRESS_MAP_START( lkage_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf0c0, 0xf0c5) AM_RAM AM_BASE_MEMBER(lkage_state, scroll)
AM_RANGE(0xf0e1, 0xf0e1) AM_WRITENOP /* pulsed */
AM_RANGE(0xf100, 0xf15f) AM_RAM AM_BASE_MEMBER(lkage_state, spriteram)
+ AM_RANGE(0xf160, 0xf1ff) AM_RAM /* unknown - no valid sprite data */
AM_RANGE(0xf400, 0xffff) AM_RAM_WRITE(lkage_videoram_w) AM_BASE_MEMBER(lkage_state, videoram)
ADDRESS_MAP_END
+
static READ8_HANDLER( port_fetch_r )
{
return memory_region(space->machine, "user1")[offset];
@@ -175,6 +192,7 @@ static ADDRESS_MAP_START( lkage_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xb000, 0xb000) AM_READ(soundlatch_r) AM_WRITENOP /* ??? */
AM_RANGE(0xb001, 0xb001) AM_READNOP /* ??? */ AM_WRITE(lkage_sh_nmi_enable_w)
AM_RANGE(0xb002, 0xb002) AM_WRITE(lkage_sh_nmi_disable_w)
+ AM_RANGE(0xb003, 0xb003) AM_WRITENOP
AM_RANGE(0xe000, 0xefff) AM_ROM /* space for diagnostic ROM? */
ADDRESS_MAP_END
@@ -311,6 +329,126 @@ static INPUT_PORTS_START( lkageb )
INPUT_PORTS_END
+static INPUT_PORTS_START( bygone )
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) //
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x18, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x08, "5" )
+ PORT_DIPSETTING( 0x00, "255 (Cheat)")
+ PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0f, DEF_STR( 9C_1C ) )
+ PORT_DIPSETTING( 0x0e, DEF_STR( 8C_1C ) )
+ PORT_DIPSETTING( 0x0d, DEF_STR( 7C_1C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x0b, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0a, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x09, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
+ 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_4C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_8C ) )
+ PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0xf0, DEF_STR( 9C_1C ) )
+ PORT_DIPSETTING( 0xe0, DEF_STR( 8C_1C ) )
+ PORT_DIPSETTING( 0xd0, DEF_STR( 7C_1C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0xb0, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0xa0, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x90, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ 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_DIPSETTING( 0x60, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x70, DEF_STR( 1C_8C ) )
+
+ PORT_START("DSW3")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+
+ PORT_START("SYSTEM")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+
static const gfx_layout tile_layout =
{
8,8,
@@ -366,6 +504,9 @@ static MACHINE_START( lkage )
state_save_register_global(machine, state->bg_tile_bank);
state_save_register_global(machine, state->fg_tile_bank);
+ state_save_register_global(machine, state->tx_tile_bank);
+
+ state_save_register_global(machine, state->sprite_dx);
state_save_register_global(machine, state->mcu_ready);
state_save_register_global(machine, state->mcu_val);
@@ -391,7 +532,7 @@ static MACHINE_RESET( lkage )
{
lkage_state *state = machine->driver_data<lkage_state>();
- state->bg_tile_bank = state->fg_tile_bank = 0;
+ state->bg_tile_bank = state->fg_tile_bank = state->tx_tile_bank =0;
state->mcu_ready = 3;
state->mcu_val = 0;
@@ -413,20 +554,19 @@ static MACHINE_RESET( lkage )
state->from_mcu = 0;
}
-
static MACHINE_CONFIG_START( lkage, lkage_state )
/* basic machine hardware */
- MDRV_CPU_ADD("maincpu", Z80,6000000)
+ MDRV_CPU_ADD("maincpu", Z80, MAIN_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(lkage_map)
MDRV_CPU_IO_MAP(lkage_io_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
- MDRV_CPU_ADD("audiocpu", Z80, 6000000)
+ MDRV_CPU_ADD("audiocpu", Z80, SOUND_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(lkage_sound_map)
/* IRQs are triggered by the YM2203 */
- MDRV_CPU_ADD("mcu", M68705,4000000) /* ??? */
+ MDRV_CPU_ADD("mcu", M68705,MCU_CLOCK)
MDRV_CPU_PROGRAM_MAP(lkage_m68705_map)
MDRV_MACHINE_START(lkage)
@@ -449,14 +589,14 @@ static MACHINE_CONFIG_START( lkage, lkage_state )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
- MDRV_SOUND_ADD("ym1", YM2203, 4000000)
+ MDRV_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK )
MDRV_SOUND_CONFIG(ym2203_config)
MDRV_SOUND_ROUTE(0, "mono", 0.15)
MDRV_SOUND_ROUTE(1, "mono", 0.15)
MDRV_SOUND_ROUTE(2, "mono", 0.15)
MDRV_SOUND_ROUTE(3, "mono", 0.40)
- MDRV_SOUND_ADD("ym2", YM2203, 4000000)
+ MDRV_SOUND_ADD("ym2", YM2203, AUDIO_CLOCK )
MDRV_SOUND_ROUTE(0, "mono", 0.15)
MDRV_SOUND_ROUTE(1, "mono", 0.15)
MDRV_SOUND_ROUTE(2, "mono", 0.15)
@@ -467,12 +607,12 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( lkageb, lkage_state )
/* basic machine hardware */
- MDRV_CPU_ADD("maincpu", Z80,6000000)
+ MDRV_CPU_ADD("maincpu", Z80,MAIN_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(lkage_map)
MDRV_CPU_IO_MAP(lkage_io_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
- MDRV_CPU_ADD("audiocpu", Z80, 6000000)
+ MDRV_CPU_ADD("audiocpu", Z80, SOUND_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(lkage_sound_map)
/* IRQs are triggered by the YM2203 */
@@ -496,21 +636,20 @@ static MACHINE_CONFIG_START( lkageb, lkage_state )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
- MDRV_SOUND_ADD("ym1", YM2203, 4000000)
+ MDRV_SOUND_ADD("ym1", YM2203, AUDIO_CLOCK)
MDRV_SOUND_CONFIG(ym2203_config)
MDRV_SOUND_ROUTE(0, "mono", 0.15)
MDRV_SOUND_ROUTE(1, "mono", 0.15)
MDRV_SOUND_ROUTE(2, "mono", 0.15)
MDRV_SOUND_ROUTE(3, "mono", 0.40)
- MDRV_SOUND_ADD("ym2", YM2203, 4000000)
+ MDRV_SOUND_ADD("ym2", YM2203, AUDIO_CLOCK)
MDRV_SOUND_ROUTE(0, "mono", 0.15)
MDRV_SOUND_ROUTE(1, "mono", 0.15)
MDRV_SOUND_ROUTE(2, "mono", 0.15)
MDRV_SOUND_ROUTE(3, "mono", 0.40)
MACHINE_CONFIG_END
-
ROM_START( lkage )
ROM_REGION( 0x14000, "maincpu", 0 ) /* Z80 code (main CPU) */
ROM_LOAD( "a54-01-2.37", 0x0000, 0x8000, CRC(60fd9734) SHA1(33b444b887d80acb3a63ca4534db65c4d8147712) )
@@ -664,6 +803,121 @@ ROM_START( lkageb3 )
ROM_LOAD( "a54-10.2", 0x0000, 0x0200, CRC(17dfbd14) SHA1(f8f0b6dfedd4ba108dad43ccc7697ef4ab9cbf86) ) /* unknown */
ROM_END
+/*
+Bygone
+Taito, 1985?
+
+This is a rare prototype platform game conversion on a Legend Of Kage PCB.
+There are some wire mods on the video board.
+
+
+PCB Layouts
+-----------
+
+K1100135A
+J1100057A
+CPU PCB
+M4300040A (sticker, also matches The Legend Of Kage)
+|------------------------------------------------------|
+| VOL LM324 TL074 PC040DA |
+| PC010SA YM3014 YM2203 PC040DA |
+| MB3731 PC040DA |
+| PC010SA YM3014 YM2203 MB2148 |
+| PC030CM MB2148 |
+| 8MHz MB2148 |
+| 6116 |-|
+|2 | |
+|2 A53_07.IC54 Z80A | |
+|W | |
+|A A51_09.IC53 | |
+|Y | |
+| | |
+| | |
+| A54-14.IC27 |-|
+| A53_08.IC51 A53_06.IC38 |
+| |
+| |
+| |
+| 6264 A53_05.IC37 Z80B |
+| DSW3 DSW2 DSW1 TL7700 |
+|------------------------------------------------------|
+Notes:
+ Z80A - clock 4.000MHz [8/2]
+ Z80B - clock 6.000MHz [12/2]
+ YM2203 - clock 4.000MHz [8/2]
+ A51_09 - MC68705P5 microcontroller, clock 3.000MHz [12/4].
+ It seems to be from Taito game A51, which is unknown?
+ It was not protected ^_^
+ A54-14 - PAL16L8
+ A53* - 27C128 and 27C256 EPROMs
+ 6264 - 8k x8 SRAM
+ 6116 - 2k x8 SRAM
+ 2148 - 1k x4 SRAM
+ DIPs have 8 switches each
+
+
+K1100136A
+J1100058A
+VIDEO PCB
+|------------------------------------------------------|
+| 12MHz |
+| |
+| |
+| |
+| 6116 |
+| 6116 |
+| 6116 |-|
+|1 | |
+|8 | |
+|W | |
+|A A54-11.IC76 | |
+|Y 93422 93422 | |
+| | |
+| 93422 93422 | |
+| A53_04.IC87 MB112S146 MB112S146 A54-13.IC35 |-|
+| |
+| A53_03.IC86 MB112S146 MB112S146 A54-12.IC34 |
+| |
+| A53_02.IC85 MB112S146 MB112S146 |
+| |
+| A53_01.IC84 MB112S146 MB112S146 A54-10.IC2|
+|------------------------------------------------------|
+Notes:
+ A54-10 - MB7122 PROM
+ A54-11 - PAL16L8
+ A54-12 - PAL16L8
+ A54-13 - PAL16L8
+ 6116 - 2k x8 SRAM
+ 93422 - 256b x4 SRAM
+ A53* - 27C128 EPROMs
+
+*/
+
+ROM_START( bygone )
+ ROM_REGION( 0x14000, "maincpu", 0 ) /* Z80 code (main CPU) */
+ ROM_LOAD( "a53_05.ic37", 0x0000, 0x8000, CRC(63a3f08b) SHA1(781539077cb1d3b8eecc8bd3717330c0f281833d) )
+ ROM_LOAD( "a53_06.ic38", 0x8000, 0x8000, CRC(cb0dcb08) SHA1(6b12b018b983b8225b5f33fb9fcd8004a00fd8ff) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound CPU) */
+ ROM_LOAD( "a53_07.ic54", 0x0000, 0x8000, CRC(72f69a77) SHA1(dfc1050a4123b3c83ae733ece1b6fe2836beb901) )
+
+ ROM_REGION( 0x10000, "mcu", 0 ) /* 68705 MCU code */
+ ROM_LOAD( "a51_09.ic53", 0x0000, 0x0800, CRC(0e8b8846) SHA1(a4a105462b0127229bb7edfadd2e581c7e40f1cc) ) /* the same as lkage */
+
+ ROM_REGION( 0x4000, "user1", 0 ) /* data */
+ ROM_LOAD( "a53_08.ic51", 0x0000, 0x4000, CRC(f85139f9) SHA1(7e089d1dd5c5fa8abb396b44aa15aabcf8677940) )
+
+ ROM_REGION( 0x10000, "gfx1", 0 )
+ ROM_LOAD( "a53_01.ic84", 0x0000, 0x4000, CRC(38cf7fb2) SHA1(424efabe2386fa5f1c22444a53952d85c05c2d64) )
+ ROM_LOAD( "a53_02.ic85", 0x4000, 0x4000, CRC(dca7adfe) SHA1(83b159e92dab96d9e20fa3a9d1ce7a7d2e83b313) )
+ ROM_LOAD( "a53_03.ic86", 0x8000, 0x4000, CRC(af3eb997) SHA1(ba66ffb9d83f91c98446ac38bb0e712ec0800625) )
+ ROM_LOAD( "a53_04.ic87", 0xc000, 0x4000, CRC(65af72d3) SHA1(759a1dd7548075630ddb9c692bdb32ad4712c579) )
+
+ ROM_REGION( 0x0400, "proms", 0 )
+ ROM_LOAD( "a54-10.ic2", 0x0000, 0x0400, CRC(369722d9) SHA1(2df9932ad8ce87c0a9d2c89222a4cec12c29046d) ) /* unknown */
+ROM_END
+
+
/*Note: This probably uses another MCU dump,which is undumped.*/
static READ8_HANDLER( fake_mcu_r )
@@ -714,16 +968,32 @@ static READ8_HANDLER( fake_status_r )
return state->mcu_ready;
}
+static DRIVER_INIT( lkage )
+{
+ lkage_state *state = machine->driver_data<lkage_state>();
+ state->sprite_dx=0;
+}
+
static DRIVER_INIT( lkageb )
{
+ lkage_state *state = machine->driver_data<lkage_state>();
memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xf062, 0xf062, 0, 0, fake_mcu_r);
memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xf087, 0xf087, 0, 0, fake_status_r);
memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xf062, 0xf062, 0, 0, fake_mcu_w );
+ state->sprite_dx=0;
+}
+
+static DRIVER_INIT( bygone )
+{
+ lkage_state *state = machine->driver_data<lkage_state>();
+ state->sprite_dx=1;
}
-GAME( 1984, lkage, 0, lkage, lkage, 0, ROT0, "Taito Corporation", "The Legend of Kage", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1984, lkageo, lkage, lkage, lkage, 0, ROT0, "Taito Corporation", "The Legend of Kage (older)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1984, lkageoo, lkage, lkage, lkage, 0, ROT0, "Taito Corporation", "The Legend of Kage (oldest)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1984, lkage, 0, lkage, lkage, lkage, ROT0, "Taito Corporation", "The Legend of Kage", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1984, lkageo, lkage, lkage, lkage, lkage, ROT0, "Taito Corporation", "The Legend of Kage (older)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1984, lkageoo, lkage, lkage, lkage, lkage, ROT0, "Taito Corporation", "The Legend of Kage (oldest)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1984, lkageb, lkage, lkageb, lkageb, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1984, lkageb2, lkage, lkageb, lkageb, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1984, lkageb3, lkage, lkageb, lkageb, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 3)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1985, bygone, 0, lkage, bygone, bygone, ROT0, "Taito Corporation", "Bygone", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+
diff --git a/src/mame/includes/lkage.h b/src/mame/includes/lkage.h
index a2e0618771d..96c36d2cb3c 100644
--- a/src/mame/includes/lkage.h
+++ b/src/mame/includes/lkage.h
@@ -13,7 +13,9 @@ public:
/* video-related */
tilemap_t *bg_tilemap, *fg_tilemap, *tx_tilemap;
- UINT8 bg_tile_bank, fg_tile_bank;
+ UINT8 bg_tile_bank, fg_tile_bank, tx_tile_bank;
+
+ int sprite_dx;
/* misc */
int sound_nmi_enable, pending_nmi;
diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c
index 31b3d4e697f..544e53876fc 100644
--- a/src/mame/mamedriv.c
+++ b/src/mame/mamedriv.c
@@ -1776,6 +1776,7 @@ const game_driver * const drivers[] =
DRIVER( lkageb ) /* bootleg */
DRIVER( lkageb2 ) /* bootleg */
DRIVER( lkageb3 ) /* bootleg */
+ DRIVER( bygone ) /* prototype ? A53 (c) 1985 Taito Corporation */
DRIVER( msisaac ) /* A34 (c) 1985 Taito Corporation */
DRIVER( retofinv ) /* A37 (c) 1985 Taito Corporation */
DRIVER( retofinv1 ) /* bootleg */
diff --git a/src/mame/video/lkage.c b/src/mame/video/lkage.c
index 32b6c6490f7..f6d49e43510 100644
--- a/src/mame/video/lkage.c
+++ b/src/mame/video/lkage.c
@@ -11,6 +11,7 @@
lkage_scroll[0x05]: background layer vertical scroll
lkage_vreg[0]: 0x00,0x04
+ 0x02: tx tile bank select (bygone only?)
0x04: fg tile bank select
0x08: ?
@@ -82,7 +83,7 @@ static TILE_GET_INFO( get_fg_tile_info )
static TILE_GET_INFO( get_tx_tile_info )
{
lkage_state *state = machine->driver_data<lkage_state>();
- int code = state->videoram[tile_index];
+ int code = state->videoram[tile_index] + 256 * (state->tx_tile_bank ? 4 : 0);
SET_TILE_INFO( 0/*gfx*/, code, 0/*color*/, 0/*flags*/);
}
@@ -108,7 +109,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
lkage_state *state = machine->driver_data<lkage_state>();
const UINT8 *source = state->spriteram;
const UINT8 *finish = source + 0x60;
-
+
while (source < finish)
{
int attributes = source[2];
@@ -124,7 +125,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
int flipx = attributes & 0x01;
int flipy = attributes & 0x02;
int height = (attributes & 0x08) ? 2 : 1;
- int sx = source[0] - 15;
+ int sx = source[0] - 15 + state->sprite_dx;
int sy = 256 - 16 * height - source[1];
int sprite_number = source[3] + ((attributes & 0x04) << 6);
int y;
@@ -180,6 +181,7 @@ VIDEO_UPDATE( lkage )
flip_screen_y_set(screen->machine, ~state->vreg[2] & 0x02);
bank = state->vreg[1] & 0x08;
+
if (state->bg_tile_bank != bank)
{
state->bg_tile_bank = bank;
@@ -192,6 +194,13 @@ VIDEO_UPDATE( lkage )
state->fg_tile_bank = bank;
tilemap_mark_all_tiles_dirty(state->fg_tilemap);
}
+
+ bank = state->vreg[0]&0x02;
+ if (state->tx_tile_bank != bank)
+ {
+ state->tx_tile_bank = bank;
+ tilemap_mark_all_tiles_dirty(state->tx_tilemap);
+ }
tilemap_set_palette_offset(state->bg_tilemap, 0x300 + (state->vreg[1] & 0xf0));
tilemap_set_palette_offset(state->fg_tilemap, 0x200 + (state->vreg[1] & 0xf0));
@@ -212,11 +221,12 @@ VIDEO_UPDATE( lkage )
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1);
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, (state->vreg[1] & 2) ? 2 : 4);
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 4);
+ draw_sprites(screen->machine, bitmap, cliprect);
}
else
{
tilemap_draw(bitmap, cliprect, state->tx_tilemap, TILEMAP_DRAW_OPAQUE, 0);
}
- draw_sprites(screen->machine, bitmap, cliprect);
+
return 0;
}