- 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]
This commit is contained in:
Ryan Holtz 2010-10-11 03:11:17 +00:00
parent 47a0037db4
commit e0a73faa0c
4 changed files with 45 additions and 27 deletions

View File

@ -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<cdi_state>();
@ -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 )

View File

@ -35,7 +35,7 @@ public:
#define VERBOSE_LEVEL (5)
#define ENABLE_VERBOSE_LOG (1)
#define ENABLE_VERBOSE_LOG (0)
#define ENABLE_UART_PRINTING (0)

View File

@ -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);
}
}

View File

@ -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);