Cleaned up shared implementation of CDi [David Haywood]

- merged MESS CDi driver file with the MAME CDi driver file (used for Quizard)
- the cdimono1 system is now the parent / bios of Quizard, the Quizard games run on a retail CDi unit with Jamma adapter / dongle for protection so this is a logical step.
This commit is contained in:
Miodrag Milanovic 2011-02-03 13:32:06 +00:00
parent 31717fe741
commit 6c490f558a
3 changed files with 110 additions and 59 deletions

View File

@ -32,7 +32,7 @@ TODO:
#include "sound/cdda.h"
#include "cdrom.h"
#include "cdi.lh"
#include "imagedev/chd_cd.h"
#if ENABLE_VERBOSE_LOG
INLINE void verboselog(running_machine *machine, int n_level, const char *s_fmt, ...)
@ -129,32 +129,16 @@ static INPUT_CHANGED( mcu_input )
static INPUT_PORTS_START( cdi )
PORT_START("MOUSEX")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(0) PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_START("MOUSEY")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(0) PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_START("MOUSEBTN")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CHANGED(cdislave_device::mouse_update, 0)
PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INPUT1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("Coin 1") PORT_CHANGED(mcu_input, (void*)0x39)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Start 1") PORT_CHANGED(mcu_input, (void*)0x37)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Player 1 A") PORT_CHANGED(mcu_input, (void*)0x31)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Player 1 B") PORT_CHANGED(mcu_input, (void*)0x32)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Player 1 C") PORT_CHANGED(mcu_input, (void*)0x33)
PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INPUT2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE1) PORT_NAME("Service") PORT_CHANGED(mcu_input, (void*)0x30)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START2) PORT_NAME("Start 2") PORT_CHANGED(mcu_input, (void*)0x38)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Player 2 A") PORT_CHANGED(mcu_input, (void*)0x34)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Player 2 B") PORT_CHANGED(mcu_input, (void*)0x35)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Player 2 C") PORT_CHANGED(mcu_input, (void*)0x36)
PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("DEBUG")
PORT_CONFNAME( 0x01, 0x00, "Plane A Disable")
PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
@ -184,6 +168,28 @@ static INPUT_PORTS_START( cdi )
PORT_CONFSETTING( 0xf0, "White" )
INPUT_PORTS_END
static INPUT_PORTS_START( quizard )
PORT_INCLUDE( cdi )
PORT_START("INPUT1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("Coin 1") PORT_CHANGED(mcu_input, (void*)0x39)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Start 1") PORT_CHANGED(mcu_input, (void*)0x37)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Player 1 A") PORT_CHANGED(mcu_input, (void*)0x31)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Player 1 B") PORT_CHANGED(mcu_input, (void*)0x32)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Player 1 C") PORT_CHANGED(mcu_input, (void*)0x33)
PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("INPUT2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE1) PORT_NAME("Service") PORT_CHANGED(mcu_input, (void*)0x30)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START2) PORT_NAME("Start 2") PORT_CHANGED(mcu_input, (void*)0x38)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Player 2 A") PORT_CHANGED(mcu_input, (void*)0x34)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Player 2 B") PORT_CHANGED(mcu_input, (void*)0x35)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Player 2 C") PORT_CHANGED(mcu_input, (void*)0x36)
PORT_BIT(0xe0, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
static MACHINE_START( cdi )
{
cdi_state *state = machine->driver_data<cdi_state>();
@ -268,7 +274,6 @@ static MACHINE_CONFIG_START( cdi, cdi_state )
MCFG_CPU_ADD("maincpu", SCC68070, CLOCK_A/2)
MCFG_CPU_PROGRAM_MAP(cdimono1_mem)
MCFG_CPU_VBLANK_INT("screen", scc68070_mcu_frame)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@ -312,37 +317,66 @@ static MACHINE_CONFIG_START( cdi, cdi_state )
MCFG_MK48T08_ADD( "mk48t08" )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrd12, cdi )
// Standard CD-i system, with CD-ROM image device (MESS) and Software List (MESS)
static MACHINE_CONFIG_DERIVED( cdimono1, cdi )
MCFG_MACHINE_RESET( cdi )
MCFG_CDROM_ADD( "cdrom" )
MCFG_CDROM_INTERFACE("cdi_cdrom")
MCFG_SOFTWARE_LIST_ADD("cd_list","cdi")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizard, cdi )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(cdimono1_mem)
MCFG_CPU_VBLANK_INT("screen", scc68070_mcu_frame)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrd12, quizard )
MCFG_MACHINE_RESET( quizrd12 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrd17, cdi )
static MACHINE_CONFIG_DERIVED( quizrd17, quizard )
MCFG_MACHINE_RESET( quizrd17 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrd22, cdi )
static MACHINE_CONFIG_DERIVED( quizrd22, quizard )
MCFG_MACHINE_RESET( quizrd22 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrd32, cdi )
static MACHINE_CONFIG_DERIVED( quizrd32, quizard )
MCFG_MACHINE_RESET( quizrd32 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrr41, cdi )
static MACHINE_CONFIG_DERIVED( quizrr41, quizard )
MCFG_MACHINE_RESET( quizrr41 )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( quizrr42, cdi )
static MACHINE_CONFIG_DERIVED( quizrr42, quizard )
MCFG_MACHINE_RESET( quizrr42 )
MACHINE_CONFIG_END
/*************************
* Rom Load *
*************************/
ROM_START( cdi )
ROM_START( cdimono1 )
ROM_REGION(0x80000, "maincpu", 0)
ROM_LOAD( "cdi220b.rom", 0x000000, 0x80000, CRC(279683ca) SHA1(53360a1f21ddac952e95306ced64186a3fc0b93e) )
ROM_SYSTEM_BIOS( 0, "mcdi200", "Magnavox CD-i 200" )
ROMX_LOAD( "cdi200.rom", 0x000000, 0x80000, CRC(40c4e6b9) SHA1(d961de803c89b3d1902d656ceb9ce7c02dccb40a), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "pcdi220", "Philips CD-i 220 F2" )
ROMX_LOAD( "cdi220b.rom", 0x000000, 0x80000, CRC(279683ca) SHA1(53360a1f21ddac952e95306ced64186a3fc0b93e), ROM_BIOS(2) )
// This one is a Mono-IV board, needs to be a separate driver
//ROM_SYSTEM_BIOS( 2, "pcdi490", "Philips CD-i 490" )
//ROMX_LOAD( "cdi490.rom", 0x000000, 0x80000, CRC(e115f45b) SHA1(f71be031a5dfa837de225081b2ddc8dcb74a0552), ROM_BIOS(3) )
// This one is a Mini-MMC board, needs to be a separate driver
//ROM_SYSTEM_BIOS( 3, "pcdi910m", "Philips CD-i 910" )
//ROMX_LOAD( "cdi910.rom", 0x000000, 0x80000, CRC(8ee44ed6) SHA1(3fcdfa96f862b0cb7603fb6c2af84cac59527b05), ROM_BIOS(4) )
ROM_REGION(0x2000, "cdic", 0)
ROM_LOAD( "cdic.bin", 0x0000, 0x2000, NO_DUMP ) // Undumped 68HC05 microcontroller, might need decapping
@ -351,6 +385,7 @@ ROM_START( cdi )
ROM_LOAD( "slave.bin", 0x0000, 0x2000, NO_DUMP ) // Undumped 68HC05 microcontroller, might need decapping
ROM_END
ROM_START( quizard )
ROM_REGION(0x80000, "maincpu", 0)
ROM_LOAD( "cdi220b.rom", 0x000000, 0x80000, CRC(279683ca) SHA1(53360a1f21ddac952e95306ced64186a3fc0b93e) )
@ -439,15 +474,18 @@ ROM_END
* Game driver(s) *
*************************/
// BIOS
GAME( 1991, cdi, 0, cdi, cdi, 0, ROT0, "Philips", "CD-i (Mono-I) BIOS", GAME_IS_BIOS_ROOT )
// BIOS / System
CONS( 1991, cdimono1, 0, 0, cdimono1, cdi, 0, "Philips", "CD-i (Mono-I) (PAL)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE | GAME_IS_BIOS_ROOT )
// The Quizard games are RETAIL CD-i units, with additional JAMMA adapters & dongles for protection, hence being 'clones' of the system.
// Working
GAME( 1995, quizrd12, cdi, quizrd12, cdi, 0, ROT0, "TAB Austria", "Quizard 1.2", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1995, quizrd17, cdi, quizrd17, cdi, 0, ROT0, "TAB Austria", "Quizard 1.7", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1995, quizrd22, cdi, quizrd22, cdi, 0, ROT0, "TAB Austria", "Quizard 2.2", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1995, quizrd12, cdimono1, quizrd12, quizard, 0, ROT0, "TAB Austria", "Quizard 1.2", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1995, quizrd17, cdimono1, quizrd17, quizard, 0, ROT0, "TAB Austria", "Quizard 1.7", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1995, quizrd22, cdimono1, quizrd22, quizard, 0, ROT0, "TAB Austria", "Quizard 2.2", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
// Partially working
GAME( 1996, quizard, cdi, quizrd32, cdi, 0, ROT0, "TAB Austria", "Quizard 3.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1998, quizrr41, cdi, quizrr41, cdi, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.1", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1998, quizrr42, cdi, quizrr42, cdi, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1996, quizard, cdimono1, quizrd32, quizard, 0, ROT0, "TAB Austria", "Quizard 3.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1998, quizrr41, cdimono1, quizrr41, quizard, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.1", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
GAME( 1998, quizrr42, cdimono1, quizrr42, quizard, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )

View File

@ -25,6 +25,7 @@ TODO:
#include "machine/cdicdic.h"
#include "includes/cdi.h"
#include "sound/cdda.h"
#include "imagedev/chd_cd.h"
#if ENABLE_VERBOSE_LOG
INLINE void verboselog(running_machine *machine, int n_level, const char *s_fmt, ...)
@ -861,7 +862,8 @@ void cdicdic_device::process_delayed_command()
m_time = next_msf << 8;
timer_adjust_oneshot(m_interrupt_timer, attotime::from_hz(75), 0);
// the following line BREAKS 'The Apprentice', hangs when you attempt to start the game
//timer_adjust_oneshot(m_interrupt_timer, attotime::from_hz(75), 0);
m_x_buffer |= 0x8000;
//m_data_buffer |= 0x4000;
@ -1231,8 +1233,19 @@ void cdicdic_device::device_reset()
{
init();
device_t *cdrom_dev = m_machine.device("cdrom");
if( cdrom_dev )
{
// MESS case (has CDROM device)
m_cd = cd_get_cdrom_file(cdrom_dev);
cdda_set_cdrom(m_machine.device("cdda"), m_cd);
}
else
{
// MAME case
m_cd = cdrom_open(get_disk_handle(&m_machine, "cdrom"));
cdda_set_cdrom(m_machine.device("cdda"), m_cd);
}
}
void cdicdic_device::init()

View File

@ -10490,7 +10490,7 @@ Other Sun games
DRIVER( gnome_2a ) /* bootleg */
/* Disney */
DRIVER( cdi ) /* Base unit */
DRIVER( cdimono1 ) /* Base unit */
DRIVER( quizard ) /* (c) Disney 1996 */
DRIVER( quizrd22 ) /* (c) Disney 1995 */
DRIVER( quizrd17 ) /* (c) Disney 1996 */