phoenix.cpp: dumped / redumped the PROM for some of the bootlegs [f205]

Also started documenting the differences.
This commit is contained in:
Ivan Vangelista 2017-03-10 18:29:01 +01:00
parent cfda3b1ffd
commit 99be1d93b8
3 changed files with 116 additions and 67 deletions

View File

@ -6,13 +6,31 @@ Phoenix hardware games
driver by Richard Davies
There are 2 Phoenix board families:
* 2 PCBs with 2 50-pin connectors. The 'Main board' hosts the 8085 CPU,
the MN6221 sound chip, 2 PROMs, the volume trimmer, 1 bank of 8 dip switches
and 3 amplifiers (1x LM380 + 2x LM324), the 'ROMs board' hosts the ROMs,
the RAM and the oscillator. This board type is used by the Amstar original
and some of the clones, some of which introduce a small PCB for credits'
management (with 1 bank of 4 dip switch), while others substitute the MM8221
with a piggyback PCB. These clones were manufactured between 1980 and 1981.
* Only 1 PCB, and 1 color PROM instead of 2. In most of these bootlegs the LM380
isn't present and only the 2 LM324 remain. There are 2 banks of 4 switches
and 1 bank of 8, though not all bootlegs have all the banks fitted, probably
as a cost cutting measure. For the same reason, not all have the MN6221. These
bootlegs were all built in 1981 and are an evolution of the first family,
manufactured more cheaply thanks to some reengineering of the circuits.
Notes:
- Discrete sound emulation is in audio/phoenix.c,
pleiads is using another sound driver, audio/pleiads.c
- Discrete sound emulation is in audio/phoenix.cpp,
pleiads is using another sound driver, audio/pleiads.cpp
To Do:
Phoenix:
- Emulate the different sound system used by phoenixc2.
- Better documentation of the bootlegs.
Survival:
@ -23,7 +41,7 @@ Survival:
Pleiads:
- Palette banking. Controlled by 3 custom chips marked T-X, T-Y and T-Z.
These chips are reponsible for the protection as well.
These chips are responsible for the protection as well.
***************************************************************************/
@ -754,7 +772,15 @@ ROM_START( phoenixc )
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_END
ROM_START( phoenixc2 )
/*
main PCB is marked: "PH2"
main PCB is labeled: "03814367" and "280402" and "N 132073"
ROMs PCB is marked: "PH1"
On top of main PCB there is a small piggyback PCB. it is a replacement for MN6221 Melody-Alarm Generator - sound. There are 3 PROMs (dumped) and a few 74xx logics.
This board was in a cocktail table cabinet manufactured by Model Racing and labeled "Thunderbird".
*/
ROM_START( phoenixc2 ) // verified main and ROMs PCBs and 2 PROMs
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "phoenix.45", 0x0000, 0x0800, CRC(5b8c55a8) SHA1(839c1ca9766f730ec3accd48db70f6429a9c3362) ) // 01.ic45
ROM_LOAD( "phoenix.46", 0x0800, 0x0800, CRC(dbc942fa) SHA1(9fe224e6ced407289dfa571468259a021d942b7d) ) // 01.ic46
@ -783,7 +809,7 @@ ROM_START( phoenixc2 )
ROM_LOAD( "tbp24sa10n.185.bin", 0x0200, 0x0100, CRC(0a06bd1b) SHA1(8c5debc5502e88af8019266fedcbe4bad1e2e214) )
ROM_END
ROM_START( phoenixc3 )
ROM_START( phoenixc3 ) // verified main and ROMs PCBs and 2 PROMs
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "phoenix.45", 0x0000, 0x0800, CRC(5b8c55a8) SHA1(839c1ca9766f730ec3accd48db70f6429a9c3362) )
ROM_LOAD( "phoenix.46", 0x0800, 0x0800, CRC(dbc942fa) SHA1(9fe224e6ced407289dfa571468259a021d942b7d) )
@ -807,7 +833,12 @@ ROM_START( phoenixc3 )
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_END
ROM_START( phoenixc4 )
/*
main PCB is marked: "PX 031081"
There is an additional daughter board to handle coins credits; it's clearly an addition made by an operator.
*/
ROM_START( phoenixc4 ) // verified main and ROMs PCBs and 2 PROMs
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "phoenix.45", 0x0000, 0x0800, CRC(5b8c55a8) SHA1(839c1ca9766f730ec3accd48db70f6429a9c3362) )
ROM_LOAD( "phoenix.46", 0x0800, 0x0800, CRC(dbc942fa) SHA1(9fe224e6ced407289dfa571468259a021d942b7d) )
@ -831,7 +862,7 @@ ROM_START( phoenixc4 )
ROM_RELOAD( 0x0000, 0x0100 ) /* the dump had 2 identical proms with different names */
ROM_END
ROM_START( phoenixi )
ROM_START( phoenixi ) // verified single PCB, single PROM
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "0201.bin", 0x0000, 0x0800, CRC(c0f73929) SHA1(3cecf8341a5674165d2cae9b22ea5db26a9597de) )
ROM_LOAD( "0202.bin", 0x0800, 0x0800, CRC(440d56e8) SHA1(b3147d5416cec8c00c7df40b878b826434121737) )
@ -851,7 +882,7 @@ ROM_START( phoenixi )
ROM_LOAD( "0212.bin", 0x0800, 0x0800, CRC(eba42f0f) SHA1(378282cb2c4e10c23179ae3c605ae7bf691150f6) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "sn74s471n.bin", 0x0100, 0x0100, CRC(a7d73fba) SHA1(ed7355c8ea86fb14c91dd0b5c5fb048a3c05cdfc) )
ROM_LOAD( "sn74s471n.bin", 0x0100, 0x0100, CRC(c68a49bc) SHA1(1a015b89ac0622e73bcebd76cf5132830fe0bfc1) )
ROM_END
ROM_START( condor )
@ -878,7 +909,9 @@ ROM_START( condor )
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_END
ROM_START( condorn )
// PCB is marked: "NOVARMATIC" and "13200"
ROM_START( condorn ) // verified single PCB, single PROM
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1.bin", 0x0000, 0x0800, CRC(c0f73929) SHA1(3cecf8341a5674165d2cae9b22ea5db26a9597de) )
ROM_LOAD( "2.bin", 0x0800, 0x0800, CRC(440d56e8) SHA1(b3147d5416cec8c00c7df40b878b826434121737) )
@ -897,9 +930,8 @@ ROM_START( condorn )
ROM_LOAD( "a.bin", 0x0000, 0x0800, CRC(cdd5ef12) SHA1(1eb4ff6a0d56640acf0de2d6e7b7070e5b2c90d4) )
ROM_LOAD( "b.bin", 0x0800, 0x0800, CRC(eba42f0f) SHA1(378282cb2c4e10c23179ae3c605ae7bf691150f6) )
ROM_REGION( 0x0200, "proms", 0 ) // not dumped for this set
ROM_LOAD( "mmi6301.ic40", 0x0000, 0x0100, CRC(79350b25) SHA1(57411be4c1d89677f7919ae295446da90612c8a8) ) /* palette low bits */
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "sn74s471n.bin", 0x0100, 0x0100, CRC(c68a49bc) SHA1(1a015b89ac0622e73bcebd76cf5132830fe0bfc1) )
ROM_END
ROM_START( falcon )
@ -1021,7 +1053,12 @@ ROM_START( vautourz )
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_END
ROM_START( fenix )
/*
PCB is marked: "ORIO/G"
PCB is labeled: "FONECHIS"
*/
ROM_START( fenix ) // verified single PCB, single PROM
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "0.1e", 0x0000, 0x0800, NO_DUMP ) // socket at location '1e' is empty.
ROM_LOAD( "1.1f", 0x0800, 0x0800, CRC(3699b11a) SHA1(7122685cbfcd75898eaa68f8c5bf87c11df59a3b) ) // 1.1f
@ -1120,7 +1157,11 @@ ROM_START( avefenixl )
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_END
ROM_START( griffon )
/*
PCB is marked: "003 LATO A" on component side and "003 LATO B" on solder side. (In Italian "lato" means "side")
*/
ROM_START( griffon ) // verified single PCB, single PROM
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "griffon0.a5", 0x0000, 0x0800, CRC(c0f73929) SHA1(3cecf8341a5674165d2cae9b22ea5db26a9597de) )
ROM_LOAD( "griffon1.a6", 0x0800, 0x0800, CRC(3cc33e4a) SHA1(45d16334f245cc185e18f63062e08627e9bd06bb) )
@ -1140,8 +1181,7 @@ ROM_START( griffon )
ROM_LOAD( "griffon.d8", 0x0800, 0x0800, CRC(eba42f0f) SHA1(378282cb2c4e10c23179ae3c605ae7bf691150f6) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "mmi6301.ic40", 0x0000, 0x0100, CRC(79350b25) SHA1(57411be4c1d89677f7919ae295446da90612c8a8) ) /* palette low bits */
ROM_LOAD( "mmi6301.ic41", 0x0100, 0x0100, CRC(e176b768) SHA1(e2184dd495ed579f10b6da0b78379e02d7a6229f) ) /* palette high bits */
ROM_LOAD( "sn74s471n.bin", 0x0100, 0x0100, CRC(c68a49bc) SHA1(1a015b89ac0622e73bcebd76cf5132830fe0bfc1) )
ROM_END
ROM_START( nextfase )
@ -1438,13 +1478,13 @@ ROM_START( survival )
ROM_END
DRIVER_INIT_MEMBER(phoenix_state,condor)
DRIVER_INIT_MEMBER(phoenix_state, coindsw)
{
/* additional inputs for coinage */
m_maincpu->space(AS_PROGRAM).install_read_port(0x5000, 0x5000, "DSW1");
}
DRIVER_INIT_MEMBER(phoenix_state,vautourza)
DRIVER_INIT_MEMBER(phoenix_state, oneprom)
{
uint8_t *rgn = memregion("proms")->base();
@ -1456,6 +1496,14 @@ DRIVER_INIT_MEMBER(phoenix_state,vautourza)
}
}
DRIVER_INIT_MEMBER(phoenix_state, oneprom_coindsw)
{
DRIVER_INIT_CALL(coindsw);
DRIVER_INIT_CALL(oneprom);
}
/*** Phoenix (& clones) ***/
GAME( 1980, phoenix, 0, phoenix, phoenix, driver_device, 0, ROT90, "Amstar", "Phoenix (Amstar, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, phoenix2, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "Amstar", "Phoenix (Amstar, set 2)", MACHINE_SUPPORTS_SAVE )
@ -1469,26 +1517,26 @@ GAME( 1981, phoenixc, phoenix, phoenix, phoenixt, driver_device, 0, ROT
GAME( 1981, phoenixc2, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg? (Irecsa / G.G.I Corp)", "Phoenix (Irecsa / G.G.I Corp, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, phoenixc3, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg? (Irecsa / G.G.I Corp)", "Phoenix (Irecsa / G.G.I Corp, set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, phoenixc4, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg? (Irecsa / G.G.I Corp)", "Phoenix (Irecsa / G.G.I Corp, set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, phoenixi, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg (IDI)", "Phoenix (IDI bootleg)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // Needs correct color PROM decode
GAME( 1981, condor, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg (Sidam)", "Condor (Sidam bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, condorn, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg (S C Novar)", "Condor (S C Novar bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
// the following 2 were common bootlegs in england & france respectively
GAME( 1980, falcon, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg (BGV Ltd.)", "Falcon (bootleg of Phoenix) (8085A CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, phoenixi, phoenix, condor, condor, phoenix_state, oneprom_coindsw, ROT90, "bootleg (IDI)", "Phoenix (IDI bootleg)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // Needs correct color PROM decode
GAME( 1981, condor, phoenix, condor, condor, phoenix_state, coindsw, ROT90, "bootleg (Sidam)", "Condor (Sidam bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, condorn, phoenix, condor, condor, phoenix_state, oneprom_coindsw, ROT90, "bootleg (S C Novar)", "Condor (S C Novar bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
// the following 2 were common bootlegs in England & France respectively
GAME( 1980, falcon, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg", "Falcon (bootleg of Phoenix) (8085A CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, vautour, phoenix, phoenix, phoenixt, driver_device, 0, ROT90, "bootleg (Jeutel)", "Vautour (bootleg of Phoenix) (8085A CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, falconz, phoenix, condor, falconz, driver_device, 0, ROT90, "bootleg", "Falcon (bootleg of Phoenix) (Z80 CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, vautourz, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg", "Vautour (bootleg of Phoenix) (Z80 CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, vautourza,phoenix, condor , phoenixt,phoenix_state, vautourza,ROT90, "bootleg (Jeutel)", "Vautour (bootleg of Phoenix) (Z80 CPU, single PROM)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, falconz, phoenix, condor, falconz, driver_device, 0, ROT90, "bootleg (Digimatic)", "Falcon (bootleg of Phoenix) (Z80 CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, vautourz, phoenix, condor, condor, phoenix_state, coindsw, ROT90, "bootleg", "Vautour (bootleg of Phoenix) (Z80 CPU)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, vautourza, phoenix, condor , phoenixt, phoenix_state, oneprom, ROT90, "bootleg (Jeutel)", "Vautour (bootleg of Phoenix) (Z80 CPU, single PROM)", MACHINE_SUPPORTS_SAVE )
// fenix is an italian bootleg based on vautourz
GAME( 1980, fenix, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg", "Fenix (bootleg of Phoenix)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1980, griffon, phoenix, condor, condor, phoenix_state, condor, ROT90, "bootleg (Videotron)", "Griffon (bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
// nextfase is a spanish bootleg
// fenix is an Italian bootleg based on vautourz
GAME( 1980, fenix, phoenix, condor, condor, phoenix_state, oneprom_coindsw, ROT90, "bootleg (Orio)", "Fenix (bootleg of Phoenix)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1980, griffon, phoenix, condor, condor, phoenix_state, oneprom_coindsw, ROT90, "bootleg (Videotron)", "Griffon (bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
// nextfase is a Spanish bootleg
GAME( 1981, nextfase, phoenix, phoenix, nextfase, driver_device, 0, ROT90, "bootleg (Petaco S.A.)", "Next Fase (bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
// as is this
GAME( 1981, phoenixs, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Sonic)", "Phoenix (Sonic, Spanish bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, phoenixass, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Assa)", "Phoenix (Assa, Spanish bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, avefenix, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Video Game)", "Ave Fenix (Electrogame, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE ) // Electrogame (Barcelona) made the dedicated cabinet and is likely the real manufacturer, ingame shows 'Video Game'
GAME( 1981, avefenixrf,phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Recreativos Franco S.A.)", "Ave Fenix (Recreativos Franco, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, avefenixrf, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Recreativos Franco S.A.)", "Ave Fenix (Recreativos Franco, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, avefenixl, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Laguna)", "Ave Fenix (Laguna, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
/*** Pleiads (& clones) ***/

View File

@ -34,8 +34,9 @@ public:
DECLARE_READ8_MEMBER(survival_input_port_0_r);
DECLARE_CUSTOM_INPUT_MEMBER(player_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(pleiads_protection_r);
DECLARE_DRIVER_INIT(condor);
DECLARE_DRIVER_INIT(vautourza);
DECLARE_DRIVER_INIT(oneprom);
DECLARE_DRIVER_INIT(coindsw);
DECLARE_DRIVER_INIT(oneprom_coindsw);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
DECLARE_MACHINE_RESET(phoenix);

View File

@ -2,7 +2,7 @@
// copyright-holders:Richard Davies
/***************************************************************************
video.c
phoenix.cpp
Functions to emulate the video hardware of the machine.
@ -273,7 +273,7 @@ WRITE8_MEMBER(phoenix_state::pleiads_videoreg_w)
/* the palette table is at $0420-$042f and is set by $06bc.
Four palette changes by level. The palette selection is
wrong, but the same paletter is used for both layers. */
wrong, but the same palette is used for both layers. */
if (m_palette_bank != ((data >> 1) & 3))
{