From e0a73faa0c7cd26a9b9fa4fac81b02cf4e29f2de Mon Sep 17 00:00:00 2001 From: Ryan Holtz Date: Mon, 11 Oct 2010 03:11:17 +0000 Subject: [PATCH] - Patched out the majority of the Quizard 1.2 protection check and made the patch more generic. [Harmony] New games added or promoted from NOT_WORKING status --------------------------------------------------- Quizard 1.2 [Harmony] --- src/mame/drivers/cdi.c | 17 ++++++++++--- src/mame/includes/cdi.h | 2 +- src/mame/machine/cdi070.c | 52 ++++++++++++++++++++++----------------- src/mame/machine/cdi070.h | 1 + 4 files changed, 45 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/cdi.c b/src/mame/drivers/cdi.c index 3b6e45caafc..efd65ef25ed 100644 --- a/src/mame/drivers/cdi.c +++ b/src/mame/drivers/cdi.c @@ -199,6 +199,18 @@ static MACHINE_START( cdi ) scc68070_register_globals(machine, &state->scc68070_regs); } +static DRIVER_INIT( quizrd12 ) +{ + scc68070_set_hack_base(0x26F39C); + scc68070_set_hack_value(0x021f); +} + +static DRIVER_INIT( quizrd17 ) +{ + scc68070_set_hack_base(0x264C42); + scc68070_set_hack_value(0x021f); +} + static MACHINE_RESET( cdi ) { cdi_state *state = machine->driver_data(); @@ -208,7 +220,6 @@ static MACHINE_RESET( cdi ) memcpy(dst, src, 0x8); scc68070_init(machine, &state->scc68070_regs); - scc68070_set_hack_value(0x021f); machine->device("maincpu")->reset(); @@ -377,9 +388,9 @@ GAME( 1991, cdi, 0, cdi, cdi, 0, ROT0, "Philips // Non-working GAME( 1996, quizard, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard 3.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) GAME( 1995, quizrd22, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard 2.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) -GAME( 1995, quizrd12, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard 1.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) +GAME( 1995, quizrd12, cdi, cdi, cdi, quizrd12, ROT0, "TAB Austria", "Quizard 1.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) GAME( 1998, quizrr42, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) GAME( 1998, quizrr41, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard Rainbow 4.1", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) // Working -GAME( 1995, quizrd17, cdi, cdi, cdi, 0, ROT0, "TAB Austria", "Quizard 1.7", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) +GAME( 1995, quizrd17, cdi, cdi, cdi, quizrd17, ROT0, "TAB Austria", "Quizard 1.7", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION ) diff --git a/src/mame/includes/cdi.h b/src/mame/includes/cdi.h index 46d01e2d710..cbcd15b6ca4 100644 --- a/src/mame/includes/cdi.h +++ b/src/mame/includes/cdi.h @@ -35,7 +35,7 @@ public: #define VERBOSE_LEVEL (5) -#define ENABLE_VERBOSE_LOG (1) +#define ENABLE_VERBOSE_LOG (0) #define ENABLE_UART_PRINTING (0) diff --git a/src/mame/machine/cdi070.c b/src/mame/machine/cdi070.c index b7533c9325e..c2b1e036387 100644 --- a/src/mame/machine/cdi070.c +++ b/src/mame/machine/cdi070.c @@ -61,17 +61,23 @@ static void scc68070_set_timer_callback(scc68070_regs_t *scc68070, int channel) static bool hack_active = false; static UINT16 hack_value = 0; +static UINT32 hack_base = 0; void scc68070_set_hack_value(UINT16 value) { - hack_value = 0x021f; + hack_value = value; +} + +void scc68070_set_hack_base(UINT32 base) +{ + hack_base = base; } static void quizard_patch(running_machine *machine) { address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); - if(space->read_byte(0x264dc4) == 0xfe && space->read_byte(0x264dc5) == 0xf0 && hack_active) + if(hack_active) { // Patch out: // 00264C42: C0EE 86BE mulu.w (-$7942,A6), D0 @@ -89,27 +95,27 @@ static void quizard_patch(running_machine *machine) // 00264C66: B142 eor.w D0, D2 // 00264C68: 7000 moveq #$0, D0 // 00264C6A: 3002 move.w D2, D0 - space->write_word(0x264C42, 0); - space->write_word(0x264C44, 0); - space->write_word(0x264C46, 0); - space->write_word(0x264C48, 0); - space->write_word(0x264C4A, 0); - space->write_word(0x264C4C, 0); - space->write_word(0x264C4E, 0); - space->write_word(0x264C50, 0); - space->write_word(0x264C52, 0); - space->write_word(0x264C54, 0); - space->write_word(0x264C56, 0); - space->write_word(0x264C58, 0); - space->write_word(0x264C5A, 0); - space->write_word(0x264C5C, 0); - space->write_word(0x264C5E, 0); - space->write_word(0x264C60, 0); - space->write_word(0x264C62, 0); - space->write_word(0x264C64, 0); - space->write_word(0x264C66, 0x203C); - space->write_word(0x264C68, 0x0000); - space->write_word(0x264C6A, hack_value); + space->write_word(hack_base + 0x00, 0); + space->write_word(hack_base + 0x02, 0); + space->write_word(hack_base + 0x04, 0); + space->write_word(hack_base + 0x06, 0); + space->write_word(hack_base + 0x08, 0); + space->write_word(hack_base + 0x0a, 0); + space->write_word(hack_base + 0x0c, 0); + space->write_word(hack_base + 0x0e, 0); + space->write_word(hack_base + 0x10, 0); + space->write_word(hack_base + 0x12, 0); + space->write_word(hack_base + 0x14, 0); + space->write_word(hack_base + 0x16, 0); + space->write_word(hack_base + 0x18, 0); + space->write_word(hack_base + 0x1a, 0); + space->write_word(hack_base + 0x1c, 0); + space->write_word(hack_base + 0x1e, 0); + space->write_word(hack_base + 0x20, 0); + space->write_word(hack_base + 0x22, 0); + space->write_word(hack_base + 0x24, 0x203C); + space->write_word(hack_base + 0x26, 0x0000); + space->write_word(hack_base + 0x28, hack_value); } } diff --git a/src/mame/machine/cdi070.h b/src/mame/machine/cdi070.h index c68916df1e8..3da8a91bd97 100644 --- a/src/mame/machine/cdi070.h +++ b/src/mame/machine/cdi070.h @@ -239,6 +239,7 @@ extern WRITE16_HANDLER( scc68070_periphs_w ); //extern READ16_HANDLER( uart_loopback_enable ); extern void scc68070_set_hack_value(UINT16 value); +extern void scc68070_set_hack_base(UINT32 base); extern void scc68070_init(running_machine *machine, scc68070_regs_t *scc68070); extern void scc68070_uart_rx(running_machine *machine, scc68070_regs_t *scc68070, UINT8 data); extern void scc68070_uart_tx(running_machine *machine, scc68070_regs_t *scc68070, UINT8 data);