new NOT_WORKING game added

---------------------------
Time Fighter (Time Pilot conversion on Galaxian hardware) [Marcello Mancini, the hands of the hap]
This commit is contained in:
Michaël Banaan Ananas 2013-05-07 15:49:01 +00:00
parent aa258c5f4f
commit 77da65a92c
4 changed files with 162 additions and 32 deletions

View File

@ -69,17 +69,6 @@ Notes:
'BONUS SHIP' text is printed on a different line.
TODO:
----
- Problems with Galaxian based on the observation of a real machine:
- Background humming is incorrect. It's faster on a real machine
- Explosion sound is much softer. Filter involved?
- $4800-4bff in Streaking/Ghost Muncher
Moon Cresta versions supported:
------------------------------
@ -395,22 +384,25 @@ Stephh's notes (based on the games Z80 code and some tests) for games based on '
TO DO :
-------
- smooncrs : fix read/writes at/to unmapped memory (when player 2, "cocktail" mode)
fix the ?#! bug with "bullets" (when player 2, "cocktail" mode)
- zigzag : full Dip Switches and Inputs
- zigzag2 : full Dip Switches and Inputs
- jumpbug : full Dip Switches and Inputs
- jumpbugb : full Dip Switches and Inputs
- levers : full Dip Switches and Inputs
- kingball : full Dip Switches and Inputs
- kingbalj : full Dip Switches and Inputs
- frogg : fix read/writes at/to unmapped/wrong memory
- scprpng : fix read/writes at/to unmapped/wrong memory
- scorpion : check whether konami filters are used
- explorer : check whether konami filters are used
TODO:
----
- Problems with Galaxian based on the observation of a real machine:
- Background humming is incorrect. It's faster on a real machine
- Explosion sound is much softer. Filter involved?
- streakng/ghostmun: $4800-4bff
- smooncrs : fix read/writes at/to unmapped memory (when player 2, "cocktail" mode) + fix the ?#! bug with "bullets" (when player 2, "cocktail" mode)
- timefgtr : missing player bullets, sprite ROM extend(see later levels), sound is too slow, some sprites missing
- zigzag : full Dip Switches and Inputs
- zigzag2 : full Dip Switches and Inputs
- jumpbug : full Dip Switches and Inputs
- jumpbugb : full Dip Switches and Inputs
- levers : full Dip Switches and Inputs
- kingball : full Dip Switches and Inputs
- kingbalj : full Dip Switches and Inputs
- frogg : fix read/writes at/to unmapped/wrong memory
- scprpng : fix read/writes at/to unmapped/wrong memory
- scorpion : check whether konami filters are used
- explorer : check whether konami filters are used
***************************************************************************/
@ -1474,7 +1466,27 @@ static ADDRESS_MAP_START( fantastc_map, AS_PROGRAM, 8, galaxian_state )
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2")
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
AM_RANGE(0xfffe, 0xfffe) AM_NOP //?
AM_RANGE(0xfffe, 0xfffe) AM_NOP // ?
ADDRESS_MAP_END
static ADDRESS_MAP_START( timefgtr_map, AS_PROGRAM, 8, galaxian_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8803, 0x8803) AM_DEVWRITE_LEGACY("8910.0", ay8910_address_w)
AM_RANGE(0x880b, 0x880b) AM_DEVWRITE_LEGACY("8910.0", ay8910_data_w)
AM_RANGE(0x880c, 0x880c) AM_DEVWRITE_LEGACY("8910.1", ay8910_address_w)
AM_RANGE(0x880e, 0x880e) AM_DEVWRITE_LEGACY("8910.1", ay8910_data_w)
AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x9800, 0x9bff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_objram_w) AM_SHARE("spriteram")
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x07ff) AM_READ_PORT("IN0")
AM_RANGE(0xa800, 0xa800) AM_MIRROR(0x07ff) AM_READ_PORT("IN1")
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2")
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
AM_RANGE(0xb004, 0xb004) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w)
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
// AM_RANGE(0xb800, 0xb800) AM_WRITENOP // ?
// AM_RANGE(0xfff8, 0xffff) AM_WRITENOP // sound related?
ADDRESS_MAP_END
@ -2234,6 +2246,35 @@ static MACHINE_CONFIG_DERIVED( fantastc, galaxian_base )
MACHINE_CONFIG_END
TIMER_DEVICE_CALLBACK_MEMBER(galaxian_state::timefgtr_scanline)
{
UINT8 split = param + 16;
// change spriteram base per each 64-line part of the screen
if ((split & 0x3f) == 0)
{
machine().primary_screen->update_now();
m_sprites_base = 0x40 | (split << 2 & 0x300);
}
}
static MACHINE_CONFIG_DERIVED( timefgtr, galaxian_base )
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", galaxian_state, timefgtr_scanline, "screen", 0, 1)
/* alternate memory map */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(timefgtr_map)
/* sound hardware */
MCFG_SOUND_ADD("8910.0", AY8910, GALAXIAN_PIXEL_CLOCK/3/2) // 3.072MHz
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("8910.1", AY8910, GALAXIAN_PIXEL_CLOCK/3/2) // 3.072MHz
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( jumpbug, galaxian_base )
MCFG_WATCHDOG_VBLANK_INIT(0)
@ -2720,6 +2761,7 @@ void galaxian_state::common_init(galaxian_draw_bullet_func draw_bullet,galaxian_
m_irq_line = INPUT_LINE_NMI;
m_numspritegens = 1;
m_bullets_base = 0x60;
m_sprites_base = 0x40;
m_frogger_adjust = FALSE;
m_sfx_tilemap = FALSE;
m_draw_bullet_ptr = (draw_bullet != NULL) ? draw_bullet : &galaxian_state::galaxian_draw_bullet;
@ -3239,6 +3281,19 @@ DRIVER_INIT_MEMBER(galaxian_state,fantastc)
}
DRIVER_INIT_MEMBER(galaxian_state,timefgtr)
{
/* two sprite generators */
m_numspritegens = 2;
/* bullets moved from $60 to $c0 */
m_bullets_base = 0xc0;
/* video extensions */
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, NULL, &galaxian_state::upper_extend_sprite_info);
}
DRIVER_INIT_MEMBER(galaxian_state,kingball)
{
address_space &space = m_maincpu->space(AS_PROGRAM);

View File

@ -1224,6 +1224,54 @@ static INPUT_PORTS_START( fantastc )
INPUT_PORTS_END
static INPUT_PORTS_START( timefgtr )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_DIPNAME( 0x20, 0x00, "255 Lives (Cheat)" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "Extended Bonus Life" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // tilt? freeze?
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x80, "5" )
PORT_START("IN2")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) // if 01 and 02 are both set, bonus life is 00
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) // "
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
PORT_DIPSETTING( 0x00, "10000 50000" )
PORT_DIPSETTING( 0x04, "20000 50000" )
PORT_DIPSETTING( 0x08, "10000 60000" )
PORT_DIPSETTING( 0x0c, "20000 60000" )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( kong )
PORT_START("IN0")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
@ -1257,7 +1305,7 @@ static INPUT_PORTS_START( kong )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x40, "5" )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coin_A ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
@ -4635,6 +4683,25 @@ ROM_START( fantastc )
ROM_LOAD( "prom-74g138", 0x0000, 0x0020, CRC(800f5718) SHA1(5387b24934c8130726180159e207943211215ae2) )
ROM_END
ROM_START( timefgtr )
ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "tp01", 0x0000, 0x1000, CRC(ba8b3e70) SHA1(cb930022e462319721013f343e513f4a4957b89e) )
ROM_LOAD( "tp02", 0x1000, 0x1000, CRC(796158c0) SHA1(bc02131a9af1773839ae0aba0225b3160ae632c4) )
ROM_LOAD( "tp03", 0x2000, 0x1000, CRC(fe6a1c98) SHA1(f4a4e61cc96d93cd21e79b0aa3ddc158a7a034a0) )
ROM_LOAD( "tp04", 0x3000, 0x1000, CRC(eff73185) SHA1(8538f1b63b051d6d3892ebedc76f45c3cf02cbab) )
ROM_LOAD( "tp05", 0x4000, 0x1000, CRC(85023e4a) SHA1(afc76ba15d6278c45bf50e9bafcb72a0beb69d4d) )
ROM_LOAD( "tp06", 0x5000, 0x1000, CRC(b6b8aaf9) SHA1(e25e59ee653b13437c412f1aeb8d7c670e34b39f) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "tp07", 0x0000, 0x1000, CRC(5f57342c) SHA1(000985613d620cbcafbd24351bd4b02f037430a9) )
ROM_LOAD( "tp09", 0x1000, 0x1000, CRC(636fd772) SHA1(6567992488f0125c082a164f1043c9384736c665) )
ROM_LOAD( "tp08", 0x2000, 0x1000, CRC(2dc3c48b) SHA1(f4ddf5fce909a1de3efbcaf2ff2e4a8d1ea06516) )
ROM_LOAD( "tp10", 0x3000, 0x1000, CRC(b27b450c) SHA1(16131583133fe33b61d4f51a860f41d43011bc50) )
ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "prom", 0x0000, 0x0020, NO_DUMP )
ROM_END
ROM_START( kong )
ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "1", 0x0000, 0x1000, CRC(a206beb5) SHA1(5fea9584b4e3ae076178f6965f0743b9b90b15fc) )
@ -6651,10 +6718,13 @@ GAME( 198?, thepitm, thepit, mooncrst, thepitm, galaxian_state, thepitm, RO
/* other games on basic mooncrst hardware */
GAME( 1982, skybase, 0, mooncrst, skybase, galaxian_state, skybase, ROT90, "Omori Electric Co., Ltd.", "Sky Base", GAME_SUPPORTS_SAVE )
GAME( 198?, kong, 0, mooncrst, kong, galaxian_state, kong, ROT90, "Taito do Brasil", "Kong (Brazil)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone
GAME( 198?, kong, 0, mooncrst, kong, galaxian_state, kong, ROT90, "Taito do Brasil", "Kong (Donkey Kong conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone
/* larger romspace, 2*AY8910, based on Super Star Crest board? */
GAME( 198?, fantastc, 0, fantastc, fantastc, galaxian_state, fantastc, ROT90, "Taito do Brasil", "Fantastic", GAME_SUPPORTS_SAVE ) // rewrite of Galaga (!) not a clone
GAME( 198?, fantastc, 0, fantastc, fantastc, galaxian_state, fantastc, ROT90, "Taito do Brasil", "Fantastic (Galaga conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE ) // rewrite of Galaga (!) not a clone
/* like fantastc, plus larger spriteram, and maybe different bullet hw(?) */
GAME( 198?, timefgtr, 0, timefgtr, timefgtr, galaxian_state, timefgtr, ROT90, "Taito do Brasil", "Time Fighter (Time Pilot conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Time Pilot (!) not a clone
/* extra ROMs, protection, and sound hardware replaced with AY8910 */
GAME( 1981, jumpbug, 0, jumpbug, jumpbug, galaxian_state, jumpbug, ROT90, "Hoei (Rock-Ola license)", "Jump Bug", GAME_SUPPORTS_SAVE ) // or by Alpha Denshi Co. under contract from Hoei?

View File

@ -51,6 +51,7 @@ public:
required_shared_ptr<UINT8> m_videoram;
int m_bullets_base;
int m_sprites_base;
int m_numspritegens;
int m_counter_74ls161[2];
int m_direction[2];
@ -205,6 +206,7 @@ public:
DECLARE_DRIVER_INIT(mshuttle);
DECLARE_DRIVER_INIT(mshuttlj);
DECLARE_DRIVER_INIT(fantastc);
DECLARE_DRIVER_INIT(timefgtr);
DECLARE_DRIVER_INIT(kingball);
DECLARE_DRIVER_INIT(scorpnmc);
DECLARE_DRIVER_INIT(thepitm);
@ -237,6 +239,7 @@ public:
INTERRUPT_GEN_MEMBER(fakechange_interrupt_gen);
TIMER_DEVICE_CALLBACK_MEMBER(checkmaj_irq0_gen);
TIMER_DEVICE_CALLBACK_MEMBER(galaxian_stars_blink_timer);
TIMER_DEVICE_CALLBACK_MEMBER(timefgtr_scanline);
void state_save_register();
void sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT8 *spritebase);
void bullets_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT8 *base);

View File

@ -413,6 +413,8 @@ void galaxian_state::state_save_register()
state_save_register_global(machine(), m_background_green);
state_save_register_global(machine(), m_background_blue);
state_save_register_global(machine(), m_sprites_base);
state_save_register_global(machine(), m_bullets_base);
state_save_register_global_array(machine(), m_gfxbank);
state_save_register_global(machine(), m_stars_enabled);
@ -439,7 +441,7 @@ UINT32 galaxian_state::screen_update_galaxian(screen_device &screen, bitmap_rgb3
/* render the sprites next. Some custom pcbs (eg. zigzag, fantastc) have more than one sprite generator (ideally, this should be rendered in parallel) */
for (int i = 0; i < m_numspritegens; i++)
sprites_draw(bitmap, cliprect, &m_spriteram[0x40 + i * 0x20]);
sprites_draw(bitmap, cliprect, &m_spriteram[m_sprites_base + i * 0x20]);
/* if we have bullets to draw, render them following */
if (m_draw_bullet_ptr != NULL)