new WORKING machines ---- Magic Purple [David Haywood, Jose IBI, Arcade Vintage, Recreativas.org, DU] (#4372)

* new WORKING machines ---- Magic Purple [David Haywood, Jose IBI, Arcade Vintage, Recreativas.org, DU]

* sound balance seems off (nw)

* use XTAL (nw)

* simplify things a bit (nw)

* no 'language' dip on this (nw)

* not related (nw)
This commit is contained in:
David Haywood 2018-12-06 19:10:04 +00:00 committed by R. Belmont
parent bb1a1ed956
commit 2f43a53ee8
3 changed files with 114 additions and 28 deletions

View File

@ -185,7 +185,7 @@ Stephh's notes (based on the games M68000 code and some tests) :
due to code at 0x000fe6 ('beq $fea'). So I've marked it as "Unused".
8) 'fncywrld'
8) 'fncywld'
- I'm not sure about the release date of this game :
* on the title screen, it ALWAYS displays 1996
@ -313,7 +313,6 @@ Stephh's notes (based on the games M68000 code and some tests) :
#define TUMBLEP_HACK 0
#define FNCYWLD_HACK 0
@ -669,12 +668,8 @@ void tumbleb_state::tumblepopba_main_map(address_map &map)
map(0x322000, 0x322fff).w(FUNC(tumbleb_state::tumblepb_pf2_data_w)).share("pf2_data");
}
void tumbleb_state::fncywld_main_map(address_map &map)
void tumbleb_state::unico_base_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
#if FNCYWLD_HACK
map(0x000000, 0x0fffff).writeonly(); /* To write levels modifications */
#endif
map(0x100000, 0x100003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0x00ff);
map(0x100005, 0x100005).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x140000, 0x140fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@ -690,7 +685,25 @@ void tumbleb_state::fncywld_main_map(address_map &map)
map(0x340400, 0x34047f).nopw(); /* Unused col scroll */
map(0x342000, 0x3421ff).nopw();
map(0x342400, 0x34247f).nopw();
}
void tumbleb_state::fncywld_main_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0xff0000, 0xffffff).ram();
unico_base_map(map);
}
void tumbleb_state::magipur_main_map(address_map &map)
{
map(0x000000, 0x00ffff).ram().share("mainram");
map(0xf00000, 0xffffff).rom().region("maincpu", 0);
map(0x100010, 0x100011).nopw(); // TODO: what is this, fncywld doesn't write here, can't be related to the RAM/ROM arrangement as the writes happen well after boot
unico_base_map(map);
}
@ -1115,7 +1128,7 @@ static INPUT_PORTS_START( fncywld )
PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Language ) ) // only seems to the title screen
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Language ) ) // changes the region disclaimer and title screen only, not story text
PORT_DIPSETTING( 0x0004, DEF_STR( English ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Korean ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) )
@ -1135,19 +1148,10 @@ static INPUT_PORTS_START( fncywld )
PORT_DIPSETTING( 0x2000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
#if FNCYWLD_HACK
PORT_DIPNAME( 0x0800, 0x0800, "Remove Monsters" )
#else
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unused ) ) // See notes
#endif
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unused ) ) // See notes (is 'Remove Monsters' if code is patched to enable debug mode)
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
#if FNCYWLD_HACK
PORT_DIPNAME( 0x0400, 0x0400, "Edit Levels" )
#else
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) // See notes
#endif
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) // See notes (is 'Edit Levels' if code is patched to enable debug mode)
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unused ) )
@ -1158,6 +1162,15 @@ static INPUT_PORTS_START( fncywld )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( magipur )
PORT_INCLUDE(fncywld)
PORT_MODIFY("DSW")
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( htchctch )
PORT_START("PLAYERS")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
@ -2005,14 +2018,14 @@ static GFXDECODE_START( gfx_suprtrio )
GFXDECODE_ENTRY( "tilegfx", 0, tcharlayout, 256, 16 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "tilegfx", 0, suprtrio_tlayout, 512, 16 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "tilegfx", 0, suprtrio_tlayout, 256, 16 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "sprgfx", 0, tlayout, 0, 16 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "sprgfx", 0, tlayout, 0, 16 ) /* Sprites 16x16 */
GFXDECODE_END
static GFXDECODE_START( gfx_fncywld )
GFXDECODE_ENTRY( "tilegfx", 0, tcharlayout, 0x400, 0x40 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "tilegfx", 0, tlayout, 0x400, 0x40 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "tilegfx", 0, tlayout, 0x200, 0x40 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "sprgfx", 0, tlayout, 0x000, 0x40 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "sprgfx", 0, tlayout, 0x000, 0x40 ) /* Sprites 16x16 */
GFXDECODE_END
/******************************************************************************/
@ -2194,12 +2207,52 @@ MACHINE_CONFIG_START(tumbleb_state::fncywld)
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2151(config, "ymsnd", 32220000/9).add_route(ALL_OUTPUTS, "mono", 0.20);
YM2151(config, "ymsnd", 32220000/9).add_route(ALL_OUTPUTS, "mono", 0.10);
MCFG_DEVICE_ADD("oki", OKIM6295, 1023924, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
/// OSCs: 12MHz, 4MHz, 28.63636MHz, not the same PCB as fncywld
MACHINE_CONFIG_START(tumbleb_state::magipur)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(12'000'000))
MCFG_DEVICE_PROGRAM_MAP(magipur_main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", tumbleb_state, irq6_line_hold)
MCFG_MACHINE_START_OVERRIDE(tumbleb_state,tumbleb)
MCFG_MACHINE_RESET_OVERRIDE(tumbleb_state,tumbleb)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60) // refresh rate not verified
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529))
MCFG_SCREEN_SIZE(40*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
MCFG_SCREEN_UPDATE_DRIVER(tumbleb_state, screen_update_fncywld)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("spritegen", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
MCFG_DECO_SPRITE_ISBOOTLEG(true)
MCFG_DECO_SPRITE_TRANSPEN(15)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_fncywld)
MCFG_PALETTE_ADD("palette", 0x800)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
MCFG_VIDEO_START_OVERRIDE(tumbleb_state,fncywld)
/* sound hardware */
SPEAKER(config, "mono").front_center();
YM2151(config, "ymsnd", XTAL(4'000'000)).add_route(ALL_OUTPUTS, "mono", 0.10);
MCFG_DEVICE_ADD("oki", OKIM6295, XTAL(4'000'000)/4, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
MACHINE_RESET_MEMBER(tumbleb_state,htchctch)
@ -2555,6 +2608,27 @@ ROM_START( fncywld )
ROM_LOAD( "00_fw01.bin", 0x000000, 0x040000, CRC(b395fe01) SHA1(ac7f2e21413658f8d2a1abf3a76b7817a4e050c9) )
ROM_END
ROM_START( magipur )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "2-27c040.bin", 0x000000, 0x080000, CRC(135c5de7) SHA1(95c75e9e69793f67df9378391ae45915ef9bbb89) )
ROM_LOAD16_BYTE( "3-27c040.bin", 0x000001, 0x080000, CRC(ee4b16da) SHA1(82391ed4d21d3944ca482be00ab7c0838cf190ff) )
ROM_REGION( 0x100000, "sprgfx", 0 )
ROM_LOAD16_BYTE( "4-27c040.bin", 0x80000, 0x40000, CRC(e460a77d) SHA1(bde15705750e002bd576098700161b0944984401) )
ROM_CONTINUE(0x80001, 0x40000)
ROM_LOAD16_BYTE( "5-27c040.bin", 0x00000, 0x40000, CRC(79c53627) SHA1(9e2673b3becf0508f630f3bd8ff5fc30520b120b) )
ROM_CONTINUE(0x00001, 0x40000)
ROM_REGION( 0x100000, "tilegfx", 0 )
ROM_LOAD16_BYTE( "6-27c040.bin", 0x00001, 0x40000, CRC(b25b5872) SHA1(88a6a110073060c3b7b2987cc41d23c4ca412b43) )
ROM_CONTINUE(0x00000, 0x40000)
ROM_LOAD16_BYTE( "7-27c040.bin", 0x80001, 0x40000, CRC(d3c3a672) SHA1(5bbd67a953e1d47d05006a4ef4aa7a23e807f11b) )
ROM_CONTINUE(0x80000, 0x40000)
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
ROM_LOAD( "1-27c020.bin", 0x000000, 0x040000, CRC(84dcf771) SHA1(f8a693a11b14608a582a90b7fd7d3be92e46a0e1) )
ROM_END
ROM_START( suprtrio )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68k */
ROM_LOAD16_BYTE( "rom2", 0x00000, 0x40000, CRC(4102e59d) SHA1(f06f1273dbbb91fa61d84541aa124d9c88ee94c1) )
@ -3509,13 +3583,20 @@ void tumbleb_state::init_fncywld()
{
tumblepb_gfx_rearrange(1);
#if FNCYWLD_HACK
/* This is a hack to allow you to use the extra features
of the 2 first "Unused" Dip Switch (see notes above). */
uint16_t *RAM = (uint16_t *)memregion("maincpu")->base();
RAM[0x0005fa/2] = 0x4e71;
RAM[0x00060a/2] = 0x4e71;
#endif
//uint16_t *RAM = (uint16_t *)memregion("maincpu")->base();
//RAM[0x0005fa/2] = 0x4e71;
//RAM[0x00060a/2] = 0x4e71;
}
void tumbleb_state::init_magipur()
{
tumblepb_gfx_rearrange(1);
uint16_t *src = (uint16_t*)memregion( "maincpu" )->base();
// copy vector table? game expects RAM at 0, and ROM at f00000?!
memcpy(m_mainram, src, 0x80);
}
@ -3645,7 +3726,7 @@ GAME( 1994, suprtrio, 0, suprtrio, suprtrio, tumbleb_state, init_suprtr
GAME( 1996, fncywld, 0, fncywld, fncywld, tumbleb_state, init_fncywld, ROT0, "Unico", "Fancy World - Earth of Crisis" , MACHINE_SUPPORTS_SAVE ) // game says 1996, testmode 1995?
// Unico - Magic Purple almost certainly goes here
GAME( 1996, magipur, 0, magipur, magipur, tumbleb_state, init_magipur, ROT0, "Unico", "Magic Purple" , MACHINE_SUPPORTS_SAVE )
/* First Amusement / Mijin / SemiCom hardware (MCU protected) */
GAME( 1994, metlsavr, 0, metlsavr, metlsavr, tumbleb_state, init_chokchok, ROT0, "First Amusement", "Metal Saver", MACHINE_SUPPORTS_SAVE )

View File

@ -38,6 +38,7 @@ public:
void cookbib(machine_config &config);
void metlsavr(machine_config &config);
void fncywld(machine_config &config);
void magipur(machine_config &config);
void suprtrio(machine_config &config);
void htchctch(machine_config &config);
void sdfight(machine_config &config);
@ -57,6 +58,7 @@ public:
void init_tumbleb2();
void init_chokchok();
void init_fncywld();
void init_magipur();
void init_carket();
private:
@ -159,7 +161,9 @@ private:
void suprtrio_decrypt_code();
void suprtrio_decrypt_gfx();
void unico_base_map(address_map &map);
void fncywld_main_map(address_map &map);
void magipur_main_map(address_map &map);
void htchctch_main_map(address_map &map);
void jumpkids_main_map(address_map &map);
void jumpkids_sound_map(address_map &map);

View File

@ -37968,6 +37968,7 @@ cookbib // (c) 1995 SemiCom
cookbiba //
dquizgo // (c) 1998 SemiCom
fncywld // (c) 1996 Unico
magipur // (c) 1996 Unico
htchctch // (c) 1995 SemiCom
jumpkids // (c) 1993 Comad
magicbal // (c) 1994 SemiCom