diff --git a/src/mame/drivers/cdi.c b/src/mame/drivers/cdi.c index b08779e3368..0b454b3dc5e 100644 --- a/src/mame/drivers/cdi.c +++ b/src/mame/drivers/cdi.c @@ -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, ...) @@ -128,16 +128,49 @@ 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_START("MOUSEX") + 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_START("MOUSEY") + 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_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_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("DEBUG") + PORT_CONFNAME( 0x01, 0x00, "Plane A Disable") + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) + PORT_CONFNAME( 0x02, 0x00, "Plane B Disable") + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x02, DEF_STR( On ) ) + PORT_CONFNAME( 0x04, 0x00, "Force Backdrop Color") + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x04, DEF_STR( On ) ) + PORT_CONFNAME( 0xf0, 0x00, "Backdrop Color") + PORT_CONFSETTING( 0x00, "Black" ) + PORT_CONFSETTING( 0x10, "Half-Bright Blue" ) + PORT_CONFSETTING( 0x20, "Half-Bright Green" ) + PORT_CONFSETTING( 0x30, "Half-Bright Cyan" ) + PORT_CONFSETTING( 0x40, "Half-Bright Red" ) + PORT_CONFSETTING( 0x50, "Half-Bright Magenta" ) + PORT_CONFSETTING( 0x60, "Half-Bright Yellow" ) + PORT_CONFSETTING( 0x70, "Half-Bright White" ) + PORT_CONFSETTING( 0x80, "Black (Alternate)" ) + PORT_CONFSETTING( 0x90, "Blue" ) + PORT_CONFSETTING( 0xa0, "Green" ) + PORT_CONFSETTING( 0xb0, "Cyan" ) + PORT_CONFSETTING( 0xc0, "Red" ) + PORT_CONFSETTING( 0xd0, "Magenta" ) + PORT_CONFSETTING( 0xe0, "Yellow" ) + 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) @@ -154,36 +187,9 @@ static INPUT_PORTS_START( cdi ) 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 ) ) - PORT_CONFSETTING( 0x01, DEF_STR( On ) ) - PORT_CONFNAME( 0x02, 0x00, "Plane B Disable") - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x02, DEF_STR( On ) ) - PORT_CONFNAME( 0x04, 0x00, "Force Backdrop Color") - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_CONFNAME( 0xf0, 0x00, "Backdrop Color") - PORT_CONFSETTING( 0x00, "Black" ) - PORT_CONFSETTING( 0x10, "Half-Bright Blue" ) - PORT_CONFSETTING( 0x20, "Half-Bright Green" ) - PORT_CONFSETTING( 0x30, "Half-Bright Cyan" ) - PORT_CONFSETTING( 0x40, "Half-Bright Red" ) - PORT_CONFSETTING( 0x50, "Half-Bright Magenta" ) - PORT_CONFSETTING( 0x60, "Half-Bright Yellow" ) - PORT_CONFSETTING( 0x70, "Half-Bright White" ) - PORT_CONFSETTING( 0x80, "Black (Alternate)" ) - PORT_CONFSETTING( 0x90, "Blue" ) - PORT_CONFSETTING( 0xa0, "Green" ) - PORT_CONFSETTING( 0xb0, "Cyan" ) - PORT_CONFSETTING( 0xc0, "Red" ) - PORT_CONFSETTING( 0xd0, "Magenta" ) - PORT_CONFSETTING( 0xe0, "Yellow" ) - PORT_CONFSETTING( 0xf0, "White" ) INPUT_PORTS_END + static MACHINE_START( cdi ) { cdi_state *state = machine->driver_data(); @@ -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,45 +317,75 @@ 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_REGION(0x80000, "maincpu", 0) - ROM_LOAD( "cdi220b.rom", 0x000000, 0x80000, CRC(279683ca) SHA1(53360a1f21ddac952e95306ced64186a3fc0b93e) ) +ROM_START( cdimono1 ) + ROM_REGION(0x80000, "maincpu", 0) + 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 ROM_REGION(0x2000, "slave", 0) - ROM_LOAD( "slave.bin", 0x0000, 0x2000, NO_DUMP ) // Undumped 68HC05 microcontroller, might need decapping + 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 ) + diff --git a/src/mame/machine/cdicdic.c b/src/mame/machine/cdicdic.c index 2eebe793fd5..1908669a46d 100644 --- a/src/mame/machine/cdicdic.c +++ b/src/mame/machine/cdicdic.c @@ -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,9 +862,10 @@ 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_x_buffer |= 0x8000; //m_data_buffer |= 0x4000; for(index = 6; index < 2352/2; index++) @@ -1231,8 +1233,19 @@ void cdicdic_device::device_reset() { init(); - m_cd = cdrom_open(get_disk_handle(&m_machine, "cdrom")); - cdda_set_cdrom(m_machine.device("cdda"), m_cd); + 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() diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 596447bbb4e..9cab0ad6116 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -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 */