Added incomplete protection patches to Quizard 3.2 and Quizard Rainbow 4.1; both now run through attract mode and coin up, but crash when going in-game. [Harmony]

This commit is contained in:
Ryan Holtz 2010-10-11 04:57:21 +00:00
parent e0a73faa0c
commit c88f346827
4 changed files with 53 additions and 8 deletions

View File

@ -199,16 +199,33 @@ static MACHINE_START( cdi )
scc68070_register_globals(machine, &state->scc68070_regs);
}
static DRIVER_INIT( quizrr41 )
{
scc68070_set_hack_base(0x267EA8);
scc68070_set_hack_value(0x004d);
scc68070_set_hack_ack(0x57);
}
static DRIVER_INIT( quizrd12 )
{
scc68070_set_hack_base(0x26F39C);
scc68070_set_hack_value(0x021f);
scc68070_set_hack_ack(0x5a);
}
static DRIVER_INIT( quizrd17 )
{
scc68070_set_hack_base(0x264C42);
scc68070_set_hack_value(0x021f);
scc68070_set_hack_ack(0x5a);
}
static DRIVER_INIT( quizrd32 )
{
scc68070_set_hack_base(0x266E28);
scc68070_set_hack_value(0x00ae);
scc68070_set_hack_ack(0x58);
scc68070_set_secondary_hack(0xc000-0x7b76);
}
static MACHINE_RESET( cdi )
@ -386,11 +403,13 @@ ROM_END
GAME( 1991, cdi, 0, cdi, cdi, 0, ROT0, "Philips", "CD-i (Mono-I) BIOS", GAME_IS_BIOS_ROOT )
// 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, 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 )
GAME( 1998, quizrr41, cdi, cdi, cdi, quizrr41, ROT0, "TAB Austria", "Quizard Rainbow 4.1", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
// Partially working
GAME( 1996, quizard, cdi, cdi, cdi, quizrd32, ROT0, "TAB Austria", "Quizard 3.2", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION )
// Working
GAME( 1995, quizrd12, cdi, cdi, cdi, quizrd12, ROT0, "TAB Austria", "Quizard 1.2", 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 (0)
#define ENABLE_VERBOSE_LOG (1)
#define ENABLE_UART_PRINTING (0)

View File

@ -62,6 +62,18 @@ 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;
static UINT8 hack_ack = 0;
static UINT32 hack2_addr = 0;
void scc68070_set_secondary_hack(UINT32 address)
{
hack2_addr = address;
}
void scc68070_set_hack_ack(UINT8 ack)
{
hack_ack = ack;
}
void scc68070_set_hack_value(UINT16 value)
{
@ -116,6 +128,11 @@ static void quizard_patch(running_machine *machine)
space->write_word(hack_base + 0x24, 0x203C);
space->write_word(hack_base + 0x26, 0x0000);
space->write_word(hack_base + 0x28, hack_value);
if(hack2_addr)
{
//space->write_byte(hack2_addr, 1);
}
}
}
@ -669,7 +686,9 @@ WRITE16_HANDLER( scc68070_periphs_w )
scc68070_uart_tx(space->machine, scc68070, data & 0x00ff);
scc68070->uart.transmit_holding_register = data & 0x00ff;
if((data & 0x00ff) == 0x5a)
printf("%02x ", scc68070->uart.transmit_holding_register);
if((data & 0x00ff) == hack_ack)
{
count++;
if(count == 2)
@ -678,7 +697,6 @@ WRITE16_HANDLER( scc68070_periphs_w )
for(int index = 0; index < 9; index++)
{
verboselog(space->machine, 2, "scc68070_periphs_w: Sending to receiver: 0x5a\n");
scc68070_uart_rx(space->machine, scc68070, check_array[index]);
if(index > 0)
{
@ -691,6 +709,10 @@ WRITE16_HANDLER( scc68070_periphs_w )
quizard_patch(space->machine);
}
}
else
{
count = 0;
}
}
else
{

View File

@ -238,11 +238,15 @@ extern READ16_HANDLER( scc68070_periphs_r );
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);
extern void scc68070_register_globals(running_machine *machine, scc68070_regs_t *scc68070);
// Hacks for Quizard
extern void scc68070_set_hack_value(UINT16 value);
extern void scc68070_set_hack_base(UINT32 base);
extern void scc68070_set_hack_ack(UINT8 ack);
extern void scc68070_set_secondary_hack(UINT32 address);
#endif // _MACHINE_CDI070_H_